2026/04/03 4

[Spring] JWT 로그아웃 기본 코드 분석

1. 들어가며BenePicker 프로젝트를 진행하면서 인증을 JWT 기반으로 설계했다.로그인, 토큰발급까지는 비교적 자연스럽게 구현됐지만, 로그아웃 구현에서 예상 밖의 혼란을 겪었다."로그아웃인데… 왜 서버에서 아무것도 안 하지?"이번 글에서는 단순 구현이 아니라, JWT 로그아웃의 본질과 설계 관점에서의 깨달음을 정리해보려고 한다.2. 구현한 로그아웃 코드@PostMapping("/logout")public ResponseEntity logout() { return ResponseEntity.ok().build();} 처음 이 코드를 작성하면서 이런 생각이 들었다.“이게… 로그아웃 맞나?”로직이 없다.DB 접근도 없다.토큰 처리도 없다.그냥 200 OK 반환 끝이다.3. 왜 이렇게 구현했을까?이걸..

백엔드/회고 2026.04.03

[Spring] MyBatis vs JPA + XML vs Annotation, 직접 써보며 느낀 차이

1. 들어가며BenePicker 프로젝트를 진행하면서 회원 기능과 조회 기능을 구현하다 보니 자연스럽게 이런 고민이 생겼다.“MyBatis랑 JPA 뭐가 다른거지?”“MyBatis는 XML 써야 되는 거 아닌가?”“어노테이션이 더 편한데 왜 XML 쓰는거지?”처음엔 단순히 “편한 거 쓰면 되는 거 아닌가?”라고 생각했는데, 직접 코드 작성하면서 생각이 완전히 바뀌었다.2. MyBatis vs JPA — 근본적인 차이처음엔 둘 다 그냥 “DB 연결 기술”이라고 생각했는데, 실제로는 패러다임 자체가 다르다는 걸 느꼈다.→ MyBatisSQL을 직접 작성DB 중심 개발SQL → 객체 매핑→ JPA객체(Entity) 중심SQL을 자동 생성객체 → JPA가 SQL 생성2. 핵심 깨달음JPA는 “객체 중심”MyBa..

백엔드/회고 2026.04.03

[백준] 6549번 - 히스토그램에서 가장 큰 직사각형

문제: https://www.acmicpc.net/problem/65491. 문제 접근 - 처음 생각했던 방식들히스토그램에서 가장 큰 직사각형을 구하는 문제.처음에는 자연스럽게 브루트포스로 접근했다. 1) 시도 1각 막대를 기준으로좌우로 확장하면서 “자기보다 크거나 같은 구간 길이”를 구함시간복잡도: O(n³) 수준바로 시간초과 예상 2) 시도 2높이 기준으로 접근(예: 높이 1 ~ max 높이까지 각각 구간 계산)시간복잡도: O(n × h)h 최대가 10억이라 불가능→ 여기서 깨달은 점:“이 문제는 구간을 찾는 문제가 아니라각 막대가 ‘최소 높이’가 되는 최대 구간을 찾는 문제다.”2. 핵심 아이디어어떤 막대 하나를 기준으로 보면높이 = 그 막대 높이너비 = 그 막대보다 낮은 막대를 만날 때까지 확장한..

코딩테스트 2026.04.03

[Redis] 개념 정리: 왜 현대 백엔드에서 Redis는 필수인가?

1. Redis란 무엇인가?Redis는 Remote Dictionary Server의 약자로, 한 마디로 정의하면 다음과 같다.“메모리 기반(In-Memory) 데이터 구조 서버”일반적인 데이터베이스가 디스크에 데이터를 저장하는 것과 달리, Redis는 RAM에 데이터를 저장하기 때문에 → 마이크로초(μs) 단위의 매우 빠른 속도를 제공한다.또한 단순한 Key-Value 저장소를 넘어서다양한 자료구조를 제공하는 것이 특징이다.2. 왜 Redis가 필요한가? 1) 기존 문제: DB 병목일반적인 RDBMS(MySQL 등)는 디스크 기반이기 때문에 요청이 많아질수록 다음과 같은 문제가 발생한다.느린 디스크 I/O반복 조회로 인한 부하 증가전체 서비스 Latency 증가 2) Redis의 해결 방식Redis는..

백엔드/CS 2026.04.03