[디프만] 임베딩으로 검색 기능 구현하기
·
사이드 프로젝트
디프만 활동에서 "밥토리" 프로젝트에 진행한 내용입니다.디프만에서 혼밥 정보 서비스 "밥토리"에서 백엔드 개발자로 참여하였다. "밥토리" 서비스 기능 중 검색 기능을 임베딩 벡터를 통해 구현하였다.검색검색은 어려운 기능이다. 사이드 프로젝트에서 검색 기능은 때때로 피하기 어려운 기능이다. 사이드 프로젝트 단에서 검색 기능을 구현하기 어렵다고 생각하는 이유는 사용가능한 리소스가 적고, 빠른 시간안에 개발 할 수 있어야하기 때문이다. 디프만 활동 당시에도 검색에 대한 요구사항이 생겼다. 구체적으로는 식당 이름, 또는 메뉴에 대한 검색 기능을 제공할 수 있어야 했다. 더 나아가 여러 검색어가 호환될 수 있으면 더 좋다. 이에 따라검색 기능을 구현할 수 있는 방법을 모색해보았다.Like가장 빠른 시간에 개발할 ..
[Nginx] 배포 장애 해결하기(리버스 프록시)
·
인프라
문제 상황클라이언트에게 서버가 제대로 배포되지 않았다는 메세지를 받았다. 장애 시점은 재배포 직후이다.배포 서버는 실제로도 제대로 동작하고 있지 않았다.모니터링 지표를 확인했을때도 유의미한 내용을 확인할 수 없었다.2025/10/23 15:45:32 [error] 79#79: *1393 connect() failed (111: Connection refused) while connecting to upstream, client: "clientIP", server: "serverDomain", request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "hostIP", referrer: "http://hostIP/"원인빠르게 해결하기현재 AP..
[MySQL] 공간 질의(Polygon)
·
CS/데이터베이스
개인 공부 목적으로 작성된 글입니다. 왜곡된 내용이 포함되어 있습니다. 0. 개요API 개발중에 공간 질의에 대한 요구사항이 들어 왔다.위와 같이 특정 공간에 대해서 공간 포함 유무를 반환해야하는 로직을 구현해야했다.이렇게 지도 관련 API를 개발하다보면 백엔드 개발자는 공간 질의 또는 공간 인덱스 도입을 고려해보게된다.나 또한 동일한 고민을 겪으면서 MySQL 환경에서의 공간 질의에 대해 살펴보겠다.현재 API를 개발하는 서비스는 MySQL환경을 반드시 사용해야하기 때문에 공간 질의를 지원하는 대표적인 기술인 PostGIS를 고려하지 않는다.0.1 공간 질의를 사용해야하는 이유지도 관련 데이터 제공을 위해서 공간 질의를 무조건사용해야하는 것은 아니다. 데이터를 공간데이터로 사용하기 위해 데이터베이스에서..
[TDD] 직접 해보는 테스트 주도 개발
·
Java
개인 공부 목적으로 작성한 글입니다. 일부 내용이 생략되어 있습니다.테스트 주도 개발테스트 주도 개발(TDD)은 소프트웨어 개발 방법이다.TDD는 3가지 단계를 가진다.RED: 실패하는 테스트를 작성한다.GREEN: 테스트가 통과되도록 코드를 수정한다.BLUE: 중복되고, 불필요한 코드를 리펙토링한다. TDD는 좋은 개발 방법으로 알려져 있지만, 실제로 TDD를 진행하면서 이론과 별개로 실제로 적용하는 것은 다음과 같은 이유로어려운 일로 느껴 졌다.테스트를 작성하는 것이 어렵거나, 익숙하지 않음테스트에 대한 경계를 결정하기 어려움(어디까지 테스트 해야되지?)새로운 개발 방법에 대한 오버헤드그러던 와중에 갑작스럽게 TDD를 진행중인 프로젝트에 도입해보게 되었다. 도입하게된 이유가 내가 이전에 개발해왔던 방..
[아워메뉴] K6를 사용한 부하 테스트 -1
·
사이드 프로젝트
아워메뉴 프로젝트를 개발하면서 공부한 내용입니다 (삽질한 내용입니다) K6K6는 오픈소스로 관리는 확장 가능한 부하 테스트 도구이다. K6는 개발 친화적인 코드를 제공하기 위해 JavaScript를 통해 테스트 시나리오를 작성할 수 있고, K6를 사용하여 성능 문제를 확인할 수 있다.https://grafana.com/docs/k6/latest/ Grafana k6 | Grafana k6 documentationGrafana Cloud k6 Leverage the k6 OSS capabilities in Grafana Cloud, with built-in dashboards, insights into your application performance, and the ability to bring to..
[아워메뉴] API 응답 필드 변경 대처하기
·
사이드 프로젝트
아워메뉴 프로젝트를 개발하면서 공부한 내용입니다 개발을 하면서 요구사항이 변경되서, 기존 코드를 변경해야 하는 경우는 개발자에게 매우 자주 있는 일이다. 개발자는 코드를 변경하면서 기존 코드의 문제점이나 더 좋은 코드가 무엇인지 고민해볼 수 있는 시간을 가지게 된다. 배경기존 서비스V1에서는 안드로이드에서 서비스에 사용되는 기본 이미지를 모두 저장하였지만, V2를 진행하면서 기본 이미지에 대해 이미지의 저장에 대한 담당과 이미지 정보를 제공하는 방식에 대해서 백엔드와 안드로이드간의 회의가 있었다. 먼저 이미지 저장에 대한 책임을 변경하였다.안드로이드 자체적으로 관리 (기존 방식)서버에서 관리 (변경된 방식)가장 큰 이유는 안드로이드 앱에 대한 크기를 줄이기 위함이였다. 기본 이미지가 적지 않았고, 그렇다..
[NGINX] Nginx 이해하기 (리버스 프록시)
·
인프라
개인 공부 목적으로 작성된 글입니다. 왜곡된 내용이 포함되어 있습니다. NginxNginx는 HTTP 웹서버, 리버스 프록시, 로드벨런서를 지원하는 기술이다. 글쓴이의 경우 리버스 프록시 서버의 용도로 해당 기술을 사용하였다. 설치는 다음 Nginx 문서를 참고 하였다.https://nginx.org/en/linux_packages.html#Ubuntu nginx: Linux packagesnginx: Linux packages Supported distributions and versions nginx packages are available for the following Linux distributions and versions: RHEL and derivatives Version Supported..
[아워메뉴] 모니터링 서버 구축 -2 (Alloy, Loki)
·
사이드 프로젝트
아워메뉴 프로젝트를 개발하면서 공부한 내용입니다 앞서 그라파나와 프로메테우스, CloudWatch를 통해 컴퓨팅 리소스에 대한 매트릭을 모니터링하였다.이번에는 웹서버 로그 모니터링을 구축하고자 한다.1. 엘로이 (Alloy)엘로이는 그라파나에서 제공하는 모니터링 관련 리소스 수집 에이전트이다. 로그 수집 도구로는 프롬테일(Promtail)을 주로 사용한다고 알고 있고, 프롬테일을 사용할 계획이였지만, 공식 문서에서 프롬테일 대신 엘로이 사용을 권장하고 있어 엘로이를 사용하기로 결정했다.기존에 로그 수집은 프롬테일에서, 매트릭 수집은 프로메테우스에서 제공한다면, 엘로이에서는 통합으로 로그 수집, 메트릭 수집 모두 지원한다. 단 엘로이는 에이전트이기 때문에 매트릭이나 로그 수집에 대해 모니터링을 위해 프로메..
[아워메뉴] 모니터링 서버 구축 -1 (Grafana, Prometheus)
·
사이드 프로젝트
아워메뉴 프로젝트를 개발하면서 공부한 내용입니다 기존 아워메뉴는 프리티어로 인해 API 서버를 제외한 모니터링을 서버를 온프레미스으로 구축하였다. 프로젝트를 개발함에 따라 모니터링 서버를 EC2 위에서 구성하기로 하였다.1. 그라파나 (Grafana)모니터링, 시각화 도구로 최근들어 많이 사용되는 도구로 알고 있는 그라파나를 선택했다.그라파나를 도커위에서 구동할지 그라파나 자체를 설치해서 구동하는 2가지의 방법중에 그라파나 자체를 설치하기로 했다. 해당 서버는 그라파나를 중지하지 않고 계속 모니터링하기 때문에 도커의 재배포의 이점을 사용하기에는 적합하지 않다는 생각도 들었고, 그라파나를 처음 사용해보기 때문에 모니터링 기술을 먼저 컨테이너 없이 사용해보고 싶었다. 그라파나는 다음과 같은 리소스를 최소로 ..
[AWS] AWS 프리티어 마이그레이션-2 (S3 마이그레이션)
·
인프라/AWS
개인 공부 목적으로 작성된 글입니다. 왜곡된 내용이 포함되어 있습니다. 1. S3 마이그레이션"아워메뉴" 프로젝트에는 사진 데이터 저장 및 조회 목적으로 S3를 사용하고 있다. 기존 계정에서 사용했던 S3 버킷 데이터를 새 계정 S3 버킷에 이동할 수 있는 방법 중, 가장 먼저 떠올랐던 것은 AWS DataSync였다.AWS DataSync는 AWS에서 지원하는 마이그레이션 서비스인데, 기존 S3 버킷 용량이 대용량이 아니기 때문에 다소 오버엔지니어링이라 고 생각할 수 있지만 마이그레이션 도구를 사용해보는 것에 의의를 두고 진행하였다.https://docs.aws.amazon.com/ko_kr/datasync/latest/userguide/tutorial_s3-s3-cross-account-transfe..