TIL 61 [ Spring 실전 프로젝트 ( Day 4 ) - Cache 💡, 오류 개선, Redis 기본세팅 + PostMan 웹 공유법 ]

2025. 5. 21. 22:40·[내일배움캠프-Sparta]/Spring 6기
반응형

💡 Cache 아이디어 구성

어제 일자로 기본적인 API가 토대가 만들어져서, 각각 API를 테스트를 해보았고, 오늘은 아침 스크럼으로 Cache 내용을 어떤 것을 다룰지 팀원들과 다 같이 논의 해보고, 담당 튜터님에게 찾아가서 조언을 듣는 식으로 가보았다.

우리 팀은 cache 성능 개선을 위한 프로젝트를 주제로 선정을 하였기 때문에, 이에 대해서 각자 맡은 파트별로 캐싱을 할 부분이 무엇이 있을까 한 고민들을 노션에 하나로 적어보았다. 그러고 서로 의견을 나누고 튜터링을 받아보니 각자에 대한 아이디어를 얘기 하게 되었고 튜터님의 말로는 주제가 다들 좋고, 이번 프로젝트 목적이 해당하는 부분에 부합하기 때문에 적절하다고 판단하셨다.

이러고 이제 개인적으로 해당 부분에 대해 공부를 해보고 적용을 해보는 게 좋을 것같다고 해주셨다.

 

그래서 나는 조회 기능에서 조회수를 기반으로 Redis의 자료구조 z-set을 통해서 가장 많은 조회순 ( 가장 많이 찾은순 ) TOP 10을 캐싱 해보는 쪽으로 가보는게 어떨까 라는 생각을 구상해보았다. 그래서 ERD에 수정이 좀 생겼다. 조회수를 카운트 받아야하는게 없어서 새로 도서 엔티티에 viewer라는 필드를 추가하여 기본값은 0으로 하고 상세조회시에 +1씩 증가하는 방식으로 구상하였다.

 

캐싱을 제대로 적용해본 다음에 동시성 제어로 테스트 코드를 작성해보거나 대용량 트래픽을 어떻게 다루는지 등 고민을 좀 해보아야 할것 같다. 아직 Redis에 대한 제대로된 지식이 없어서 내일은 이것을 위주로 생각을 해보아야 겠다.

 

엔티티를 통해 조회수가 구현되는건 1~2시간만에 구현이 되었다.

💬 오류 개선

한 팀원 말로는 도서 생성 요청시, 관리자가 승인하지 않으면 enrollstatus가 reject로 나오긴 하는데 전체 단건 조회, 댓글, 좋아요 기능 다 작동합니다. 라고 공유 해주셨다. 말씀 해주지 않았더라면 심각한 오류로 되었을 것이다.

해당 부분의 로직을 확인해서 보았더니 승인이 거부된 상태임에도 불구하고 조회가 된다는 치명적인 오류가 있었다. 실제로 프론트에서 승인이 거부가 되었는데 해당 내용이 보이게 된다면, 안좋은 서비스 방향으로 흘러 갔을 것이다.

그래서 자세히 보니 예외 처리가 적용되어 있지 않아서, 조회가 될수 있던점 이었다. 

전체 조회

Page<Book> books = bookRepository.findAllByEnrollStatus(EnrollStatus.ACCEPT, pageable);

전체 조회 부분에서는 쿼리 메소드를 사용해서 EnrollStatus 데이터 내용을 포함하여 처리하였다.

상세 조회

// 승인되지 않은 책이면 예외처리
if (findBook.getEnrollStatus() != EnrollStatus.ACCEPT) {
    throw new ApiException(ErrorStatus.BOOK_NOT_APPROVED);
}

상세 조회에서는 메소드에 if문을 추가하여 findBook를 조회한 책이 승인 상태가 아니라면, 접근할수 없게 책 정보를 찾을수 없다고 예외처리르 해주었다.

🔗 Redis 기본 세팅

@Configuration
public class RedisConfig {
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory("localhost", 6379);
    }

    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf)
    {
        RedisTemplate<String, String> tpl = new RedisTemplate<>();

        tpl.setConnectionFactory(cf);
        // 키와 값에 대해 String 직렬화기 설정
        tpl.setKeySerializer(new StringRedisSerializer());
        tpl.setValueSerializer(new StringRedisSerializer());
        tpl.setHashKeySerializer(new StringRedisSerializer());
        tpl.setHashValueSerializer(new StringRedisSerializer());
        tpl.afterPropertiesSet();
        return tpl;
    }
}

