#필수과제
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
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 가 좀 더 괜찮을 것 같다는 생각입니다만..
(저도 설명할 자신이 없네요. 나중에 따로 공부해보시길..)
'Tech > Spring' 카테고리의 다른 글
SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급 (0) | 2021.02.27 |
---|---|
@Controller와 @RestController의 차이점 (2) | 2021.02.12 |
[취준생을 위한 스프링부트 백엔드 프로그래밍] 2주차 과제 (0) | 2021.01.21 |
[취준생을 위한 스프링부트 백엔드 프로그래밍] 1주차 과제 (0) | 2021.01.10 |
Gradle로 빌드하고 jar파일 실행하기(터미널) (0) | 2020.11.29 |