1. 개요개발을 하다보면 어떤 데이터가 삭제되면 연관된 다양한 데이터들이 함께 삭제되야 하는 경우가 종종 발생한다. 예를 들면 게시글이 삭제되면 해당 게시글에 달린 좋아요, 댓글, 답변 등등 연관된 데이터도 함께 삭제되야 한다. 하지만, 함께 삭제되면 안 되는 경우도 있다. 예를 들어, 상품 거래 서비스에서 판매자의 정보를 삭제하면 판매자가 올린 상품에 대한 정보도 삭제될 것이다. 그러나, 구매자는 자신이 구매했던 상품의 정보나 영수증을 확인해야 할 필요가 있을 수 있다. 만약 판매자 정보와 함께 해당 상품 정보도 삭제된다면, 구매자는 자신의 구매 상품에 대한 정보를 확인할 수 없게 되어 불편을 겪을 수 있다. 따라서 이러한 경우에는 판매자 정보와 연관된 데이터라도, 특정 조건하에서 보존되거나 관리..
1. 개요현재 Spring Cloud를 이용해서 MSA 프로젝트를 진행 중이다. 기존의 모놀리식 아키텍처는 하나의 프로젝트에서 모든 코드를 관리하기 때문에, 작성한 API를 하나의 API 문서에서 확인할 수 있다. 하지만 MSA는 각각의 도메인에 따라 프로젝트가 존재하고, 각각의 도메인마다 API 문서가 생성되는 문제가 발생했다. 이 API 문서들을 사용하는 개발자들 입장에선 각각의 API 문서 주소를 알고 있어야 한다. 굉장히 불편하고 비효율적이다. MSA 환경에서 API 문서를 한 곳에 모아 관리하기 위해 방법을 찾아보았고 공유하고자 이 글을 작성한다. 2. 의존성 추가먼저 Swagger 사용을 위해 API Gateway에 의존성 추가를 해주자. 여기 에서 각 버전에 맞는 의존성..
1. 개요진행 중인 Jikgong 서비스에서 Nginx를 사용하여 Blue/Green 무중단 배포 전략을 사용하여 배포 시 다운 타임을 최소화 시켰다. 그 과정에서 작성한 deploy.sh 파일엔 다음과 같은 코드가 작성되어있다. # 기존에 실행 중이었던 docker-compose는 종료시켜줍니다.echo "jikgong-${TERMINATE_CONTAINER} down"sudo docker-compose -f docker-compose.${TERMINATE_CONTAINER}.yml down --rmi all 이 부분이 문제였다. 현재 사용 중인 Blue/Green 방식의 무중단 배포 프로세스를 간략하게 설명하면 1. 새로운 버전의 애플리케이션 구동2. 지속적인 헬스체크로 구동 완료 확인3. 구동 ..
프로젝트 개발하던 중 프론트에게 예외 처리 하는 게 힘들다는 연락을 받았다. 지금까지 백엔드 개발을 하며 예외 처리는 아래와 같이 처리했다. - AppException@Getterpublic class JikgongException extends RuntimeException { private final HttpStatus status; private final String errorCode; private final String errorMessage; // ErrorCode 생성자 public JikgongException(ErrorCode errorCode) { super(errorCode.getErrorMessage()); this.stat..
StatefulSetStateless Application: Web Server가 여기 해당된다. (APACHE HTTP Server, Nginx, IIS app이 여러개 배포되더라도 모두 동일한 기능을 수행 그래서 app이 죽으면 단순히 동일한 app을 하나 더 만들면 된다. 반드시 볼륨이 필요하진 않음. 만약 app의 로그를 영구적으로 저장하고 싶은 경우 각각의 볼륨이 아닌 단일 볼륨으로 충분한 경우가 많음. 들어오는 트래픽을 여러 앱에 동일하게 분산시켜야 함. (네트워크의 연결은 단순 분산 용도) 즉, 쿠버네티스의 ReplicaSet에 해당함 Stateful Application:Database 등이 여기 해당된다. (mongoDB, MariaDB, redis app이 여러개 배포되더라도 각각의..
프로비저닝(provisioning)이란?쿠버네티스에서 프로비저닝은 일반적으로 저장소와 관련하여 특정 애플리케이션이나 서비스의 요구 사항을 충족시키기 위해 필요한 저장소 자원을 할당하고 구성하는 과정을 의미한다. 쿠버네티스엔 2가지 유형의 프로비저닝이 있다. 1. 정적 프로비저닝정적 프로비저닝에서는 클러스터 관리자가 수동으로 Persistent Volume(PV)을 생성하며, 해당 PV의 용량, 액세스 모드 및 저장소 유형과 같은 하위 저장소의 세부 정보를 지정한다. 이러한 PV는 사용자가 생성하는 Persistent Volume Claim(PVC)에서 요청될 수 있다. 사용자가 PVC를 생성하면 쿠버네티스는 해당 PVC의 요구 사항과 일치하는 사용 가능한 PV에 바인딩한다. 2. 동적 프로비저닝..