[์šฐํ…Œ์ฝ” ๋ ˆ๋ฒจ2] ๋ฏธ์…˜1, ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๊ด€๋ฆฌ ํšŒ๊ณ 

2025. 5. 4. 12:22ยท๊ฐœ๋ฐœ/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค

๋ ˆ๋ฒจ 1์ด ๋๋‚˜๊ณ  ๋ ˆ๋ฒจ 2๊ฐ€ ์‹œ์ž‘๋๋‹ค. ์Šคํ”„๋ง์„ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ณผ์ •์ด๋ผ๊ณ  ํ•˜๋‹ˆ ๋‚˜๋ฅผ ์œ„ํ•œ ๊ณผ์ •์ด๋‹ค~

๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๊ด€๋ฆฌ

STEP1

[1-3๋‹จ๊ณ„] PR ๋งํฌ

 

ํŽ˜์–ด๋กœ ํฌ์Šคํ‹ฐ, ๋‹ค๋กœ๊ฐ€ ๋˜์—ˆ๋‹ค. ๋ ˆ๋ฒจ๋งˆ๋‹ค 3์ธ ํŽ˜์–ด๋ฅผ ํ•œ๋ฒˆ์”ฉ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ฃผ๋ณ€์—์„œ 3์‹œ๊ฐ„๋งŒ ํˆฌ์žํ•ด๋„ ๋ฏธ์…˜์„ ๊ตฌํ˜„ํ• ๋งŒํผ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ํ•ด์„œ ํ•™์Šต ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ํ‚ค์›Œ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ๋„ ํ•™์Šตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•„์‰ฌ์šด ์ ์€ ์‰ฌ์šด ๋ฏธ์…˜์ด๊ณ  ๊ธฐ๊ฐ„์ด ์งง์€๋งŒํผ ๋น ๋ฅด๊ฒŒ merge ๋˜์—ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

๋‚˜๋Š” ๋ญ˜ ๋ฐฐ์› ์„๊นŒ?

- `@RequestBody` vs `@ModelAttribute`

๋ฏธ์…˜ ์ค‘ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ Body์— ํฌํ•จ๋œ Json ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ฐ”๋กœ ๋ฐ›์œผ๋ ค๊ณ  ํ•  ๋•Œ, ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ์šฉํ•œ ๋‘ ์–ด๋…ธํ…Œ์ด์…˜ `@RequestBody`, `@ModelAttribute` ๋ชจ๋‘ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์žฌ๋ฐŒ๋Š” ์ ์€ `@ModelAttribute`๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ null์ด๋ผ๋Š” ์ ์ด๋‹ค. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ์— ๊ทธ๋ ‡๋‹ค.

1. @RequestBody
RequestBody๋Š” HTTP ์š”์ฒญ ๋ณธ๋ฌธ(Json, XML, etc...)์„ Java ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
HTTP ์š”์ฒญ ๋ณธ๋ฌธ ๋ฐ์ดํ„ฐ๋Š” `HttpMessageConverter`๋ฅผ ํ†ตํ•ด ํƒ€์ž…์— ๋งž๋Š” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

public class RequestBodyDto {

    private String name;
    private long age;
    private String password;
    private String email;

    public RequestBodyDto() { // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
    }

    // Getter ์ถ”๊ฐ€ ๋ฐ Setter ์‚ญ์ œ
}


์‹ ๊ธฐํ•˜๊ฒŒ๋„ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ƒ์„ฑ์ž, setter๊ฐ€ ์—†์–ด๋„ `@RequestBody`๋Š” ์ •์ƒ์ ์œผ๋กœ ๋งคํ•‘ํ•œ๋‹ค. ๊ทธ ๋น„๋ฐ€์€ `MappingJackson2HttpMessageConverter`์ด๋‹ค. ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์ˆ˜์ด๋‹ค. ๋˜ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์œ„ํ•œ ํ•„๋“œ๋ช…์„ ์•Œ์•„์•ผํ•ด์„œ getter, setter ๋‘˜ ์ค‘ ํ•˜๋‚œ ์žˆ์–ด์•ผ ํ•œ๋‹ค!

