개발/Spring 30

ReflectionTestUtils를 이용한 private 필드와 메서드 단위테스트

ReflectionTestUtils를 이용한 private 필드와 메서드 단위테스트개요ReflectionTestUtils는 SpringFramework의 Test Context 에서 제공하는 유틸로, 프라이빗 필드나 메서드를 테스트할 수 있다.비공개 필드 값 설정비공개 필드 값 접근비공개 메서드 호출테스트를 작성하다보면 종종 단위테스트에서 위와 같은 접근이 필요할 때가 생기는데, 이 때 해당 클래스의 Private 메서드를 열지 않고 ReflectionTestUtils를 사용하면 접근할 수 있다.예시 코드예시 코드를 위해 직원 클래스를 만들어보자. 이 직원을 고용할 때 계약서에 이름과 계약 연봉을 작성한다.이름은 변경 불가능하니 private final을 붙이고, 연봉(annualSalary)는 매년 변..

개발/Spring 2024.12.02

[Spring] Spring Boot 버전별 차이점

Spring Boot 버전 별 차이점 (2.2 ~ 3.0) + Spring Cloud 1. 개요 최근 사내에서 Spring Boot 버전을 올리면 어떨까 해서 Spring Boot 버전 및 Spring Cloud 버전 차이점에 대해서 간단하게 알아보고 있다. 프로젝트마다 Spring Boot 사용하는 버전은 각각 다른데, 그러다 보니 가끔 코드를 이쪽저쪽 주워 가다 보면 다른 점들이 있어서 변경해서 사용하곤 했다. 구체적으로 어떤 차이점이 있는지 한번 알아보고 상위 버전으로 마이그레이션을 한다면 어떤 것들을 주의해야 하는지도 알아보자. 일단 사내에서 사용중인 제일 낮은 Spring Boot 버전은 2.1.X 버전 대라 해당 버전 이후 버전들을 확인했다. 2. Spring Boot와 Spring Frame..

개발/Spring 2022.10.22

[Spring] Spring Boot v2.7

Spring Boot v2.7 Spring Boot 2.7 Release Notes · spring-projects/spring-boot Wiki 1. spring.mongodb.embedded.features 구성 속성이 제거됨 Embedded Mongo 3.4는 Mongo 기능 구성에 대한 지원을 중단함. 이에spring.mongodb.embedded.features 구성 속성이 제거되었음. Mongo를 시작하는 데 사용되는 명령줄을 변경하기 위해 기능이 지정되는 고급 구성의 경우 사용자 지정 MongodConfig 빈을 대신 제공해야 함. 2. MongoDB 속성 우선 순위 이전에는 spring.data.mongodb.uri가 spring.data.mongodb.host 및 spring.data.m..

개발/Spring 2022.10.18

[Spring] Spring Boot v2.6

Spring Boot 2.6 Release Notes · spring-projects/spring-boot Wiki 1. Spring Boot 2.4로부터 Deprecation 된 사항 Spring Boot 2.4에서 더 이상 사용되지 않는 클래스, 메서드 및 속성이 이번 릴리스에서 제거됨. 업그레이드하기 전에 더 이상 사용되지 않는 메서드를 호출하지 않는지 확인 2. 기본적으로 금지된 순환참조 이제 기본적으로 빈 간의 순환 참조가 금지됨. BeanCurrentlyInCreationException으로 인해 애플리케이션이 시작되지 않으면 종속성 주기를 중단하도록 구성을 업데이트하는 것이 좋다. 만약 순환 참조 해결이 어렵다면 spring.main.allow-circular-references를 true로..

개발/Spring 2022.10.17

[Spring] Spring Boot v2.4

Spring Boot v2.4 Spring Boot 2.4 Release Notes · spring-projects/spring-boot Wiki 1. Spring Boot 버전 관리 체계 변경 2.4부터 Spring Boot는 새로운 Spring 버전 관리 체계를 채택 2.3.5.RELEASE→ 2.4.0 2. Junit5 vintage engine 제거 Spring Boot 2.4 업데이트 이후 Junit 클래스 테스트 컴파일 오류로 표시되는 org.junit.Test는 spring-boot-starter-test의 Junit5의 빈티지 엔진이 제거되었기 때문일 수 있음. Junit5로 마이그레이션 없이 계속 Junit4를 사용하려면 gradle의 경우 아래 종속성을 추가한다. testImplemen..

