분류 전체보기 2635

[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..

[12장] OAuth 2가 작동하는 방법

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 1. OAuth 2 프레임워크OAuth 2를 권한 부여 프레임워크라고 부르는 경우가 많으며, 타사 웹사이트나 웹이 리소스에 접근할 수 있게 허용하는 것이 주목적OAuth 2는 특정 구현이나 라이브러리가 아니라는 점이 중요여태까지 다룬 HTTP Basic 인증 방식에는 두 가지 고려할 문제가 있음모든 요청에 자격 증명을 보내야 함사용자의 자격 증명을 별도의 시스템이 관리해야 함 모든 요청에 대한 자격 증명을 보내는 방식은 일반적으로 다음을 의미하기 때문에 바람직하지 않음네트워크를 통해 자격 증명이 자주 공유됨클라이언트가..

[10장] CSRF 보호와 CORS 적용

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 1. 애플리케이션에 CSRF (사이트 간 요청 위조) 보호 적용스프링 시큐리티에 기본적으로 CSRF 보호가 활성화되어 있음CSRF는 광범위한 공격 유형이며 CSRF에 취약한 애플리케이션은 인증 후 사용자가 웹 애플리케이션에서 원치 않는 작업을 실행하게 할 수 있음CSRF에 취약한 애플리케이션을 개발해서 사용자가 원치 않는 작업이 실행되는 상황은 누구도 원하지 않을 것 1.1 스프링 시큐리티의 CSRF 보호가 작동하는 방식CSRF 공격은 사용자가 웹 애플리케이션에 로그인했다고 가정하며 사용자는 공격자에게 속아서 작업 중..

[9장] 필터 구현

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론스프링 시큐리티의 HTTP 필터는 일반적으로 요청에 적용해야 하는 각 책임을 관리하며 책임의 체인을 형성함필터는 요청을 수신하고 그 논리를 실행하며 최종적으로 체임의 다음 필터에 요청을 위임함 스프링 시큐리티는 맞춤 구성을 통해 필터 체인에 추가할 수 있는 필터 구현을 제공하지만 맞춤형 필터도 정의할 수 있음 1. 스프링 시큐리티 아키텍처의 필터 구현인증 필터는 요청을 가로채고 인증 책임을 AuthenticationManager에 위임함인증 이전에 특정 논리를 실행하려면 인증 필터 앞에 필터를 추가하면 됨스프링..

[8장] 권한 부여 구성: 제한 적용

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 1. Matcher 메서드로 엔드포인트 선택요청에 권한을 부여할 때 관리자 역할이 있는 사용자만 엔드포인트를 호출할 수 있도록 mvcMatchers() 메서드를 이용할 수 있음Matcher 메서드로 요청을 참조할 때는 특정한 규칙부터 일반적인 규칙의 순서로 지정해야 하므로 anyRequest() 메서드를 mvcMatchers() 같은 더 특정적인 Matcher 메서드보다 먼저 호출할 수 없음 2. MVC Matcher 메서드로 권한을 부여할 요청 선택권한 부여 구성을 적용할 요청을 지정하는 일반적인 방법은 MVC 식..