Skip to content

CheatIsKey/advanced-schedule

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“… ์ผ์ • ๊ด€๋ฆฌ ๊ณผ์ œ (Advanced Schedule Management)

"Spring Boot 4.0.2 ๊ธฐ๋ฐ˜์˜ ์„ธ์…˜ ์ธ์ฆ๊ณผ Soft Delete๋ฅผ ๊ตฌํ˜„ํ•œ ๊ณ ์„ฑ๋Šฅ ์ผ์ • ๊ด€๋ฆฌ API"

Java Spring Boot MySQL JPA Postman


๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

Spring Boot 4.0.2 ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ์ผ์ • ๊ด€๋ฆฌ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ CRUD๋ฅผ ๋„˜์–ด, ๋ฐ์ดํ„ฐ ๋ณด์กด(Soft Delete) ์ „๋žต๊ณผ ์„ธ์…˜(Session) ๊ธฐ๋ฐ˜์˜ ๋ณด์•ˆ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์„ ๋™์‹œ์— ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.

โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ ๊ธฐ์ˆ ์  ๋„์ „

  • Spring Boot 4.0.2 ์‚ฌ์šฉ: ์ตœ์‹  ์•ˆ์ •ํ™” ๋ฒ„์ „์„ ์ ์šฉํ•˜์—ฌ ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ ํŒจ์น˜ ์ ์šฉ
  • ๐Ÿ” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ (Session Auth): HttpSession์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ๊ถŒํ•œ์„ ์ œ์–ด (๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ๋ณธ์ธ์˜ ์ผ์ • ์ˆ˜์ •/์‚ญ์ œ ๊ฐ€๋Šฅ)
  • ๐Ÿ—‘๏ธ ์†Œํ”„ํŠธ ๋”œ๋ฆฌํŠธ (Soft Delete): @SoftDelete๋ฅผ ํ™œ์šฉ, DB์—์„œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  deleted = true ์ƒํƒœ๋กœ ๋ณด์กดํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด
  • ๐Ÿ›ก๏ธ ๊ฒฌ๊ณ ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: GlobalExceptionHandler๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ(@Valid) ์‹คํŒจ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์˜ˆ์™ธ๋ฅผ ์ผ๊ด€๋œ JSON ํฌ๋งท์œผ๋กœ ์‘๋‹ต
  • ๐Ÿ“„ ํŽ˜์ด์ง€๋„ค์ด์…˜: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ Spring Data JPA ํŽ˜์ด์ง•(Pageable) ์ ์šฉ
  • โฐ JPA Auditing: @EnableJpaAuditing๊ณผ BaseEntity๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์„ฑ์ผ/์ˆ˜์ •์ผ์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

1. ERD (Entity Relationship Diagram)

์‚ฌ์šฉ์ž(User)๋Š” ์—ฌ๋Ÿฌ ์ผ์ •(Schedule)๊ณผ ๋Œ“๊ธ€(Comment)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  deleted ํ”Œ๋ž˜๊ทธ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

ERD ๋‹ค์ด์–ด๊ทธ๋žจ

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ธ ๋ณด๊ธฐ (Click)

1. ์‚ฌ์šฉ์ž (User)

์ปฌ๋Ÿผ๋ช… ํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด ์„ค๋ช…
id BIGINT PK, AI (์ž๋™ ์ฆ๊ฐ€) ์‚ฌ์šฉ์ž ๊ณ ์œ  ID
email VARCHAR(255) Unique, Not Null ๋กœ๊ทธ์ธ ์ด๋ฉ”์ผ
password VARCHAR(255) Not Null ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ (BCrypt)
name VARCHAR(20) Not Null ์‚ฌ์šฉ์ž ์ด๋ฆ„
created_at DATETIME Not Null ์ƒ์„ฑ์ผ (BaseEntity)
modified_at DATETIME Not Null ์ˆ˜์ •์ผ (BaseEntity)
deleted BOOLEAN Default false Soft Delete ์—ฌ๋ถ€

2. ์ผ์ • (Schedule)

์ปฌ๋Ÿผ๋ช… ํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด ์„ค๋ช…
id BIGINT PK, AI (์ž๋™ ์ฆ๊ฐ€) ์ผ์ • ๊ณ ์œ  ID
user_id BIGINT FK (User.id) ์ž‘์„ฑ์ž ID
title VARCHAR(50) Not Null ์ผ์ • ์ œ๋ชฉ
content VARCHAR(50) Not Null ์ผ์ • ๋‚ด์šฉ
author VARCHAR(20) Not Null ์ž‘์„ฑ์ž๋ช…
created_at DATETIME Not Null ์ƒ์„ฑ์ผ
modified_at DATETIME Not Null ์ˆ˜์ •์ผ
deleted BOOLEAN Default false Soft Delete ์—ฌ๋ถ€

3. ๋Œ“๊ธ€ (Comment)

