Spring Framework

@DataJpaTest를 어떻게 작성하는지에 대한 기록 JPA 테스트를 위한 의존성 구성 dependencies { implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.2") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.jetbrains.kotlin:kotlin-reflect") runtimeOnly("com.mysql:mysql-connector-j") // test container를 위한 의존성 라이브러리 testImplementation("org.springframework.boot:spring-boot..
[SimpleJpaRepository] findAll() 메서드에서 getQuery 호출을 통해 Query 객체를 가져온다. 이 객체는 Hibernate를 통해 객체를 쿼리 형식으로 만들어주는 역할을 한다. Query 객체를 가져오는 과정에 대해서는 따로 작성하는게 좋을 것 같아서 배제하게 되었다. Query 객체에서 getResultList()를 호출하여 타입에 해당하는 결과 목록을 조회한다. [Query] list() 함수를 통해 가져오게 되는데, 이는 Query를 구현한 AbstractSelectionQuery 클래스에 있다. [AbstractSelectionQuery] 메서드 내부에서 doList()를 조회하는데, 이는 AbstractSelectionQuery를 구현한 QuerySqmImpl 클래..
작성 계기 지난 리팩토링 프로젝트에서 Spring Boot 3로 업그레이드 하면서 JDK 17로 바꾸게 됐는데, 이에 따라 여러 Dependencies를 고치게 되었다. 이에 따라 다양한 이슈가 발생했었는데, 가장 기억에 남았던 이슈라 글로 정리 해 본다. 이슈 사항 Kotlin Entity 에서 @OneToMany List fundImageList 형식으로 사용하는 곳에서 RuntimeExecption 발생 MutableList로 고치니 잘 동작 => 이대로 끝나면 발전 가능성이 없는 것이다. 무엇이 문제였을까? 공변성과 반공변성 Effective Java와 Kotlin In Action에서 공변 / 반공변에 대해 학습했었는데 와닿지 못 했었던 내용이라 그냥 달달 외웠었다. 지금 이슈가 발생했던 부분은..
간단한 Rest Docs 작성 예시 [build.graddle.kt] plugin { id("com.epages.restdocs-api-spec") version "0.17.1" } configure { setServer("http://localhost:9999") title = "Rest API 문서" description = "Rest API 문서" version = "0.1.0" format = "yaml" outputDirectory = "build/docs" outputFileNamePrefix = "rest_docs" } val asciidoctorExtensions: Configuration by configurations.creating dependencies { testImplementa..
Spring Unit Test에서 컨트롤러 테스트와 Rest Docs 결합 시, 빌드 시간이 오래 걸리는 문제점에 대한 해결 방안 작성 현재 개발 상황 각각의 테스트 클래스에서 @WebMvcTest 사용 => 테스트마다 Spring Context를 다시 띄우게 된다. 이 문제점을 해결하기 위해 팩토리 패턴으로 하나의 추상 클래스에서 다음과 같이 작성하여 빌드 시간 단축 현재 구조의 문제점 @MockBean은 @SpyBean과 함께 Mockito가 아닌, Spring-test에서 제공되는 어노테이션이다 @MockBean을 사용하는 테스트 클래스마다 Spring Context가 새로 띄워진다. @MockBean을 사용하는 테스트 클래스가 많아지는만큼 빌드 속도가 느려지게 된다. 컨트롤러 테스트에서 Sprin..
JPA란? Java Persistent Api의 약자. 자바 ORM에 대한 기술 명세서로, 자바 애플리케이션에서 RDB를 사용하는 방식을 정의한 인터페이스이다. JPA는 하나의 기술 명세서 JPA는 특정 기능을 모아 놓은 라이브러리가 아니고, 자바 애플리케이션에서 ORM 방식으로 DB에 접근하기 위한 방식을 정의한 인터페이스의 모음이다. JPA는 영속성을 통해서 Application과 DB의 데이터를 운반한다. 한마디로, JPA는 RDB를 어떻게 사용할지에 대한 정의라고 이해하면 편할듯하다. JPA 영속성? Spring에서는 @Entity 어노테이션을 붙인 클래스를 통해 영속성을 관리(Entity에 대한 추가 글 필요!) JPA에서 영속성이란, 하나의 실행 흐름(컨텍스트)이라고 이해하면 될 듯하고, 우리..
하나의 스프링 부트 프로젝트에서 스프링 시큐리티와 OAuth2.0의 http필터를 적용하던 도중 스프링 시큐리티의 http 필터가 적용되지 않는 상황이 발생했다. [Spring Security Config 파일] [Resource Server config 파일] Resource Server를 구축하기 전에는 잘 동작했었던 Security와 autherization 과정이 Resource Server를 구축하고 나서 Security의 필터가 작동되지 않는 상황이었다. 여기저기 찾아보던 도중 스프링 공식 문서에 다음과 같은 안내문을 찾았다. 문제의 원인은 Resorce Server의 필터와 Security의 필터는 두 군데 등록한다고 해서 두개의 필터가 모두 동작하는 것이 아니라 동작 순서가 우선인 필터가 ..
스프링을 공부하다가 우연히 @RequestBody와 @ModelAttribute를 통해 값을 바인딩할 때 오류를 겪는 상황을 발견하고, 평소 Class 바인딩은 자연스럽게 @ModelAttribute로, Json과 같은 타입은 자연스럽게 @RequestBody로 작성했었던, 아무 생각 없이 스프링을 공부했던 나 자신을 돌아보며 오늘 글을 작성하려한다. 이를 이해하기 위해서는 우선 HTTP Message에 대한 이해가 필요하다. HTTP Message는 우리가 어떤 요청을 보내거나 요청에 대한 응답을 보낼 때, 서버와 클라이언트가 서로 데이터를 교환하는 방식이다. 데이터를 요청할 때 부르는 용어인 Rquest에는 서버가 특정 동작을 수행하도록 하는 메시지를 담고 있고, 총 4개의 섹션으로 구분하고 있는데 ..
iron_jin
'Spring Framework' 카테고리의 글 목록