Spring(89)
-
[Spring] 롬복에 대한 나름의 이해
롬복(Lombok)은 getter, setter 및 constructor를 자동으로 만들어준다. 예를 들어 @Getter, @Setter를 붙이면 필드인 name과 age와 관련하여 setName, getName 등을 자동적으로 만들어준다. 또한 @RequiredArgsConstructor를 붙이면 final이 붙은 상수에 대해서 자동으로 Constructor를 만들어준다. 실제 class 파일을 열어보면 @Autowired가 붙은 생성자를 볼 수 있다. 이것의 장점은 final 상수가 추가될 때마다 따로 생성자를 변경하지 않아도 된다는 점이다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-..
2023.10.09 -
[Spring] gradle lombok 설정할 때 버전 오류 해결
오류 Unsupported Java. Your build is currently configured to use Java 20.0.2 and Gradle 8.2.1. Possible solution: - Use Java 19 as Gradle JVM: Open Gradle settings - Open Gradle wrapper settings, change `distributionUrl` property to use compatible Gradle version and reload the project 원인 - 아래와 같이 compileOnly와 annotationProcess를 한 줄에 붙이면 위와 같은 오류가 난다. dependencies { implementation 'org.springframew..
2023.10.09 -
[Spring] 생성자 주입을 선택하라
주입 방식은 4가지가 있다. 그 중 생성자 주입을 선택하자. 1. 어플리케이션이 시작하고 끝날 때까지 의존관계가 변하지 않는 불변이라면 더없이 좋은 선택이다. 더 이상 private final로 객체를 선언하기 때문에 값을 바꿀 수가 없다. 2. 누락이 발생할 수 있는 상황을 막아준다. 의존관계 주입을 수정자 주입으로 하고 아래와 같이 하면 실행은 된다. @Test void createOrder() { OrderServiceImpl orderService = new OrderServiceImpl(); orderService.createOrder(1L, "itemA", 10000); } 그러나 NPE(NullPointerException)이 발생하는데 이렇게 되면 디버깅에 어려움이 생길 수 있다. 생성자 ..
2023.10.08 -
[Spring] 의존 관계 주입 옵션에 대한 나름의 이해
크게 세 가지가 있다. 1. @Autowired(required = false) 만약 주입할 빈이 없다면 필수가 아니기 때문에 아예 메소드를 실행하지 않는다. true이면 에러가 난다. 2. method(@Nullable type name) 위와 같이 인자에 @Nullable이라고 해주면 주입할 빈이 없다면 null 값을 넣어준다. 3. method(Optional name) 주입할 빈이 없다면 null 대신 Optional.empty를 넣어준다. 있다면 Optional.bean 형식으로 bean을 넣어준다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%E..
2023.10.07 -
[Spring] 스프링 컨테이너 의존관계 자동 주입(DI)에 대한 나름의 이해
크게 4가지 방법이 있다. 1. 생성자 주입: 생성자를 만들어서 주입하는 방법이다. 만약 생성자가 하나라면 @Autowired를 붙여주지 않아도 된다. 요즘에는 이렇게 많이 쓴다. 특히, 불변, 필수 의존관계에 사용된다. 불변은 상수라는 의미이고 따라서 한번 주입되면 바꿀 수 없다는 것이고 필수는 무조건 주입이 필요하다는 뜻이다. private final로 하게 될 경우 무조건 값이 필요해진다. 따라서 생성자에서 주입을 안해주면 컴파일 오류가 나게 된다. 이렇게 하면 생성자에는 웬만해서는 null을 넣지 않기 때문에 필수로 사용할 수 있어진다. 2. 수정자 주입: set method를 활용해서 주입하는 방법이다. 주로 선택, 변경 가능성이 있는 의존관계에서 사용한다. 왜냐하면 생성자 주입과는 다르게 se..
2023.10.06 -
[Spring] Bean 중복 등록에 대한 나름의 이해
자동 빈 등록(Component Scan)의 경우 Spring이 에러를 낸다(충돌이 발생한다). 수동 빈 등록 vs 자동 빈 등록은 Spring의 경우 수동 빈을 override해주지만 SpringBoot를 이용한다면 이 overriding이 default로 false가 되어 있어 충돌이 발생한다. 코드가 엄청 길어지게 되면 수동 빈으로 등록한 경우 자동 빈 등록과 충돌이 발생하지 않고 넘어갈 수도 있는 상황이 발생(boot를 이용하지 않거나 overriding=true로 설정하면)하고 이러면 원치 않는 문제가 생긴다. 이를 방지하기 위해서는 자동만 사용하도록 convention으로 정할 수 있다. 이와 같은 맥락에서 코드를 명확하게 만드는 것이 매우 중요하다. 그래야 문제가 생겨도 디버깅이 원활해진다...
2023.10.05