역직렬화하는 과정에서 ClassCastException이 뜬 것을 경험했다면, 잘 찾아오셨다. 각 데이터 타입별로 역직렬화하는 방법을 간략하게 소개하고자 한다. 서론 - Json을 역직렬화할 때 겪는 문제 MSA에서 각 서비스간 비동기 메세지를 주고 받을 때 Json 형식으로 데이터를 주로 보내게 된다. Json으로 보낼 때는 Java 객체의 정보를 직렬화(serialization)하여 보내고, Json으로 받으면 다시 역직렬화(deserialization)하여 java 객체로 돌려놓게 된다. java에서는 아래 dependency를 사용하면 json을 java로 쉽게 매핑 할 수 있다. implementation 'org.json:json:20230227' 해당 dependency는 JSONObject..
서론 메시지 큐를 사용하는 용도는 다양하다. 외부 서비스에 특정 정보나 상태 변경을 알리기 위해 비동기적으로 알림을 보내야 할 때 또는 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...
서론 프로그래머스 - 시소 짝꿍 https://school.programmers.co.kr/learn/courses/30/lessons/152996 유사한 문제가 자주 나옴에도 불구하고 비슷한 실수를 반복하는 것 같아 기록하고자 글을 작성한다. 해당 문제에서 주어진 제한사항은 배열의 길이가 100,000으로 상당히 탐색에 시간이 많이 소요될 것이다. 이런 경우 완전 탐색으로는 시간 초과가 발생하므로, 이진 탐색, dfs 등 여러 옵션을 생각할 수 있다. 하지만 이렇게 단순 값을 비교하는 문제는 해시부터 시도해보는 것이 좋다. 문제 풀이 1차 시도 - combinations 사용 결과: 시간 초과 from itertools import combinations def solution(weights): ans..
서론 프로그래머스 - 2020 카카오 인턴십 보석쇼핑 https://school.programmers.co.kr/learn/courses/30/lessons/67258 해당 문제를 풀었을 때, set를 사용하여 시간을 단축시키려 했으나 효율성 테스트에서 실패했다. 많은 글들을 찾아봤으나 '해당 문제는 배열의 길이가 최대 100,000이므로 탐색 횟수를 줄여야 한다, 그러므로 투포인터를 사용해야 한다'는 설명만 있고, 어떤 방식을 사용해야 탐색 횟수를 가장 많이 줄일 수 있는지에 대한 설명은 없었다. 본 글쓴이는 탐색 시간을 줄이기 위해 투포인터와 set()를 사용했고, 이를 통해 탐색 시간을 어느정도 줄일 수 있었지만, 그것이 Best solution은 아니었던 것 같다. set를 사용해서도 시간을 줄일..
서론 배달 어플리케이션 제작 중에 소비자의 위치 근처에 있는 음식점만 보여줘야 하는 기능이 필요했다. 이를 구현하기 위해 특정한 알고리즘을 Service layer에서 구현할 수도 있었으나, 개발 소요 시간을 줄이기 위해 MongoDB에서 제공하는 Geo-Spatial query를 활용하기로 했다. Geo-Spatial query는 특정 위치 조건에 해당하는 데이터만 가져오도록 해주는 MongoDB에서 제공하는 기능이다. Geo-spatial query에는 현재 크게 네 가지의 쿼리가 제공되고 있다. $geoIntersects 주어진 geometry 공간과 교차하는 geometry 영역의 데이터를 반환해주는 쿼리. $geometry 쿼리를 함께 써줘야 한다. 조금이라도 교차하는 polygon이 있다면 모..