본문 바로가기
반응형

스프링34

[스프링] 멀티 모듈 환경에서 application.yml 사용하기 스프링에서 프로젝트 환경 설정은 다양하게 관리할 수 있다. 그 중 하나가 application.properties, application.yml 과 같은 파일을 활용하는 것인데, 로컬/개발/운영 등 다양한 환경에 따라 다른 설정을 적용하기 위해 주로 사용한다. 스프링은 어플리케이션이 시작될 때, application.yml 파일을 찾고, 현재 환경에 맞는 설정과 옵션을 읽어 시스템에 적용한다. 물론, 파일 하나에 모든 설정을 넣어서 설정을 할 수도 있지만 프로젝트가 커지고 담아야 하는 설정이 많아지다 보면 파일을 분리해서 관리하는 것이 효율적이다. 또한, 멀티 모듈 환경에서는 어쩔 수 없이 분리가 될 수 밖에 없다. 그럼 스프링은 application.yml 파일 하나만을 읽을텐데, 파일을 분리해 여러 .. 2023. 2. 9.
[스프링] @Valid 사용과 테스트 케이스 작성하기 RestController 에서 @RequestBody 등을 통해 데이터를 받을 때, 유효성 검증을 위해 @Valid 어노테이션을 주로 사용한다. 필수 값이 입력되어 있는지, 숫자 값의 boundary 내에 포함되어 있는지, 문자열의 길이가 유효한지 등을 확인할 수 있다. 의존성 추가 아래 의존성을 추가하면 @Valid 어노테이션을 사용해서 유효성 검증을 할 수 있다. implementation 'org.springframework.boot:spring-boot-starter-validation' 활용 방법 아래 컨트롤러의 SearchBlogRequestBody 부분을 보면 객체 앞부분에 @Valid 어노테이션이 부여되어 있다. @RestController public class BlogSearchCon.. 2023. 2. 6.
[스프링] REST Docs, asciidoctor 로 API 문서 관리하기 테스트 대상 Controller @RestController public class BlogSearchController { private final SearchBlogUseCase searchBlogUseCase; public BlogSearchController(SearchBlogUseCase searchBlogUseCase) { this.searchBlogUseCase = searchBlogUseCase; } @GetMapping("/api/v1/blogs") public ResultResponse searchBlogs( @Valid SearchBlogRequestBody requestBody, @RequestParam(required = false, defaultValue = "1") int pa.. 2023. 2. 6.
[스프링] JPA 관련 통합 테스트 환경 구축하기 통합 테스트 환경을 구축하는 법을 알아보자. 테스트 대상 통합 테스트 환경을 구축하면서 테스트를 해볼 대상은 영속성 (Persistence) 관련 클래스들이다. JPA 를 사용해서 데이터에 대한 생성, 조회, 수정, 삭제, 즉 CRUD 기능을 테스트해보려고 합니다. 테스트를 위한 DB 는 h2 를 사용합니다. 예시에서 사용될 테스트 대상으로 JpaRepository 를 상속받는 BlogStatisticJpaRepository public interface BlogStatisticJpaRepository extends JpaRepository, BlogStatisticCustomRepository { } 의존성 설정 아래 의존성을 build.gradle 파일에 적용한다. // build.gradle.kts.. 2023. 2. 6.
[스프링] JUnit5, AssertJ, Mockito 기반 테스트 환경 구축하기 JUnit5, AssertJ, Mockito 를 활용해서 스프링 부트에서 테스트 환경을 구축해보자 의존성 추가 아래를 참고하여 의존성을 추가한다. 각 의존성에 대한 버전은 최신 버전으로 추가해주면 될 듯하다. dependencies { // JUnit 라이브러리 testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.junit.jupiter:junit-jupiter-params") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") // 테스트 코드의 가독성을 높여주는 메소드를 위한 라이브러리 testImplementation("org.assertj:assertj.. 2023. 2. 6.
[스프링] 스프링에서 관리하는 자바 객체, 빈 (Bean) 빈 (Bean) 이란? 스프링 IoC 컨테이너가 관리하는 자바 객체를 의미한다. 자바 객체 일반적인 자바 객체는 아래와 같이 클래스를 선언하여 사용한다. public class Car { private final String name; public Car(String name) { this.name = name; } public void turnLeft() {...} } public class MainApplication { public static void main(String[] args) { Car car = new Car("KIA K3"); // 객체 선언 car.turnLeft(); // 메소드 호출 } } 위와 같은 일반 Car 자바 객체를 빈으로 등록하기 위해서는 어떻게 해야 할까? 빈으로 .. 2023. 2. 3.
[스프링] 프로그래밍 방식의 트랜잭션 관리 방법 [스프링] @Transactional 에서는 트랜잭션과 스프링에서의 @Transactional 어노테이션에 대해 알아보았는데, 프로그래밍 방식의 트랜잭션도 함께 소개를 했었다. 이번에는 프로그래밍 방식의 트랜잭션에 집중해서 정리를 해보고자 한다. Programmatic Transaction 트랜잭션을 관리하기 위해 흔히 사용하는 @Transactional 어노테이션을 활용하지 않고, 코드 내에서 개발자가 직접 트랜잭션 범위를 설정하며 관리하는 방식을 의미한다. 의견이 다양하겠지만 개인적으로는 개발자에게 트랜잭션 범위를 직접 설정할 수 있도록 하여 자율성을 추구하고 @Transactional 어노테이션으로는 구현하기 어려운 (예: 동일 클래스 내 여러 메소드 간 호출에서 트랜잭션을 각각 적용하고 싶은 경우.. 2023. 2. 3.
[스프링] 스프링의 역사 자바 또는 코틀린 기반의 웹 어플리케이션 프레임워크인 Spring (스프링) 은 어떻게 탄생되었을까? 한번 알아보자. 2000년대 초반.. 스프링 프레임워크가 탄생하기 이전 2000년대 초반에는 EJB (Enterprise Java Bean) 이라는 자바 진영의 표준 기술을 활용해 웹 어플리케이션을 개발했다. EJB 는 트랜잭션, 분산기술, ORM 등 많은 기술을 지원하였고 여러 기업(특히 금융권)에서 많이 사용했다고 한다. 한국에서도 꽤나 사용을 했던 모양이고, 스프링이 막 생겨날 무렵에도 튼튼한 입지를 보여줬나보다. 스프링의 탄생 EJB 를 대신하기 위해 개발자들은 좀 더 사용하기 쉽고 EJB 의 단점을 개선한 오픈소스를 개발하기 시작했고, SI 개발자 Rod Johnson (로드 존슨) 이 2002.. 2023. 2. 2.
반응형