마이크로 서비스 아키텍처에서 가장 어려운 해결 과제인 트랜잭션 처리에 대해서 학습한 것을 공유하는 글입니다. AS-IS 기존 모놀리식 아키텍처에서 트랜잭션이란, 하나의 DB를 사용하기 때문에 구현하는 것은 어렵지 않았습니다. 하나의 서비스를 기능 위한 여러 쿼리들의 발생을 하나의 논리적인 단위로 묶는 것을 트랜잭션이라고 하는데요. 그렇기 때문에...
카프카의 컨트롤러로 주키퍼를 사용하고 멀티 브로커로 카프카를 실행하던 중, Kraft 모드에 대해 알게된 점을 공유하는 글입니다. 카프카 클러스터를 구성할 때에는 클러스터 환경 관리를 위한 코디네이터 애플리케이션이 필요합니다. 그래서 보통 아파치 주키퍼가 많이 사용되고 있습니다. 다만 주키퍼를 통한 카프카 외부에서 메타데이터 관리를 하다보니 ...
AS-IS OPEN AI 서비스를 사용하는 이력서 검토 서비스는 외부 API에 의존하고 있었습니다. 때문에 요청부터 응답까지 적게는 30초부터, 길게는 1분 30초 정도까지 소요되는 사용성을 저하시키는 이슈가 있었습니다. 위 폼에서 제출을 누르면, 사용자는 하염없이 기다리게됩니다. 실수로 새로고침을 누르거나 다른 페이지로 이동할 경우 폼이 ...
프로젝트 진행 중, 생성 AI 서비스의 응답 결과를 저장하기 위한 도메인을 헥사고날 아키텍처로 구성하는 경험을 공유하고자합니다. 기존의 레이어 패턴을 사용할 경우 Controller -> Service -> Repository 순으로 의존성을 가지게 됩니다. 즉, 의존성이 아래로 흐르기 떄문에 도메인 계층에서 필요로 하는 의존성이 영...
프로젝트에 비동기 처리를 위해 큐를 사용해야 할 일이 생겼습니다. 그래서 개인적으로 사용해보고 싶었던 카프카를 스프링에서 사용하는 예제를 공유하는 글입니다. 카프카에 대한 설명은 하지 않습니다. 준비 사항 우선 의존성을 추가해줍니다. implementation 'org.springframework.kafka:spring-kafka:3.0.8...
쿠버네티스 오브젝트 Deployment에 대한 배포 전략과 설정에 대해 학습한 것을 공유하는 글입니다. ReplicaSet을 이용한 배포 전략 ReplicaSet을 사용하면 Pod을 하나씩 apply 하지 않아도 설정해둔 템플릿의 이미지를 통해 Pod을 배포 및 관리를 시킬 수 있다. 설정해둔 Replicas의 수 만큼 관리하기 때문에 하나가...
기존 굿잡 프로젝트에서는 단일 DB로 데이터를 저장하고 조회하는 방식을 처리했습니다. 해당 DB 구조는 일반적으로 간단한 프로젝트에서 자주 사용하는 구조입니다. 하지만 이러한 구조는 다음과 같은 문제가 있습니다. 하나의 DB로 쓰기와 조회를 동시에 처리하게 됩니다. DB 장애시 DB를 사용하는 모든 기능 동작이 멈추게 됩니다. 하나의...
자바에서 문자열 객체를 생성할 때 큰 따옴표로 생성하지만, new 연산자로도 생성할 수 있다. 일단 두 테스트를 비교해보자. @Test void StringTest1() { String value1 = "aaa"; String value2 = "aaa"; assertThat(value1).isSameAs(value2); } @Test...
팀 프로젝트를 진행하면서 CPU와 JVM, 로그 모니터링은 구성했지만, 비즈니스 로직에 대한 모니터링이 더 효과적으로 이루어져야 한다고 생각했습니다. 따라서, 비즈니스 로직의 요청부터 응답까지의 시간과 요청 횟수 등을 모니터링하기 위해 커스텀 메트릭을 추가하기로 결정했습니다. AS-IS 저는 기존 템플릿 사용보다, 애플리케이션 관리에 필수적인...
팀 프로젝트 진행중 효율적으로 작업을 하기 위해 AWS CloudWatch를 Spring Boot 프로젝트에 적용한 경험을 공유합니다. AS-IS: 셀프 체크 로깅 팀 프로젝트를 진행 중, 팀장으로써 팀원들이 개발을 할 때 편하게 했으면 좋겠다는 생각이 들어 개발 서버에 대해 CI/CD 구축을 하게 되었습니다. 그러나 문제는 이제 시작이였는데...
A new version of content is available.