DEV/Spring

DEV/Spring

[Spring] 권한 순서 정하기 (RoleHierarchy : 역할계층)

Spring에서 API 별로 사용할 수 있는 권한을 제한해둘때는 Spring Security를 활용하여 사용 권한 정의를 한다. 하지만 권한 종류가 여러개 생기는 순간, 하위 권한부터 상위 권한까지 매번 적어주어야 하는 귀찮음이 존재한다. (예를들어 hasAuthorize('ROLE_ADMIN') and hasAuthorize('ROLE_USER') 와 같이 말이다.) 이를 해결하는 방법이 RoleHierarchy 즉 역할의 계층화이다. 1. RoleHierarchy 란? RoleHierarchy 는 권한의 계층화를 만들어주는 인터페이스이다. 인터페이스에는 GrantedAuthority Collection 값을 포함하고 있다. 실제 구현체는 RoleHierarchy를 Implement 한 RoleHier..

DEV/Spring

[Spring] API Path Prefix 설정하기

API 개발을 하다보면 공통으로 들어가는 경로 부분이 생긴다. 예를들어 '/api' 같은 부분이나 '/v1' 같은 버전 정보가 있다. 매번 넣기 귀찮기도하고 Prefix 로 넣을 방법이 있을까하여 찾아본 것을 정리해보려한다. 0. Controller 우선 간단히 테스트할 Controller 를 만들어 주었다. Postman으로 요청 시에 메세지가 정상적으로 오는 것을 볼수 있다. 테스트용 API 가 만들어졌으니 Prefix Path 적용 방법에 대해 알아보자. 1. application.yaml 첫번째 방법으로 application.yaml 에 정의하는 방법이다. 이 방법의 경우, 전체 Path에 적용되니 그점을 유의하자. 기존 경로에 '/api'를 붙여주고 조회한 결과 정상적으로 조회가 된다. 버전 별..

DEV/Spring

[Spring] WebClient 란?

Spring 에서 외부 API를 요청할 때, 사용하는 라이브러리들은 RestTemplate, WebClient, OpenFeign 이 있다. 이번에는 비동기 방식을 지원하는 WebClient에 대해 알아보자. 1. WebClient 란? WebClient는 Spring WebFlux에 포함되어 있는 HTTP 요청 라이브러리로, Reactor 기반의 API 를 가지고있다. 반응형 라이브러리를 참조하면 스레드나 동시성을 처리할 필요 없이 비동기 로직의 선언적 구성을 가능하게 하고 완전한 논 블로킹으로 구현되어있다. 물론 동기 방식으로도 사용이 가능하기에 사용자의 구현에 따라 동기/비동기 선택이 가능하다. 2. 구성 WebClient를 생성하는 방법은, WebClient.create() WebClient.bu..

DEV/Spring

[Spring] Data Rest Event 사용하기

0. 저번 Data Rest 포스팅 * [Spring] Spring Data Rest 란? 1. Data Rest Event Handler 종류 Spring Data Rest 에서, 사용 가능한 이벤트의 종류는 8가지가 있다. BeforeCreateEvent AfterCreateEvent BeforeSaveEvent AfterSaveEvent BeforeLinkSaveEvent AfterLinkSaveEvent BeforeDeleteEvent AfterDeleteEvent 각 이벤트가 발생하는 트리거는 Create 생성, Save 수정, Link Save 연관관계 저장, Delete 삭제 시에 발생하게 된다. Http Method 관점에서 보면 POST, PUT, PATCH, DELETE 로 보면 된다...

DEV/Spring

[JPA] @JoinColumns 두 개 이상의 조인 컬럼 설정하기

Entity 연관 관계 설정을 하다보면,두 개 이상의 조인 관계를 나타내야하는 경우가 있다.  만약에 서비스 사용자(Member)와 게시글(Board) Entity가 존재하고,게시글은 사용자의 고유 아이다(id)와 이름(name) 을 외래키(foreign key)로 가지고 있다고 해보자. Member와 Board는 1:N 의 관계를 가질때,Entity 는 아래와 같이 구성할 수 있을 것이다.  1. 구현[Entity] Member.class@Entity@NoArgsConstructor@Getter@ToStringpublic class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @C..

DEV/Spring

[Spring] 간편로그인 구현하기 (feat. 구글, 카카오)