2. @ModelAttribute
HTTP ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ํŠน์ • ์ž๋ฐ” ๊ฐ์ฒด์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. `/hello?name=req&age=1`, `form-data/name=req&age=1`์™€ ๊ฐ™์€ ์š”์ฒญ์— ๋Œ€ํ•œ form ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. ์ƒ์„ฑ์ž๋กœ ๋งคํ•‘ํ•˜์ง€๋งŒ, ์—†์œผ๋ฉด setter๋กœ ๋งคํ•‘ํ•œ๋‹ค.

 

 

- `@Component` vs `@Controller`

@Component๋Š” ํด๋ž˜์Šค์— ์„ ์–ธํ•˜์—ฌ Bean์œผ๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
@Controller๋„ ๊ทธ ๊ด€์ ์—์„œ๋Š” ๋˜‘๊ฐ™๋‹ค. ๋‚ด๋ถ€์— @Component๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋Ÿผ ๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฐ€?
์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋‹จ๊ณ„์—์„œ ์กฐ๊ธˆ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š”๋ฐ ์Šคํ”„๋ง์€ `RequestMappingHandlerMapping` ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋งŒ๋“ค๊ณ , ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  `@Controller` ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋นˆ์„ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด๋•Œ, ๋‚ด๋ถ€์ ์œผ๋กœ `isHandler` ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ€์ ธ์˜จ ๋นˆ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™•์ธํ•˜๊ณ , `@Controller` ์–ด๋…ธํ…Œ์ด์…˜์ด๋ฉด ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.

๊ทธ๋ฆฌ๊ณ , ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ key(URL): value(๋ฉ”์„œ๋“œ ๋ฐ ํด๋ž˜์Šค)์˜ ํ˜•ํƒœ๋กœ ๋งคํ•‘ํ•œ๋‹ค. ์ฆ‰, `@Controller`๋ฅผ ๋ถ™์ด๋ฉด ํ•ด๋‹น ์ •๋ณด์— ๋งคํ•‘๋˜์–ด URL์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋งŒ๋“ค์–ด์ง„ ๋งคํ•‘ ์ •๋ณด๋Š” `RequestMappingHandlerAdapter`์—์„œ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์ด์šฉ๋œ๋‹ค!


์Šคํ”„๋ง ๋ถ€ํŠธ 2.x ๋ฒ„์ „์—์„œ๋Š” `@RequestMapping` ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋„ ๋งคํ•‘ ๋Œ€์ƒ์— ํฌํ•จ๋˜์—ˆ์œผ๋‚˜, 3.x ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” `@Controller` ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ๋งคํ•‘ ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค. ๊ฒฐ๋ก ์€ ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์ž„์„ ์Šคํ”„๋ง์—๊ฒŒ ์•Œ๋ ค์ฃผ๋ ค๋ฉด @Controller๋กœ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.

 


- ์›น ์š”์ฒญ ํ๋ฆ„

1. localhost -> ํ—ค๋”์— /admin/reservation์„ ๋‹ด์•„ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ ip๋กœ GET ์š”์ฒญ
2. ํ†ฐ์บฃ์ด ํ•ด๋‹น ์š”์ฒญ์„ ๋ฐ›์•„์„œ HttpServeletRequest ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜
3. ๋ณ€ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์˜ DispatcherServlet์— ์ „๋‹ฌํ•จ
4. ์ด ๊ฐ์ฒด์—์„œ ์š”์ฒญ URL์„ ํ™•์ธ
5. RequestMappingHandlerAdapter๊ฐ€ RequestMappingHandlerMapping์ด ๋“ฑ๋กํ•œ key(url: /admin/reservation): value(๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ)๋ฅผ ๋ณด๊ณ  ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ
6. spring์—์„œ http body์— html ํŒŒ์ผ์„ ๋‹ด์•„ ์‘๋‹ตํ•จ.
7. http๋ฅผ ๋ฐ›์€ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ Œ๋”๋ง์„ ํ•˜๋ฉด์„œ ํ•„์š”ํ•œ css, js ํŒŒ์ผ์„ ๋‹ค์‹œ ์š”์ฒญ
8. ๋ฐ›๊ณ ๋‚˜์„œ, ๋ Œ๋”๋ง์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ js ํŒŒ์ผ์„ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น js ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ
9. js ์ฝ”๋“œ ์•ˆ์—์„œ json ๋ฐ์ดํ„ฐ ์š”์ฒญ
10. ๋ฐ›์•„์„œ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง

 

 

