Spring/๊ธฐํƒ€ / / 2026. 1. 22. 10:49

[Spring Boot] ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ดํ•ด: Todo API๋กœ ๋ฐฐ์šฐ๋Š” 5๋‹จ๊ณ„ ์•„ํ‚คํ…์ฒ˜

๐Ÿ“Œ ์†Œ๊ฐœ

Spring Boot๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ์ด "์–ด๋–ค ํด๋”์— ์–ด๋–ค ํŒŒ์ผ์„ ๋„ฃ์–ด์•ผ ํ•˜๋Š”๊ฐ€?" ์ด๋‹ค.
์ด ๊ธ€์€ Todo API ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด Controller, Service, Repository, Entity, DTO์˜ ์—ญํ• ๊ณผ ๊ฐ ํŒŒ์ผ์ด ์™œ ๊ทธ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค. ์ฝ”๋“œ๋ณด๋‹ค ๊ตฌ์กฐ์™€ ๊ฐœ๋… ์ดํ•ด์— ์ง‘์ค‘ํ•ด๋ณด์ž.

 

ํ”„๋กœ์ ํŠธ: ๊ฐ„๋‹จํ•œ ํ•  ์ผ ๊ด€๋ฆฌ (Todo) API

[ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ]

todo-api/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ main/
โ”‚       โ”œโ”€โ”€ java/
โ”‚       โ”‚   โ””โ”€โ”€ com/
โ”‚       โ”‚       โ””โ”€โ”€ example/
โ”‚       โ”‚           โ””โ”€โ”€ todo/
โ”‚       โ”‚               โ”œโ”€โ”€ TodoApplication.java
โ”‚       โ”‚               โ”œโ”€โ”€ controller/
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ TodoController.java
โ”‚       โ”‚               โ”œโ”€โ”€ service/
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ TodoService.java
โ”‚       โ”‚               โ”œโ”€โ”€ repository/
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ TodoRepository.java
โ”‚       โ”‚               โ”œโ”€โ”€ entity/
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ Todo.java
โ”‚       โ”‚               โ”œโ”€โ”€ dto/
โ”‚       โ”‚               โ”‚   โ”œโ”€โ”€ TodoCreateRequest.java
โ”‚       โ”‚               โ”‚   โ”œโ”€โ”€ TodoResponse.java
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ ErrorResponse.java
โ”‚       โ”‚               โ””โ”€โ”€ exception/
โ”‚       โ”‚                   โ”œโ”€โ”€ TodoNotFoundException.java
โ”‚       โ”‚                   โ””โ”€โ”€ GlobalExceptionHandler.java
โ”‚       โ””โ”€โ”€ resources/
โ”‚           โ””โ”€โ”€ application.yml
โ””โ”€โ”€ pom.xml

 

๊ฐ ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…

1๋‹จ๊ณ„: Hello World ์‹คํ–‰ ํ™•์ธ

ํŒŒ์ผ๋ช… ์—ญํ•  ์ƒ์„ธ ์„ค๋ช…
TodoApplication.java ์Šคํ”„๋ง๋ถ€ํŠธ ์‹œ์ž‘์  @SpringBootApplication์ด ์„ ์–ธ๋œ ๋ฉ”์ธ ํด๋ž˜์Šค๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ง„์ž…์ 
application.yml ํ™˜๊ฒฝ ์„ค์ • MySQL ์—ฐ๊ฒฐ ์ •๋ณด ์„ค์ • → ์„œ๋ฒ„ ์‹คํ–‰ ์‹œ DB ์ž๋™ ์—ฐ๋™
TodoController.java API ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ฒ„ ๋™์ž‘ ํ™•์ธ์šฉ Hello World API ์ œ๊ณต

 

2๋‹จ๊ณ„: Controller-Service-Repository ํŒจํ„ด

ํŒŒ์ผ๋ช… ๊ตฌ๋ถ„ ์—ญํ•  ์ƒ์„ธ ์„ค๋ช…
Todo.java Entity DB ๋งคํ•‘ @Entity๋กœ MySQL ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘, ์ปฌ๋Ÿผ ์ •์˜
TodoRepository.java Repository DB ์ ‘๊ทผ JpaRepository ์ƒ์† → CRUD ์ž๋™ ์ œ๊ณต
TodoService.java Service ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ, ํ•ต์‹ฌ ๋กœ์ง ์บก์Аํ™”
TodoController.java Controller HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ REST API ์ œ๊ณต (CRUD ์™„์„ฑ)

 

3๋‹จ๊ณ„: Entity ๋Œ€์‹  DTO ์‚ฌ์šฉํ•˜๊ธฐ

