Tech/Spring

[취준생을 위한 스프링부트 백엔드 프로그래밍] 3주차 과제

소프 2021. 1. 26.

brunch.co.kr/@springboot/538

 

스프링부트 백엔드 프로그래밍 (5)

5. 예외 처리 및 테스트 코드 작성 | "스프링부트 백엔드 프로그래밍"이라는 주제로 약 8주간 글을 작성할 예정입니다. 스터디가 잘못된 방향으로 가지 않도록, 의견 및 조언을 아낌없이 해주시

brunch.co.kr

#필수과제

1. 사용자에 의한 키워드 검색 시 네이버 Open API 영화 검색 결과를 애플리케이션 내부에 정의한 자료구조에 저장해놓기(캐싱 역할로 사용) 

(Map or Set or 커스텀한 자료구조 등 자유롭게 정의해보기)

예) Map을 사용해서, Key에는 검색어를 Value는 검색 결과를 저장

 

2. 사용자에 의한 키워드 검색 시 특정 키워드에 해당하는 데이터가 자료구조에 이미 저장되어있다면, 네이버 오픈 API 호출하지 않고, 저장된(캐싱된) 데이터를 사용하도록 구현 (없으면 네이버 Open API 호출 후 자료구조 저장)

3. 관리자에 의한 캐시 데이터를 강제로 업데이트(갱신)하는 RestController API 만들기

(RestAPI를 갱신해주는 API를 호출하면, 네이버 오픈 API를 호출 후 캐시에 저장)

 

자료구조에 저장하게 되는 2가지 케이스

  • 사용자에 의한 검색 요청하는 경우
  • 관리자에 의해서 결과를 강제로 업데이트 해주는 경우

#선택과제

1. 자료구조에 저장한 데이터는 10분이 지나면 서버에서 자동으로 지우지

(어려울 것 같다;;)

 

위 주제로 별개로 준비할 것

- Redis 준비하기

방법1 : 가상머신의 Linux에 설치

방법2 : 윈도우에 레디스 설치

방법3 : MacOS에 brew로 설치

방법4 : AWS Elastic Cache 등 편한 방법으로 준비

방법5 : GCP 인스턴스 또는 AWS EC2에 레디스 설치하고 포트 오픈하기 등등..

 

- redis-cli 접속해서 콘솔에서 이것저것 해보기

(데이터 저장, 삯제, 만료시간 확인 등)

 

이번주 부터 코드리뷰 PR 요청하기 !! 

PR 및 리뷰

github.com/jikimee64/boot-study-assignment/pull/1

 

Feature/step01 by jikimee64 · Pull Request #1 · jikimee64/boot-study-assignment

실수로 과제1,2 하고 push를 했네요 흙흙 제가 한 코드가 너무 불확실해서 테스트코드는 리뷰받은 후 추가 하겠습니다!! (현 코드가 컨트롤러에서 대부분 처리하는데 서비스로 빼야하는지 스프링

github.com

1차 리뷰

전체 리뷰

일단, 코드를 다 보진 못했지만,
캐싱 과제는 AOP, 및 스프링에서 제공하는 캐시 추상화를 공부하기 전 예습인데요.그래서, 캐싱 로직을 공통 로직으로 분리하는 것을 강의에서 배우게 되며, 그 과정에서 AOP, 캐시 추상화에 대해서 공부할 예정이구요.
그리고,목적과는 별개로, list 에 저장하는 로직이 의문이 생기네요ㅠㅠ
map 으로 변경해보시면 좋을 것 같네요일단 바쁘시면 수업 이후로 나중에 수정해보셔도 됩니다.

파트 리뷰 1

캐싱 데이터 List 저장 -> HashMap 저장
(List와 Map의 효율차이 검색 후 비교해보기)

파트 리뷰 2

캐싱 업데이트 RequestMapping 
@GetMapping  -> @PostMapping, @PutMapping, @PatchMapping 중 하나로 변경

파트 리뷰 3

cron 설정("0 0/10 * * * *") -> 외부 프로퍼티(.yml, .properties)로 분리

2차 리뷰

전체 리뷰

일단, master에 머지 하시면 될 것 같습니다. ㅎㅎ
4주차 강의 과제를 신규 feature 로 PR 보내주시면 됩니다.

참고로,
4주차에는... 지금 작성하셨던 캐싱 로직을 전부 제거하고 완전히 다른 방법으로 사용하게 될 거에요..

파트 리뷰 1

모든 캐시가 전부 지워지는 구조이겠네요.

제가 의도했던 과제는, 각 Key 마다 만료시간을 갖고 10분이 지난 key 만 지워지도록 하는 과제였습니다. 일단, 4주차 강의 이후 다시 수정하는걸로 해요.

파트 리뷰 2

ConcurrentHashMap 을 사용하지 않고, HashMap 을 사용하셨네요.

캐시 저장소의 역할로는 ConcurrentHashMap 가 좀 더 괜찮을 것 같다는 생각입니다만..
(저도 설명할 자신이 없네요. 나중에 따로 공부해보시길..)

댓글