비효율적인 상품 상세 검색 코드 수정과 nGrinder를 활용한 성능 테스트
·
SpringBoot
문제소마 프로젝트를 진행하던 도중, 팀원으로부터 오류 제보를 받았습니다.저희 서비스에서 제공하고 있는 상품 상세 검색 기능에서 종목 유형에 대한 세부 검색 요청시,이에 해당하는 상품들을 받아오지 못하는 오류가 발생하는 문제였습니다.  잠시 저희 서비스에 대해서 간략하게 설명 드리자면,주요 여러 증권사에서 발행하고 있는 금융 파생 상품 중에 하나인 ELS(Equity Linked Securities, 주가연계증권) 상품을통합하고 데이터 분석 기법 및 AI를 활용한 중립적인 분석 정보를 제공하는 서비스입니다.  아래와 같이 각 상품마다 기초자산들이 존재하는데왼쪽 사진의 S&P500, KOSPI, HSCEI와 같은 주가 지수형인 경우와,오른쪽 사진과 같이 삼성전자, 현대차와 같은 단일 주식들로 이루어진 종목형..
Spring Boot와 Kafka 테스트: Embedded Kafka로 상품 좋아요 메시지 검증하기
·
SpringBoot
들어가며레디스에 캐싱되어 있는 각각의 상품에 대해서 사용자가 좋아요를 누른 정보들을상품 서비스에서 주기적으로 DB에 dump하는 과정에서 추가적으로 유저 서비스의 DB에 저장할 수 있도록 하기 위해 중간에 카프카를 두고 비동기적으로 통신했는데, 이번에는 상품 서비스쪽에 작성한 카프카 프로듀서 관련 코드에 대해서 테스트 코드를 작성해본 내용을 기록하고자 글을 작성해보았습니다.    어떻게 카프카 테스트 코드를 작성해야 할까?처음으로 카프카 관련 테스트 코드를 작성하다보니 아래 기존의 레디스 관련 테스트 코드를 작성할 때와 같이,레디스 컨테이너를 생성하고, 매 테스트 전에 레디스 데이터를 초기화하여 테스트가 레디스에 의존하는 기능을 검증할 수 있도록하는 Testcontainer 방식으로 수행해야 하는지에 대..
Nginx Reverse Proxy로 Private Subnet의 Grafana에 연결 중 발생한 오류와 해결
·
Nginx
문제Private Subnet에 위치한 인스턴스에AWS MSK에서 제공하는 JMX Exporter와 Node Exporter로 수집한 지표들을프로메테우스에 적재하고, 그라파나를 활용하여 시각화 하도록 구성한 상태입니다. 퍼블릭 IP로 클라이언트가 접근하면 Public Subnet에 존재하는 Nginx의 reverse proxy를 통해서 Private Subnet에 위치한 그라파나에 대한 내용을 클라이언트에 응답하도록 아래와 같이 구성하였습니다. server { listen 80; server_tokens off; # Grafana location / { proxy_pass http://10.x.x.x:3000/; # Grafana의 IP 및 포트 proxy..
[AWS] MSK 클러스터에 프로메테우스와 그라파나를 활용한 모니터링 연동하기
·
AWS
들어가며AWS MSK에서 제공하는 기본적인 모니터링 지표 외에는 추가적인 과금을 통해서 여러 모니터링을 할 수 있습니다.그러나 생각보다 비용이 쌔다고 판단하여....MSK에서 별도로 프로메테우스 플랫폼과 연동할 수 있는 JMX Exporter, Node Exporter를 제공하므로해당 정보를 통해 카프카 브로커의 모니터링 지표와 브로커 인스턴스 지표(CPU, 메모리, 네트워크)를 수집하여그라파나를 사용하여 대시보드를 구성한 모니터링 환경을 구축하고자 합니다. 현재 내용과 관련해서 추상적인 아키텍처를 아래와 같이 만들어보았습니다. 해당 페이지에서는 기록용으로 프로메테우스와 그라파나 관련 설치 및 연동에 관련한 글만 작성하였으며,위와 같은 구성을 진행하면서 발생했던 문제들은 아래 게시글에 작성하였습니다.N..
[AWS] MSK로 Apache Kafka 환경 구축하기
·
AWS
들어가며완전관리형 아파치 카프카 서비스를 제공하는 Amazon MSK(Managed Streaming for Apache Kafka)를현재 소프트웨어 마에스트로 활동을 하면서 진행하고 있는 팀 프로젝트의 운영 서버에 적용하는 과정과학습한 내용을 기록하고자 작성하였습니다. 아래 교재를 통해 학습하며 환경을 구축해보았습니다. 아파치 카프카 애플리케이션 프로그래밍 with 자바 | 최원영 - 교보문고아파치 카프카 애플리케이션 프로그래밍 with 자바 | 아파치 카프카 애플리케이션 개발을 위한 「실전 가이드」 아파치 카프카란 무엇일까? 카프카 애플리케이션은 어떻게 만들까? 데이터 파이product.kyobobook.co.kr    1단계: MSK 클러스터 생성하기AWS가 추천하는 '빠른 생성' 방식으로 클러스터..
[AWS] ElastiCache로 Redis 클러스터 모드 생성 및 적용해보기
·
AWS
AWS ElastiCacheAmazon Web Services(AWS)에서 제공하는 완전 관리형 인메모리 데이터베이스 서비스입니다. 고속 데이터 캐싱을 통해 애플리케이션의 성능을 향상시키고, Redis와 Memached 두 가지 엔진을 지원하고 있습니다.  적용하기 전에ElastiCache For Redis에서 클러스터를 구성할 때 아래와 같은 세가지 옵션이 존재합니다.싱글 클러스터 노드 (단일 노드)클러스터 모드 없이 Replication만 지원 (클러스터 모드 비활성화)클러스터 모드와 Replication 모두 지원 (클러스터 모드 활성화)  위 사진에서 왼쪽이 클러스터 모드 비활성화된 옵션의 모습이고, 오른쪽이 클러스터 모드 활성화된 옵션의 모습입니다.클러스터 모드 비활성화(왼쪽)는 하나의 prim..
MacOS 로컬 환경에서 Docker Redis Cluster 설정 및 Springboot와 연동하기
·
Redis
Docker ComposeDocker Desktop for Mac을 사용하며(M3 MacOS)Docker 환경을 구성하려 하기 때문에 arm64v8/redis 이미지를 사용하였습니다. docker-compose.ymlversion: '3'services: redis-master-1: container_name: redis-master-1 image: arm64v8/redis:latest restart: always volumes: - ./redis-master-1.conf:/etc/redis-master-1.conf command: redis-server /etc/redis-master-1.conf ports: - "7001:7001" ..
[AWS] Lambda와 Private Subnet에 있는 RDS 연결하기
·
AWS
AWS Lambda에서 사용하고 있는 함수중에 Private Subnet에 있는 RDS에 접근해야 되는 일이 생겨서 수행했던 내용을 기록하고자 글을 작성했습니다.   Lambda 함수에 연결해줄 보안 그룹 생성 우선은 다음과 같이 RDS에 접근하고자 하는 람다 함수에 대한 보안 그룹을 생성해줍니다.VPC는 당연히 접근하고자 하는 RDS가 속해있는 VPC로 선택해줍니다.이후 위 사진처럼인바운드는 규칙없이, 아웃바운드는 Default로 설정되어있는 기존 규칙을 유지하며 보안그룹을 설정해줍니다.  Lambda 함수 설정정책 추가 람다에서 연결하고자 하는 함수의 페이지로 진입하여구성 > 권한을 클릭해서 권한을 수정해줘야합니다.  정책 연결을 누르거나 인라인 정책을 통해서 원하는 부분만 직접 설정할 수 있는데,저..
MSA) 서비스 별 각 인스턴스에서 애플리케이션을 Docker 컨테이너화 후, 발생한 Eureka Client 간의 통신 문제
·
SpringBoot
개발 서버를 구축하기 위해, 현재 위와 같이MSA의 Eureka 서버를 제외하고, 각 서비스들을 각각의 인스턴스에 Blue/Green 무중단 배포를 적용하여 도커로 컨테이너화 한 상태였습니다. API Gateway 서버와 Batch Service 서버 모두CD가 동작하면 각 서버에 작성한 쉘 스크립트가 실행되어 Blue/Green 무중단 배포를 적용하는 방식입니다.  위와 같이 Blue/Green을 적용을 확인하기 위해 각 마이크로 서비스에 헬스 체크 컨트롤러를 만들어 둔 상태였습니다.   문제각 서비스에서 도커 컨테이너가 정상적으로 올라간 것을 확인한 후,API Gateway 서버에서 Batch Service의 API를 잘 라우팅 해주는지 확인하기 위해아래와 같이 리눅스 상에서 curl 명령을 통해 헬..
[AWS] IAM 개념 및 IAM 사용자 추가하기 + IAM 정책 시뮬레이터
·
AWS
IAM(Identity and Access Management)유저를 관리하고 접근 레벨 및 권한에 대한 관리  AWS 계정을 최초로 생성할 때, 해당 계정은 모든 AWS 서비스 및 리소스에 대해 완전한 액세스 권한이 있는 루트 사용자입니다.이러한 루트 계정은 모든 권한을 가지고 있기 때문에 공유되어서 사용되면 안됩니다. 만약에 A라는 회사에서 보유하고 있는 루트 계정을B, C, D라는 직원이 입사하여 개발과 관리를 위해 권한이 필요하다고 루트 계정을 알려주게 되면보안상 심각한 문제가 됩니다. 거기다가 만약에 C라는 직원이 갑자기 퇴사하게 된다면...?!그러므로 루트 계정으로부터 특정 리소스에 대해서 관리하고 사용할 수 있는 권한을 부여해주는IAM 계정을 B, C, D 직원에 각각 부여하여 사용하는 것이..