Spring 81

context-path와 Security: 예상과 다른 경로 매칭 문제

Spring Boot 프로젝트에서 REST API 경로에 공통 prefix(/api)를 적용하기 위해 context-path 설정을 사용하는 경우가 많다.하지만 이렇게 설정한 뒤, Spring Security에서 특정 경로를 허용하려 할 때, 의도한 대로 매칭되지 않고 403 혹은 401 에러가 발생하는 경우가 있다.문제 상황다음과 같이 context-path를 설정하고server: servlet: context-path: /api 그리고 Security 설정에서는 아래와 같이 /api/login을 허용하도록 구성했다http .authorizeHttpRequests(auth -> auth .requestMatchers("/api/login").permitAll() ..

@Cacheable 사용 시 역직렬화 오류 해결

문제 상황@Cacheable(value = "books", key = "...")public PagedResponse findAllCached(...) { return bookService.findAll(...);} PagedResponse 와 같은 제네릭 타입으로 캐싱할 때캐시에서 조회된 데이터가 LinkedHashMap으로 역직렬화되어 아래와 같은 오류가 발생 java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class cohttp://m.example.book_api.global.dto.PagedResponse (java.util.LinkedHashMap is in module java.base of ..

[📕 JPA 심화] 5. SpringData JPA 심화

📕 목차좀 더 멋지게 쿼리 생성하기 (QueryDSL)테이블 객체 방명록 설정하기 (Auditing)필요한 부분만 갱신하기 (Dynamic Insert/Update)❤️ 학습 목표QueryDSL을 사용하여 타입 안전 쿼리를 작성하는 방법을 배웁니다. 복잡한 조건과 정교한 쿼리를 쉽게 구성할 수 있는 기법을 소개합니다.Auditing을 사용하여 엔티티의 생성 및 수정 시간을 자동으로 관리하는 방법을 배웁니다. Spring Data JPA에서 제공하는 Auditing 기능을 통해 데이터의 일관성과 추적성을 확보합니다.Projection을 사용하여 필요한 데이터만 선택적으로 조회하는 방법을 배웁니다. 과도한 데이터 로드를 방지하고 성능을 최적화하는 기법을 학습합니다.1. 좀 더 멋지게 쿼리 생성하기 (Que..

Spring/강의 2025.06.26

[📕 JPA 심화] 4. SpringData JPA 기본

📕 목차테이블 객체 다루는 법테이블 객체로 자동 쿼리 생성하기테이블 객체로 페이지 조회하기테이블 객체로 수동 쿼리 생성하기❤️ 학습 목표Spring Data JPA를 사용하여 엔티티 객체를 효율적으로 관리하는 방법을 배웁니다. 리포지터리 인터페이스의 역할과 기본적인 메소드 사용법을 설명합니다.JpaRepository 인터페이스를 활용하여 CRUD 작업을 자동으로 처리하는 방법을 배웁니다. 메소드 이름만으로 쿼리를 생성하는 방법과 그 장점을 학습합니다.페이지네이션을 사용하여 대량의 데이터를 효율적으로 조회하는 방법을 배웁니다. Spring Data JPA에서 제공하는 Pageable 인터페이스를 사용하는 실습을 통해 데이터 처리 성능을 최적화하는 방법을 학습합니다.JPQL을 사용하여 복잡한 쿼리를 수동으..

Spring/강의 2025.06.26

[📕 JPA 심화] 3. RawJPA 기본

📕 목차쿼리 파일 만들기 (QueryMapper)쿼리 코드 만들기 (JpaRepository)테이블 객체 이해하기테이블 객체 만들기 & 테이블 객체끼지 관계 만들기❤️ 학습 목표Query Mapper를 사용하여 SQL 쿼리를 관리하는 방법을 배웁니다. 별도의 쿼리 파일을 통해 SQL을 관리함으로써 코드의 가독성과 유지보수성을 높입니다.Annotation을 사용하여 SQL 쿼리를 클래스나 메소드에 직접 정의하는 방법을 배웁니다. 이를 통해 동적 쿼리 생성과 실행 과정을 이해하고 실습합니다.RawJPA를 사용하여 테이블과 연동되는 객체(엔티티)의 구조와 작동 원리를 배웁니다. JPA의 기본적인 구성 요소와 엔티티의 생명주기를 이해합니다.실제 데이터베이스 테이블과 매핑되는 Java 객체를 생성하는 방법을 배..

Spring/강의 2025.06.26

[📕 JPA 심화] 2. 데이터베이스 다루기

📕 목차데이터베이스 생성 (H2)데이터베이스에서 테이터 다루기 (SQL)데이터베이스 연결 (Driver)데이터베이스 데이터를 외부에서 다루기 (JDBC)❤️ 학습 목표이 섹션에서는 내장형 H2 데이터베이스를 설치하고 설정하는 방법을 배웁니다. H2 데이터베이스의 주요 특징과 장점을 소개하며, 간단한 데이터베이스 생성 방법을 설명합니다.SQL 기본 구문을 사용하여 데이터를 생성, 조회, 수정, 삭제하는 방법을 배웁니다. 이를 통해 데이터베이스 관리의 기본이 되는 SQL 문법에 대한 이해를 높입니다.데이터베이스 드라이버의 역할과 중요성을 이해하고, 적절한 드라이버 선택 및 설정 방법을 배웁니다. JDBC 드라이버를 사용하여 애플리케이션과 데이터베이스 간의 연결을 구성하는 과정을 다룹니다.JDBC를 통해 J..

Spring/강의 2025.06.26

[📕 JPA 심화] 1. 프로젝트 세팅

📕 목차JDBC 프로젝트 세팅JDBC Template 프로젝트 세팅QueryMapper 프로젝트 세팅QueryFileMapper 프로젝트 세팅JPA 프로젝트 세팅1. JDBC 프로젝트 세팅https://github.com/thesun4sky/jdbc/tree/jdbc GitHub - thesun4sky/jdbcContribute to thesun4sky/jdbc development by creating an account on GitHub.github.com2. JDBC Template 프로젝트 세팅https://github.com/thesun4sky/jdbc/tree/jdbc-template GitHub - thesun4sky/jdbcContribute to thesun4sky/jdbc develo..

Spring/강의 2025.06.26

템플릿 메서드 패턴(Template Method Pattern)

템플릿 메서드 패턴(Template Method Pattern) 이란?상위 클래스에서 알고리즘의 전체 구조(뼈대)를 정의하고, 그 알고리즘의 일부 단계는 하위 클래스에서 구체적으로 구현하도록 하는 디자인 패턴변하지 않는 기능(템플릿)은 상위 클래스에 만들어두고 자주 변경되며 확장할 기능은 하위 클래스에서 구현하여 유연성을 확보한다.템플릿 메서드 패턴의 필요성 중복된 로직 문제 예시 class FileUploadTask { public void execute() { System.out.println("[공통] 작업 시작 로그 찍기"); System.out.println("파일 업로드 작업 수행"); System.out.println("[공통] 작업 종료 로그 찍..

전략 패턴(Strategy Pattern)

전략 패턴(Strategy Pattern)이란?행동(알고리즘, 로직)을 캡슐화하여 런타임에 자유롭게 교체할 수 있게 하는 디자인 패턴여러 가지 방식 중 하나를 선택해 실행할 수 있도록 전략(전략 객체)을 분리하고, 이를 사용하는 컨텍스트가 전략을 교체하며 유연하게 동작하게 만든다.전략 패턴의 필요성 단순 인터페이스 사용 시 발생되는 문제점interface Moveable { void move();}class WalkCharacter implements Moveable { public void move() { System.out.println("걷는다"); }}class SwimCharacter implements Moveable { public void move() { System.out..

Spring 로그 레벨(Log Level)

로그 레벨(Log Level)이란?로그 레벨은 로그 메시지의 중요도 또는 심각도를 나타내는 분류 기준로그 레벨을 설정하면 원하는 수준의 로그만 출력하거나 저장할 수 있다.로그 레벨 종류 레벨 설명 사용 예시 TRACE- 가장 낮은 수준의 로그로, 모든 내부 동작 정보를 출력 - 성능 저하가 발생할 수 있어 운영 환경에서는 비추천메소드 진입/종료, 루프 내부 처리 등DEBUG- 개발 중에 사용하는 대표적인 로그 레벨 - 흐름 확인, 조건 분기, 주요 변수 값 등을 기록할 때 사용설정 값 확인, 흐름 제어 상태, 내부 변수 값 등INFO- 서비스 상태 변화나 사용자가 이해해도 되는 수준의 메시지 - 운영 환경에서 기본적으로 켜져 있는 경우가 많음서버 시작, 요청 수신, 완료 메시지 등WARN- 심각하지는..

Spring/응용 2025.06.18