개발/Spring 2022.10.15

[Spring] Spring Boot v2.3

Spring Boot 2.3 Release Notes · spring-projects/spring-boot Wiki Spring Boot 2.2에서 업그레이드된 내용 Gradle 6.3 이상 지원 (5.6.x는 지원은 하지만 deprecated 됨.) 1. Validation Starter가 WebStarter에 더 이상 포함되지 않는다. webstart에서 빠졌기 때문에 별도로 gradle에 써주어야 함. dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-validation' } 2. 기본적으로 고유한 DataSource 이름을 사용해야 한다. 기본적으로 DataSource 이름이 자동 구성될 때를 위해 고유한..

개발/Spring 2022.10.14

[Spring] Spring Boot v2.2

Spring Boot v2.2 Spring Boot 2.2 Release Notes · spring-projects/spring-boot Wiki Spring Boot 2.1에서 업그레이드된 내용 1. Spring Boot 2.1의 Deprecated 건 삭제 2.1에서 deprecated된 사용되지 않는 클래스, 메서드 및 속성이 이번 릴리즈에서 제거되었으므로 확인 2. Spring Framework 5.2 이번 릴리즈에서 Spring Framework 5.2로 업그레이드됨. 자세한 문서는 아래 참고. Spring Framework’s upgrade documentation 3. JMX는 기본적으로 비활성화 이번 버전부터 jmx는 기본적으로 비활성화됨. 필요시 spring.jmx.enabled=true..

개발/Spring 2022.10.13

[Spring] Spring Framework 6.0과 Spring Boot 3.0 Preview

Spring Framework 6.0과 Spring Boot 3.0 Preview Spring Framework 6.0과 Spring Boot 3.0 2022년 11월 정도에는 Spring Framework 6.0, Spring Boot 3.0 출시 예정이다. 간단하게만 미리 살펴본다면 큰 기능은 아래와 같다. Spring Framework 6.0 Java 17 based on XML 구성 형식은 지원이 안될 수 있음 (점차 Spring에서 제거) 일부 Java EE API 지원 종료 RPC 지원 종료 새로운 AOT 엔진 도입 Jakarta EE 9+로의 마이그레이션으로 인한 변경 Cloud Native Spring Boot 3.0 Spring Boot 3.0은 Spring Framework 6.0을 기..

개발/Spring 2022.10.12

Spring 트랜잭션 처리

Spring 트랜잭션 처리 보통 스프링에서 트랜잭션 처리를 할 때 @Transactional 어노테이션을 이용하여 스프링에서 제공하는 선언적 트랜잭션을 이용했다. 그런데 메서드 단위가 아니라 메서드 내의 특정 구간만 트랜잭션 처리를 해야하는 경우 어떻게 할 수 있을까? 그리고 우리가 사용하던 @Transactional 어노테이션을 이용해서 스프링에서는 어떤식으로 트랜잭션 기능을 처리할 수 있었을까? 기존에 JDBC로 개발을 할 때는 직접 JDBC 연결을 맺고, commit과 rollback을 호출하여 처리했는데 Spring에서는 직접 개발자들이 트랜잭션 처리를 하지 않아도 되도록 추상화해서 제공하고 있다. 스프링 프레임워크 트랜잭션 추상화 1. 선언적 트랜잭션 방식 @Transactional 클래스, 메..

개발/Spring 2021.04.18

[Spring] DispatcherServlet 코드 분석하기

Spring DispatcherServlet 코드 분석하기 이번 포스팅에서는 Spring Framework의 DispatcherServlet 코드를 분석한 내용에 대해 정리해보려 합니다. DispatcherServlet 이란? Spring Framework의 구조와 Dispatcher Servlet의 역할을 간단히 설명하자면 아래와 같은 순서대로 사용자의 요청을 처리합니다. 1. 사용자의 Request가 들어오면 DispatcherServlet은 받아온 Request를 확인합니다. 2. DispatcherServlet은 HandlerMapping에게 보내서 해당 요청을 처리할 수 있는 Controller가 있는지 확인합니다. 3. HandlerAdapter에서는 HandlerMapping에서 확인한 Co..

개발/Spring 2021.01.01