간편로그인 부분은 인증, 인가, 권한부여 등의 부분이 들어가기 때문에 Spring Security 에 대해 알고있다면 수월하게 작업할 수 있을 것입니다. 1. 관련 포스팅 * OAuth 2.0 개념 정리 * Google 간편로그인 등록 (feat. OAuth) * 카카오 간편로그인 등록 (포스팅 예정) 2. 테스트 환경 * MacOS (M1) * Spring Boot 3.1.1 * Spring Security 6.1.1 * Spring Security OAuth2 Client 6.1.1 * jjwt 0.11.5 3. 구현 구현 부분은 다른 분들 글을 많이 참고하였습니다. 참고한 글에도 상세한 설명이 많으니 코드와 간략한 설명만 하고 넘어가도록 하겠습니다. a. Gradle dependencies { /*..

DEV/Spring

[Spring] Spring Security 란?

간편로그인 관련 공부 중, OAuth2.0 간편로그인을 붙이려면 Spring Scurity 내용도 알아야하기 때문에 간단하게 정리한 내용을 적어놓으려 한다. 공식 문서 내용이 많기 때문에 모든 내용을 적기보단 개요(?) 정도로만 정리해보려한다. 이 글을 보기 전에, Spring Boot 동작방식, 서블릿, 필터, 인터프리터에 관한 글을 보는게 선행 된다면 이해하는데 도움이 된다고 생각한다. (사실 Spring 으로 작업 하고 있다면 다들 알고 있겠지만... 공부해라 나...ㅋㅋ) Spring Security 란? Spring.io에서 'Spring Security는 일반적인 공격에 대한 인증, 권한 부여 및 보호 기능을 제공하는 프레임워크입니다 . 명령형 및 반응형 애플리케이션 모두를 보호하기 위한 최고..

DEV/Spring

[Spring] Exception Handler (with. Spring Data Rest)

관련 포스팅 [Spring] Spring Data Rest 란? 이전 포스팅에서 Spring Data Rest 에서 예외상황이 발생하면 아래 이미지 처럼 반환값이 오는 것을 볼수있었다. 하지만 클라이언트에서 이러한 상세 정보까지 알 필요가 있는가? 는 생각해봐야할 것 같다. (원인이 상세하게 나오니 보안적으로도 좋지 않아보인다.) 이러한 Exception Message 형태를 커스텀 해보려한다. 1. @ControllerAdvice 와 @RestControllerAdvice 우선 Exception 을 감지하고, 반환 형태를 커스텀 하기 위해선 @ControllerAdivce, @RestControllerAdvice 에 대해서 짚고 넘어가려한다. @ContollerAdvice의 설명을 보면, @Except..

DEV/Spring

[Spring] Spring Data Rest 란?

이번에 갠플 진행하면서, 매번 만들던 Controller, Service, Repository 가 아닌 다른 형태로 진행해보기로 하였다. Spring Data Rest를 이용한 방법인데, 설정과 어노테이션을 이용해서 Entity와 Repository 만으로 API 를 구성하며 추가적인 Http Request Path 설정과 반환 데이터 구조를 만들지 않아도 간단하게 사용이 가능하다. 1. Data Rest ? Spring.io 에서는 Spring Data Rest 를 다음과 같이 정의하고 있다. REST 웹 서비스는 웹에서 애플리케이션 통합을 위한 최고의 수단이 되었습니다. 핵심에서 REST는 클라이언트가 상호 작용하는 리소스로 구성된 시스템을 정의합니다. 이러한 리소스는 하이퍼미디어 기반 방식으로 구현..

DEV/Spring

[JPA] Repository 인터페이스

Why?JPA Repository 를 만들때 자료를 찾아보면 사용되는 인터페이스가 JpaRepository, CRUDRepository 이 두개가 가장 많이 나와 어떤 차이점이 있는지 알아보았다. 아래 캡쳐된 프로젝트Spring boot 3.0.4  What?ChatGpt 에게 물어봤을 때 다음과 같이 답변해주었다.JpaRepositoryJpaRepository는 CRUDRepository를 상속하며, 다양한 데이터 액세스 기능을 제공하는 인터페이스입니다. JpaRepository는 단순한 CRUD 연산뿐만 아니라, 페이징, 정렬, Native 쿼리, 벌크 연산 등을 지원합니다. JpaRepository를 사용하면 더욱 복잡한 데이터 조작을 할 수 있으며, 다양한 데이터 액세스 기능을 제공하여 기능 확장..

l-eazzy
'DEV/Spring' 카테고리의 글 목록 (2 Page)