서론 메시지 큐를 사용하는 용도는 다양하다. 외부 서비스에 특정 정보나 상태 변경을 알리기 위해 비동기적으로 알림을 보내야 할 때 또는 MSA에서 각각의 서비스 정보 교환이 이뤄질 때 각 서비스의 의존성을 낮추는 느슨한 결합을 구현하기 위해 종종 사용한다. 수많은 Kafka, RabbitMQ 등 많은 메시지 큐 서비스가 있지만, 여기선 AWS의 SQS를 사용하여 비동기 메시징을 구현했다. SQS 역시 메시지 큐의 일종으로 어플리케이션 코드를 통해 해당 큐에 메세지를 보내거나 메세지를 받아올 수 있다. 아래 본문에서는 SQS를 Spring으로 사용하는 법을 설명한다. AWS 콘솔에서 SQS 사용 준비하기 IAM 액세스키 발급 IAM을 통해 SQS를 사용할 사용자 계정을 생성하고 해당 계정의 보안 자격 증명..
Spring interceptor란 spring의 controller는 각 사용자가 해당 url 경로로 접속 했을 때 각 경로에 맞는 서비스 로직을 매칭해주는 첫번째 관문이다. @RestController @RequestMapping("/customer/{foodKind}/store") public class StoreController { private final MemberService memberService; private final StoreService storeService; public StoreController(MemberService memberService, StoreService storeService) { this.memberService = memberService; this...
서론 배달 어플리케이션 제작 중에 소비자의 위치 근처에 있는 음식점만 보여줘야 하는 기능이 필요했다. 이를 구현하기 위해 특정한 알고리즘을 Service layer에서 구현할 수도 있었으나, 개발 소요 시간을 줄이기 위해 MongoDB에서 제공하는 Geo-Spatial query를 활용하기로 했다. Geo-Spatial query는 특정 위치 조건에 해당하는 데이터만 가져오도록 해주는 MongoDB에서 제공하는 기능이다. Geo-spatial query에는 현재 크게 네 가지의 쿼리가 제공되고 있다. $geoIntersects 주어진 geometry 공간과 교차하는 geometry 영역의 데이터를 반환해주는 쿼리. $geometry 쿼리를 함께 써줘야 한다. 조금이라도 교차하는 polygon이 있다면 모..
서론 프로젝트 기능과 관련하여 클라이언트가 입력한 주소에서 위도 및 경도 좌표를 추출해야할 일이 생겼다. 주소에서 위도 및 경도를 꺼내기 위해서는 직접 주소에 위도 및 경도 정보를 매칭한 데이터를 소장하고 있거나, 배포된 API를 활용하여 주소 정보를 보내고 위도 및 경도 정보를 받는 방법이 있다. 개인 프로젝트에서는 API를 활용하여 주소에 대응하는 좌표값을 받는 것이 현실적인 방안일 것이다. 주소를 좌표로 변환하기 위한 API 종류 주소를 좌표로 변환하기 위해 활용할 수 있는 API는 아래와 같은 옵션이 존재한다. 1. 오픈 API - GeoCoder API 2.0 https://www.vworld.kr/dev/v4dv_geocoderguide2_s001.do 국토교통부에서 제공하는 공식 오픈API이..
서론 프로젝트에서 DynamoDB에 연결하여 데이터 저장할 일이 있었다. DynamoDB CRUD의 Example을 검색했으나, DynamoDBMapper를 사용하여 데이터를 기록하거나, Spring Data dynamoDB를 사용하더라도 local DynamoDB에 연결하여 local에 기록하는 예시들이 대부분이었다. 즉, AWS 서버 DynamoDB에 Spring-data-dynamoDB를 통해 데이터를 기록하는 예시는 찾아보기 어려웠다. 글쓴이는 장시간의 검색과 삽질 끝에 AWS 서버의 DynamoDB에 연결하여 Spring-data-dynamoDB에 데이터 쓰기를 성공했다. 막상 성공하고 보니 코드도 간단하고 정말 별거 아닌데, 작성되어있는 예시가 없다보니 한참을 헤맸던 것이다. 본 글은 이 글을..
서론 지난 글에서 API gateway에 권한 부여한 후 Cognito 인증하여 백엔드 리소스인 Lambda에 접근하는 것을 실습해봤다. 하지만 실제 어플리케이션이 사용자를 인식하여 동적으로 정보를 보여주기 위해서는 이것만으로는 충분하지 않을 것이다. 유저 맞춤형으로 정보를 제공해주기 위해서는 각 API 요청에서 헤더에 담겨있는 유저 정보를 꺼낼 수 있어야 한다. 이번 글에서는 Cognito로 생성한 JWT를 API gateway 뒤에 있는 백엔드 리소스 단에서 추출하여 사용자 정보를 인식하고 사용자 맞춤형 정보를 제공하는 실습을 진행한다. 시스템 구조 및 가정 현재 프로젝트의 시스템의 구조는 아래 그림과 같다. 본 글에서는 이와 같은 연결 설정이 모두 완료되었다고 가정하고 글을 진행할 것이다. 만약 그..