[Spring] JWT 서명 검증의 원리
·
Spring/Spring
서론유튜브를 보다가 우연히 JWT에 대해 설명해 주는 영상을 접하게 되었습니다. 영상을 보며 JWT의 서명 검증 원리를 너무 쉽게 설명해 주어서, 이를 바탕으로 본 게시글을 작성하게 되었습니다. 이번 포스팅에서는 JWT의 기본적인 구조와 서명 생성 및 검증 과정을 쉽게 설명해 보려고 합니다.JWT 구조 JWT(JSON Web Token)는 세 가지 주요 구성 요소로 이루어져 있습니다: 헤더(header), 페이로드(payload), 서명(signature). 이 이미지는 JWT의 각 부분을 시각적으로 설명합니다. 헤더(Header): 알고리즘 유형과 토큰 유형을 지정합니다. 예시에서는 HS256 알고리즘과 JWT 타입이 사용되었습니다.페이로드(Payload): 토큰의 데이터가 포함된 부분입니다. 여기에는..
[Spring Boot] JPA @MapsId를 이용한 FK를 PK로 사용하기
·
Spring/Spring Boot
이번 프로젝트에서 JPA 엔티티를 설계하면서 외래 키를 기본 키로 사용하는 경우를 마주하게 되었습니다. 이 과정에서 활용한 기능이 바로 @MapsId입니다. 이 글에서는 @MapsId 어노테이션을 사용하여 외래 키를 기본 키로 설정하는 방법과 그 이점에 대해 설명하고자 합니다.1. 프로젝트 배경이번 프로젝트에서는 Profile 엔티티와 ProfileImage 엔티티 간의 관계를 설정해야 했습니다. Profile 엔티티는 유저의 프로필 정보를 담고 있으며, ProfileImage 엔티티는 프로필 이미지 정보를 저장합니다. 이때, ProfileImage 엔티티의 기본 키로 Profile 엔티티의 기본 키를 사용하고자 했습니다. 이를 구현하기 위해 JPA의 @MapsId 어노테이션을 활용하게 되었습니다.2. ..
[Spring Boot] @NoargsConstructor(AccessLevel.PROTECTED), @Builder
·
Spring/Spring Boot
이번 프로젝트를 진행하면서 JPA Entity 클래스의 설계를 더욱 견고하게 하기 위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) 기능을 활용하게 되었습니다. 이 접근 방식을 통해 객체의 상태를 관리하고, 명확한 설계 의도를 표현하는 방법을 최적화할 수 있었습니다. 특히, JPA를 사용하는 Spring 애플리케이션에서 엔티티 클래스의 기본 생성자 접근을 제어하는 것이 얼마나 중요한지 알게 되었습니다. 1. JPA와 기본 생성자JPA는 엔티티 클래스를 인스턴스화할 때 기본 생성자를 사용합니다. 따라서, 모든 엔티티 클래스는 기본 생성자를 제공해야 합니다. 기본 생성자가 없으면 JPA는 엔티티 클래스를 인스턴스화할 수 없고, 이는 곧 런타임 예외로 이어집니다...
[Spring Boot] Flyway를 이용한 DB 형상관리
·
Spring/Spring Boot
1. Flyway란?Flyway는 데이터베이스의 버전 관리 및 마이그레이션을 간편하게 도와주는 오픈 소스 라이브러리입니다. 데이터베이스 스키마와 데이터의 변경 이력을 코드로 관리할 수 있으며, 변경 사항을 쉽게 추적하고 반영할 수 있게 합니다.  2. Flyway의 주요 기능버전 관리: 데이터베이스 변경 이력을 버전별로 관리할 수 있습니다.자동 마이그레이션: 애플리케이션 시작 시 자동으로 데이터베이스 변경 사항을 적용할 수 있습니다.다양한 데이터베이스 지원: MySQL, PostgreSQL, Oracle 등 다양한 데이터베이스를 지원합니다.Rollback 기능: 잘못된 마이그레이션을 쉽게 되돌릴 수 있습니다. 3. Flyway 설정 및 사용 방법3.1. Flyway 의존성 추가먼저 프로젝트에 Flyway..
Spring Data JPA: 메서드 이름 기반 쿼리와 @Query 애노테이션 기반 쿼리 비교
·
Spring/Spring
Spring Data JPA를 사용하면 데이터베이스와의 상호작용을 쉽게 처리할 수 있습니다. 두 가지 주요 방법으로 쿼리를 정의할 수 있습니다. 메서드 이름 기반 쿼리와 @Query 애노테이션 기반 쿼리 이 두 가지 방법의 차이점과 장단점을 설명하겠습니다. 1. 메서드 이름 기반 쿼리란?메서드 이름 기반 쿼리는 Spring Data JPA에서 제공하는 강력한 기능으로, 메서드 이름을 분석하여 자동으로 쿼리를 생성하는 방식입니다. 메서드 이름의 접두사와 속성 이름을 사용하여 쿼리를 생성합니다.public interface ChampionRepository extends JpaRepository { Champion findByName(String name);}이 예제에서 findByName 메서드는 S..
[Spring Boot]스프링 부트에서 ddl-auto 사용 방법
·
Spring/Spring Boot
스프링 부트에서 ddl-auto 설정은 애플리케이션의 JPA(Hibernate)와 관련된 데이터베이스 스키마 관리 방식을 제어하는 중요한 설정입니다. 이 블로그 게시글에서는 ddl-auto 옵션을 사용하여 스키마 관리 작업을 어떻게 수행할 수 있는지 설명하겠습니다.1. DDL-AUTO 옵션이란?ddl-auto 옵션은 JPA 구현체인 Hibernate가 애플리케이션 시작 시 데이터베이스 스키마를 어떻게 처리할지를 결정합니다. 가능한 값들은 다음과 같습니다:none: Hibernate가 스키마 관리 작업을 수행하지 않습니다.validate: Hibernate가 엔티티와 데이터베이스 스키마를 검증하지만, 변경하지 않습니다.update: Hibernate가 엔티티와 데이터베이스 스키마를 비교하여 필요한 변경을 ..
[GitHub] 빈 패키지 commit 하기(.gitkeep)
·
Spring/Spring
GitHub에 빈 패키지 구조 커밋하기소프트웨어 개발 프로젝트에서 팀과의 효율적인 협업을 위해 미리 패키지 구조를 짜두는 것은 좋은 선택이 될 수 있습니다.Spring Boot와 같은 프레임워크를 사용할 때 패키지 구조를 미리 정의해두면 코드 작성 시 일관성을 유지할 수 있습니다.프로젝트의 패키지 구조를 미리 정의하고 빈 패키지를 GitHub에 커밋하는 방법을 설명하겟습니다. 1. 패키지 구조 정의먼저 프로젝트의 패키지 구조를 정의합니다.com.joon.project├── domain│ ├── account│ │ ├── controller│ │ ├── service│ │ ├── model│ │ ├── repository│ │ └── exception│ ├── p..
[GitHub] 협업시 GitHub 커밋 유형별 규칙
·
Spring/Spring
1. 협업 시 유용한 커밋 메시지 유형협업을 하는 프로젝트에서는 커밋 메시지를 일관되게 작성하는 것이 매우 중요합니다. 일관된 커밋 메시지는 변경 사항을 명확히 이해할 수 있게 하고, 코드 리뷰나 디버깅 시에도 큰 도움이 됩니다. 이번 포스트에서는 협업 시 자주 사용하는 커밋 메시지 유형과 규칙을 설명하겠습니다.2. 커밋 메시지 유형 요약유형 설명 예시feat새로운 기능 추가feat: 사용자 로그인 기능 추가fix버그 수정fix: 사용자 프로필 업데이트 오류 수정docs문서 변경docs: API 사용법 문서 추가style코드 스타일 변경style: 코드 포맷팅 수정refactor코드 리팩토링refactor: 사용자 서비스 로직 리팩토링perf성능 개선perf: 데이터베이스 쿼리 성능 개선test테스트 추..
[Spring] 도메인형 패키지 구조로의 전환
·
Spring/Spring
1. Overview이번 포스트에서는 최근 스프링 부트 프로젝트에서 도메인형 패키지 구조를 사용해본 경험을 공유하려고 합니다. 기존에는 계층형 패키지 구조를 주로 사용했었는데, 이번에 팀 프로젝트를 진행하면서 도메인형 패키지 구조를 도입하게 되었고, 그 이유와 결과를 설명해보겠습니다. 2. 계층형 패키지 구조란?먼저, 계층형 패키지 구조에 대해 간단히 설명해보겠습니다. 계층형 패키지 구조는 일반적으로 다음과 같이 구성됩니다:com.joon.project├── controller│ └── UserController.java├── service│ └── UserService.java├── repository│ └── UserRepository.java├── model│ └── User.java..
[Spring] IntelliJ에서 구글 자바 스타일 가이드 적용하기
·
Spring/Spring
오늘은 IntelliJ 프로젝트에 구글 자바 스타일 가이드를 적용해 코드를 일관되게 만드는 방법을 소개하겠습니다. 저는 최근에 코드 스타일의 통일성이 팀 전체의 효율성을 높이는 데 중요하다는 것을 깨달았습니다. 이로 인해 새로운 팀원이 들어올 때 코드 스타일에 대한 불필요한 논쟁을 줄일 수 있습니다. 최근 혼자 진행하던 프로젝트에 새로운 팀원이 합류하게 되면서 코드 스타일을 어떻게 맞출지 고민하게 되었습니다. 이 과정에서 구글 자바 스타일 가이드를 발견했고, 이를 통해 코드의 일관성을 유지하면 팀 전체의 효율성을 높일 수 있을 것 같았습니다. 오늘은 IntelliJ 프로젝트에 구글 자바 스타일 가이드를 적용하여 코드 스타일에 대한 불필요한 논쟁을 줄이는 방법을 소개하겠습니다.1. 구글 자바 스타일 가이드..
JoonYong
'Spring' 카테고리의 글 목록