[Security] 비밀번호 재설정 기능을 토큰 폐기까지 포함해 설계한 방법
서론 비밀번호 재설정은 화면만 만들면 끝나는 기능처럼 보이지만, 실제로는 계정 보안 설계와 아주 가깝다. 특히 “토큰을 어떻게 발급할지”, “이미 발급된 토큰은 어떻게 무효화할지”, “운영 환경과 개발 환경에서 메일 전송을 어떻게 분리할지”까지 생각해야 비로소 안전한 기능이 된다. loslung에서는 2026년 4월 6일 PR #16에서 비밀번호 ...
서론 비밀번호 재설정은 화면만 만들면 끝나는 기능처럼 보이지만, 실제로는 계정 보안 설계와 아주 가깝다. 특히 “토큰을 어떻게 발급할지”, “이미 발급된 토큰은 어떻게 무효화할지”, “운영 환경과 개발 환경에서 메일 전송을 어떻게 분리할지”까지 생각해야 비로소 안전한 기능이 된다. loslung에서는 2026년 4월 6일 PR #16에서 비밀번호 ...
서론 운영 환경에서 터지는 에러는 종종 하나의 원인으로 설명되지 않는다. loslung의 배포 히스토리에서도 403, 401, 500이 각각 따로 보였지만, 실제로는 CORS, 프록시 경로, 런타임 환경변수가 얽혀 있었다. 이번 글에서는 2026년 4월 2일 PR #8과 2026년 4월 6일 PR #15을 중심으로, 왜 이런 문제가 동시에 발생했는...
서론 loslung 배포 히스토리에서 가장 오래 발목을 잡은 문제 중 하나는 401이었다. 브라우저에서는 분명 로그인 상태인데, 특정 API 요청은 백엔드에서 인증되지 않은 요청으로 처리되고 있었다. 처음에는 토큰 만료나 인증 로직 자체를 의심하기 쉬웠지만, 실제 원인은 토큰이 어디에 저장되어 있느냐보다 그 요청이 어떤 경로로 백엔드에 도착하느냐에...
서론 loslung의 배포 히스토리를 다시 보면, 가장 먼저 정리해야 했던 것은 Docker 자체가 아니라 요청 경로였다. 이 프로젝트는 단순히 “프런트 1개, 백엔드 1개” 구조가 아니라, Next.js Route Handler가 처리해야 하는 API와 Spring Boot가 처리해야 하는 API가 공존하는 구조였기 때문이다. 2026년 4월 2...
서론 백엔드 개발에서 데이터베이스는 시스템의 안정성과 확장성을 좌우하는 핵심 요소다. 관계형 데이터베이스(RDBMS) 중 가장 널리 사용되는 두 축은 PostgreSQL과 MySQL이다. 둘 다 강력하고 안정적인 데이터베이스이지만, 설계 철학과 강점은 분명히 다르다. 이번 글에서는 PostgreSQL과 MySQL의 주요 차이를 실무 관점에서 비교하...
서론 웹 애플리케이션은 사용자 경험과 서비스 구조에 따라 다양한 아키텍처를 선택하게 된다. 그중 SPA(Single-Page Application)와 MPA(Multi-Page Application)는 가장 대표적인 두 가지 접근 방식이다. 두 방식은 화면 전환, 렌더링 책임, SEO 대응, 개발 방식에서 분명한 차이를 보인다. 실무에서 적절한 선...
1. 에러 상황 요약 엑셀 다운로드 기능에서 종종 이런 로그가 찍힌다. org.apache.catalina.connector.ClientAbortException Caused by: java.io.IOException: Broken pipe 스택트레이스를 보면 보통 다음과 같은 흐름이다. SXSSFWorkbook.write ZipOu...
백트래킹이랑? 완전탐색 + 가지치기 모든 경우를 트리 형태로 탐색 “답이 될 수 없는 가지”를 중간에 잘라냄 DP처럼 저장해서 줄이는 것이 아닌 중간부터 내려가지 않는 것이 핵심 백트래킹 유형 파악 방법 선택지 제약 조건 ...
IntelliJ IDEA에서 OOM(Out Of Memory)이 발생하면 *.hprof 힙 덤프 파일이 자동 생성될 수 있다. 이를 인지하지 못하고 git add 또는 git commit까지 진행하면, GitHub의 100MB 파일 제한 때문에 push가 실패한다. 아래는 **상황별(분기별)**로 바로 복붙해서 해결할 수 있도록 정리한 가이드다. ...
[ 문제 상황 ] JDBC URL로 Spring Boot와 로컬 MySQL을 연결하던 중 아래와 같은 오류가 발생. Caused by: java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed [ 해결 방안 ] 이 오류는 MySQL 8.0 버전 이상에서...