스프링 생산성 향상, Lombok 라이브러리 사용 막상 개발을 해보면 대부분 불변 키워드인 final을 사용한다고 한다. final을 사용하게 되면 생성자도 만들어야 하며 Getter/Setter를 만들어야한다. 따라서, 필드 변수가 많은 경우에는 이런 코드를 하나하나 직접 생성하는 것 자체가 부담이 될 수 있다. 이런 것들을 자동화해주는 것이 Lombok이다. Lombok은 스프링, 혹은 자바를 지원하는 라이브러리고 @Getter @Setter 같은 어노테이션을 달아서 관습적인 수정자, 생성자들을 자동으로 만들어주는 라이브러리다. Lombok을 등록하는 방법을 알아보자. 가장 쉬운 방법은 Spring Boot에서 Dependencies에서 Lombok 라이브러리를 추가하는 것이다. 그렇지만, 개발을 한..
스프링, DI 시 Optional 처리하기 스프링에서 @ComponentScan으로 스프링 빈을 자동등록할 때, @Autowired의 에노테이션을 활용해서 스프링 빈의 의존관계가 자동 주입된다. @Autowired는 @Autowired(required = true)로 되어있다. 즉, 의존관계를 주입할 대상이 없으면 오류가 발생하게 된다. 그렇지만 의존관계를 주입할 대상이 없더라도 동작해야 하는 경우(수정자 주입)가 있다. 이 때는 어떻게 동작을 해야할까? 이 상황에서 동작가능한 방법은 세 가지가 있다. @Autowired(required = false) 설정 매개변수 앞에 @Nullable 매개변수를 Optional 로 감싸기 위 방법들에 대해 하나하나 차이점을 아래에서 살펴보려고 한다. 1. Autow..
스프링의 다양한 의존관계 주입 스프링의 의존관계 주입은 아래 네 가지 방법이 있다. 그 중에서 주로 사용되는 것은 생성자 주입, 수정자 주입이다. 생성자 주입 수정자 주입(Setter 주입) 필드 주입 일반 메서드 주입 스프링 DI : 생성자 주입 생성자 주입은 생성자를 호출할 때 의존관계 주입까지 된다. 다른 의존관계 주입은 빈 라이프 사이클에 따라 의존관계 주입 단계에서 일괄적으로 이루어진다. @ComponentScan을 하면 @Component가 붙은 OrderserviceImpl.class가 스프링 빈에 등록된다. 스프링 빈 등록되면 생성자 호출이 된다. 생성자 호출 시, @Autowired가 있는 것을 스프링이 확인한다. 이 때 스프링 컨테이너의 빈 저장소에서 MemberRepository, D..
들어가기 전 이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 컨테이너와 ComponentScan 앞서 스프링 컨테이너에서는 @Configuration + @Bean 조합을 통해서 스프링 컨테이너에 등록할 빈을 지정했다. 이것은 스프링 빈을 등록하는 설정 파일을 스프링 빈으로 등록하고, 그 설정파일 빈을 바탕으로 필요한 스프링 빈으로 추가로 등록하는 작업을 한 것이다. 등록해야 할 스프링 빈이 얼마없다면 이것으로 충분하지만, 등록할 빈이 수백 개가 넘어간다면 시간 낭비가 될 수 있고, 등록해야 할 스프링 빈이 누락되는 문제가 발생할 수 있다. 이런 것들을 보완하기 위해 'Component Scan'이라는 기능을 스프링은 제공한다. Component Scan은 간편하게 스프링 빈을 등록할..
싱글톤 컨테이너를 조금 더 들여다보고 어떻게 동작되는지를 좀 더 알아보면 좋을 것 같다. 싱글톤 컨테이너, 싱글톤이 깨지는거 아냐? 우선 아래코드를 실행해본다고 가정하자. 아래 코드에서 OrderService를 부를 때, memberRepository()로 이동해, new MemoryMemberRepository()가 실행된다. 아래 코드에서 MemberService를 부를 때, memberRepository()로 이동 해, new MemoryMemberRepository()가 실행된다. 두 코드가 다 실행되면, MemoryMemberRepository가 두번 실행되면 싱글톤 패턴이 깨지는 것처럼 보인다. 진짜 깨질까? @Configuration public class AppConfig { @Bean p..