Repository files navigation
언어 : Java
서버 : AWS EC2, Github Action, Docker, RDS, S3, CloudFront
모니터링 : Actuator, Prometheus + Grafana, CloudWatch
DB : MySQL, Redis
프레임워크 : Spring Boot, Spring Data JPA, Gradle, Swagger
오픈 API : 토스페이먼츠 PG
Redis
Redis의 다양한 확장성과 데이터 안정성을 고려하여 채택.
앞으로 메세지, 위치 서비스 등의 다양한 기능을 추가로 개발해 나갈 가능성을 생각함.
Redisson
분산 시스템에서도 빠르고 효율적인 동시성 제어 구현 가능
lettuce보다 서버에 부하를 줄일 수 있음
Map, List, Set등의 다양한 데이터 구조를 지원하기 때문에 여러 종류의 락을 유연하게 생성하고 관리 가능
Lock획득에 대한 재시도와 타임아웃 지정 가능
Github Action
개발을 진행하면서 배포된 서버를 새로운 버전으로 교체해야 하는 일이 빈번히 일어날 것이라 예상했다.
자동화된 test 와 배포를 통해 코드의 안정성과 개발자의 생산성을 증가 시키는 효과를 얻을 수 있었다.
협업 툴로 Github을 사용하고 있기 때문에, Github Action을 사용하여 CI/CD를 설정하면 하나의 플랫폼에서 모든 작업을 처리할 수 있다는 장점이 있었다.
CDN
로딩마다 이미지같은 대용량 데이터를 수십, 수백 개를 오리진 서버에서 직접 불러오는 것은 과금 위험성 및, 트래픽에 영향을 준다.
중간에 CDN을 설치함으로써 첫 로딩 이후부터는 CDN에서 복사본을 갖고 오기에 트래픽 부담을 줄여주고 과금 위험성을 낮출 수 있다.
Docker
개발, 테스트 및 프로덕션 환경에서의 일관된 환경을 제공
팀원들간의 버전 이슈 걱정이 없음
배포 편의성 증가
검색 성능 이슈
상품 이름에 인덱싱을 걸었지만, 여전히 Full Table Scan 이 발생
Full Text Index 를 통해 3990ms -> 138ms 로 개선
Cors 에러
유저테스트를 위한 프론트와의 연결 과정 중 Cors 에러 발생
Preflight 요청에 access-control-request 가 설정되지 않아 발생한 문제
Preflight 요청이 OPTIONS 메서드인지, access-control-request 가 포함되었는지 확인한 후 interceptor를 통과하도록 설정
DeadLock
동시에 같은 상품에 대한 주문 요청 시, 주문이 생성되는 갯수와 감소하는 상품의 재고수의 차이와 함께 DeadLock 이 발생
Redisson 을 통한 분산락 구현
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
You can’t perform that action at this time.