[댕댕어디가] MSA 아키텍처 전환기(3) - API Gateway 구현
·
댕댕어디가 프로젝트/MSA
1. API Gateway란 ?마이크로서비스 아키텍처에서 클라이언트와 백엔드 서비스 간의 중간 계층 역할을 하는 서버입니다. API Gateway는 클라이언트 요청을 받아 여러 마이크로서비스로 라우팅하고, 요청에 대한 인증, 로깅, 트래픽 관리 등의 작업을 수행합니다. 2. API Gateway 라이브러리API Gateway 를 구현할 수 있는 라이브러리에는 Netflix Zuul과 Spring Cloud Gateway가 있습니다. 아래와 같이 두 라이브러리의 각 장단점이 있습니다. 특징Netflix ZuulSpring Cloud Gateway프로세싱 모델블로킹 방식비동기 및 논블로킹 방식성능고부하 환경에서 병목 가능성 있음고성능 및 확장성 제공설치 및 설정복잡할 수 있음간단하고 직관적지원 상태유지보수 ..
[댕댕어디가] MSA 아키텍처 전환기(2) - Service Discovery 패턴/ 서비스 분리
·
댕댕어디가 프로젝트/MSA
| 해당 글은, 문제 해결 경험을 기록하는 글이기 때문에, 개념 및 원리에 대해 구체적으로 설명하지 않습니다. 1. Service Discovery 패턴이란?MSA 서비스간 통신시, 각각 IP와 Port가 달라 매번 수동으로 관리해줘야 하는 불편함이 있으며, 이를 위해 각 서비스의 IP와 Port에 대해 저장하고 관리하는 것을 말합니다. 서비스의 IP와 Port는 Service Registry에 저장 및 관리됩니다. 2. 구현 방법구현 방법에는 아래 두가지 방법이 있습니다.  1) Client-Side Discovery Pattern서비스 클라이언트가 Service Registry에서 서비스의 위치를 찾아서 호출하는 방식 2) Server-Side Discovery Pattern호출되는 서비스 앞에 로드..
[댕댕어디가] MSA 아키텍처 전환기(1) - MSA 전환 이유
·
댕댕어디가 프로젝트/MSA
이번에 댕댕어디가 서비스를 MSA 아키텍처로 전환해보고자 합니다. 1. 댕댕어디가 서비스란 ?반려동물 동반 가능 장소 추천 서비스로, 반려동물 동반 가능한 장소를 검색할 수 있고 맞춤 추천 및 땅따먹기 기능을 통해 반려동물과의 새로운 재미를 즐길 수 있는 서비스입니다. LG 유플러스 부트캠프 과정에서 최종 프로젝트로 진행하게 되었고, 저는 팀장 및 백엔드 개발을 담당하게 되었습니다. 2. 기존의 아키텍처기존의 아키텍처는 모놀리식으로 구성되어있고, 별도로 알림 서버가 구성되어 있습니다. 알림서버만 따로 분리한 이유는 알림 생성에만 집중하고 FCM과 같은 외부 API로 인한 장애가 주요 기능에 미치지 못하게하기 위함입니다. 3. MSA 아키텍처로 전환하는 이유프로젝트를 진행하며 MSA 아키텍처의 필요성을 느..
MongoDB Replica Set 구성
·
개발일지
Replica Set 이란?MongoDB는 Replica Set을 생성함으로써 복제를 설정할 수 있다.데이터의 동일한 복사본을 여러 서버상에 보관하여, 안정적인 서버를 구성한다. 예를 들어 만약 서버가 고장이나서 이용 불가능한 상태일 때, 다른 복제본을 이용해서 정상적인 운영이 가능하다. Replica Set 구성 복제 셋은 프라이머리 서버와 , 프라이머리 데이터의 복사본을 갖는 세컨더리 서버 여러대로 이루어진다.프라이머리 서버는 클라이언트의 모든 작업 요청을 대표로 수행한다. 세컨더리 서버는 프라이머리에서 처리된 데이터를 복제하여 일관성을 유지한다. 프라이머리 서버에 장애가 발생하면, 세컨더리 서버는 자신들 중에 새로운 프라이머리 서버를 선출한다.그외, 데이터는 가지지 않고 선출에만 영향을 미치는 아비..
전체 사용자 포인트 조회 쿼리 개선하기
·
당장 프로젝트
읽기 전이 글은 문제를 처음 해결해본 내용이라 부족한 점이 많습니다. 예전의 제가 이렇게 문제를 해결하려 했구나 정도로 봐주시고, 마지막에 개선이 필요한 부분을 정리해 두었으니 참고하며 읽어주시면 좋겠습니다.조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 유저 포인트 관리를 위해, 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무 느려 개선해보려고 한다. ERD아래 ERD에서 User 테이블과 PointHistory 테이블을 확인해 보자User 테이블에는 사용자 정보가 저장되어 있고, PointHsitory에는 포인트 적립 및 사용 내역이 기록되고 있다. 예를 들어, oauth_id가 1인 유저가 혈당을 기록하여 200 포인트를 적립 받았다면, PointHistory 테이블에는oauth_i..
연속 요청으로 인한 데드락 문제 해결하기
·
당장 프로젝트
문제 발견현재 ‘당장’ 서비스를 운영하고 있는 중인데, 가끔 point_history 테이블에 대해 데드락 문제나 중복키 문제가 발생했다. 데드락 발생 로그ERROR - Deadlock found when trying to get lock; try restarting transaction ... (생략) 중복키 발생 로그ERROR - Duplicate entry '더블PKID' for key 'point_history.PRIMARY' ... (생략)문제 원인로그를 통해 point_history 테이블에 insert할 때 위의 두 문제가 발생함을 확인할 수 있었다.  발생원인로그를 통해서 동시에 동일한 접속 요청이(같은 유저, 시간,분,초까지 동일한) 2번 있는 것을 확인했다. 말로만 듣던 따닥 (연속) ..
팩토리 패턴
·
CS/디자인패턴
팩토리 패턴 팩토리 패턴 팩토리 패턴 정의객체 생성 부분을 떼어내 추상화한 패턴, 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.  팩토리 패턴이 필요한 이유 문제점피자를 생성하는 메서드를 아래와 같이 구현한다면, 피자의 종류가 늘어나거나 줄어들었을 때마다 코드가 변경될 것이다.public class PizzaStore { public Pizza orderPizza(String type){ Pizza pizza = null; // 피자 종류가 바뀔때마다 바뀌는 부분 ========= if(type.equals("cheese")){ pizza = new Cheese..
싱글턴 패턴
·
CS/디자인패턴
디자인패턴 디자인패턴프그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것을 의미한다.   디자인 패턴을 사용해야 하는 이유 ?효율적인 의사소통이 가능하다. 소통과정에서 오해의 소지를 줄이고, 패턴으로 패턴에 담겨 있는 모든 내용,특성,제약조건 등을 함께 이야기할 수 있다.  싱글턴패턴 싱글턴 패턴이란?클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역접근을 제공한다. 싱글턴 패턴 장점유일하다.레스트리 설정 객체를 싱글턴 패턴을 이용하면 한 애플리케이션에 들어있는 어떤 객체에서도 같은 자원을 활용할 수 있다.연결 풀이나 스레드 풀과 같은 자원 풀을 관리하는데 도움을 준다. 싱글턴 패턴이 유일함을 만족할 수 있는 이유 ?생성자가 p..