한 팀원과 논의하다가 우리도 Cache를 쓰려면 Redis의 기본세팅이 다들 맞추어져야 있지 않겠느냐 라는 의견이 오고가고 하다보니 긴급 회의를 통해서 다 같이 설정하는 방식으로 가보았다. 

그래서 점검을 해보았다. 일단 초기 세팅도 의존성 주입으로 Redis가 잘 들어가 있고, properties는 gitignore를 통해서 형상 관리를 하고 있지 않기 때문에 각자의 환경에서 테스트를 해볼수 있다. 

 

그래서 이제 공통적으로 빈이 사용되어야 할탠데 해당하는 빈을 등록시켜주고 다들 확인하고, 해당 부분을 추가해 PR을 올려서 확인하게 되었다.

 

남은 시간에는 Redis 개념에 대해서 공부하는 시간을 가졌다.

👍 PostMan으로 웹에 공유하는법

한 팀원에게 어떻게 하는지 부탁을 해서 쉽게 웹에 공유하는 법을 알게 되었다. 

  1. 먼저, 해당하는 컬렉션을 클릭한다.
  2. 클릭하고, 파란색상으로 View complete documentation 클릭
  3. 그러면 두번째 스크린샷 창이 뜰탠데 오른쪽 위에 publish(지구모양) 클릭
  4. 클릭하면, 세번째 스크린샷 웹 화면이 나올탠데, 여기서 설정해주고 스크롤을 아래로 내리면 publish 를 누르면 끝!~

이러면 이제 해당 URL을 복사하여 접속할수 있게된다. ( 팀 프로젝트 때 공유할 수 있다. )

반응형

'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글

TIL 63 [ Spring 실전 프로젝트 ( Day 6 ) - 코드리뷰, 발표자료, 대본작성 ]  (0) 2025.05.23
TIL 62 [ Spring 실전 프로젝트 ( Day 5 ) - Cache 적용 ]  (0) 2025.05.22
TIL 60 [ Spring 실전 프로젝트 ( Day 3 ) - 기본 API 구현/병합/전체 테스트, Cache + Redis 세션 ]  (0) 2025.05.20
📦 Redis : 개념부터 캐싱 전략까지  (0) 2025.05.20
TIL 59 [ Spring 실전 프로젝트 ( Day 2 ) - 도서 CRUD 구현 + 트러블 슈팅 ]  (0) 2025.05.19
'[내일배움캠프-Sparta]/Spring 6기' 카테고리의 다른 글
  • TIL 63 [ Spring 실전 프로젝트 ( Day 6 ) - 코드리뷰, 발표자료, 대본작성 ]
  • TIL 62 [ Spring 실전 프로젝트 ( Day 5 ) - Cache 적용 ]
  • TIL 60 [ Spring 실전 프로젝트 ( Day 3 ) - 기본 API 구현/병합/전체 테스트, Cache + Redis 세션 ]
  • 📦 Redis : 개념부터 캐싱 전략까지
dimenshun
dimenshun
한 소년의 개발 일기
    반응형
  • dimenshun
    Dev Life Notes
    dimenshun
  • 전체
    오늘
    어제
    • 분류 전체보기 (268)
      • CS (23)
        • 자료구조 (0)
        • 알고리즘 (0)
        • 컴퓨터 구조 (8)
        • 네트워크 (6)
        • 운영체제 (3)
        • DB ( + SQLD ) (5)
        • SW공학 (1)
      • 프로그래밍 (3)
        • Java (0)
        • Spring (0)
        • HTML,CSS (3)
        • JavaScript (0)
      • 개발 툴 (7)
        • Git(버전관리) (1)
        • Docker (3)
        • AWS (2)
        • JSP (1)
      • 코딩테스트(Algorithm) (125)
        • 백준 (6)
        • 프로그래머스 (119)
      • [내일배움캠프-Sparta] (110)
        • Spring 6기 (106)
        • KPT 회고 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    web
    Python
    웹
    OS
    It
    Til
    개발자
    SQLD
    트랜잭션
    네트워크
    KPT
    세션
    CPU
    운영체제
    배포
    컴퓨터구조
    코딩테스트
    network
    spring
    cs
    docker
    Testcode
    db
    내일배움캠프
    알고리즘
    백엔드
    메모리
    Java
    SQL
    AWS
  • hELLO· Designed By정상우.v4.10.3
dimenshun
TIL 61 [ Spring 실전 프로젝트 ( Day 4 ) - Cache 💡, 오류 개선, Redis 기본세팅 + PostMan 웹 공유법 ]
상단으로

티스토리툴바