Spring

[JWT를 활용한 로그아웃, 회원탈퇴, 회원 정보 조회 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 로그아웃 및 회원탈퇴 API 구현Access Token과 Refresh Token은 각각 유효 시간이 정해져 있다. [로그아웃 및 회원탈퇴 API]는 유효 시간이 남은 Access Token을 통해 호출할 수 있고, API가 호출되면 해당 사용자의 Access Token과 Refresh Token을 모두 사용할 수 없도록 만들어야 한다.이전 글을 보면 Refresh Token은 Access Token을 재발급할 때만 사용한다. 입력받은 Refres..
[JWT를 활용한 토큰 재발급 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 Refresh Token 생성 및 Redis에 저장아래 글에서 보안상의 이유로 JWT를 Access Token과 Refresh Token으로 나눠서 사용한다고 했다. [팀 프로젝트] 쿠키(Cookie)와 세션(Session), 토큰(Token) 차이 & JWT(JSON Web Token)JWT를 활용한 인증 및 인가(로그인, 로그아웃, 회원탈퇴) 기능 구현 방법에 대해 작성하기 전, 기본 개념부터 정리해두려고 한다. 사실 완벽하게 이해하고 구현했다기보단 최소한의 필요한 게..
[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 로그인 API 구현하기지금까지 토큰 발급부터 토큰 인증 처리까지 모든 기능을 구현했다. 이제 비즈니스 로직을 완성해 보자. MemberRequestDTO, MemberResponseDTOa. MemberRequestDTO.MemberLoginDTO클라이언트에게 받을 정보의 틀이 되는 class로, 이메일과 비밀번호를 입력받는다.public class MemberRequestDTO { ... @Getter public static class M..
1. 프록시먼저, 프록시를 언제 사용해야 하는지 알아보자. 아래에서 Member를 조회할 때 Team도 함께 조회해야 할까? 회원 이름과 소속 팀 이름을 함께 출력하려면 Member를 조회할 때 Team도 같이 조회하면 좋다. 회원 이름만 출력하면 된다면 Member만 조회하는 게 낫다. 따라서 사용하지 않는다면, 연관관계가 걸려있다고 해도 같이 조회하지 않는 게 성능상으로 더 효율적이다.JPA는 이 문제를 지연 로딩이나 프록시를 통해 해결한다. 프록시보단 지연 로딩을 주로 사용하지만, 프록시 구조를 알아둬야 즉시 로딩과 지연 로딩에 대해 깊이 이해할 수 있다.// 회원과 팀 함께 출력public void printUserAndTeam(String memberId) { Member member = ..
1. 상속관계 매핑대부분의 RDB는 객체와 달리 상속 관계를 지원하지 않는다. 대신 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. 따라서 상속 관계를 매핑하려면, 객체의 상속 구조와 DB의 슈퍼타입 & 서브타입 관계를 매핑해야 한다. 슈퍼타입 & 서브타입 논리 모델링을 실제 물리 모델로 구현하는 방법은 아래 3가지로 나눌 수 있다. 전략을 바꾸려면 코드에 손댈 필요 없이 애노테이션에서 전략만 수정하면 된다. DB 입장에서 어떤 방법으로 구현하더라도 JPA에서 다 매핑할 수 있다.조인 전략 = 각각을 테이블로 변환한다.단일 테이블 전략 = 하나의 통합된 테이블로 변환한다.구현 클래스마다 테이블 전략 = 서브타입을 테이블로 변환한다.애노테이션전략 / 기본값@Inheritance(stra..
[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 Spring Security의 구조(Filter)와 인증(Authentication) 구조에 대한 설명은 아래 글을 참고하자. [Spring Security] Spring Security의 구조(Filter) 이해하기[JWT를 활용한 로그인, 로그아웃, 회원탈퇴 API 구현 방법]에 대해 설명하기 전, 공식 문서를 보면서 Spring Security의 기본 개념(Filter)에 대해 학습해보려고 한다. API를 구현할 때 사용한 자바, 스프dev-meung.tistory...
1. 연관관계 매핑 시 고려사항 3가지다중성JPA가 다중성에 맞는 4가지 애노테이션을 제공한다. DB 관점에서의 다중성을 기준으로 고민하면 된다. 헷갈린다면 반대의 상황을 생각해 보자. 예를 들어 회원과 팀의 관계가 헷갈린다면, 팀과 회원의 관계로 다시 생각해 보면 된다. 대칭성이 있기 때문에 반대로 생각해 보면 더 이해하기 쉬워지기도 하기 때문이다.다중성(차수)애노테이션다대일 [N:1]@ManyToOne일대다 [1:N]@OneToMany일대일 [1:1]@OneToOne다대다 [N:M]@ManyToMany 참고'다대다 [N:M]'는 실무에서 쓰면 안 된다. 단방향 & 양방향저번 섹션에서 객체와 테이블의 연관관계를 맺는 방법의 차이에 대해 학습했다.객체참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조하면 ..
[JWT를 활용한 일반 로그인 API 구현] 과정을 기록해보려고 한다. 프로젝트 개발 환경은 아래와 같다.Java: 17JDK: 17.0.6IDE: IntelliJ IDEA 2024.1Framework: Spring Boot 3.3.1 JWT에 대한 설명은 아래 글을 참고하자. [팀 프로젝트] 하루치(HARUCHI) - 쿠키(Cookie)와 세션(Session), 토큰(Token) 차이 & JWT(JSON Web Token)JWT를 활용한 인증 및 인가(로그인, 로그아웃, 회원탈퇴) 기능 구현 방법에 대해 작성하기 전, 기본 개념부터 정리해두려고 한다. 사실 완벽하게 이해하고 구현했다기보단 최소한의 필요한 게 뭔dev-meung.tistory.com Spring Security의 구조(Filter)와 인..
이번 섹션에선 객체와 테이블의 연관관계 차이를 이해한 뒤, 객체의 참조와 테이블의 외래 키를 매핑하는 방법에 대해 학습한다. 아래에 있는 핵심 용어만 잘 이해해 두면 된다.방향(Direction): 단방향, 양방향다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)💫연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인이 필요함 1. 연관관계의 필요성객체지향스러운 설계를 이해하기 위해 아래 책(객체지향의 사실과 오해)과 를 참고하면 좋다.객체지향 설계의 목표는자율적인 객체들의 협력 공동체를 만드는 것이다.- 조영호(객체지향의 사실과 오해) - 객체의 참조와 테이블의 외래 키아래와 같은 예제 시나리오를 생각해 보자.1. 회원과 팀이 존재한다.2...
1. 객체와 테이블 매핑@Entity@Entity 애노테이션이 붙은 class는 JPA가 관리하며, 엔티티라고 한다. 따라서 JPA를 사용해서 테이블과 매핑할 class는 해당 애노테이션을 필수로 붙여야 한다. 아래는 JPA 스펙상 꼭 지켜야 할 주의사항이다.기본 생성자(파라미터가 없는 public 또는 protected 생성자)가 필수로 있어야 한다.JPA 리플렉션 등의 기술을 써서 객체를 프록시하는 경우에 필요하기 때문이다.final class, enum, interface, inner class엔 사용할 수 없다.내가 DB에 저장할 필드에 final을 사용하면 안 된다.@Entity(name = "Member") // 기본값 Memberpublic class Member { ...} 속성 정리..
dev-meung
'Spring' 태그의 글 목록 (2 Page)