![[Spring] 놀멍 서비스 개발 일지 - 로그 시스템 구축하기2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcWxziw%2FbtsL7iT9f3v%2FAAAAAAAAAAAAAAAAAAAAAGQzIk0gruJNTZCAfK8X0889KpkVYwjd833Wu-U-kNJ6%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DRPsTBhQD7af3xvczFQnyg4iXNwM%253D)
이 글은 반려견 동반 가능 시설 공유 플랫폼 '놀멍'의 모니터링 서버를 구축하는 과정입니다.놀멍 서비스 개발 일지 - 로그 시스템 구축하기1 이전 글에서 이어진 내용입니다. 로그 시스템 개발 이전 글에서 설명한 대로 운영 서버와 모니터링 서버를 분리하여 관리하며, 각 서버의 아키텍처는 다음과 같습니다.운영 서버: Spring Boot Application, Promtail모니터링 서버: Prometheus, Loki, Grafana 1. docker-compose 설치먼저, Docker Compose가 설치되어 있지 않다면 아래 명령어로 설치합니다.놀멍 서버의 OS는 Amazon Linux2를 사용하고 있습니다. 만약, 다른 OS를 사용하신다면 Docker Compose 설치 명령어가 다릅니다.sudo ..
![[Spring] 놀멍 서비스 개발 일지 - 로그 시스템 구축하기1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FAx4QS%2FbtsL1svBegQ%2FAAAAAAAAAAAAAAAAAAAAAKd-_qt0VYIXk39XXwqNNIjppYT3UZEiwLOCOEVPgXRh%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DLfrmDtFCUfjhYjCvA0yb8kjT85s%253D)
이 글은 반려견 동반 가능 시설 공유 플랫폼 '놀멍'의 모니터링 서버를 구축하는 과정입니다.놀멍 서비스의 1차 MVP를 완성하고, 이를 배포하여 운영할 계획을 세웠습니다.서비스 운영에 있어 필요한 요소를 고민하던 중, 서버 모니터링의 필요성을 느꼈습니다. 놀멍 서비스 요구사항장애나 사고 발생 시 원인을 신속하게 파악하고 대응할 수 있는 시스템이 필요했습니다. 또한, 프론트엔드 개발자와의 협업 과정에서, 프론트엔드의 요청으로 로그를 확인할 때마다 서버의 도커에 접속하는 것은 매우 비효율 적이었습니다. 그렇기에 서비스의 요구사항은 다음과 같았습니다.사용자에게 만족을 제공하기 위해 시스템은 항상 안정적으로 운영되어야 하며, 이상 징후를 지속적으로 감시할 수 있어야 한다.시스템 이상 발생 시 원인 파악을 위한 ..
![[Spring] 놀멍 서비스 개발 일지 - 지도 화면 개발하기2(공간 인덱스 적용)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FpUEC2%2FbtsLEYP05zm%2FAAAAAAAAAAAAAAAAAAAAAO9E3Xp9zE1HvHmerpbPe15395sPw1Vde2YwLzAcTGtY%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dq8pxQ6XmC3g0RnWvKJfiHhSV4Kk%253D)
이 글은 반려견 동반 가능 시설 공유 플랫폼 '놀멍'의 메인 화면인 지도를 개발하는 과정입니다. 놀멍 서비스 개발 일지 - 지도 화면 개발하기1 이전 글에서 지도 화면을 개발한 내용을 공유했습니다.'놀멍' 서비스의 지도를 완성하였고, 실제 서비스 배포를 하였는데요!그리고 운영을 하면서 개발을 진행하던 도중 우연히 우테코 5기 폴로님의 글을 읽고 공간 인덱스를 알게 되었습니다.마침 개발 중인 지도 기능에도 공간 인덱스를 적용해 볼 수 있을 것 같아, 그 과정을 공유하고자 합니다.사실, 현재 지도 화면에서 장소를 조회하는 데 성능적인 큰 문제는 없었지만...그냥 해보고 싶었습니다.ㅇㅁㅇ 공간 인덱스(Spatial Index)란?공간 인덱스는 공간 데이터를 효율적으로 저장하고 검색하기 위한 데이터 구조입니다...
![[Spring] 놀멍 서비스 개발 일지 - 지도 화면 개발하기1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdXxNmO%2FbtsLFdZy87W%2FAAAAAAAAAAAAAAAAAAAAAEy6cG6eebw7e7CUNSRrJobC9Sj4NPy87TcfkWkQ8lmY%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dmu9PyXH%252FB%252FOKUcfR3laX%252BYK5MWU%253D)
이 글은 반려견 동반 가능 시설 공유 플랫폼 '놀멍'의 메인 화면인 지도를 개발하는 과정입니다. 위 앱은 네이버 지도로 지도에서 카페 카테고리를 선택하면 위 처럼 해당 화면 범위 내에 있는 카페에 대한 정보를 마커로 보여주고, 마커를 클릭하면 해당 카페에 대한 자세한 정보를 보여줍니다.저희 놀멍 서비스도 위와 같이 지도 화면과 반려견 동반 가능 시설에 대한 정보를 마커로 제공해야 했습니다.놀멍 지도의 요구사항지도를 통해 장소 검색을 진행할 수 있다.다양한 옵션(시설 종류, 견종 제한, 찜한 장소 등)을 통해 검색을 필터링할 수 있다. 초반에 마주한 문제저희 `놀멍`은 Naver 지도를 사용하기로 계획하였고, 장소에 대한 정보 역시 Naver에서 제공하는 API를 활용하여 구현하고자 했습니다. 하지만 Na..
![[Spring] Redis 테스트 환경 구축하기(Embedded Redis)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdVum8F%2FbtsLCFvrnea%2FAAAAAAAAAAAAAAAAAAAAAKIjomrmGnUi09--Kv4Tey_3EEK7Z0V4nscSriLlQU-b%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dw2JsKAZtMN4e0I%252Fj0kCwtVvpedc%253D)
현재 상황현재 진행하는 프로젝트에서 환자의 위도와 경도 값을 저장하기 위해 Redis를 사용하고 있습니다.프로젝트의 테스트 코드를 작성하는 과정에서 Redis를 사용하는 기능은 어떻게 테스트 코드를 작성해야 할지 고민이었습니다.현재 저희 서비스의 아키텍처는 NCP 서버에 Docker를 활용해 Redis를 운영하고 있습니다.처음에는 로컬 PC에서도 운영 서버와 동일한 환경을 Docker를 사용하여 구축하고, 테스트를 진행하는 방법을 고려했습니다.하지만, 이 방식은 테스트를 실행할 때마다 Docker Container를 생성해야 하며, 무엇보다 Github에서 프로젝트를 클론한 후 바로 테스트를 실행할 수 없는 문제가 있었습니다. 테스트 코드를 실행하기 위해서는 PC에 Redis 데몬을 설치해야 하는 문제가..
![[Spring] URL 이미지 리사이징 후, S3에 업로드](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fbo2ABS%2FbtsIO2hfVoo%2FAAAAAAAAAAAAAAAAAAAAAJJmArGijahm4bPmbzQ5Ck1O6TfLRWW1NDddi33Z1b0V%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DrXFfuuNGo4Ql16LT651cEXwCR8Y%253D)
택시 합승 서비스 개발 중 프론트엔드 개발자로부터 다음과 같은 요청을 받았습니다. 이미지 최적화가 되지 않아 프로필 사진이 하얀색으로 표시되는 문제가 발생했습니다.이 문제를 해결하기 위해 이미지 크기를 86 x 86으로 변경해야 했습니다.하지만 카카오 소셜 로그인을 통해 얻은 프로필 이미지는 카카오에서 파일 형태로 제공되지 않고, 이미지 URL만 제공됩니다. 따라서 이 URL을 파일로 변환하고, 사이즈를 조정한 후 S3에 업로드해야 하는 상황입니다.문제 접근문제 해결을 위한 제가 생각한 접근 방법은 다음과 같습니다.카카오로부터 받은 이미지 URL을 파일로 변환이미지 크기 변경리사이징한 이미지를 AWS S3에 저장 이미지 URL 리소스 로드public class ImageService { private..
![[Spring] Google STT(Speech-to-Text) 서비스 사용하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FTz5nt%2FbtsIiQteXzf%2FAAAAAAAAAAAAAAAAAAAAAPCxlo5iKRGNfSTjrROGV5-_ylOong3Catxfb7kixec0%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DVLr%252BblYM6zqJMm6lZpr%252FlRm3fXc%253D)
구글 Solution Challenge STRecording 프로젝트의 메인 기능 중 하나로, 음성 파일을 텍스트로 변환하는 기능을 구현하였습니다. STT(Speech-to-Text)GCP(Google Cloud Platform)에서 제공하는 서비스 중 하나인 Speech-to-Text API는 오디오 파일을 텍스트로 변환해 줍니다. STT는 다음과 같은 특징을 가지고 있습니다.앱에 Speech-to-Text 기능을 간편하게 추가오디오 파일 또는 실시간 오디오 스크립트 작성125개 이상의 언어 지원AI를 사용해 동영상 자막 생성더욱 자세한 내용은 공식 문서를 통해 확인하실 수 있습니다. 사전 준비0. 프로젝트를 생성하고 결제 계정을 등록1. 이후 서비스 계정을 생성 2. 서비스 계정 생성 후, 키 관리를..
![[Spring] Spring Data JPA 페이징 처리 알아보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbhD1rG%2FbtswaqUQdQg%2FAAAAAAAAAAAAAAAAAAAAAHpf92eE9B5yS9UeuNPsF7RGUI2iug8LtqLOvygqws4U%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3Dn4uatw68x%252BNjBg5RqGniFcQsuAg%253D)
페이지네이션(Pagination) 데이터베이스에서 특정 정보를 조회할 때, 조회된 데이터가 너무 많으면 사용자의 가독성이 떨어지고, 데이터가 많은 만큼 서버의 부하가 커질 것입니다. 그렇기에 적당한 양의 데이터를 나눠 가져오는 게 좋습니다. 페이지네이션이란 전체 데이터를 지정된 수의 데이터로 나눠 전달하는 과정을 의미합니다. 페이징이라고도 합니다. Spring Data JPA에서는 Pageable 클래스를 통해 페이징 처리를 간단하게 할 수 있습니다. Pageable과 PageRequest Pageable은 페이징 처리에 필요한 정보를 담는 인터페이스입니다. PageRequest에 의해 Pageable에 페이징 정보가 담겨 객체화됩니다. Page와 Slice JpaRepository를 상속받은 레포지토리..