์ปฌ๋Ÿผ๋ช… ํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด ์„ค๋ช…
id BIGINT PK, AI (์ž๋™ ์ฆ๊ฐ€) ๋Œ“๊ธ€ ๊ณ ์œ  ID
schedule_id BIGINT FK (Schedule.id) ์—ฐ๊ด€๋œ ์ผ์ • ID
user_id BIGINT FK (User.id) ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ID
content VARCHAR(50) Not Null ๋Œ“๊ธ€ ๋‚ด์šฉ
created_at DATETIME Not Null ์ƒ์„ฑ์ผ
modified_at DATETIME Not Null ์ˆ˜์ •์ผ
deleted BOOLEAN Default false Soft Delete ์—ฌ๋ถ€

2. ๋„๋ฉ”์ธ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (Domain Class Diagram)

๋ณต์žก๋„๋ฅผ ์ค„์ด๊ณ  ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ช…ํ™•ํžˆ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์ฃผ์š” ์—”ํ‹ฐํ‹ฐ(Entity)์™€ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์ค‘์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
BaseEntity๋ฅผ ํ†ตํ•œ ๊ณตํ†ต ํ•„๋“œ(์ƒ์„ฑ์ผ/์ˆ˜์ •์ผ) ์ƒ์† ๊ตฌ์กฐ์™€ User, Schedule, Comment ๊ฐ„์˜ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋กœ, GlobalExceptionHandler๋ฅผ ์ •์˜ํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜๊ณ  ์‘์ง‘๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ


๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๊ตฌ๋ถ„ ๊ธฐ์ˆ  ๋ฒ„์ „ ๋ฐ ์„ค๋ช…
Language Java JDK 17 (LTS)
Framework Spring Boot 4.0.2
Database MySQL 8.0 / InnoDB
ORM Spring Data JPA Hibernate Core (SoftDelete ์ง€์›)
Build Tool Gradle 8.x
Dependencies Lombok, Validation ์ฝ”๋“œ ๊ฐ„์†Œํ™” ๋ฐ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ

๐Ÿš€ ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋“œ

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.

1. ์‚ฌ์ „ ์ค€๋น„

  • JDK 17 ์ด์ƒ ์„ค์น˜ ํ™•์ธ
  • MySQL ์„œ๋ฒ„ ์‹คํ–‰ ์ค‘ (๊ธฐ๋ณธ ํฌํŠธ 3306)

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

ํ„ฐ๋ฏธ๋„(๋˜๋Š” MySQL Workbench)์—์„œ ์•„๋ž˜ SQL์„ ์‹คํ–‰ํ•˜์—ฌ DB์™€ ๊ณ„์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

-- root ๊ณ„์ •์œผ๋กœ ์ ‘์† ํ›„ ์‹คํ–‰
CREATE DATABASE advanced_schedule;

-- ๊ณ„์ • ์ƒ์„ฑ (๊ธฐ์กด ๊ณ„์ •์ด ์žˆ๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ)
CREATE USER '<your-username>'@'localhost' IDENTIFIED BY '<your-password>';
GRANT ALL PRIVILEGES ON advanced_schedule.* TO 'dev_user'@'localhost';
FLUSH PRIVILEGES;

3. ํ”„๋กœ์ ํŠธ ์„ค์ • (src/main/resources/application.properties)

DB ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋ณธ์ธ์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

spring.application.name=advanced-schedule
spring.datasource.url=jdbc:mysql://localhost:3306/advanced_schedule?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username=<your-username>
spring.datasource.password=<your-password>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# Swagger/OpenAPI ์„ค์ •
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.api-docs.path=/v3/api-docs

๐Ÿ’ก Tip: ddl-auto๋Š” ์ตœ์ดˆ ์‹คํ–‰ ํ›„ create โ†’ update๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. create๋Š” ๋งค๋ฒˆ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•˜๊ณ  ์žฌ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

4. ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

# Mac/Linux
./gradlew bootRun

# Windows
gradlew.bootRun

๐Ÿ”Œ API ๋ช…์„ธ (API Documentation)

์ƒ์„ธํ•œ API ์š”์ฒญ ๋ฐ ์‘๋‹ต ๋ช…์„ธ๋Š” ์•„๋ž˜ Postman Documentation์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‘ API ๋ช…์„ธ์„œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ (Postman)

๐Ÿ“Œ ์ฃผ์š” API ๊ธฐ๋Šฅ ์š”์•ฝ

1๏ธโƒฃ ์‚ฌ์šฉ์ž (User)

  • ํšŒ์›๊ฐ€์ž…: POST /api/users (์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ์ €์žฅ)
  • ๋กœ๊ทธ์ธ: POST /api/users/login (์„ธ์…˜ ID ๋ฐœ๊ธ‰)
  • ์ „์ฒด ์กฐํšŒ: GET /api/users
  • ๋‹จ์ผ ์กฐํšŒ: GET /api/users/{userId}
  • ์ •๋ณด ์ˆ˜์ •: PATCH /api/users/{userId} (๋กœ๊ทธ์ธ ํ•„์ˆ˜, ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ)
  • ํšŒ์› ํƒˆํ‡ด: DELETE /api/users/{userId} (๋กœ๊ทธ์ธ ํ•„์ˆ˜, Soft Delete, ์„ธ์…˜ ๋ฌดํšจํ™”)

