본문 바로가기

SpringBoot

(5)
[Spring] Spring Cache와 JPA 1차 캐시 비교 개요Spring Cache에 대한 글을 바탕으로 세미나를 진행한 적이 있는데,다음과 같은 질문이 들어왔으나 바로 대답하지 못했었다.jpa에서도 cache를 지원해 주는 것으로 알고 있습니다. 이때 spring cache와 jpa cache의 차이가 어떻게 되나요? 현재 JPA를 얕게나마 사용하는 수준이어서 기술적인 질문이 들어오면 답변을 못하는 상태라 생각됐다.다음번에도 동일한 질문이 들어오면 답변할 수 있도록 공부하기로 하고, 정리한 내용을 본문에 작성했다. https://meal-coding.tistory.com/46 [Spring] Cache 사용하기 (@Cacheable, @CachePut, @CacheEvict)개요메뉴, 카테고리와 같이 자주 변경되지 않는 정적 데이터들이 있다.게다가 메뉴와 카..
[Spring] Cache annotation 사용성 개선하기 with Kotlin 개요DB에서 자주 변경되지 않지만, 자주 조회되는 데이터들이 있다면 Cache를 활용하면 좋다.조회를 위해서 DB hit의 회수를 상당히 줄여주므로 서버 자원을 아낄 수 있기 때문이다.DB connection pool에 여유가 생기니 병목 현상도 어느 정도 해소될 것이고,복잡한 query를 필요한 작업이었다면 해당 query를 생략함으로써 DB의 부담을 줄여줄 것이다. 토이 프로젝트로 간단하게 쇼핑몰 서비스를 개발하고 있는데 카테고리 항목이 딱 Cache를 적용하기 좋았다.처음에는 조회할 때마다 DB를 매번 조회했지만, 생각해 보니 카테고리는 한 번 설정되면 자주 바뀌지 않는 데이터였다.(실제로 많은 쇼핑몰에서도 카테고리는 거의 변경되지 않는다.) 바로 카테고리에 Cache를 적용했다. Spring Bo..
[Spring] Cache 사용하기 (@Cacheable, @CachePut, @CacheEvict) 개요메뉴, 카테고리와 같이 자주 변경되지 않는 정적 데이터들이 있다.게다가 메뉴와 카테고리를 가져오기 위해서 DB를 조회하는 빈도수도 상당히 높은 걸 알 수 있다. 데이터 양이 적다면 유야무야 넘어가며 매번 발생하는 요청을 처리할 수도 있을 테지만,반대의 상황이 온다면 성능에 영향을 끼칠 수 있다. 이럴 때 Caching 기능을 사용한다면 DB를 조회하는 횟수를 획기적으로 줄일 수 있다.동일한 데이터를 요청하면 DB에서 가져오지 않고 미리 Caching 한 데이터를 건네주면 되기 때문이다.DB에서 데이터가 변경되더라도 문제되지 않는다.필요한 경우 수정된 데이터만 갱신하거나, Cache를 비운 후 다시 Caching 하면 된다. 편리하게도 Spring은 AOP 방식으로 Cache 서비스를 적용하는 기능을 ..
[Spring] Filter, Interceptor 그리고 AOP 개요프로그램을 개발할 때 공통적인 기능(예: 로깅, 인증, 트랜잭션 관리)을 분리하여 코드의 유지보수성을 높이는 개념이관심사 분리(Separation of Concerns, SoC)입니다. 예를 들어, 로그를 출력하기 위해 객체의 메소드 내부에 직접 로깅 코드를 추가할 수 있지만,이 방식은 모든 객체에서 중복된 로직을 반복적으로 작성해야 하는 문제가 있습니다. 또한, 세션 관리, 트랜잭션 처리, 인증/인가(Authorization) 체크 등 다양한 공통 기능도 동일한 문제를 가지며,이러한 코드가 객체 내부에 쌓이면 핵심 비즈니스 로직보다 보일러 플레이트 코드가 많아지는 문제가 발생합니다. 이를 해결하기 위해 Spring에서는 Filter, Interceptor, AOP를 통해 관심사를 분리할 수 있도록 ..
[Spring] DTO와 VO 개요 프로그래밍을 하다 보면 데이터를 전달하고 표현해야 한다는 사실에 의문을 가지는 사람을 없을 것입니다.그렇다면 어떻게(how)라는 방법이 중요한 문제라 생각합니다. 본 페이지에서는 Spring Boot를 공부하면서 DTO와 VO를 활용해 데이터를 전달하고 표현하는 방식에 대해 설명합니다.내용1. DTO (Data Transfer Object)DTO는 Controller, Service, View 간 데이터를 주고받는 용도로 사용합니다.오로지 데이터를 저장하고 전달하는 역할에 집중하기 위해 로직을 포함하지 않습니다. (getter와 setter만을 가집니다.)일반적으로 식별자나 특정 속성에 의해 두 객체가 동일하다 판단합니다. 예시// data class로 선언함으로써 getter와 setter 자동 ..