[Spring] 캐시를 이용한 인기 검색어 조회 기능 개발 로그
·
Framework/Spring
1. 캐시란?데이터나 값을 미리 복사해두는 임시 저장소 라고 생각하면 된다.클라이언트가 증가하면 DB에 대한 요청이 많아지고, 이로 인해 DB가 발생해 성능이 떨어질 수 있다. 이때, 서버와 데이터베이스 사이에 캐시를 두어,주로 자주 사용하는 데이터를 캐시에 임시로 저장해 두면,동일한 요청에 대해서 DB에 직접 접근하지 않고 빠르게 응답할 수 있어 성능이 향상된다. 🤔 이 프로젝트에서 왜 캐시를 사용하였는가?이번 프로젝트에서는 인기 검색어 기능 구현해야 했다. 여러 사용자가 키워드를 입력하여 제품을 검색하면, 해당 검색어는 SearchLog 테이블에 저장된다. 이 테이블을 기반으로 사용자는 인기 검색어를 조회할 수 있다. 하지만 다수의 사용자가 동시에 인기 검색어를 요청하게 되면,SearchLog ..
JwtUtil 클래스 생성하기 : 코드 설명
·
Framework/Spring
1. JwtUtil 클래스의 역할1️⃣ 토큰 생성사용자 인증 정보를 기반으로 JWT 토큰을 생성합니다.토큰을 생성할 때, 필요한 Claim을 포함하고, Signature를 통해 토큰의 무결성을 보장합니다. 2️⃣ 토큰 검증클라이언트로부터 전달 받은 JWT토큰의 유효성을 확인합니다.토큰의 만료시간, 서명, 클레임 정보등이 포함되어, 토큰이 위조나 변조되지 않았는지 확인합니다. 3️⃣ 토큰 파싱JWT 토큰에 포함된 정보를 추출(파싱)하여, 사용자 식별 정보나 권한 같은 데이터를 반환합니다.이를 통해 애플리케이션 내에서 사용자 인증 및 권한 부여를 효율적으로 처리할 수 있습니다.   2. JwtUtil 클래스 생성하기(1) 필드 설정하기[JwtUtil 필드]private static final String B..
[플러스 주차 개인과제] 레벨 2 문제 해결 과정
·
Framework/Spring
1. JPA Cascade(1) 문제 요구사항   (2) 문제 풀이기존 코드에서는 Todo 엔티티를 저장할 때, 연관된 Manager 엔티티가 자동으로 저장되지 않습니다.따라서 데이터베이스에 Manager 정보가 남지 않아, 별도로 저장해야 하는 번거로움이 있습니다. 이 문제를 해결 하기 위해서 Todo 엔티티의 managers필드에 `cascade = CascadeType.PERSIST`를 적용하였습니다. [수정한 코드]public class Todo extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private St..
토큰 기반 인증과 JWT: 액세스 토큰과 리프레시 토큰의 핵심 이해
·
Framework/Spring
1. 토큰 기반 인증이란?사용자가 서버에 접근할 때, 인증된 사용자인지 확인하는 방법은 크게 두 가지로 나뉜다. (1) 토큰 기반 인증 vs 세션 기반 인증1️⃣ 토큰 기반 인증클라이언트가 토큰을 보관하고 요청 시 전송 → 서버는 무상태성 유지2️⃣ 세션 기반 인증 서버가 사용자 정보를 세션으로 저장 → 상태 유지 필요 1️⃣ 토큰 기반 인증토큰은 서버에서 클라이언트를 구분하기 위한 값으로, 서버에서 토큰을 생성하여 클라이언트에 제공한다.클라이언트를 해당 토큰을 저장하고 있다가 API 요청시 함께 전송한다.서버는 토큰을 검증하여 유효한 사용자인지 확인한다.서버가 인증 정보를 저장하지 않기 때문에 무상태성을 유지할 수 있고, 확장성이 뛰어나다. 2️⃣ 세션 기반 인증서버는 사용자마다 세션을 생성하여 사용자..
JPA를 사용한 조회 기능 구현 - 날씨와, 일정 날짜 필터링
·
Framework/Spring
1. 개요내일배움 캠프 [Spring 5기] 플러스 주차 개인 과제 진행 중,레벨 1단계 3. 코드 개선 퀴즈 - JPA의 이해 문제를 해결 하고 있었습니다.해당 문제 풀이 과정을 작성하고자 합니다.   (1) 기존 코드    (2) 요구 사항    2. 컨트롤러 계층[수정 전]@GetMapping("/todos")public ResponseEntity> getTodos( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return ResponseEntity.ok(todoService.getTodos(page, size));}  (1) 첫 번째 요구사항 : we..