분류 전체보기 2639

[17장] 전역 메서드 보안: 사전 및 사후 필터링

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론메서드 호출은 허용하면서도 메서드로 보내는 매개변수가 몇 가지 규칙을 따르는지 확인하고 싶을 수도 있음또는 메서드를 호출한 뒤 호출자가 반환된 값의 승인된 부분만 받을 수 있게 하려는 시나리오도 있을 수 있음이러한 기능을 필터링이라고 하며 다음의 두 범주로 분류함사전 필터링 (prefiltering): 프레임워크가 메서드를 호출하기 전에 매개변수의 값을 필터링사후 필터링 (postfiltering): 프레임워크가 메서드를 호출한 뒤 반환된 값을 필터링 필터링은 호출 권한 부여와 다른 방식으로 작동함필터링을 적용하면..

[Hibernate/JPA] Batching

1. JDBC 배치 업데이트와 Hibernate 배치 1.1 JDBC 배치 업데이트(Batch Update) 기본 개념JDBC 2.0부터 여러 개의 INSERT, UPDATE, DELETE statement를 하나의 DB 요청으로 묶어 실행 가능addBatch()로 여러 statement를 쌓고executeBatch()로 한 번에 실행 JDBC 배치 업데이트를 실행함으로써 얻을 수 있는 이점은 다음과 같음데이터베이스 왕복 (Round Trip) 횟수 감소트랜잭션 응답 시간 대폭 단축대량 처리 (수천~수만 건)에서 필수적 성능 최적화 1.2 Statement vs PreparedStatement 배치Statement 배치는 각 SQL이 완전히 다른 정적 SQL일 때 실행드라이버/DB마다 지원 및 동작 방식..

DB/JPA 2025.06.04

[Hibernate/JPA] Statement

1. Statement 생애주기와 실행 계획 1.1 Statement와 PreparedStatement의 실행 단계Statement는 SQL을 문자열로 직접 실행하며 매번 파싱과 실행 계획 수립 필요PreparedStatement는 다음과 같이 동작함SQL을 미리 컴파일바인드 변수로 파라미터화여러 번 실행 시 실행 계획을 재사용하여 성능 향상서버 측 Prepare/Execute로 동작 실행 단계Parsing: SQL 문법/구문 오류 체크, 내부 파싱 트리 생성Optimizer: SQL의 실행 계획 (Execution Plan)을 생성하며 인덱스 선택, 조인 순서/알고리즘, 통계 기반 비용 산정Executor: 실제 실행 계획에 따라 DB에서 데이터 읽고 결과 생성PreparedStatement는 실행 ..

DB/JPA 2025.06.04

[Hibernate/JPA] 영속성 컨텍스트

1. 영속성 컨텍스트 (Persistence Context) 1.1 영속성 컨텍스트란?Persistence Context는 JPA(EntityManager), Hibernate(Session)에서 엔티티 상태와 변경사항을 관리하는 1차 캐시 역할 수행엔티티를 조회하면 해당 엔티티는 영속성 컨텍스트에 등록되어 엔티티 식별자를 키로 하는 Map에 저장됨같은 트랜잭션 내에서 동일 엔티티를 여러 번 조회해도, 영속성 컨텍스트에서 캐싱된 객체를 반환데이터베이스를 조회하지 않고 캐시를 조회하기 때문에 빠름 1.2 EntityManager와 SessionJPA의 EntityManager와 Hibernate의 Session은 영속성 컨텍스트의 API 역할을 하며, 기능적으로 거의 동일Hibernate 5.2부터는 Se..

DB/JPA 2025.06.04

[Hibernate/JPA] 상속

1. JPA 상속 정리 1.1 JPA에서 상속이 중요한 이유상속은 도메인 모델에서 공통 속성과 비즈니스 로직을 추상 클래스 또는 인터페이스로 표현할 수 있게 해 줌엔티티 계층 구조를 통해 중복 코드와 설계 복잡도를 줄이고, 전략 패턴(Strategy Pattern), 방문자 패턴(Visitor Pattern) 등 행동 패턴 구현에 적합함데이터 구조(속성)의 재사용보다, 메서드의 다양화에 더 적합함데이터 재사용에는 컴포지션 패턴이 더 나음 1.2 상속과 전략 패턴 실전 예시구독자 발송 시스템을 예로 들면 다음과 같음Subscriber(부모): firstName, lastName, createdOn 등 공통 속성EmailSubscriber, SmsSubscriber(자식): 각자 email, phoneNu..