- ๋ˆ„๊ฐ€ `JdbcTemplate`์„ ์ฃผ์ž…ํ•ด์ค„๊นŒ?

์ด ๊ถ๊ธˆ์ฆ์€ JdbcTemplate๊ณผ @Autowired๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ƒ๊ธด ๊ถ๊ธˆ์ฆ์ด๋‹ค. ๋‚˜๋ฆ„๋Œ€๋กœ ์กฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์ •์ฒด๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ฃผ์ธ๊ณต์€ ๋ฐ”๋กœ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ.

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง IoC Container๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•ด์ค€๋‹ค. `org.springframework.context.ApplicationContext` ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‚˜ํƒ€๋‚˜๋ฉฐ, configuration metadata๋ฅผ ์ฝ์–ด ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์–ด๋–ป๊ฒŒ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์กฐํ•ฉํ•˜๊ณ  ์„ค์ •ํ• ์ง€ ์•Œ์•„๋‚ธ๋‹ค.

 

configuration metadata๋Š” ๋ฌด์—‡์ผ๊นŒ?

์ด๋Š” xml๊ณผ ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ• ์ง€ ์ ์–ด๋†“์€ ํŒŒ์ผ์ด๋‹ค. `<bean>` ํƒœ๊ทธ์™€ ํ•จ๊ป˜ ๊ฐ์ฒด์˜ ํ•„๋“œ ๋“ฑ์ด ์ž‘์„ฑ๋œ ํŒŒ์ผ์„ ๋ณธ ์  ์žˆ์„ํ…๋ฐ ์ด๊ฒŒ configuration metadata์— ํ•ด๋‹นํ•œ๋‹ค. ๋˜๋Š” ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” `@Bean`, `@Component` ๋“ฑ๊ณผ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

 

๋‹ค์‹œ ๋Œ์•„์™€์„œ ์ •๋ฆฌํ•˜๋ฉด ์Šคํ”„๋ง ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด `ApplicationContext`๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  configuration metadata, @Bean, @Component๋กœ ๋“ฑ๋ก๋œ ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋งŒ๋“ ๋‹ค. ์ด๋•Œ ๋‘ ๋ฐฉ์‹์—์„œ ์ฐจ์ด๊ฐ€ ์ƒ๊ธด๋‹ค.

 

- xml ํŒŒ์ผ๋กœ ์ •์˜ํ•œ ๊ฒฝ์šฐ

1. xml ํŒŒ์ผ ์† bean์„ ๋ชจ๋‘ ์Šค์บ”ํ•˜๊ณ  ์ƒ์„ฑ ์ˆœ์„œ๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•œ๋‹ค.  

2. ๋‹ค๋ฅธ ๋นˆ์„ ์˜์กดํ•˜๋ฉด, ์˜์กด๋˜๋Š” ๋นˆ์„ ๋จผ์ € ์ƒ์„ฑํ•œ๋‹ค.

3. xml ํŒŒ์ผ์— ์ •์˜๋œ ์ƒ์„ฑ์ž ์ธ์ž์— ๋”ฐ๋ผ ์ฃผ์ž…ํ•˜๋ฉฐ ๋นˆ์„ ์ฐจ๋ก€๋กœ ์ƒ์„ฑํ•œ๋‹ค.

 