2๏ธโƒฃ ์ผ์ • (Schedule)

  • ์ผ์ • ์ƒ์„ฑ: POST /api/schedules/{userId} (๋กœ๊ทธ์ธ ํ•„์ˆ˜)
  • ์ „์ฒด ์กฐํšŒ: GET /api/schedules (ํŽ˜์ด์ง•: ?page=0&size=10, ์ˆ˜์ •์ผ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ)
  • ๋‹จ๊ฑด ์กฐํšŒ: GET /api/schedules/{scheduleId}
  • ์ผ์ • ์ˆ˜์ •: PATCH /api/schedules/{scheduleId} (์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ)
  • ์ผ์ • ์‚ญ์ œ: DELETE /api/schedules/{scheduleId} (์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ, Soft Delete)

3๏ธโƒฃ ๋Œ“๊ธ€ (Comment)

  • ๋Œ“๊ธ€ ์ž‘์„ฑ: POST /api/schedules/{scheduleId}/comments/ (๋กœ๊ทธ์ธ ํ•„์ˆ˜)
  • ๋Œ“๊ธ€ ์กฐํšŒ: GET /api/schedules/{scheduleId}/comments/
  • ๋‹จ์ผ ๋Œ“๊ธ€ ์กฐํšŒ: GET /api/schedules/{scheduleId}/comments/{commentId}
  • ๋Œ“๊ธ€ ์ˆ˜์ •: PATCH /api/schedules/{scheduleId}/comments/{commentId} (์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ)
  • ๋Œ“๊ธ€ ์‚ญ์ œ: DELETE /api/schedules/{scheduleId}/comments/{commentId} (์ž‘์„ฑ์ž ๋ณธ์ธ๋งŒ ๊ฐ€๋Šฅ, Soft Delete)

๐Ÿ’ก ๊ธฐ์ˆ ์ฑ„ํƒ

1๏ธโƒฃ JWT๊ฐ€ ์•„๋‹Œ Session ๋ฐฉ์‹์„ ์‚ฌ์šฉ

"๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ์˜ ํšจ์œจ์„ฑ๊ณผ ๋ณด์•ˆ"

ํ˜„์žฌ ์ง„ํ–‰๋œ ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ผ ์„œ๋ฒ„ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. JWT๋Š” ํ™•์žฅ์„ฑ์ด ์ข‹์ง€๋งŒ, ๊ตฌํ˜„ ๋ณต์žก๋„๊ฐ€ ๋†’๊ณ  ํ† ํฐ ๊ด€๋ฆฌ๊ฐ€ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด Session ๋ฐฉ์‹์€ ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ๋ณด์•ˆ์ ์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ (HttpOnly Cookie ์‚ฌ์šฉ), ๋กœ๊ทธ์•„์›ƒ ์‹œ ์ฆ‰๊ฐ์ ์ธ ์ ‘๊ทผ ์ฐจ๋‹จ(session.invalidate())์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋ฅผ Soft Delete๋กœ ๊ตฌํ˜„

"๋ฐ์ดํ„ฐ์˜ ๊ฐ€์น˜ ๋ณด์กด๊ณผ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ"

์‹ค๋ฌด์—์„œ๋Š” ์‹ค์ˆ˜๋กœ ์ธํ•œ ์‚ญ์ œ๋‚˜ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์ง€์šฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
@SoftDelete ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ • ์—†์ด deleted=true ํ”Œ๋ž˜๊ทธ๋งŒ ๋ณ€๊ฒฝ๋˜๋„๋ก ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ, ๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋ชจ๋‘ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ JPA Auditing์„ ํ™œ์šฉํ•œ ์‹œ๊ฐ„ ์ •๋ณด ์ž๋™ ๊ด€๋ฆฌ

"๋ฐ˜๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ์™€ ์ผ๊ด€์„ฑ ํ™•๋ณด"

@EnableJpaAuditing๊ณผ BaseEntity๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ์„ฑ์ผ(createdAt)๊ณผ ์ˆ˜์ •์ผ(modifiedAt)์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ˜๋ณต ์ž‘์—…์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ชจ๋“  ํ…Œ์ด๋ธ”์—์„œ ์ผ๊ด€๋œ ์‹œ๊ฐ„ ๊ด€๋ฆฌ ์ •์ฑ…์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4๏ธโƒฃ Spring Security ๋Œ€์‹  ๋…๋ฆฝ BCrypt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

"๊ฒฝ๋Ÿ‰ํ™”์™€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๋„์ž…"

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ณต์žกํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ๋‚˜ OAuth2 ๊ฐ™์€ ๊ณ ๊ธ‰ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Spring Security๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ์„ค์ •์ด ๋ณต์žกํ•˜๋ฏ€๋กœ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋…๋ฆฝ์ ์ธ BCrypt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ท„์Šต๋‹ˆ๋‹ค.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages