[Spring] JVM 웜업
·
Project/Spring
문제 상황현재 백엔드 개발자로 참여하고 있는 서비스에서 JVM 웜업 문제를 해결하는 작업을 맡았다.먼저 Data Dog으로 배포 시간대의 Latency graph를 확인했다. 9시 40분 경에 배포를 했는데 그 시간대에 몇몇 api의 응답속도가 눈에 띄게 느려진 것을 확인할 수 있었다.이렇게 배포 직후 응답 속도가 느려지는 것을 JVM의 'cold start' 라고 한다. 정확히는 JVM의 JIT 컴파일러 때문에 발생하는 것이다.JIT 컴파일러JVM은 처음 실행된 메서드를 인터프리터로 돌리다가, 충분히 실행되면 JIT 컴파일을 통해 최적화한다. 이런식으로 최적화 하는 이유는 JVM의 특징과 관련이 있는데 Java는 자체적인 byte code를 사용하기 때문에 byte code를 기계어로 변환하는 과정이..
주문상태 동시성 처리
·
Project/Spring
글을 쓰게 된 배경톰캣의 멀티쓰레드 방식을 공부하던 중 멀티쓰레드 환경에서 동시성처리에 대한 부분을 학습했는데, 문득 지금 진행하고 있는 프로젝트의 주문 프로세스에서 동시성 문제가 발생할 수 있다는 것을 깨달았다. 주문 상태를 처리하는 김에 동시성 처리도 함께 하는 것이 좋다고 생각해서 주문 프로세스에 대한 나의 고민을 담았다.목차현재 주문 프로세스에서 주문상태 문제현재 주문 프로세스에서 주문상태 문제현재는 사용자나 공장의 api 요청에 따라 주문 상태가 변경된다.사용자가 결제를 하면 결제대기 -> 결제 완료 상태가 되고 공장이 주문 거절을 하면 제작대기 -> 제작 거절 상태가 된다.만약에 사용자가 결제를 취소하는 것과 동시에 공장이 제작을 시작하면 하나의 동작이 덮여버리는 문제가 발생한다.또한, 공장이..
레디스 설정 적용
·
Project/Redis
이 글을 쓰게된 배경이 글은 레디스 백업 설정을 직접 해보며 레디스에서 기본으로 제공하는 설정 기본 값에 대하여 알아보고 redis.conf 파일을 통해 원하는 레디스 설정을 적용하는 과정에 대한 글입니다.다룰 내용레디스 설정 적용레디스 설정 파일레디스 설정 적용레디스를 사용할때 따로 설정을 하지 않으면 기본적으로 appendOnly 라는 설정이 no로 적용되는데 이 설정은 aof 방식을 사용하지 않겠다는 의미이다. 나는 이전 블로그에서 느낀 것과 같이 rdb 방식과 aof 방식을 모두 사용하고 싶기 때문에 설정파일을 따로 만들어서 aof를 yes로 바꿔야 한다. 아래는 레디스의 기본설정이다. port6379Redis 기본 포트bind없음 (모든 인터페이스에서 접속 허용)최근 버전은 127.0.0.1로 ..
레디스 데이터 영속성 방식
·
Project/Redis
이 글을 쓰게 된 배경성능과 데이터 저장의 효율이 좋다는 이유로 레디스를 주로 쓰는데, 레디스가 어떤식으로 데이터를 저장하고 내부적으로 어떻게 관리하는지에 대해 지식이 부족하다고 생각되어 레디스 서버에 대해서 더 자세히 학습했습니다. 이번 포스팅에서는 레디스의 데이터 영속성 방식과 제가 선택한 레디스 데이터 영속성 방식에 대한 글을 써보겠습니다.다룰 내용레디스의 데이터 영속성 방식각 데이터 영속성 방식의 장단점구체적인 문제정리레디스의 데이터 영속성 방식제가 찾아본 레디스의 데이터 영속성 방식은 두가지입니다. 바로 AOF와 RDB 입니다. AOF 방식의 개념은 레디스를 실행하면서 수행한 모든 연산을 로그 형태로 저장하는 것입니다. RDB 방식은 스냅샷 형태로 저장하는 개념입니다. 스냅샷이란 사진 촬영하는..
조회수 최적화(Redis Pipe + Batch)
·
Project/Redis
이 글을 쓰게된 배경프로젝트에서 조회수 기능을 사용하고 있는데 조회수를 최신화할 때 레디스를 사용하면 성능 최적화를 할 수 있다는 것을 알게되었습니다. 이미 토큰때문에 레디스가 프로젝트에 적용되어 있었기 때문에 상대적으로 적은 러닝커브로 성능을 향상시킬 수 있을 것 같아 이 방법을 적용하기로 했습니다.다룰 내용기존 조회수 기능 구현 방법레디스를 이용한 조회수 최신화성능 향상 리포트기존 조회수 기능 구현 방법기존에는 장학금 카드를 조회하면 데이터베이스에 저장되어있는 viewCount의 숫자를 1 늘려주는 방법으로 조회수 로직을 구현했습니다.// 장학금 카드 조회 로직@Transactional public ScholarshipResponse getOneScholarship(Long scholarship..