[4] Spring Security Local: JWT 발급과 인증 필터 구현
·
Spring/Security
GitHub - HeoJunHyoung/bytemallContribute to HeoJunHyoung/bytemall development by creating an account on GitHub.github.com1. 들어가며이전 포스팅에서 우리는 회원을 정의(MemberEntity)하고 이를 시큐리티 표준(AuthMember)으로 변환하는 작업을 마쳤다. 이제 재료 손질은 끝났다. 본격적으로 "인증 시스템의 엔진"을 조립할 차례다.이번 포스팅의 목표는 두 가지다.JwtTokenProvider: 사용자의 정보를 암호화하여 JWT(Access/Refresh Token)를 생성하고 검증하는 '발급처'를 만든다.JwtAuthenticationFilter: 모든 요청의 앞단에서 쿠키를 검사해 유효한 토큰이 ..
[3] Spring Security Local: 도메인 설계와 UserDetails
·
Spring/Security
GitHub - HeoJunHyoung/bytemallContribute to HeoJunHyoung/bytemall development by creating an account on GitHub.github.com 1. 들어가며 이전 포스팅에서 프로젝트의 환경 설정과 패키지 구조를 잡았다면, 이제는 시스템의 주인공인 '사용자(Member)'를 정의할 차례다. Spring Security는 기본적으로 우리 프로젝트의 DB 구조를 알지 못한다. Spring Security가 아는 것은 오직 UserDetails라는 인터페이스뿐이다. 따라서 우리는 DB에 저장된 비즈니스 도메인(MemberEntity)을 Spring Security가 이해할 수 있는 보안 표준 객체(AuthMember)로 변환해 주는 작..
[2] Spring Security Local: 프로젝트 구조 설계 및 필수 의존성 설정
·
Spring/Security
GitHub - HeoJunHyoung/bytemallContribute to HeoJunHyoung/bytemall development by creating an account on GitHub.github.com 1. 들어가며 이전 포스팅에서 우리는 Spring Security의 동작 원리와 필터 위임 모델, 그리고 Controller 위임 방식의 당위성을 살펴보았다. 이제 이론을 뒤로하고 실제 코드를 작성할 차례다. 이번 포스팅에서는 Spring Boot 3.x 환경에서 시큐리티, JWT, Redis를 사용하기 위한 필수 의존성(Dependency)을 추가하고, 전체적인 환경 설정(application.yml)과 확장성을 고려한 패키지 구조(Package Structure)를 잡는다. 또한 보안의..
[1] Spring Security Local: 동작 원리 이해
·
Spring/Security
GitHub - HeoJunHyoung/bytemallContribute to HeoJunHyoung/bytemall development by creating an account on GitHub.github.com 1. 들어가며 Spring Security는 강력한 보안 기능을 제공하지만, 그만큼 진입 장벽이 높다. 단순히 인터넷에 있는 설정 코드를 복사해서 붙여넣는 것만으로는 "왜 로그인이 되는지", "왜 특정 요청이 차단되는지", "에러가 나면 어디를 봐야 하는지" 이해하기 어렵다. 특히 Spring Boot 3와 Security 6로 넘어오면서 많은 설정 방식이 변화했기에, 최신 흐름을 명확히 파악하는 것이 중요하다. 본 시리즈에서는 JWT(JSON Web Token)와 Redis를 활용하여 ..
[Practice-2] 객체 생성: 빌더 패턴과 정적 팩터리 메서드
·
Spring/Core
Spring(Java)으로 개발하다 보면 객체를 생성하는 다양한 방법을 마주하게 됩니다. 그중 가장 대표적인 것이 빌더 패턴(Builder Pattern)과 정적 팩터리 메서드(Static Factory Method)입니다. 많은 개발자들이 자연스럽게 "Entity에는 빌더 패턴, DTO에는 정적 팩터리 메서드"라는 규칙을 따르곤 합니다. 왜 이런 관행이 생겼을까요? 단순히 파라미터 개수 때문일까요? 이 글에서는 두 패턴의 핵심적인 차이와 각자의 역할에 가장 적합한 사용 기준을 명확하게 알아보겠습니다.빌더 패턴 (Builder Pattern): "어떻게(How) 만들 것인가?" 🧱빌더 패턴은 복잡한 객체를 생성할 때, 그 과정을 단계별로 명확하게 표현하는 데 중점을 둡니다. 여러 데이터를 '조립'하여 ..
[Practice-2] 연관관계 편의 메서드
·
Spring/JPA
JPA 양방향 연관관계, '편의 메서드'는 선택이 아닌 필수!JPA에서 양방향 연관관계 매핑은 매우 편리하지만, 제대로 관리하지 않으면 객체와 데이터베이스 간의 데이터 불일치를 유발하는 미묘한 버그의 원인이 될 수 있습니다. 이때 '연관관계 편의 메서드'는 이런 문제를 해결하고 코드를 더욱 객체지향적으로 만들어주는 중요한 개념입니다.🤔 문제 상황: 왜 편의 메서드가 필요한가?UserEntity(회원)와 PostEntity(게시글)가 서로 양방향 관계(1:N)로 매핑되어 있다고 가정해 봅시다.UserEntity는 자신이 작성한 글 목록(List)을 가집니다.PostEntity는 자신의 작성자(UserEntity)를 가집니다.새로운 게시글을 등록할 때, 우리는 다음과 같이 연관관계를 설정해야 합니다.// ..
[Practice-1] JPA 연관관계 매핑과 성능 최적화: 흔한 오해와 올바른 접근법 (⭐⭐)
·
Spring/JPA
JPA를 사용하면서 연관관계 매핑, 특히 성능 문제와 마주하는 것은 모든 개발자의 숙명과 같다. N+1 문제부터 시작해 Fetch Join, Batch Size 등 다양한 해결책이 있지만, 각 전략의 동작 원리와 한계를 명확히 이해하지 못하면 또 다른 문제에 부딪히기 쉽다. 이 글은 JPA 연관관계 설계를 하면서 겪었던 여러 오해와 그 해소 과정을 정리한 것이다.1. 관계 모델링의 기초: 왜 다대일(N:1) 관계인가?가장 기본적인 선수(Player)와 팀(Team)의 관계부터 시작한다. 이 관계를 모델링할 때 흔히 일대다(1:N)인지 다대일(N:1)인지 혼동하곤 한다.명확한 기준은 '하나의 엔티티가 상대 엔티티를 오직 하나만 가질 수 있는가'이다.하나의 선수는 오직 하나의 팀에만 소속된다.하나의 팀은 여..
[Practice-1] ResponseEntity<>
·
Spring/Core
1. 배경 지식Spring MVC로 API를 처음 만들 때의 기억은 아직도 생생하다. 컨트롤러 메서드에서 DTO 객체를 반환하기만 하면, Jackson 라이브러리가 마법처럼 JSON으로 변환해 주었다. 코드는 간결했고, 직관적이었다. 하지만 코드 리뷰 겸 다른 사람들이 올린 깃 레파지토리를 보면 단순히 DTO만 반환하지 않는다는것을 발견했다. 대부분의 코드는 DTO를 직접 반환하는 대신, 아래처럼 ResponseEntity라는 객체로 감싸서 반환하고 있었던 것이다. // 나의 코드 작성 방식@GetMapping("/members/{id}")public MemberDto getMember(@PathVariable Long id) { return memberService.findMember(id);}/..