Spring 예외 처리 전략 정리 Notes 예외 처리는 왜 전략이 필요한가 예외는 단순히 잡아서 메시지를 내려주는 문제가 아니다. 어떤 예외를 기록할지, 어떤 예외를 외부에 노출할지, 어떤 상태 코드로 매핑할지가 모두 운영 정책과 연결된다. 실무에서는 다음이 중요하다. 클라이언트가 이해할 수 있는 응답 포맷 서버가 추적할 수 있는 로그 도메인 규칙과 시스템 장애의 구분 C... 2024/09/07 Notes, Spring
Spring 애플리케이션에서 예외를 설계하는 방법 Notes 예외를 어떻게 봐야 하는가 예외는 “실패” 그 자체라기보다 “정상 흐름에서 벗어난 상황”을 표현하는 장치다. 여기서 중요한 것은 모든 실패를 예외로 취급하지 않는 것이다. 예를 들어 사용자가 로그인 화면에서 비밀번호를 틀리는 일은 충분히 예상 가능한 입력 실패다. 반면, 의도하지 않은 상태 값 변조나 시스템 계약을 깨는 요청은 예외에 가깝다. 즉... 2024/09/07 Notes, Spring
Filter, Interceptor, AOP의 차이와 선택 기준 Notes 세 가지가 모두 필요한 이유 웹 애플리케이션에서 공통 처리를 넣는 지점은 하나가 아니다. 요청이 서블릿 컨테이너에 들어온 직후 처리할 일도 있고, 컨트롤러 직전에 처리할 일도 있고, 서비스 메서드 호출 주변에서 처리할 일도 있다. 그래서 Filter, Interceptor, AOP는 서로 대체재라기보다 적용 지점이 다른 도구에 가깝다. Filte... 2024/09/07 Notes, Spring
Spring과 JPA에서 Race Condition을 다루는 방법 Notes Race Condition이란 여러 요청이 동시에 같은 자원을 읽고 수정할 때, 의도하지 않은 순서로 처리되어 데이터 정합성이 깨지는 상황을 말한다. 대표 예시는 다음과 같다. 재고 차감 중복 결제 방지 쿠폰 선착순 발급 좌석 예약 조회와 갱신이 분리된 흐름에서는 특히 쉽게 발생한다. 왜 JPA에서 자주 문제가 되는가 JP... 2024/09/07 Notes, Spring
Spring의 IoC와 DI를 어떻게 이해할 것인가 Notes IoC와 DI는 왜 중요한가 스프링을 배울 때 가장 먼저 듣는 개념이 IoC와 DI다. 그런데 용어만 외우면 실전에서 감이 잘 오지 않는다. 핵심은 “객체가 스스로 의존 대상을 만들고 실행 흐름을 통제하지 않는다”는 점이다. DI 먼저 이해하는 편이 쉽다 의존이란 한 클래스가 다른 클래스의 기능에 기대고 있으면 의존 관계가 있다고 본다. 문제는... 2024/09/07 Notes, Spring
Spring 애플리케이션에서 페이지네이션을 설계하는 방법 Notes 페이지네이션은 단순히 잘라서 보여주는 문제가 아니다 목록 조회를 만들 때 페이지네이션은 거의 필수다. 하지만 단순히 Pageable을 받는 것만으로 끝나지 않는다. 성능, 정렬 안정성, 카운트 쿼리 비용까지 함께 봐야 한다. 가장 흔한 방식 두 가지 Offset Pagination limit, offset 기반 방식이다. 장점: 구현이 ... 2024/09/07 Notes, Spring
Querydsl을 사용하는 이유와 기본 패턴 Notes Querydsl이 필요한 순간 조회 조건이 조금만 복잡해져도 메서드 이름 쿼리나 문자열 JPQL은 금방 읽기 어려워진다. Querydsl은 이 문제를 “타입 안전한 쿼리 빌더”로 해결한다. 장점 컴파일 타임에 필드 변경 오류를 발견할 수 있다. IDE 자동완성이 잘 된다. 조건 조합이 명확하다. Repository 구현을 읽기 좋... 2024/09/07 Notes, Spring
Microservice Architecture Notes 왜 마이크로서비스를 선택하는가 마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 여러 개의 작은 서비스로 나누는 방식이다. 각 서비스는 독립적으로 배포되고, 자신의 데이터와 책임을 가진다. 이 구조를 쓰는 이유는 보통 다음과 같다. 팀 단위로 소유권을 나누기 쉽다. 특정 기능만 독립적으로 배포할 수 있다. 트래픽 특성에 맞춰 서비스별... 2024/09/07 Notes, Web
Connection Pool Notes Connection Pool이 필요한 이유 애플리케이션이 요청마다 새 DB 연결을 만들고 닫으면 비용이 크다. TCP 연결, 인증, 세션 초기화가 반복되기 때문이다. 요청 수가 많아지면 연결 생성 비용만으로도 응답 시간이 흔들린다. Connection Pool은 미리 만들어 둔 연결을 재사용해서 이 비용을 줄인다. 동작 방식 대략적인 흐름은 다... 2024/09/07 Notes, Web
GraphQL with Spring Boot Notes Spring Boot에서 GraphQL을 붙인다는 것 Spring Boot에서 GraphQL을 도입한다는 것은 REST 컨트롤러를 하나 더 만드는 일이 아니라, 스키마와 리졸버 중심으로 API 레이어를 다시 구성하는 일에 가깝다. 중심 요소는 다음과 같다. GraphQL 스키마 Query/Mutation 리졸버 타입별 필드 리졸버 ... 2024/09/07 Notes, Web