ํŒŒ์ผ๋ช… ๊ตฌ๋ถ„ ์—ญํ•  ์ƒ์„ธ ์„ค๋ช…
TodoCreateRequest.java Request DTO ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ˆ˜์‹  ํด๋ผ์ด์–ธํŠธ ์ž…๋ ฅ ์ „์šฉ DTO, ๊ฒ€์ฆ(@Valid) ๋Œ€์ƒ
TodoResponse.java Response DTO ์‘๋‹ต ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜ ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ ๋…ธ์ถœํ•˜์—ฌ ์‘๋‹ต ๊ตฌ์กฐ ์•ˆ์ •ํ™”
TodoService.java Service ๋ณ€ํ™˜ ์ฑ…์ž„ Entity ↔ DTO ๋ณ€ํ™˜ ๋กœ์ง ๋‹ด๋‹น (๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์— ์บก์Аํ™”)
TodoController.java Controller DTO ์ž…์ถœ๋ ฅ Entity ์ง์ ‘ ์‚ฌ์šฉ ๊ธˆ์ง€, DTO๋กœ๋งŒ ์š”์ฒญ·์‘๋‹ต ์ฒ˜๋ฆฌ

 

4๋‹จ๊ณ„: JPA ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ

ํŒŒ์ผ๋ช… ๊ตฌ๋ถ„ ์—ญํ•  ์ƒ์„ธ ์„ค๋ช…
TodoRepository.java Repository findBy..., @Query ๋ฉ”์„œ๋“œ ์ฟผ๋ฆฌ ๋ฐ JPQL/Native Query๋กœ ๋‹ค์–‘ํ•œ ์กฐํšŒ ์กฐ๊ฑด ์ง€์›
TodoService.java Service ๊ฒ€์ƒ‰·ํ•„ํ„ฐ๋ง ๋กœ์ง ์ƒํƒœ, ํ‚ค์›Œ๋“œ, ๊ธฐ๊ฐ„ ๋“ฑ ์กฐ๊ฑด ์กฐํ•ฉ ์ฒ˜๋ฆฌ
TodoController.java Controller ๊ฒ€์ƒ‰ API ์กฐ๊ฑด ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ๋ฐ˜ ์กฐํšŒ ์—”๋“œํฌ์ธํŠธ ์ œ๊ณต

 

5๋‹จ๊ณ„: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ์œ ํšจ์„ฑ ๊ฒ€์ฆ

ํŒŒ์ผ๋ช… ๊ตฌ๋ถ„ ์—ญํ•  ์ƒ์„ธ ์„ค๋ช…
TodoNotFoundException.java Exception ์ปค์Šคํ…€ ์˜ˆ์™ธ Todo ๋ฏธ์กด์žฌ ์‹œ ๋ช…ํ™•ํ•œ ๋„๋ฉ”์ธ ์˜ˆ์™ธ ์ •์˜
ErrorResponse.java DTO ์—๋Ÿฌ ์‘๋‹ต ์—๋Ÿฌ ์ฝ”๋“œ·๋ฉ”์‹œ์ง€·ํƒ€์ž„์Šคํƒฌํ”„ ๋“ฑ ํ‘œ์ค€ํ™”๋œ ์‘๋‹ต ๊ตฌ์กฐ
GlobalExceptionHandler.java Handler ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ @ControllerAdvice๋กœ ์˜ˆ์™ธ ์ผ๊ด„ ์ฒ˜๋ฆฌ
TodoCreateRequest.java DTO ์š”์ฒญ ๊ฒ€์ฆ @NotBlank, @Size ๋“ฑ @Valid ๊ธฐ๋ฐ˜ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
TodoController.java Controller ๊ฒ€์ฆ ์ ์šฉ @Valid ์ ์šฉ์œผ๋กœ ์ž˜๋ชป๋œ ์š”์ฒญ ์‚ฌ์ „ ์ฐจ๋‹จ

 

์™œ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋Š”๊ฐ€?

Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ Controller, Service, Repository๋กœ ๋‚˜๋ˆ„๋Š” ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

๊ฐ ๊ณ„์ธต์ด ์ž๊ธฐ ์ผ๋งŒ ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

 

๋ชจ๋“  ๊ฒƒ์„ Controller์— ์ž‘์„ฑ (๋‚˜์œ ์˜ˆ) ์ฑ…์ž„๋ณ„๋กœ ๋ถ„๋ฆฌ (์ข‹์€ ์˜ˆ)
TodoController.java
โ”œโ”€ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ
โ”œโ”€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”œโ”€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ
โ”œโ”€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
โ””โ”€ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ


TodoController.java
โ””โ”€ HTTP ์š”์ฒญ/์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌ

TodoService.java
โ””โ”€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ์ฒ˜๋ฆฌ

TodoRepository.java
โ””โ”€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ๋งŒ ์ฒ˜๋ฆฌ

GlobalExceptionHandler.java
โ””โ”€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋งŒ ๋‹ด๋‹น
→ ํ•œ ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„!
→ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ์œ„ํ—˜
→ ์–ด๋””์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋Š”์ง€ ์ฐพ๊ธฐ ์–ด๋ ค์›€
→ ๊ฐ์ž ์ž๊ธฐ ์ผ๋งŒ ํ•จ!

 

1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle)

