gRPC 통신 구현해보기 (서버 : Java / 클라이언트 : Go)
·
gRPC
환경 구성gRPC의 원리를 이해하고 실습하기 위해 아래와 같은 방식으로 진행하였습니다. gRPC 클라이언트에 해당하는 Go 언어 기반의 클라이언트의 경우,특별한 웹 프레임워크(ex. Gin)을 사용하지 않고 순수하게 Go 언어의 기본 라이브러리와 gRPC 패키지를 사용해 코드를 작성하였습니다.Go 언어를 사용한 이유는 기본적으로 다양한 프로그래밍 언어를 지원하기 때문에 Java로만 gRPC 서버와 클라이언트를 구성하기 보다는 다른 언어로도 통신 과정을 구현해보고 싶었습니다. (사실은 Go 언어와 친해지고 싶었음)  그리고 Java 기반의 gRPC 서버는 Spring Boot와 함께 환경을 구축하였습니다.예제로 보고있는 교재처럼 별도의 프레임워크 없이 순수 Gradle Project로 gRPC 서버를 구성..
RPC 통신과 gRPC
·
gRPC
gRPC 시작에서 운영까지 | 카순 인드라시리 - 교보문고gRPC 시작에서 운영까지 | 클라우드 및 마이크로서비스 아키텍처의 출현으로 오늘날 애플리케이션은 프로세스간 통신 기술을 사용해 연결되며, gRPC는 가장 널리 사용되는 효율적인 통신 기술 중product.kyobobook.co.kr위 책의 내용과 별도로 공부한 내용들을 정리하고자 작성한 글입니다.  IPC프로세스들은 기본적으로 상호독립적이다.메모리를 공유하지 않기 때문에 각자 자신의 일만 수행하며 서로 간섭을 하지 않는다.그러나 필요에 따라서 프로세스 간 정보를 교환해야 하는데,별도의 수단을 통해서 프로세스 간 통신을 하는 방법론을 통칭하여 IPC(Inter Process Communication)라고 한다.   RPC위와 같은 프로세스 간 통신..
Redis 캐싱을 사용하여, 일일 조회수와 좋아요 증감 수를 반영한 일일 HOT 상품 목록 조회 기능 개발
·
SpringBoot
해당 기능을 개발한 이유 위와 같이 몇몇 증권사들은 각 금융상품에 대해서 청약 경쟁률을 보여주나, 대부분은 제공하고 있지 않고 있었습니다. 청약 경쟁률 조회 API를 증권사에서 제공해서 사용하면 좋겠지만, 사업자 등록증이나 별도의 승인이 필요하거나 API를 제공하지 않았습니다...ㅠㅠ 투자에 참고하기 이러한 좋은 기능을 저희 서비스에 녹여내고 싶었고, 실제 투자자분들의 의견을 수집하고, 타 서비스를 조사하면서 결과적으로 저희 서비스만의 기능으로 일일 HOT 상품 목록 조회 기능을 개발하고자 하였습니다.   일일 HOT 상품 판별 요소 선정과 비율 반영 그렇다면, 일일 HOT 상품들을 사용자에게 보여주기 위해서 어떤 요소들로 어떤 기준을 가지고 보여줘야 할지 고민이 되었습니다. 저희 서비스 테두리 안에서 ..
소프트웨어 마에스트로 15기 수료식
·
SW마에스트로
드디어 수료식!!!수료식은 발대식과 동일하게 양재에 위치한 엘타워에서 진행하였습니다! 장소에 도착해서 엘베에서 내리니깐 아래 사진처럼 이쁜 부스들이 반기고 있었는데,6개월동안 팀 프로젝트를 하면서, 외부 심사 위원님들에게 기획 심의 -> 중간 발표 -> 최종 발표를 받고 우수 프로젝트로 선정된 팀들의프로젝트를 구경할 수 있는 시간을 가질 수 있었습니다. 쭉 보면서 우리 팀도 저 자리에 있었으면 좋았을텐데라는 아쉬움이 없다고 하면 거짓말이겠지만... 정말 팀원들과 주말 빼고 거의 매일 센터에 상주해서 개발하고 회의하면서목표로 했던 기술적인 성장뿐만 아니라 프로젝트 전반적으로 전에는 해보지 못했던 많은 점들을배우고 경험할 수 있어서 후회는 없다고 생각합니다. 근데.. 인증자 분들은 미국 CES 2025 탐방..
비효율적인 상품 상세 검색 코드 수정과 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..