[Spring] REST API 개발 시 Location 헤더의 필요성과 사용 방법
·
Spring/Spring
1. Location 헤더란?Location 헤더는 HTTP 응답 헤더 중 하나로, 서버가 클라이언트에게 새로 생성된 리소스의 URI를 명시적으로 전달할 때 사용됩니다. 주로 POST 요청으로 리소스를 생성한 후 응답 코드 201(Created)와 함께 제공되며, 클라이언트가 생성된 리소스를 쉽게 접근할 수 있도록 돕습니다.2. Location 헤더가 필요한 이유RESTful API 설계에서 Location 헤더는 다음과 같은 이유로 유용합니다.리소스 위치 명확화: 클라이언트는 Location 헤더에 포함된 URI를 통해 서버가 생성한 리소스의 정확한 위치를 알 수 있습니다. 예를 들어, 차단된 계정에 대한 URI를 전달받으면 클라이언트는 해당 URI를 통해 차단 상태를 쉽게 조회하거나 해제 요청을 할 ..
[Spring] JWT 서명 검증의 원리
·
Spring/Spring
서론유튜브를 보다가 우연히 JWT에 대해 설명해 주는 영상을 접하게 되었습니다. 영상을 보며 JWT의 서명 검증 원리를 너무 쉽게 설명해 주어서, 이를 바탕으로 본 게시글을 작성하게 되었습니다. 이번 포스팅에서는 JWT의 기본적인 구조와 서명 생성 및 검증 과정을 쉽게 설명해 보려고 합니다.JWT 구조 JWT(JSON Web Token)는 세 가지 주요 구성 요소로 이루어져 있습니다: 헤더(header), 페이로드(payload), 서명(signature). 이 이미지는 JWT의 각 부분을 시각적으로 설명합니다. 헤더(Header): 알고리즘 유형과 토큰 유형을 지정합니다. 예시에서는 HS256 알고리즘과 JWT 타입이 사용되었습니다.페이로드(Payload): 토큰의 데이터가 포함된 부분입니다. 여기에는..
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..
[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. 구글 자바 스타일 가이드..
[Spring] Bean이란?
·
Spring/Spring
1. Spring Bean 이전의 기술: EJB 2000년대 초반 Java 개발에서 주로 사용되었던 기술은 EJB(Enterprise JavaBeans)였습니다. EJB는 엔터프라이즈 애플리케이션 개발을 위한 표준 기술로서, 트랜잭션 관리, 보안, 객체 풀링 등 다양한 기능을 제공했습니다. 하지만 EJB는 다음과 같은 문제점을 가지고 있었습니다. 복잡성: EJB는 매우 복잡한 기술이었기 때문에 배우고 사용하기 어려웠습니다. 무거운 성격: EJB는 자체적으로 많은 기능을 제공했기 때문에 애플리케이션을 무겁게 만들었습니다. 비용: EJB를 사용하려면 서버에 EJB 컨테이너를 설치해야 했기 때문에 비용이 많이 들었습니다. 2. Spring Bean의 탄생 EJB의 문제점을 해결하기 위해 등장한 것이 바로 Sp..
[Spring] IoC, DIP, DI란?
·
Spring/Spring
1. 의존성(Dependency)이란? 의존성(dependency)이란 한 객체, 함수, 모듈 또는 시스템이 다른 것 없이는 제대로 작동할 수 없는 상황을 의미합니다. 예를 들어, Store 클래스가 Pencil 클래스의 메서드를 사용하고 있다면, Store 클래스는 Pencil 클래스에 의존하고 있습니다. 즉, Pencil 클래스 의 변경이 Store 클래스에 영향을 미치게 됩니다. IOC, DIP, DI는 모두 객체 간 의존성을 관리하는 데 사용되는 개념이지만, 서로 다른 역할과 특징을 가지고 있습니다. 2. IoC (Inversion of Control) : 제어의 역전 제어의 역전은 객체 생성 및 의존성 주입을 객체 자체가 아닌 외부에서 수행하는 방식입니다. 프로그램의 흐름을 개발자가 아닌 프레임..
[Spring] 의존성 주입(Dependency Injection, DI) 이해하기
·
Spring/Spring
1. 의존성이란? DI에서 의존성이란 한 객체가 다른 객체의 기능에 의존하는 관계를 의미합니다. 예를 들어, 자동차(Car) 객체가 엔진(Engine) 객체의 기능을 사용한다면, 자동차 객체는 엔진 객체에 의존하고 있다고 할 수 있습니다. 2. 의존성 주입(Dependency Injection, DI)이란? 의존성 주입은 한 객체가 다른 객체에 의존할 때, 이 의존성을 외부에서 주입하는 기법ㄱ을 말합니다. 이 기법을 사용하면 객체는 필요한 의존성을 직접 관리하지 않고, 외부에서 주입받아 사용할 수 있습니다. 이로 인해 객체는 의존성에 대해 더 이상 알 필요가 없습니다. 3. DI의 장점 DI의 가장 큰 장점은 코드의 결합도를 낮추고, 유연성을 높인다는 것입니다. 객체가 직접 의존성을 생성하거나 찾지 않기..
JoonYong
'Spring/Spring' 카테고리의 글 목록