Spring
-
ShedLock vs RedissonSpring 2025. 6. 16. 09:36
#Redisson #ShedLock💡 Spring 프로젝트: ShedLock vs Redisson📘 기술 선택 정리 @Scheduler를 이용해 평점을 업데이트하는 기능이며, 하루에 한번 특정 시간에 실행하는 기능이 있다. 기능은 평점을 조회해서 Redis 서버에 저장했다가 특정 시간에 자동 갱신 업데이트를 진행하여 Redis에 있는 데이터를 다른 기능에서 빠르게 조회하여 실행하도록 하는 기능을 구현 중이다. 왜 하필 캐시 인가, 유저테이블을 이용할 수도 있지 않는가? 실시간 업데이트의 부담 감소 > 유저 테이블에 접근해 평점 데이터를 가져오는 경우 실시간 업데이트가 되면 매번 리뷰 DB에서 평점의 평균을 계속 조회 및 계산해야 하므로트래픽이 급증할 때, 서버 부하가 심해진다.캐시는 ‘읽기에 최적..
-
[Spring]CacheSpring 2025. 5. 22. 18:25
#cache 💡 Spring 정리: Cashe📘 개념 정리@Cacheable메서드 결과를 캐시에 저장, 다음엔 캐시에서 조회함@CacheEvict캐시 무효화, 즉 삭제. 새로 저장/삭제할 때 주로 사용@CachePut메서드 실행 결과로 캐시 갱신 (잘 안 쓰임)TTL (Time To Live)RedisCacheManager 설정에서 지정, 시간이 지나면 자동 삭제키 전략조건이 많을 경우, "productId:min:max:page:size" 같이 구성캐시 공간 분리서로 다른 응답 타입이면 cache name도 분리해야 안전 private final CommentRepository commentRepository;private final ProductRepository productRepository;..
-
[Spring] JWT - 인증과 인가, 그리고 Access, Refresh TokenSpring 2025. 5. 19. 00:23
#인증인가 #Acess, Refesh Token💡 Spring 정리: 인증과 인가, 그리고 Access,Refresh Token📘 개념 정리1. 인증과 인가 항목 인증 (Authentication) 인가 (Authorization) 의미"누구인지 확인""무엇을 할 수 있는지 확인"초점사용자 본인 여부권한/역할 확인예시ID/PW 입력 → 사용자 인증관리자만 게시물 삭제 가능언제?로그인 시점리소스 요청 시점결과Access Token 발급 등요청 허용/거부 판단 2. Access Token vs Refresh Token항목Access TokenRefresh Token역할인증된 사용자인지 확인Access Token 재발급용유효기간짧음 (수분~수십분)김 (보통 며칠~일주일 이상)저장 위치..
-
[Spring] JWTSpring 2025. 5. 18. 23:20
#JWT💡 Spring 정리: JWT📘 개념 정리Token▶ 토큰(Token) 은 인증된 사용자인지를 나타내는 증표이며, 요청의 유효성을 검증하는 데 사용되는 디지털 문자열이다. 사용자 로그인 이후 발급됨 (ex. JWT)HTTP Header 등에 담아서 서버에 전달보통 유효기간(exp)이 있음탈취 시 위험하므로 보관 위치에 주의해야 함JWT는 가장 대표적인 토큰 형식이며, 인증/인가 정보와 만료 정보 등을 자체적으로 포함함▶ 문제점Cookie/Session 방식보다 Token 자체의 데이터 용량이 많다.요청이 많아지면 그만큼 트래픽이 증가한다.Payload(전송되는 데이터)는 암호화되지 않아서 중요한 데이터를 담을 수 없다.Token을 탈취당하면 대처하기 어려워 만료 시간(30분)을 설정한다.JWT..
-
[Spring] 1차 캐시 & 동일성 보장Spring 2025. 5. 7. 16:52
💡 Spring 정리: 1차 캐시 & 동일성 보장 — 왜 == 비교가 true일까?📘 개념 정리JPA는 find()로 조회할 때마다 DB에 접근하지 않는다. 영속성 컨텍스트 안의 1차 캐시에 먼저 조회하고, 있으면 거기서 꺼낸다.그래서 같은 ID를 가진 엔티티를 조회하면 같은 객체(instance)가 반환된다.1차 캐시란? 항목설명저장 위치영속성 컨텍스트 내부 메모리 (Session 수준)키 값@Id (식별자) 기준저장 시점persist() 또는 find()특징동일한 ID 조회 시 DB 접근 없이 캐시에서 반환이점성능 향상, 트랜잭션 내 엔티티 동일성 보장Member m1 = em.find(Member.class, 1L);Member m2 = em.find(Member.class, 1L);Syste..
-
[Spring] Dirty CheckingSpring 2025. 5. 7. 16:38
#Dirty checking 💡 Spring 정리: Dirty Checking — set()만 했는데 update SQL이?📘 개념 정리JPA는 em.persist() 이후 엔티티를 계속 감시하고 있다. 엔티티 필드의 변경을 감지(DIRTY CHECKING) 해서트랜잭션 커밋 직전에 자동으로 update SQL을 생성한다. 🔍 Dirty Checking이란?항목설명감시 대상영속 상태(PERSISTENT)의 엔티티비교 방식스냅샷(초기 상태)과 현재 상태를 비교시점flush 발생 시 (커밋 or JPQL 전)결과변경된 필드만 update SQL 생성됨🔄 동작 흐름Member member = em.find(Member.class, 1L); // 영속 상태member.setAge(30); ..
-
[Spring] Flush 시점Spring 2025. 5. 7. 16:24
#Flush💡 Spring 정리: Flush 시점📘 개념 정리em.persist() 했다고 바로 DB에 insert 쿼리가 실행되지 않는다. JPA는 변경 내용을 모아뒀다가 특정 시점에 한꺼번에 flush(반영) 한다. 항목설명정의영속성 컨텍스트의 변경 내용을 DB에 반영 (SQL 실행)시점트랜잭션 커밋 전, JPQL 실행 전, flush() 명시 호출 시대상새로 등록(persist), 수정, 삭제된 엔티티주의flush는 커밋이 아님! → rollback 가능 Flush가 일어나는 3가지 시점상황예시✅ 1. 트랜잭션 커밋 시점tx.commit() 호출 시 자동 flush✅ 2. JPQL 쿼리 실행 직전em.createQuery(...).getResultList()✅ 3. 수동 호출em.flush() ..
-
[Spring] JPA Entity 생명주기 4단계Spring 2025. 5. 7. 16:15
#생명주기 4단계 💡 Spring 정리: 생명주기 4단계📘 개념 정리JPA에서 Entity는 단순한 java 객체가 아니라 DB와 연결된 상태에 따라 생명주기가 나뉜다. 🔄 동작 흐름단계상태설명1️⃣비영속 (Transient)새로 new로 만든 객체, 아직 JPA가 모름2️⃣영속 (Persistent)em.persist(entity) 하면 영속성 컨텍스트에 등록3️⃣준영속 (Detached)em.detach() 또는 트랜잭션 종료 시 관리 대상 아님4️⃣삭제 (Removed)em.remove() 호출, flush 시 delete SQL 나감 Member member =new Member("Kim"); // 1️⃣ 비영속em.persist(member); // 2️..