- @Bean, @Component

@Bean์˜ ๊ฒฝ์šฐ ์ง์ ‘ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ธฐ์— ์ด๋ฅผ ํ† ๋Œ€๋กœ ์Šคํ”„๋ง์—์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„ ๋นˆ์„ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•œ๋‹ค.

 

@Component์˜ ๊ฒฝ์šฐ xml๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ•„์š”ํ•œ ๋นˆ์„ ๋จผ์ € ์ƒ์„ฑํ•˜๋ฉฐ ์ฃผ์ž…ํ•œ๋‹ค.

 

 

 

STEP2

[4-9๋‹จ๊ณ„] PR ๋งํฌ

 

step2๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธฐ๊ณ  ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ด์ฏค๋ถ€ํ„ฐ๋Š” ํ˜ผ์ž ์ง„ํ–‰ํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ๋‹น์žฅ ๊ตฌํ˜„์ด ์–ด๋ ต๋‹ค๊ณ  ๋А๋ผ์ง€ ์•Š์•„์„œ ๋‚ด ํ•™์Šต ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด ํ•™์Šตํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ํฌ๋ฃจ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๋Š” ์‹œ๊ฐ„์ด ๋” ๋งŽ์•˜๊ณ , ์ž์—ฐ์Šค๋ ˆ ์Šคํ”„๋ง์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ์„ค๊ณ„๋‚˜ ์ฒ ํ•™์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ๋” ๋งŽ์ด ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋‚˜๋Š” ๋ญ˜ ๋ฐฐ์› ์„๊นŒ?

- DDD

๋„๋ฉ”์ธ ๊ฐ์ฒด์— `id`๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ

[๋ธ”๋กœ๊ทธ] ๊ฐ์ฒด๊ฐ€ DB์˜ id๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ

๋ ˆ๋ฒจ 1๋ถ€ํ„ฐ ๊ณ„์† ๊ฐ์ฒด์ง€ํ–ฅ์„ ๋ฐฐ์šฐ๋‹ค DB์˜ ํ•„๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ–ˆ๊ธฐ์— ์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ด€์ ์„ ๋‹ฌ๋ฆฌํ•˜๋ฉฐ ์ด๋ฅผ ํ•ด์†Œํ–ˆ๋‹ค.

 

`DAO` vs `Repository`

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด DB์— ์ง‘์ค‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด DB ํ…Œ์ด๋ธ”๊ณผ 1:1 ๋งคํ•‘๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ๋˜๋ฉด DB์™€ ๊ฐ์ฒด ์‚ฌ์ด์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ์žฅ๊ธฐ ๋ฏธ์…˜๋•Œ๋„ ๊ทธ๋žฌ๋‹ค. DB์— ์ง‘์ค‘ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ ๊ฐ์ฒด์ง€ํ–ฅ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ค‘์‹ฌ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋๊ณ , ๊ฐ์ฒด์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋˜๋Š” ๊ฒฝํ—˜์„ ํ–ˆ์—ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ–ˆ๊ธฐ์— ์ด์ œ๋Š” DB๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์— ์ง‘์ค‘ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ด€์ ์„ ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค. DB๊ฐ€ ์•„๋‹Œ ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ƒ๊ฐํ•˜๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ๋จผ์ € ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์˜ ๋ชฉ๋ก์„ ๋ฝ‘์•„ ์ถ”์ƒํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์˜ ์ง‘ํ•ฉ์€ DB ํ…Œ์ด๋ธ”๊ณผ 1:1 ๋Œ€์‘๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋งˆ์น˜ ๋„๋ฉ”์ธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ปฌ๋ ‰์…˜์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

๋‘ ๊ฒฝ์šฐ์˜ ์ฐจ์ด๊ฐ€ ์ดํ•ด๊ฐ€ ๋˜๋Š”๊ฐ€? ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” `DAO`๊ณ , ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๊ฐ€ ๋ฐ”๋กœ `Repository`์ด๋‹ค. 

 

