무중단 배포란? 단순히 CI / CD만 적용하면 배포단계에서는 애플리케이션이 종료된다는 문제가 있다. 만약 실제 서비스에서 사용자들이 서비스를 이용하는 도중에 갑자기 서비스가 중단된다면 좋지 않은 사용자 경험을 줄 것이다. 이 문제를 해결 해주는 것이 바로 "무중단 배포"이다. 무중단 배포는 말 그대로 서버를 중단 없이 배포하는 것이다. 무중단 배포에 대한 더 자세한 내용은 아래 포스팅에서 설명한다. 무중단 배포란? 무중단 배포 전략에 대해 알아보자. 무중단 배포란? 무중단 배포를 사용하지 않을 경우 실제 서비스를 서버 한대만을 사용해 운영한다고 가정해보자. 현재 서비스 중인 서비스는 application-V1을 배포한 서비스이다. 그런데 기능이 업 hstory0208.tistory.com 무중단 배포를..
프로젝트의 서버로 EC2를 사용하면서 기존에서 로컬에서 사용하던 redis를 AWS의 ElastiCache를 사용하는 방법으로 변경했다. 그런데 호스트의 주소를 잘못 적었는지 계속 위와 같은 연결 문제가 있었다. ElastiCache Redis를 생성하면 다음과 같이 마스터 노드와 내구성을 위해 읽기 전용인 노드가 2개가 기본으로 생긴다. 처음에는 읽기전용인 마스터 노드의 엔드포인트를 호스트로 작성해줘야하는 줄 알고 "리더 엔트포인트"를 호스트로 작성했다가 연결오류가 발생했다. 이렇게 지정하니 Read Only ~ 에러가 발생하면서 읽기 전용 노드에 접근하려고 하고 있었다. 그래서 이번에는 노드 중 primary를 지정해서 호스트 엔드포인트를 작성했다. 이제는 ReadOnly는 발생하지 않지만 Redis..
무중단 배포를 하는 도중에 jar 파일이 실행되지 않아서 계속 heath 체크가 실패하는 문제가 발생했다. 원인을 찾고자 해당 jar 실행 로그가 들어있는 파일을 열어 봤더니 아래 로그만 덩그러니 있었다. no main manifest attribute, in /home/ec2-user/app/deploy/mall-1.0.1-SNAPSHOT-20230927114334-plain.jar 이 에러는 jar파일에서 애플리케이션이 실행되는 @SpringBootApplication이 붙은 메인 클래스를 찾지 못했다는 뜻이다. java -jar로 jar파일을 실행 시키면 JVM이 jar파일의 메인 클래스를 호출하는데 이를 찾지 못해서 발생하는 문제이다. Spring boot 2.5.0 버전 이상 부터는 gradle..
아래와 같이 모든페이지에는 Layout으로 적용한 Header 부분이 공통적으로 들어간다. 그렇기 때문에 모든 페이지에서 해당 알림 데이터 리스트들이 필요하다. 하지만 현재 해당 헤더가 적용된 view를 반환하는 컨트롤러 코드들은 로그인과 회원가입 페이지들을 제외하면 총 9개가 있다. 이 많은 컨트롤러마다 일일히 패키지를 열어서 알림 테이블에서 회원별 알림 내역을 조회한 데이터들을 model에 담아 일일이 View에 뿌려줘야할까? 공통으로 사용되는 부분을 단순 반복 작업을 통해 추가하는건 너무 개발자스럽지 않다. 이 공통으로 사용되는 로직을 스프링 AOP를 적용해 해당 Contoller들의 Model에 알림 데이터들을 추가 해보자. AOP 적용 우선 먼저 build.gradle에 해당 의존성을 추가해주어..
Kafka 선택 이유 알림 전송에 Kafka를 도입한 이유는 다음과 같다. 필자의 과일샵 쇼핑몰 프로젝트는 아래 처럼 회원 서버와 어드민 서버로 나뉘어져 있다. 두 서버가 DB는 공유하고 있지만 ,어드민 서버에서 발생한 이벤트를 실시간으로 회원 서버로 전달할 수가 없었다. 바로 이 문제를 해결하기 위해 Kafka를 도입하게 되었다. Kafka외에도 RabbitMQ나 Redis를 고려 해 볼 수도 있었지만, 분산 시스템이 적용되어 있는 큰 기업들에서 사용하고 있어 경험해보기 위해 Kafka를 선택하게 되었다. [Kafka] 카프카란 ? 주요개념 정리 및 Pub/Sub 모델 비교 카프카(kafka) 란? Kafka는 대규모 실시간 데이터 스트리밍을 처리하는 데 사용되는 분산 이벤트 스트리밍 플랫폼이다. 먼저..
카프카(kafka) 란?Kafka는 대규모 실시간 데이터 스트리밍을 처리하는 데 사용되는 분산 이벤트 스트리밍 플랫폼이다. 먼저 "분산 이벤트 스트리밍"이라는 용어에 대해 알아보자분산 이벤트이라는 말은 여러 대의 서버(노드)에 분산되어 저장된 이벤트(데이터) 를 말한다.이벤트 스트리밍은 대량의 이벤트(데이터)를 실시간으로 처리하는 방식을 의미한다. 즉, 이 두 내용을 연결 시키면 분산 되어 있는 이벤트(데이터)들을 실시간으로 처리하는 플랫폼이라는 뜻이 된다.위 그림의 왼쪽은 링크드인에서 개발한 카프카가 등장하기전의 아키텍처 모습니다.각 데이터 저장소들이 도착지점까지 모든 시스템을 거치는 End - To - End 연결로 매우 복잡한 것을 볼 수 있다.하지만 카프카가 적용된 오른쪽 그림을 보면 모든 이벤트..