데이터베이스 인덱스를 어떻게 이해해야 하는가 Notes 인덱스는 왜 필요한가 인덱스는 결국 조회를 빠르게 하기 위한 자료구조다. 테이블의 모든 행을 처음부터 끝까지 훑는 대신, 정렬된 별도 구조를 통해 원하는 레코드에 빠르게 도달하게 한다. 책의 목차나 색인과 비슷하게 비유할 수 있지만, 실무에서는 “읽기 성능을 위해 쓰기 비용과 저장 공간을 추가로 지불하는 장치”로 이해하는 편이 더 정확하다. ... 2024/09/07 Database
점 이력과 선분 이력 모델링 Notes 왜 이력 모델링이 필요한가 실무 데이터는 “지금 상태”만 중요한 경우도 있지만, “언제 어떤 값이었는가”가 중요한 경우가 많다. 가격 변경 이력 회원 등급 변경 이력 계약 상태 변경 이력 권한 변경 추적 이때 흔히 생각하는 방식이 점 이력과 선분 이력이다. 점 이력 점 이력은 특정 시점의 상태를 개별 레코드로 기록하는 방... 2024/09/07 Database
JVM은 무엇을 하는가 Notes Java를 공부하다 보면 JDK, JRE, JVM이라는 용어를 자주 보게 된다. 이 중 JVM은 가장 많이 언급되지만, 정작 역할을 한 문장으로 설명하려 하면 막막해지기 쉽다. JVM은 단순히 “Java 프로그램을 실행하는 가상 머신”이 아니다. 더 정확히 말하면, 바이트코드를 실행하고 메모리 관리, 클래스 로딩, 가비지 컬렉션, JIT 컴파일 같은... 2024/09/07 Java
Statement와 PreparedStatement는 무엇이 다른가 Notes JDBC를 처음 다룰 때 Statement와 PreparedStatement는 둘 다 SQL을 실행하는 도구처럼 보인다. 하지만 실제로는 사용 목적과 안전성, 성능 특성이 꽤 다르다. 실무에서는 특별한 이유가 없다면 대부분 PreparedStatement를 기본값으로 보는 편이 맞다. 가장 큰 차이: SQL을 어떻게 전달하느냐 Statement... 2024/09/07 Java
Spring AOP 핵심 정리 Notes Spring AOP란 Spring AOP는 공통 관심사를 비즈니스 로직과 분리해서 다루기 위한 도구다. 로깅, 트랜잭션, 보안, 성능 측정처럼 여러 계층에 반복되는 코드를 핵심 로직 밖으로 꺼내고 싶을 때 주로 사용한다. 핵심은 “원래 객체를 직접 호출하는 것처럼 보이지만, 실제로는 프록시가 앞단에서 끼어들어 부가 작업을 수행한다”는 점이다. ... 2024/09/07 Spring
@ControllerAdvice와 @RestControllerAdvice 정리 Notes 왜 필요한가 컨트롤러마다 예외를 직접 잡아서 응답을 만들기 시작하면 다음 문제가 생긴다. 응답 포맷이 제각각이다. 상태 코드 기준이 컨트롤러마다 다르다. 예외 로깅 정책이 흩어진다. @ControllerAdvice는 이런 공통 처리 규칙을 한곳에 모으기 위한 장치다. 컨트롤러 안의 @ExceptionHandler는 그 컨트롤러에만 ... 2024/09/07 Spring
Spring Data JPA에서 동적 쿼리를 다루는 방법 Notes 동적 쿼리가 필요한 이유 검색 조건이 고정되어 있으면 메서드 이름 기반 쿼리나 정적 JPQL로도 충분하다. 하지만 실무에서는 보통 다음처럼 조건이 유동적이다. 키워드는 있을 수도 없을 수도 있다. 상태 값은 여러 개를 동시에 받을 수 있다. 날짜 범위는 시작만 올 수도 있고 끝만 올 수도 있다. 정렬 기준이 상황마다 달라진다. ... 2024/09/07 Spring
Spring 예외 처리 전략 정리 Notes 예외 처리는 왜 전략이 필요한가 예외는 단순히 잡아서 메시지를 내려주는 문제가 아니다. 어떤 예외를 기록할지, 어떤 예외를 외부에 노출할지, 어떤 상태 코드로 매핑할지가 모두 운영 정책과 연결된다. 실무에서는 다음이 중요하다. 클라이언트가 이해할 수 있는 응답 포맷 서버가 추적할 수 있는 로그 도메인 규칙과 시스템 장애의 구분 ... 2024/09/07 Spring
Spring 애플리케이션에서 예외를 설계하는 방법 Notes 예외를 어떻게 봐야 하는가 예외는 “실패” 그 자체라기보다 “정상 흐름에서 벗어난 상황”을 표현하는 장치다. 그래서 모든 실패를 예외로 취급하지 않는다. 예를 들어 사용자가 로그인 화면에서 비밀번호를 틀리는 일은 충분히 예상 가능한 입력 실패다. 반면, 의도하지 않은 상태 값 변조나 시스템 계약을 깨는 요청은 예외에 가깝다. 즉, 예외 설계의 출... 2024/09/07 Spring
Filter, Interceptor, AOP의 차이와 선택 기준 Notes 세 가지가 모두 필요한 이유 웹 애플리케이션에서 공통 처리를 넣는 지점은 하나가 아니다. 요청이 서블릿 컨테이너에 들어온 직후 처리할 일도 있고, 컨트롤러 직전에 처리할 일도 있고, 서비스 메서드 호출 주변에서 처리할 일도 있다. 그래서 Filter, Interceptor, AOP는 서로 대체재라기보다 적용 지점이 다른 도구에 가깝다. 세 지점을 ... 2024/09/07 Spring