์—”ํ‹ฐํ‹ฐ, ๋„๋ฉ”์ธ, VO

[๋ธ”๋กœ๊ทธ] ์—”ํ‹ฐํ‹ฐ, VO...

์šฉ์–ด์— ๋Œ€ํ•œ ๊ธฐ์ค€์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์—ฌ๋Ÿฌ ํฌ๋ฃจ๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋ฉฐ ๋‚˜์˜ ์ƒ๊ฐ์„ ์ „ํŒŒํ•˜๊ณ  ๋‹ค๋ฅธ ์ด๋“ค์˜ ์ƒ๊ฐ์„ ํก์ˆ˜ํ•˜๋ฉฐ ์šฉ์–ด์— ๋Œ€ํ•ด ์–ด๋А์ •๋„ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ, ์•„์ง DDD๋ฅผ ํ•™์Šตํ•˜๊ธฐ์—” ์ด๋ฅธ ๊ฒƒ ๊ฐ™์•„์„œ ๋”ฐ๋กœ ํ•™์Šตํ•˜์ง„ ์•Š์„ ์˜ˆ์ •์ด๋‹ค. ์•„๋งˆ ์ง€๊ธˆ์ฒ˜๋Ÿผ ํฌ๋ฃจ๋“ค๊ณผ์˜ ์–˜๊ธฐ๋ฅผ ํ†ตํ•ด DDD ์ง€์‹์„ ํก์ˆ˜ํ• ๋“ฏํ•˜๋‹ค! ๋ ˆ๋ฒจ 2๋Š” ์Šคํ”„๋ง์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋ชฉ์ ์„ ๋‘๊ณ ์žˆ์Œ์„ ํ•ญ์ƒ ์žŠ์ง€ ์•Š๊ณ  ๋‚˜์•„๊ฐˆ ์ƒ๊ฐ์ด๋‹ค.

 

 

- `@Autowired`

1. ์ƒ์„ฑ์ž ์ฃผ์ž…
2. setter ์ฃผ์ž…
3. ํ•„๋“œ ์ฃผ์ž…

์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค.

public class MovieRecommender {

	@Autowired
	private MovieCatalog[] movieCatalogs;
	// private Set<MovieCatalog> movieCatalogs;

	// ...
}


์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, `movieCatalogs` ๋ฐฐ์—ด์— `MovieCatalog`๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“  ๋นˆ์„ ๋‹ด์•„์ค€๋‹ค. ์ปฌ๋ ‰์…˜๋„ ์˜ˆ์™ธ๋Š” ์—†๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ `@Order`, `@Priority`๋กœ ์ˆœ์„œ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Map์œผ๋กœ ๋ฐ›๋Š”๋‹ค๋ฉด `Map<String, MovieCatalog>`์ฒ˜๋Ÿผ key๋กœ ๋นˆ ์ด๋ฆ„, value๋กœ ํ•ด๋‹น ๋นˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

`required` ์˜ต์…˜์€ ๋นˆ์ด ๊ผญ ์ฑ„์›Œ์ง€์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์˜ต์…˜์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ true์ด๊ธฐ์— ์ฃผ์ž…ํ•  ๋นˆ์ด ์—†์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•˜์ง€๋งŒ, required ์˜ต์…˜์„ false๋กœ ์ค€๋‹ค๋ฉด ๋นˆ์ด ์—†์–ด๋„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  null๋กœ ์ฑ„์šด๋‹ค.

๋˜, ์žฌ๋ฐŒ๋Š” ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋นˆ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ํ•„๋“œ๋ช…์„ ๋ณด๊ณ  ๋นˆ์„ ์ฃผ์ž…ํ•ด์ค€๋‹ค.

 


- ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ์€ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ•ด๋‹น ๋ฏธ์…˜์—์„œ step1๊นŒ์ง€๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค์˜ ๊ณ„์ธต์„ ๋‚˜๋ˆ ์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ์ฑ…์ž„์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ๋ณธ๋‹ค๋ฉด ์ด๋Š” ์ž˜๋ชป๋œ ๊ตฌ์กฐ์ด๋‹ค. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์— ์ง‘์ค‘ํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋˜์—ˆ์œผ๋ฉฐ, ์„œ๋น„์Šค๊ฐ€ ๊ฐ€์ง€๋Š” ์ฑ…์ž„์˜ ๋ฌด๊ฒŒ๊ฐ€ ์ž‘๋”๋ผ๋„ ํ•ด๋‹น ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค.

๊ทธ๋ž˜์„œ step2์—์„œ๋Š” ์˜๋„์ ์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค์˜ ๊ณ„์ธต์„ ๊ตฌ๋ถ„ํ•˜์˜€๋‹ค. ์ด๋Ÿฌํ•œ ์„ค๊ณ„๊ฐ€ ์˜๋„์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ์ด๋ค„๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”ํ›„์— ์‚ฌ์†Œํ•œ ์ฑ…์ž„์ด๋ผ๋„ ๋ถ„๋ฆฌํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

 

 

๋งˆ์ง€๋ง‰

์ด๋ฒˆ ๋ฏธ์…˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ญ์ƒ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด์„œ ์˜๋ฌธ์ด ๋“œ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. step1์—์„œ๋Š” ๊ตฌํ˜„์ด ๋ฐ”๋น  ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜์ง€ ๋ชปํ•˜๊ณ  ํ‚ค์›Œ๋“œ๋งŒ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๊ณ , step2์—์„œ ํ•ด๋‹น ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์˜๋ฌธ์„ ํ•ด์†Œํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์—์„œ ๊นŠ์€ ๊ณ ๋ฏผ์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์‚ฌ์ดํด์ด ์ •๋ง ์ข‹์€ ๊ฒƒ์ผ๊นŒ? ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋„ step2๋งŒํผ ์–ป์–ด๊ฐˆ ์ˆœ ์—†์„๊นŒ?

ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์–ป์–ด๊ฐˆ ๊ฒƒ์€ ๋ฌด์—‡์ด๋ฉฐ, step2๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์–ป์–ด๊ฐ€๋Š” ๊ฒƒ์˜ ์ฐจ์ด๋Š” ๋ญ˜๊นŒ? ๋‚˜๋Š” ์•„์ง ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ ์„ ํฌ๊ฒŒ ๋ชป ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ถ„๋ช… ๋ ˆ๋ฒจ 1 ํšŒ๊ณ ์—์„œ ์šฐํ…Œ์ฝ”์˜ ํ™˜๊ฒฝ์„ ํ†ตํ•ด ์„ฑ์žฅํ•œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์„ฑ์žฅํ• ๋งŒํผ ๊นŠ์€ ๊ณ ๋ฏผ์„ ํ•  ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์„ฑ์žฅํ•œ๋‹ค๊ณ  ๋А๋ผ์ง€ ๋ชปํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด๋ฒˆ์— ํšŒ๊ณ ๋ฅผ ํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์‚ฌ์ดํด๋„ ๊ดœ์ฐฎ์€ ์‚ฌ์ดํด์ด ์•„๋‹Œ๊ฐ€ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. step2๊ฐ€ ๋˜๋ฉด ์—ฌ๋Ÿฌ ํฌ๋ฃจ๋“ค๊ณผ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๊ณ , ์ƒ๊ฐํ•  ์‹œ๊ฐ„๋“ค์„ ๊ฐ€์ง€๋ฉด์„œ ์Šค์Šค๋กœ ์„ฑ์žฅํ•œ๋‹ค. step1์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋‚˜๋ฆ„์˜ ์˜๋„๋ฅผ ๋‹ด์œผ๋ ค๊ณ  ๊ณ ๋ฏผํ•˜๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ์— ๋ฐฐ์›€์— ๋Œ€ํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๊ณ , ์ด๋ฅผ step2์—์„œ ๊ณ ๋ฏผํ•˜๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ž˜ ์–ป์–ด๋‚ด๊ณ  ์žˆ์—ˆ๋‹ค. 

