Study
-
Elastic Beanstalk 정리Study 2022. 11. 22. 22:23
목차 Elastic Beanstalk의 구조 자주 발생하는 오류 Elastic Beanstalk의 구조 Beanstalk 이란? 웹 어플리케이션/서비스를 배포하고, 확장하고, 관리하는데 있어 쉽고 빠르게 할 수 있도록 돕는 완전 관리형 서비스입니다. 용량 프로비저닝, 로드 밸런싱, 조정, 모니터링 등 자동으로 처리해줍니다. InfraStructure 스택 구성 Beanstalk 안에서 환경 내의 각 인스턴스를 선택한 플랫폼의 응용 프로그램을 실행하는데 필요한 요소를 자동으로 구성해줍니다. 어플리케이션 배포에 필요한 정보 단일 인스턴스에서 동작하는지 여러개의 인스턴스에서 동작하는지 선택이 필요합니다. ( 오토스케일링 및 로드밸런싱을 사용하기 위해서는 다중의 인스턴스가 필요합니다. ) RDS와 같은 Data..
-
Redis :: 테스트 환경 구축Study 2022. 11. 22. 22:21
1000만건의 상품 데이터가 있는 쇼핑몰 프로젝트를 진행중입니다. 문제 발생 Redis TestCode 환경 구축이 필요합니다. 많은 곳에서 Redis를 사용중이었고, 다수의 클래스를 테스트하기에 Embedded Redis는 적합하지 않았습니다. 🤩 해결 방안 Redis Test Container - Java 언어만으로 구축 가능한 오픈소스 라이브러리 - 컨테이너로 동작하기 때문에 어느 환경에서든 바로 실행이 가능 CODE Set Test Container public abstract class RedisTestContainer { static final String REDIS_IMAGE = "redis:6-alpine"; static final GenericContainer REDIS_CONTAINER..
-
Redis :: 통계 데이터 배치처리Study 2022. 11. 22. 22:21
1000만건의 상품 데이터가 있는 쇼핑몰 프로젝트를 진행중입니다. 문제 발생 현재 프로젝트에선 AWS RDS MySQL 프리티어 버전을 사용하고 있습니다. DB에서 네트워크 성능이 높지 않다보니 최적화는 필수였고, 상품 조회 시마다 발생하는 +1 Update는 문제가 될 확률이 아주 높았습니다. 🤩 해결 방안 Cache Write Back 조회수를 캐시에 모아 일정 주기 배치 작업을 통해 DB에 반영 싱글쓰레드인 Redis의 특성상 Atomic하게 Increment를 처리할 수 있다. 조회 기능의 많은 I/O와 함께 발생하는 Update를 컨트롤할 수 있다. CODE 상품 조회가 발생할 때 countView() 가 함께 발생하도록 설계했습니다. // ProductService // 상세 조회 @Cache..
-
Redis :: 다수의 명령어 파이프 라인으로 처리하기Study 2022. 11. 22. 22:20
1000만건의 상품 데이터가 있는 쇼핑몰 프로젝트를 진행중입니다. 문제 발생 Redis는 TCP로 통신하기 때문에 데이터를 여러번 반복해서 등록할 경우 통신 과정에서 오버헤드가 발생하여 Latency가 지연될 수 있습니다. 현재 프로젝트의 경우 Redis에 상품 상세페이지를 캐싱하는 과정에서 아주아주 많은 통신이 발생했고, 이는 Cache Warmup이 동작할 때 마다 성능 저하로 연결됐습니다. Redis에 많은 비중이 있는 프로젝트이고, 커다란 오류로 발생할 수 있기에 최적화가 시급했습니다. 🤩 해결 방안 Redis Pipeline 구축 파이프라인 구축을 통해 5000번이나 반복되는 클라이언트 요청 + 서버 응답을 해결할 수 있었습니다. 하단의 이미지처럼 각각의 Response를 기다리지 않고, 한번에..
-
Redis :: 랭킹보드 구현하기Study 2022. 11. 22. 22:20
1000만건의 상품 데이터가 있는 쇼핑몰 프로젝트를 진행중입니다. 문제 발생 조회 성능을 최적화 시키고 있지만 아직은 메인 페이지 로딩에 적지 않은 시간이 소요됩니다. ( 상품 데이터를 메인 페이지에 노출하는 상황입니다. ) 메인페이지 로딩 시간은 플랫폼의 인상에 큰 영향을 주기에 최소 100ms 안의 로딩 속도를 원했습니다. 🤩 해결 방안 메인 페이지에 노출하는 데이터 캐싱 중복 불가능에 가중치(Score)로 정렬이 가능한 Redis ZSet 사용 CODE Set Ranking Board productRepository.warmup() 은 인기게시물을 가져오는 Query 로직입니다. ( 100등 까지 ) productRedisService.warmupRanking() 에서 랭킹보드 세팅이 이루어집니다...
-
스프링 기본 정보Study 2022. 10. 10. 10:51
스프링은 객체를 관리할 수 있는 컨테이너를 제공하는 프레임워크입니다. JAVA의 오픈소스 애플리케이션 프레임워크 중 하나로 스프링의 기본 철학은 특정 기술에 종속되지 않고 객체를 관리할 수 있는 프레임워크를 제공하는 것 입니다. 그래서 컨테이너로 자바 객체를 관리하면서 DI와 IOC로 결합도를 낮추게 됩니다. 싱글톤으로 컨테이너를 관리해줍니다. ( ProtoType / RepuestType 스코프로 관리 제어 가능) DB 커넥션 풀이나 네트워크 소켓처럼 스프링 빈도 생명주기 콜백이 가능합니다 ( @PostConstruct, @PreDestroy ) 하지만 스프링은 객체지향 프로그래밍을 도와주는 프레임워크라는 것에 의미가 큽니다. 역할과 구현을 분리한다는 것에 집중해야합니다. DI (Dependency I..
-
JVM과 GCStudy 2022. 10. 2. 21:38
시작하며 JVM은 Java Virtual Machine의 약자로 자바를 실행하기 위한 가상 기계라는 의미입니다. 이는 코드가 플랫폼에 의존하지 않게 하기 위해 제작되었고, 자바 바이트 코드를 타겟 플랫폼과 상관 없이 JVM 위에서 동작시킬 수 있게 합니다. ( 물론 타겟 플랫폼에 JVM이 설치가 되어 있어야 합니다. ) "Wirte Once, Run Anywhere" - Sun Mycrosystems 하지만 이런 의문이 존재할 수 있습니다. "크로스 컴파일이 있는데 굳이 JVM?" 하지만 자바의 주 목적은 코드가 플랫폼에 의존하지 않게 하기 위함이었습니다. ( 휴대폰, PMP 등과 같이 네트워크에 연결된 모든 디바이스에서 작동시키는 것 ) JVM 이전 C와 C++은 컴파일 플랫폼과 타겟 플랫폼이 다를 경..