Spring Boot Redis 캐싱 서버 적용하기

Redis란 무엇인가? Redis(Remote Dictionary Server)로 오픈 소스 기반의 인 메모리 데이터 저장소입니다. Redis의 특징 인메모리 기반 데이터 저장 Key-Value 구조 다양한 데이터 타입 지원 Redis 사용 용도 일반적으로는 캐싱, 세션 관리, 풀링, 메시지 브로커, 게임 랭킹 등 다양한 영역에서 사용됩니다. Redis의 장점 빠른 읽기/쓰기 성능 다양한 데이터 구조 지원 영속성 옵션 제공 Redis의 단점 메모리 기반이므로 용량 제한 데이터 휘발성 (설정에 따라 다름) Redis 캐싱 서버 적용하기 주의 사항 Member 클래스를 자주 업데이트하는 상황이 발생하면 Update가 될 때마다 업데이트된 유저의 데이터를 Redis에 적용해 주어야 합니다. ...

May 1, 2023 · Lee WooJin

Transaction 커밋과 flush 타이밍 이해하기

문제 상황 게시글을 수정하는 단계에서 updated_at 수정 필드가 업데이트가 되지 않아서 찾아보게 됐습니다. @Transactional public Post modify(String title, String body, String username, Integer postId) { // 포스트 찾기 log.info("포스트 찾기"); PostEntity postEntity = postRepository.findById(postId).orElseThrow(() -> new SnsException(Errorcode.NOT_EXISTS_POST, String.format("게시글 ID: %d", postId))); // 생성자, 수정자 일치 확인 log.info("생성자 수정자 일치"); if (!Objects.equals(postEntity.getMember().getName(), username)){ throw new SnsException(Errorcode.INVALID_PERMISSION, String.format("생성자: %s \n 수정자: %s", postEntity.getMember().getName(), username)); } postEntity.setTitle(title); postEntity.setBody(body); PostEntity save = postRepository.save(postEntity); return Post.fromEntity(save); } save VS saveAndFlush save() 메소드 save() 메소드의 특징은 영속성 컨텍스트를 저장하고 Transaction 커밋이 끝나야지만 DB에 flush()가 됩니다. ...

April 20, 2023 · Lee WooJin

스프링부트 터미널 build 실행 오류 (JDK 17)

문제: JAVA 17 버전을 호환하지 못함 터미널로 gradlew build를 실행했지만 classpath를 찾지 못할 뿐더러 jdk 17버전이 아니라는 경고가 발생한다. 주의 사항 스프링부트 2.6.x 버전 이상부터 사용이 가능하다. build.gradle에서 17버전인지 확인! 인텔리제이 빌드, 실행, 테스트 설정하기 jdk 17버전을 다운받는다. Oracle JDK 17 다운로드 설정 - build - gradle - 17ver 설정 프로젝트 구조 - SDK - 17ver 생성 프로젝트 구조 - 프로젝트 프로젝트 구조 - 모듈 - 17ver 설정 ...

April 4, 2023 · Lee WooJin