본문 바로가기
반응형

Spring32

[Spring] 스프링 핵심 원리 - 기본편 > 섹션 7. 의존관계 자동 주입 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] 섹션7. 의존관계 자동 주입에 대한 요점 정리를 하였다. 목차 1.의존관계 주입방법 2.조회 빈이 2개 이상일 경우 3.어노테이션 직접 만들기 1.의존관계 주입방법 의존관계 주입 방법에는 크게 4가지가 있다. 1. 생성자 주입 2. 수정자 주입(setter 주입) 3. 필드 주입 4. 일반 메서드 주입 이 중에서 생성자 주입을 기본으로 사용하자. 대부분의 의존관계 주입은 변하면 안되기 때문이다. 수정자 주입 방식은 다른 필드 값들도 주입해주어야 하므로 누락의 가능성이 있다. 필드 주입은 테스트하기 어렵고 @Configuration 같은 특별한 용도에서만 사용한다. 일반 메서드 주입은 한번에 여러 필드를 주입 받을 수 있지만 잘 사용하지 않는다. @C.. 2024. 4. 11.
[Spring] 스프링 핵심 원리 - 기본편 > 섹션 6. 컴포넌트 스캔 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] > 섹션6. 컴포넌트 스캔에 대한 요점 정리를 하였다. 메서드에 @Bean 적용을 해야 하는 경우가 너무 많아질 경우가 있다. @Bean 적용 없이 동일하게 스프링 빈으로 등록하고 싶을 경우, 클래스에 @Component를 적용하고 DI를 위해서 생성자에 @Autowired를 적용한다. 그리고 @ComponentScan을 적용한 클래스를 만들면 된다. @ComponentScan은 이름 그대로 @Component 어노테이션을 적용한 클래스를 스캔해서 스프링 빈으로 등록한다. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Conf.. 2024. 4. 11.
[Spring] 스프링 핵심 원리 - 기본편 > 섹션 5. 싱글톤 컨테이너 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] > 섹션5. 싱글톤 컨테이너에 대한 요점 정리를 하였다. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } ... } 스프링이 없이 순수한 DI 컨테이너인 AppConfig는 클라이언트가 memberServiceImpl을 요청할 때 마다 새로운 memberServiceImpl을 생성하고 반환한다.(-> 메모리 낭비 발생) 이유는 스프링이 없는 순수한 DI 컨테이너는 싱글톤을 보장해주지 않기 때문이다. 객체를 1개만 생성하고 공유하도록 설계하는 스프링 컨테이너를 사용하자. 스프링 컨테이너는 객체 .. 2024. 4. 10.
[Spring] 스프링 핵심 원리 - 기본편 > 섹션3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 인프런 김영한 강사님의 [스프링 핵심 원리 - 기본편] 섹션3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용에 대한 요점 정리, 강의 외 추가 코드 작성을 하였다. 고객이 제품을 주문하고 할인을 받는 내용이다. 할인 정책 요구사항 변경이 생겼다. 기존 고정 할인에서 정률(%) 할인으로 변경 요구사항이다. 이 요구사항은 다시 고정 할인으로 되돌릴 수도 있다. 할인에 대해 명세가 확정되지 않았다는 것이다. 이러한 상황에서 어떻게 객체 지향적으로 다형성, OCP, DIP를 만족시킬 수 있을지를 중점적으로 볼 것이다. 주문 생성시 제품에 할인을 적용하는데 할인이 바뀔 수 있게 구현해야한다. DiscountPolicy 인터페이스를 만들고 구체 클래스인 FixDiscountPolicy(고정 할인), RateD.. 2024. 4. 8.
@NoArgsConstructor(access = AccessLevel.PROTECTED) 쓰는 이유 엔터티 혹은 DTO 작성시 @NoArgsConstructor(access = AccessLevel.PROTECTED) 어노테이션을 많이 사용한다. @NoArgsConstructor에 AccessLevel설정으로 AccessLevel.PUBLIC, AccessLevel.PRIVATE, AccessLevel.PROTECTED가 있다. 왜 @NoArgsConstructor(access = AccessLevel.PROTECTED)를 많이 쓰는 것일까? 문제점부터 알아보자. 문제점 @NoArgsConstructor(access = AccessLevel.PUBLIC): 1. 기본 생성자를 사용하는 방식을 여러 곳에서 생성이 가능하다.(BAD) 2. 객체 데이터에 빈값이 들어가는 일관성에 문제가 생길 수 있다. @N.. 2023. 10. 11.
parser() is deprecated 해결방법 JWT를 이용한 메서드 작성중에 'parser() is deprecated'라는 더이상 사용하지 않는다고 나온다. 그리고 고치는 방법을 친절하게 알려주고 있다. parser() 대신 parserBuilder()를 쓰고 build()를 붙이라고 한다. 문제해결! 2023. 9. 9.
Cannot resolve symbol 'springframework' git clone을 받았는데 Application class에서 아래 두줄을 인식을 못하고 있었다. import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; 문제: gradle 프로젝트로 인식하지 못하는 경우에 생기는 현상일 수 있다. 해결: 좌측 Project 메뉴에서 build.gradle 파일 마우스 오른쪽 버튼을 클릭하여 Create Gist위에 Link Gradle Project를 클릭함으로 해결되었다. 본인은 Link Gradle Project 클릭을 하였으므로 Create Gist위에 해당 메뉴가 보이지 않는다. 2023. 7. 17.
[Mac / Spring Boot] 터미널에서 프로젝트 빌드 다음은 맥 터미널에서 Spring Boot 프로젝트 빌드 명령어이다. 프로젝트 폴더로 이동 후 아래 명령어를 실행한다. ./gradlew bootJar 명령어 실행시 디렉토리 build/libs에 {-------}.jar 파일이 생성된다. 2023. 7. 2.

반응형
반응형