Spring Boot 20

REST API - HTTP Method PUT vs PATCH

지금까지 REST API의 “update” 부분을 구현했을 때 “PUT” method를 사용했는데 오늘은 Team project의 API 명세를 만들면서 “PATCH” method의 사용하는 방법을 알게 되었습니다. 그래서 PUT과 PATCH method들을 비교해 봤습니다.1. PUT method목적: PUT은 전체 리소스를 교체하는 데 사용됩니다.사용 방법: PUT 요청을 보낼 때는 리소스의 전체 표현을 포함해야 합니다. 즉, 요청에 포함되지 않은 필드는 기본값이나 null로 덮어씌워질 수 있습니다.멱등성(Idempotent): PUT은 멱등성을 가지므로, 동일한 데이터를 여러 번 호출해도 한 번 호출한 것과 동일한 결과를 가져옵니다.예시: 사용자 프로필 업데이트:PUT /users/123{"name..

Spring Boot 2024.11.01

Troubleshooting - "GenerationTarget encountered exception accepting command : Error executing DDL "

1. Project 소개'일정관리 앱'(Schedule Management App)이라는 개인 project입니다. 서로 다른 등록된 사용자가 자신이 만든 일정을 읽고, 수정하고, 삭제할 수 있는 기본 일정 계획 도구입니다. 사용자는 서로의 게시물에 대해 댓글을 추가, 수정 및 삭제할 수 있는 간단한 앱입니다. 이번 project는 Spring Boot v3.3.4 이용하여 개발하였습니다. 2. 개발 조건- 모든 Table은 고유 식별자(ID)를 가집니다.- 3 Layer Architecture 에 따라 각 Layer의 목적에 맞게 개발합니다.- CRUD 필수 기능은 모두 Database 연결 및 JPA를 사용해서 개발합니다.- JDBC와 Spring Security는 사용하지 않습니다.- 인증/인가 절..

Spring Boot 2024.10.17

Spring Boot - JSON Web Token JWT 생성

JWT 생성의 과정1. 비밀 키 초기화 (Secret Key Initialization)설정 (Application properties):jwt.secret.key=7Iqk7YyM66W07YOA7L2U65Sp7YG065+9U3ByaW5n6rCV7J2Y7... @Value("${jwt.secret.key}"): 이 애너테이션은 애플리케이션 속성 파일(application.properties 또는 application.yml)에서 비밀 키를 주입합니다. 비밀 키는 JWT를 서명하고 검증하는 데 사용됩니다.init() 메서드:@PostConstruct 애너테이션을 사용하여 객체가 생성된 후 실행됩니다.Base64로 인코딩된 비밀 키를 바이트 배열로 디코딩한 후 Keys.hmacShaKeyFor를 사용하여 암호..

Spring Boot 2024.10.11

Spring Boot - JSON Web Token JWT란

JWT (JSON Web Token)은 두 당사자 간에 전달될 클레임(claim)을 표현하는 간결하고 URL-안전한 방식입니다. 주로 웹 애플리케이션(web application)에서 인증과 인가를 위해 사용됩니다.JWT 사용Login 정보를 Server 에 저장하지 않고, Client 에 로그인 정보를 JWT 로 암호화하여 저장 → JWT 통해 인증/인가 모든 서버에서 동일한 Secret Key 소유합니다.Secret Key 통한 암호화 / 위조 검증 (복호화 시) JWT Sample  1. 헤더 (Header):헤더는 토큰에 대한 메타데이터를 포함하며, 일반적으로 두 가지를 지정합니다:typ: 토큰의 유형으로, 보통 JWT입니다.alg: 토큰을 서명하는 데 사용된 알고리즘으로, HMAC-SHA256 ..

Spring Boot 2024.10.11

Spring Boot - JPA (Java Persistence API) 기초

JPA (Java Persistence API)JPA는 Java의 명세로, 객체 관계 매핑(Object-Relational Mapping - ORM)을 위한 표준을 제공합니다. 이를 통해 개발자는 Java 객체를 Database table과 상호 변환할 수 있습니다.  1. 목적: Entity를 통해 지속성(persistence)을 관리함으로써 Database 접근을 간소화합니다.2. 주요 Annotations (어노테이션):@Entity: 클래스를 지속 가능한 엔티티로 표시합니다.@Table: 엔티티에 대한 데이터베이스 테이블을 지정합니다.@Id: 필드를 기본 키로 표시합니다.@GeneratedValue: 기본 키의 값을 자동으로 생성합니다.@Column: 필드의 열 매핑을 사용자 지정합니다.3. En..

Spring Boot 2024.10.08

Spring Boot - Inversion of Control (IoC), Dependency Injection (DI) and Bean

1.  제어의 역전 (Ioc)IoC는 프로그램에서 제어의 흐름을 반전시키는 설계 원칙입니다. 전통적인 프로그래밍에서는 프로그래머가 코드를 작성하여 다른 코드 조각을 호출하는 방식입니다. IoC에서는 제어가 반전되어, 프레임워크나 컨테이너가 흐름을 제어하게 됩니다. 예시: 간단한 application에서 UserService 클래스가 새 사용자에게 환영 이메일을 보내는 경우를 생각해봅시다.    1-1. IoC 없이:public class UserService { private EmailService emailService; public UserService() { this.emailService = new EmailService(); // UserService에서 제어 } ..

Spring Boot 2024.10.07

Schedule Management App - Troubleshooting (전체 일정 조회 문제)

1. 배경Github Repository: https://github.com/gbognon25/spring-schedule-management "ScheduleRepository" class에서 전체 일정 조회를 위해 구현한 'findAll()' method는 다음과 같습니다: // 전체 일정 조회 (작성자명과 수정일로 필터링) public List findAll(String author, String updatedAt) { String sql = "SELECT * FROM schedules WHERE 1=1"; if (author != null) { sql += " AND author = ?"; } if (upda..

Spring Boot 2024.10.04

일정 관리 App - API 명세서, Entity 생성 & MySQL Tables 생성

Github link: https://github.com/gbognon25/spring-schedule-management일정 관리 App의 기능 GuideLevel1. API 명세서, ERD 작성, MySQL 작성API 명세서 작성하기: API명, 요청 값(파라미터), 반환 값, 인증/인가 방식, 데이터 및 전달 형식 등ERD 작성하기: Entity Relationship DiagramMySQL 작성하기: 설치한 Database(MySQL)에 ERD를 따라 Tables 생성Level2. 일정 생성 및 조회1. 일정 생성(일정 작성하기)일정 생성 시, 포함되어야할 데이터할일, 작성자명, 비밀번호, 작성/수정일을 저장작성/수정일은 날짜와 시간을 모두 포함한 형태각 일정의 고유 식별자(ID)를 자동으로 생성..

Spring Boot 2024.10.01

Spring Controller Annotations & CRUD

1. Spring Controller Annotations1-1. @PathVariable 하는 일: @PathVariable annotation은 요청 URL 경로에서 값을 추출하여 메서드 매개변수로 전달합니다.언제 사용: URL 자체에서 특정 값을 (예: ID) 가져와서 메서드의 인자로 사용할 때 @PathVariable을 사용합니다.public class Star { String name; int age; public Star(String name, int age) { this.name = name; this.age = age; }}Java Class (Star) @Controller@RequestMapping("/hello/request")public..

Spring Boot 2024.09.30

Spring Boot - Lombok, MVC Pattern

1. LombokLombok은 자바에서 반복적으로 작성되는 코드를 줄여주는 라이브러리입니다. 주로 게터(Getter), 세터(Setter), 생성자(Constructor), toString() 같은 메서드를 자동으로 생성해줍니다. 이를 통해 코드가 더 깔끔하고 유지보수가 쉬워집니다. 주요 Lombok 어노테이션(annotation)은 다음과 같습니다:@Getter와 @Setter: 필드에 대한 게터와 세터 메서드를 자동으로 생성합니다.@Data: 여러 어노테이션을 결합한 것으로, @Getter, @Setter, @ToString, @EqualsAndHashCode 등을 포함합니다.@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor: 각각 ..

Spring Boot 2024.09.27