DB/JPA 2025.06.02

[Hibernate/JPA] 관계

1. 관계형 데이터베이스의 테이블 관계와 JPA 매핑관계형 데이터베이스에는 대표적으로 일대다 (One-to-Many), 일대일 (One-to-One) 그리고 다대다 (Many-to-Many) 세 가지 테이블 관계가 존재함이러한 관계는 외래 키를 통해 정의되며, JPA와 Hibernate에서는 객체지향 모델의 단방향·양방향 관계에 맞춰 다양한 매핑 방법을 제공함 일대다 관계단방향: 자식(@ManyToOne), 부모(@OneToMany) 또는 부모의 @ElementCollection양방향: 자식(@ManyToOne), 부모(@OneToMany(mappedBy = ...)) 일대일 관계단방향: 자식(@OneToOne)양방향: 자식(@OneToOne), 부모(@OneToOne(mappedBy = ...)) 다대..

DB/JPA 2025.06.02

[16장] 전역 메서드 보안: 사전 및 사후 권한 부여

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론스프링 시큐리티는 앱이 HTTP 엔드포인트를 이용하지 않는 시나리오에도 문제없이 잘 쓸 수 있음메서드 수준에서 권한 부여를 구성하는 방법을 `전역 메서드 보안`이라고 지칭해당 방법으로 웹 애플리케이션과 웹이 아닌 애플리케이션의 권한 부여를 구성할 수 있음 웹이 아닌 애플리케이션에서 전역 메서드 보안은 엔드포인트 없이도 권한 부여 규칙을 구현할 수 있게 해 줌웹 애플리케이션에서는 엔드포인트 수준만이 아니라 앱의 다양한 계층에 권한 부여 규칙을 적용하는 유연성을 제공 1. 전역 메서드 보안 활성화전역 메서드 보안은 ..

[15장] OAuth 2: JWT와 암호화 서명 사용

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론암호화 서명으로 토큰을 검증하면 권한 부여 서버를 호출하거나 공유된 데이터베이스를 이용하지 않아도 리소스 서버가 토큰을 검증할 수 있다는 이점이 있음해당 토큰 검증 방식은 OAuth 2로 인증과 권한 부여를 구현하는 시스템에서 일반적으로 이용됨 1. JWT의 대칭 키로 서명된 토큰 이용토큰에 서명하는 가장 직관적인 방법은 대칭 키를 이용하는 것대칭 키 방식에서는 같은 키로 토큰에 서명하고 해당 서명을 검증할 수 있음이 방식은 속도가 빠르다는 장점이 있지만 인증 프로세스에 관여하는 모든 애플리케이션에 항상 키를 공유..

[14장] OAuth 2: 리소스 서버 구현

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론리소스 서버는 사용자 리소스를 관리하는 서버클라이언트에 리소스에 대한 접근을 허용하기 위해서는 리소스 서버에 올바른 액세스 토큰이 필요함클라이언트는 권한 부여 서버에서 액세스 토큰을 얻고 이를 HTTP 요청 헤더에 추가해 리소스 서버의 리소스를 호출함 리소스 서버 수준에서 토큰 검증을 구현하는 데는 여러 옵션이 있음첫 번째 옵션은 리소스 서버가 직접 권한 부여 서버를 호출해서 발행한 토큰이 맞는지 확인하는 것 두 번째 옵션은 권한 부여 서버가 토큰을 저장할 때 공유된 DB를 사용하는 것이며 해당 옵션에서는 리소..

[13장] OAuth 2: 권한 부여 서버 구현

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론권한 부여 서버의 역할은 사용자를 인증하고 클라이언트에 토큰을 제공하는 것클라이언트는 리소스 서버가 노출하는 리소스에 사용자를 대신해 접근하는 데 해당 토큰을 이용 OAuth 2 프레임워크는 토큰을 얻기 위한 여러 흐름을 정의이러한 흐름을 grant라고 하며 시나리오에 맞게 여러 그랜트 유형 중 하나를 선택할 수 있음권한 부여 서버의 동작은 선택한 그랜트 유형에 따라 달라짐 책이 출판되던 당시에는 Spring Security의 OAuth 2 종속성 지원이 중단된 상태였기 때문에, 이번 장에서는 Spring Secu..