대중교통 길찾기를 구현해보자! (GTFS, OTP, OSM)
·
Spring/Kotlin
1.  소개예전 포스팅에서 자료조사를 했습니다. 한 요청에 대량의 경로탐색이 필요한 프로젝트 특성상 외부 API 사용은 비용의 문제가 있었습니다. 그래서 자체 대중교통 경로탐색이 필요했습니다. 자료조사를 통해 GTFS(대중교통 스케줄), OSM(지도 데이터)를 찾았고 추가로 OTP(경로탐색 오픈 소스)를 찾았습니다. 이제 필요한 것들을 다 모았으니 구현을 해봅시다 `최소 16GB 이상의 메모리를 사용하시는 걸 추천합니다. 되도록이면 32GB``현재 서비스중인 kakao, naver와의 예상 시간이 꽤 차이가 나 실사용은 어렵습니다` 2. 사전 준비대중교통 경로 탐색에는 3가지가 필요합니다.OSM(Open Street Map) : 공간 정보를 위한 지도 데이터OTP(Open Trip Planner) : 지..
Spring에서 Cache를 사용해보자! (with Caffine)
·
Spring/Java
🎈 Cache란캐시(Cache)는 임시 장소(Memory)에 데이터나 값을 미리 복사해 놓는 행위를 가리킵니다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용됩니다. 캐시를 사용하면 인기글, Auth의 사용자 확인과 같이 자주 조회되는 데이터를 메모리에 저장 후 사용하기 때문에 DB의 부하는 낮춰 리소스를 절약할 수 있습니다.하지만 캐시를 사용할 때 주의해야하는 부분도 있습니다.정합성https://tech.kakaopay.com/post/local-caching-in-distributed-systems/ 분산 시스템에서 로컬 캐시 활용하기 | 카카오페이 기술 블로그분산 시스템에서 로컬 캐시를 설계하고 구현한 경험을..
Termux를 사용해서 웹서버를 띄워보자
·
Infra
🎈 문제상황지난 포스트에서 `Termux`에서 qemu를 사용해 alpine linux container를 띄워서 그 안에서 `docker`를 사용해 프로젝트를 띄웠습니다. 하지만 속도가 굉장히 느렸고 prometheus, grafana 관련 에러가 지속적으로 발생해 모니터링 스택을 임시로 없애고 termux만을 사용해 웹서버를 구축하기로했습니다.  그럼 termux에서 spring application을 돌려봅시다!! 🎈 사전 준비안드로이드 기기와 와이파이를 사용해 자체 배포하는 방법입니다.안드로이드 기기는 termux를 다운받고 권한을 허용해주면 되며 와이파이는 몇 개의 설정을 수정해줘야합니다. 해당 설정들을 termux에서 docker를 사용하기 위한 포스팅에서 이미 설정을 했으므로 해당 포스팅..
H2를 사용한 Test Code의 초기 데이터 설정
·
Spring/Java
🎈 구현이유지난 포스팅에서 안드로이드 기기에 가상화 에뮬레이터를 사용해 docker의 사용 방법을 학습했습니다. 하지만 이후 Prometheus에서 지속적인 에러가 발생하고 현재 프로젝트에서 트래픽이 적기 때문에 termux에서 gradle을 사용해 빌드하기로 결정했습니다. 이후 트래픽 증가하면 prometheus를  docker가 아닌 직접 설치하여 운용할 예정입니다. 그래서 github에서 프로젝트를 clone후 빌드과정에서 테스트 코드의 최신화가 안되어있어 해당 부분을 점검 중 초기 데이터를 data.sql을 사용해 넣는 방식이 아닌 빌드 과정에서 PostConstruct 어노테이션을 사용해 save하는 방식으로 데이터를 설정하는 코드를 발견했습니다.  해당 방식은 Transcation 어노테이션..
Spring RestClient로 공공데이터 수집하기
·
Spring/Kotlin
구현 이유이동 소요 시간, 가격, 주택 유형 등 사용자 조건에 맞춘 부동산 매물 추천 프로젝트를 진행하기 위해 먼저 부동산 매물들의 매매, 전/월세 실거래가 정보들이 필요했습니다. 그래서 공공데이터포털에서 Open Api를 사용해 데이터를 수집하기로 했습니다.  사용 스택Spring boot 3.xKotlinMongoDBRestClient(SpringBoot 3.2, Spring 6.1 이상부터 지원) MongoDB 선택 이유비정형 데이터의 필요성1. 비정형 데이터의 필요매매는 거래 금액이, 전/월세는 보증금, 월세 금액이 필요한데 RDB를 사용하면 필요 이상으로 정규화가 필요해 편의상 MongoDB를 생각했습니다.2. 읽기 성능의 중요성서비스의 특성상 CRUD 중 Read의 사용 빈도가 굉장히 높고 나..
[Spring] Facade 패턴을 사용한 순환 참조 해결
·
ETC/Pattern
🔥 문제상황Service에서 다른 class를 참조하여 로직을 진행하다보면 참조된 클래스에서도 해당 클래스를 참조하는 순환참조 문제가 생길 때가 있습니다. 아니면 Controller에서 다수의 Service를 참조하다보면 가독성이 떨어지고 유지보수와 추가적으로 API를 늘려가는 과정에서 불편함과 개발속도가 저하되는 일들이 늘어납니다.그러면 여러 클래스들을 참조해야할 때 해결방법들을 알아봅시다.👀 해결방법1. Service 에서 다수의 Repo를 참조하나의 Service에서 여러 Repo를 참조하는 방식입니다. 예를 들어 PostService라는 게시글에 대한 Service가 있는데 사용자의 정보가 필요하여 UserRepository를 참조해 사용자 정보를 조회 후 로직을 진행하는 방식입니다.@Serv..
java곰
'spring' 태그의 글 목록