✏️ 들어가며실시간 GPS 트래킹 기능의 좌표 저장 로직을 리팩토링한 이슈(#277)를 처리하면서, 단순해 보였던 "batch insert 전환" 작업이 코드 리뷰를 거치며 어떻게 다듬어졌는지 정리한다. 단순히 "이렇게 고쳤다"가 아니라, 왜 그렇게 판단했는지, 리뷰에서 뭘 지적받았는지, 되돌린 결정은 무엇이었는지까지 흐름 그대로 남겨둔다. ✏️ 1. 배경 - GPS 트래킹은 어떻게 저장되는가먼저 전체 흐름을 짚고 가야 문제를 이해하기 쉽다.클라이언트가 WebSocket(STOMP)으로 GPS 좌표를 서버에 전송한다.TrackingGpsPublisher가 이 좌표를 Redis Stream(tracking:gps)에 publish한다.TrackingStreamConsumer가 스트림을 consume해..
✏️ 들어가며Spring을 처음 배울 때 IoC, DI, Bean 같은 용어는 금방 외워진다. "제어의 역전", "의존성 주입", "빈은 스프링이 관리하는 객체"까지는 누구나 한 줄로 말할 수 있다. 문제는 그 다음이다. BeanFactory와 ApplicationContext는 뭐가 다른지, BeanDefinition은 왜 필요한지, @Configuration 클래스 안에서 메서드를 여러 번 호출해도 왜 같은 객체가 나오는지까지 가면 설명이 흐릿해진다.이 글은 그 흐릿한 지점들을 정리한 것이다. IoC/DI 같은 기본 개념부터 시작해서, 실제로 Spring Boot 애플리케이션이 뜰 때 내부적으로 어떤 순서로 Bean이 만들어지는지, BeanFactory와 ApplicationContext는 어떤 관..
✏️ 들어가며공모전 제출용으로 KOMME-BE 서버를 배포해야 했다. 빠르게 안정적인 URL을 확보하는 것이 목표였기 때문에, AWS EC2/RDS를 직접 운영하는 대신 Render + Railway MySQL + Upstash Redis 조합으로 배포를 진행했다. 이 글은 Docker 기반 배포 설정부터 외부 MySQL/Redis 연결, 배포 후 마주친 Redis 연결 오류, 제출 전 보안 점검까지 이번 배포 과정에서 정리한 내용을 기록한 것이다. 전체 구조는 다음과 같다.Client ↓Render Web Service ↓Spring Boot Docker Container ↓Railway MySQL ↓Upstash Redis ✏️ 1. Render 배포 준비Spring Boot 서버를 Rend..
✏️ 들어가며SEMOSAN 백엔드에서 OAuth 로그인 로직을 리팩터링했다. 이번 작업의 핵심은 단순히 코드를 보기 좋게 정리하는 것이 아니라, DB 트랜잭션이 불필요하게 오래 유지되는 구조를 줄이는 것이었다. 기존에는 OAuth 로그인 과정에서 외부 API 호출, 사용자 조회/가입, JWT 발급, Redis 저장이 하나의 서비스 흐름 안에 섞여 있었다. 로그인은 사용자가 가장 자주 호출하는 API 중 하나다. 특히 OAuth 로그인은 카카오, 애플 같은 외부 서비스와 통신해야 하기 때문에 일반적인 DB 조회보다 지연 시간이 커질 수 있다. 이때 외부 API 호출까지 DB 트랜잭션 안에서 처리하면, 애플리케이션은 별다른 DB 작업을 하지 않는 동안에도 DB 커넥션을 붙잡고 있게 된다. 트래픽이 적을 때..
- Total
- Today
- Yesterday
- 백준
- Do it!
- DP
- 자바스크립트
- java
- c++ string
- Spring Boot
- 에라토스테네스의 체
- 자바
- HTML5
- 백준 풀이
- 알고리즘 공부
- 이분 매칭
- js
- 투 포인터
- 스프링 부트 crud 게시판 구현
- 반복문
- CSS
- 유니온 파인드
- DFS
- 세그먼트 트리
- BFS
- 카운팅 정렬
- 알고리즘
- 우선순위 큐
- 스택
- 유클리드 호제법
- html
- C++
- 자료구조
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
