본문 바로가기

Java/Spring6

스프링에서 어떻게 캐싱이 이루어질까? - 1편 스프링에서 캐싱 사용하기 캐싱을 사용하면 자주 읽는 데이터에 대해 I/O 작업을 최소화하여 성능을 크게 개선할 수 있습니다.스프링에서는 캐싱을 적용하기 위해 스프링 3.1 버전부터 캐시 추상화를 지원합니다.캐시 추상화를 통해 애플리케이션에 캐싱을 적용하기 위해 캐싱의 세부 구현 사항에 대해 신경쓰지 않아도 됩니다.💡 공식 문서에서는 이에 대해 캐싱을 투명하게 제공한다라고 표현하고 있는데 투명하다는 의미는 개발자가 애플리케이션에서 사용하기 위해 세부 구현을 알 필요없이 간단한 선언만으로 사용할 수 있게 해줌을 의미합니다.  이를 코드로 살펴보면 다음과 같이 @EnableCaching, @Cacheable 어노테이션을 추가한것만으로 캐싱이 적용되게 됩니다.@Configuration@EnableCachingclass CacheCon.. 2024. 8. 4.
스프링 부트 3.0 이상에서 QueryDSL 설정 김영한님의 실전! QueryDSL 강의를 보던 도중 QueryDSL이 다음과 같이 QueryDSL 컴파일 시도시 예외를 발생하는 것을 볼 수 있었습니다. java.lang.NoClassDefFoundError: javax/persistence/Entity 현재 스프링 부트 3.0을 사용하고 있었고 querydsl 의존성을 다음과 같이 변경하였습니다. plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' conf.. 2022. 12. 3.
@RequestBody로 지정한 DTO에 기본생성자가 필요한 이유 @RequestBody로 요청 DTO를 매핑시킨 상태로 HTTP 요청을 보냈는데 다음과 같은 에러가 발생했었습니다. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.devcourse.voucher.application.customer.controller.dto.CustomerRequest]; nested exception is com.fasterxml.jackson.datab.. 2022. 10. 11.
스프링 빈과 스프링 컨테이너 스프링 빈과 스프링 컨테이너 스프링 컨테이너는 스프링에서 자바 객체들을 관리하는 공간을 의미합니다. 스프링에서는 자바 객체를 빈(Bean)이라고 부르며 스프링 컨테이너는 빈의 생명주기(생성 → 설정 → 초기화 → 소멸)를 관리하게 됩니다. 스프링 컨테이너를 사용하면 스프링 컨테이너가 빈을 관리하기 때문에 개발자가 직접 객체를 관리하지 않아도 됩니다. 스프링 컨테이너의 종류 스프링 컨테이너는 다음과 같이 두 종류로 나누어집니다. BeanFactory 스프링 컨테이너의 최상위 인터페이스로, 스프링 빈을 관리하고 조회하는 역할을 담당합니다. 예를 들어, 등록된 Bean을 가지고 있는 getBean() 메서드를 제공하고 있습니다. ApplicationContext ApplicationContext는 BeanFa.. 2022. 9. 4.
IoC와 DI, 그리고 의존성 주입을 위한 방법들 설명에 앞서 고객관련 서비스를 만든다고 가정해봅시다. 고객관련 서비스가 제공되는 CustomerService가 존재하고 데이터의 저장, 수정, 조회, 삭제를 수행하는 CustomerRepository라는 객체가 존재한다고 가정해봅시다. CustomerRepository는 저장 방식에 따라 동작이 다를수 있어서 CustomerRepository라는 인터페이스를 만들고 이를 구현하는 MemoryCustomerRepository(인-메모리 방식), JdbcCustomerRepository(DB 저장, Jdbc 사용)로 나눴다고 가정해봅시다. 서비스의 경우 저장된 고객정보를 토대로 기능이 수행되기 때문에 CustomerRepository가 필요한 상태라고 가정해봅시다. 현재 상황을 그림으로 요약해보면 다음과 같.. 2022. 8. 29.
OpenApi Spec을 이용한 RestDocs to Swagger 변환 자동화 🤨 RestDocs와 Swagger의 장점과 단점 데브코스 최종 프로젝트를 준비하면서 이번 프로젝트 진행중에 API 문서화를 RestDocs로 진행할지 Swagger로 진행할지 고민중인 상태였습니다. 이전에 Spring RestDocs는 사용해보았지만 Swagger는 사용해본적이 없었고 Swagger에 대해서 대강 알기로는 페이지에서 테스트할 수 있는 기능을 제공해 프론트엔드에 좀 더 친화적이라는 이야기를 들었습니다. 이에 API 문서화를 하기 이전에 이들의 장점과 단점에 대해서 다음과 같이 정리했습니다. Spring RestDocs 장점 단점 테스트 기반으로 실행되기 때문에 신뢰성이 높음 추가적으로 작성해야 하는 테스트 코드가 많음 프로덕션 코드에 영향을 주지 않아 깔끔함 API 테스트 기능이 없음 S.. 2022. 7. 28.