redis

Docker

docker-compose의 Redis-cluster와 통신이 안된다..!?

최근 작년에 진행한 졸업 프로젝트를 리팩토링하고 있다. 프로젝트 EC2에서 스프링 부트 애플리케이션과 도커 컴포즈를 사용한 레디스 클러스터가 동작하고 있다. DB로는 AWS RDS MySQL을 사용하고 있다. 또한 Github Action, S3, Code Deploy를 사용해 CI/CD 파이프 라인을 구축했다. 오늘은 CI/CD 파이프 라인을 구축하면서 있었던 오류에 대해 말해보고자 한다. 문제 CI/CD 파이프라인에는 스프링 부트 애플리케이션을 빌드하는 과정에서 작성한 모든 테스트(통합 테스트, 단위 테스트)를 수행하는 과정이 있다. 여기에서 문제가 발생했다. 빌드 통합 테스트 과정 중 EC2에서 동작하는 레디스 클러스터와 통신이 안됐다. 그 당시 로컬과 운영 환경에서 작성한 docker-compos..

Cloud/AWS

AWS의 데이터베이스

RDS 관리형 PostgreSQL, MySQL Oracle, SQL 서버 MariaDB용 및 사용자 지정 RDS가 있다. Amazon RDS를 사용할 때는 RDS 인스턴스 크기와 EBS 볼륨 유형 및 크기를 프로비저닝해야 한다. 스토리지 계층에 오토 스케일링 기능이 있어도 프로비저닝해야 한다. 읽기 용량 확장을 위해 읽기 전용 복제본을 지원한다. 고가용성 목적으로 대기 데이터베이스를 다중 AZ에 둘 수 있다. 대기 데이터베이스는 재해 발생 대비용이며 쿼리를 수행할 수는 없다. RDS 데이터베이스 보안은 IAM을 통해 설정할 수 있다. 사용자 이름과 비밀번호로 DB에 연결할 수 있게 하거나 일부 사용자에게 IAM 인증을 부여할 수 있다. 네트워크 보안을 위해 Amazon RDS DB에 보안 그룹을 설정할 ..

Cloud/AWS

RDS, Aurora, ElasticCache

RDS Relational Database Service, AWS가 제공하는 관리형 서비스다. (프로비저닝과 OS가 자동화) 다음과 같은 데이터베이스 엔진을 제공한다. Postgresql Mysql MariaDB Oracle Microsoft SQL Server Aurora 지속적으로 백업이 되므로, 특정 시점으로 복원이 가능하다. 데이터베이스의 성능을 대시 보드에서 모니터링 가능하다. 읽기 전용 복사본을 생성해 읽기 성능을 올릴 수도 있다. 재해 복구 목적으로 다중 AZ 설정 가능하다. 유지 관리 기간에 업그레이드도 가능하다. 수직 확장하거나 읽기 전용을 추가해 수평 확장도 가능하다. 파일 스토리지는 EBS에 구성된다. (gp2, io1) RDS 인스턴스는 ssh 액세스가 불가능하다. EC2 인스턴스에..

프로젝트

동시성 문제 해결하기

현재 프로젝트의 재고 도메인 코드에 문제가 있다는 것을 알아차렸다. 문제는 여러 명의 사용자가 동시에 재고 감소 로직을 실행한다면 동시성 이슈가 발생하는 것이다. 마침 동시성 관련 강의를 인프런에서 발견했고 이를 적용해보았다. 프로젝트 테이블 이해 재고 모델과 옵션 모델은 N:M 관계이다. 따라서 중간 테이블이 존재한다. 중간 테이블의 옵션 id 외래키를 in 절로 사용해 재고 엔티티를 찾는다. 테스트할 데이터는 사전에 DB에 미리 넣어놓았다. (id가 9L인 재고 테이블 Row) 먼저 문제 상황을 테스트 코드로 작성해보았다. @Test void 재고_감소() throws InterruptedException { //given int threadCount = 100; ExecutorService exec..

Debin
'redis' 태그의 글 목록