ํ•œ ํŒŒ์ผ์€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•ด์•ผ ํ•œ๋‹ค.
๋ชจ๋“  ์ฝ”๋“œ๋ฅผ TodoController ํ•˜๋‚˜์— ์ž‘์„ฑํ•˜๋ฉด HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์ด ํ•œ ํŒŒ์ผ์— ๋’ค์„ž์ด๊ฒŒ ๋œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ˆ˜๋ฐฑ ์ค„์งœ๋ฆฌ ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์›์ธ์„ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜๋ฉด ๊ฐ ํŒŒ์ผ์€ ์ž์‹ ์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค. Controller๋Š” HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , Service๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋งŒ ๋‹ด๋‹นํ•˜๋ฉฐ, Repository๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ๋งŒ ์ฑ…์ž„์ง„๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ๊ณ„์ธต์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ์ฆ‰์‹œ ๋ช…ํ™•ํ•ด์ง„๋‹ค.

 

2. ์œ ์ง€๋ณด์ˆ˜์„ฑ

์ฝ”๋“œ๋Š” ๋‚˜์ค‘์— ๊ณ ์น˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค.
์‹ค์ œ ๊ฐœ๋ฐœ ํ˜„์žฅ์—์„œ๋Š” ์ƒˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์‹œ๊ฐ„์ด ํ›จ์”ฌ ๋” ๋งŽ์ด ์†Œ์š”๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์— ๊ฐ•ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ MySQL์—์„œ PostgreSQL๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๊ณ„์ธต ๋ถ„๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด Controller ๊ณณ๊ณณ์— ์ž‘์„ฑ๋œ SQL์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
๋ฐ˜๋ฉด Repository๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์€ application.yml๊ณผ Repository ๊ณ„์ธต์— ๊ตญํ•œ๋œ๋‹ค. ์ˆ˜์ • ๋ฒ”์œ„๊ฐ€ ๊ทน๋„๋กœ ์ค„์–ด๋“ ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ “์™„๋ฃŒ๋œ ํ•  ์ผ์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค”๋ผ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค. Service ๊ณ„์ธต์— ๋กœ์ง์ด ๋ชจ์—ฌ ์žˆ๋‹ค๋ฉด TodoService์˜ ์ˆ˜์ • ๋กœ์ง ํ•œ ๊ณณ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  API์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Controller๋งˆ๋‹ค ๋กœ์ง์ด ํฉ์–ด์ ธ ์žˆ๋‹ค๋ฉด ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋ฐ˜๋ณตํ•ด์„œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

3. ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ

์ฝ”๋“œ๋Š” ์ž๋™์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ํ…Œ์ŠคํŠธ๊ฐ€ ์—†๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค Postman์œผ๋กœ ๋ชจ๋“  API๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ๋Šฅ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ฒ€์ฆ ๋น„์šฉ์€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์‹ค์ˆ˜๋กœ ํ™•์ธํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•œ๋‹ค.

๊ณ„์ธต์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์œผ๋ฉด Service ๊ณ„์ธต๋งŒ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค. HTTP ์„œ๋ฒ„๋‚˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—†์ด๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ…Œ์ŠคํŠธ๋Š” ๋ช‡ ์ดˆ ์•ˆ์— ๋๋‚œ๋‹ค.
๋ฐ˜๋Œ€๋กœ ๋ชจ๋“  ๋กœ์ง์ด Controller์— ์„ž์—ฌ ์žˆ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ ์‹คํ–‰, ์š”์ฒญ ์ƒ์„ฑ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค€๋น„๊ฐ€ ํ•„์š”ํ•ด์ง€๊ณ , ํ…Œ์ŠคํŠธ ํ•˜๋‚˜์— ๋ช‡ ๋ถ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์กฐ์—์„œ๋Š” ํ…Œ์ŠคํŠธ ์ž์ฒด๊ฐ€ ์™ธ๋ฉด๋ฐ›๊ฒŒ ๋œ๋‹ค.

 

๊ฒฐ๋ก 

Controller–Service–Repository ํŒจํ„ด์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์ด์œ ๋Š” ๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์ž๋ฅผ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋‹ค.
์ดˆ๊ธฐ์—๋Š” ํŒŒ์ผ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜ ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด ๊ตฌ์กฐ์˜ ์žฅ์ ์ด ๋ถ„๋ช…ํ•ด์ง„๋‹ค.

๊ฐ ๊ณ„์ธต์ด ์ž๊ธฐ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ ์‰ฝ๊ณ , ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๋‹ค. ์ด๊ฒƒ์ด ์‹ค๋ฌด์—์„œ ์ด ํŒจํ„ด์ด ํ‘œ์ค€์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋‹ค.

  • ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ๊ณต์œ 
  • ๋„ค์ด๋ฒ„ ๋ฐด๋“œ ๊ณต์œ 
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ 
  • ์นด์นด์˜ค์Šคํ† ๋ฆฌ ๊ณต์œ