ํŽ˜์–ด๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค๋ฉด ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์„ ํ‚ค์›Œ๋“œ๋„ ์žˆ์—ˆ๊ณ , ์Šค์Šค๋กœ ์ƒ๊ฐํ•œ ํ‚ค์›Œ๋“œ๋„ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ํ‚ค์›Œ๋“œ๋“ค์ด ๋ฐฉํ–ฅ์„ฑ์„ ์žก์•„์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ์ž์—ฐ์Šค๋ ˆ step2์—์„œ ์ด๋Ÿฐ ๊ณ ๋ฏผ๋“ค์„ ํ•ด์†Œํ•˜๊ณ  ํฌ๋ฃจ๋“ค๊ณผ ์–˜๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋ฉฐ ๋‚˜๋งŒ์˜ ์ฒ ํ•™์„ ๋งŒ๋“ค์–ด๊ฐ„๋‹ค.

์ถฉ๋ถ„ํžˆ ์ž˜ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๊ฐœ๋ฐœ > ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์šฐํ…Œ์ฝ” ๋ ˆ๋ฒจ 2์˜ ๋ฏธ์…˜ 2 ํšŒ๊ณ   (4) 2025.05.19
persist๋ฅผ ํ•˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ  (1) 2025.05.16
์—”ํ‹ฐํ‹ฐ, VO...  (1) 2025.05.04
๊ฐ์ฒด๊ฐ€ DB์˜ id๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ  (5) 2025.04.22
์šฐํ…Œ์ฝ”์—์„œ ๋‚œ ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋‹ค.  (6) 2025.04.19
'๊ฐœ๋ฐœ/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ์šฐํ…Œ์ฝ” ๋ ˆ๋ฒจ 2์˜ ๋ฏธ์…˜ 2 ํšŒ๊ณ 
  • persist๋ฅผ ํ•˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ
  • ์—”ํ‹ฐํ‹ฐ, VO...
  • ๊ฐ์ฒด๊ฐ€ DB์˜ id๋ฅผ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ
์œจ๋ฌด;
์œจ๋ฌด;
  • ์œจ๋ฌด;
    ๐ŸฅŠ
    ์œจ๋ฌด;
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (65)
      • ๊ฐœ๋ฐœ (30)
        • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค (13)
        • ์šด์˜์ฒด์ œ (12)
      • ๊ฐœ๋ฐœ์„œ์  (2)
        • ์ž๋ฐ”-์Šคํ”„๋ง ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ (28)
      • ๊ฒŒ์ž„๊ฐœ๋ฐœ (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐฑ์ค€
    ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
    C++
    ๊ฒŒ์ž„
    BFS
    2048
    ์ฝ”๋”ฉ
    ์ธ๋””๊ฒŒ์ž„
    ์šฐํ…Œ์ฝ”
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ด๋™์ƒ์„ฑ์ž
    ๊ฐœ๋ฐœ์—ฐ์Šต
    ๊ฒŒ์ž„๊ฐœ๋ฐœ
    ํŒŒ์ด์ฌ
    dfs
    ๊ฐœ๋ฐœ
    ์ด๊ฒƒ์ดC++์ด๋‹ค
    ๋กœ๊ทธ๋ผ์ดํฌ
    bsp
    2048(Hard)
    ์…€๋ฃฐ๋Ÿฌ์˜คํ† ๋งˆํƒ€
    ์ ˆ์ฐจ์ ์ƒ์„ฑ
    ์ž๋ฐ”
    python
    ๋กœ๊ทธ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์œจ๋ฌด;
[์šฐํ…Œ์ฝ” ๋ ˆ๋ฒจ2] ๋ฏธ์…˜1, ๋ฐฉํƒˆ์ถœ ์˜ˆ์•ฝ ๊ด€๋ฆฌ ํšŒ๊ณ 
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”