Spring & Spring Boot

๐Ÿ’ก Spring Boot์™€ Spring Framework์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ Auto Configuration์ž…๋‹ˆ๋‹ค.

Spring์€ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ, Spring Boot๋Š” ์„ค์ •์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ž๋™ํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํŽธํ•˜๊ฒŒ ์Šคํ”„๋ง์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

spring boot starter dependency๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•˜๊ณ , ๋‚ด์žฅ๋œ ์„œ๋ฒ„๊ฐ€ ์žˆ์–ด ๋ณ„๋„์˜ ์„œ๋ฒ„ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ“ Spring Framework์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • IoC / DI
  • AOP
  • PSA

 

๐Ÿ’ก DAO, DTO, VO์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • DAO(Data Access Object)๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ ‘๊ทผ์„ ์œ„ํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. (Repository, Mapper)
  • DTO(Data Transfer Object)๋Š” ๊ฐ ๊ณ„์ธต ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ง์„ ๊ฐ–์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋กœ getter, setter๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. (์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๊ณ„์ธต์€ Controller, View, Business Layer, Persistent Layer)
  • VO(Value Object)๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ์ฝ๊ธฐ ์ „์šฉ(readonly)์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก ์Šคํ”„๋ง ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ „์ฒด ํ๋ฆ„์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด DispatcherServlet์€ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘(Handler Mapping)์„ ํ†ตํ•ด ์š”์ฒญ URI์— ๋งคํ•‘๋œ ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ(Handler Adapter)๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ์— ์ปจํŠธ๋กค๋Ÿฌ์˜ ์‘๋‹ต์ด ๋Œ์•„์˜ค๋ฉด ModelAndView๋กœ ์‘๋‹ต์„ ๊ฐ€๊ณตํ•ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ทฐ ํ˜•์‹์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ทฐ ๋ฆฌ์กธ๋ฒ„(View Resolver)๋ฅผ ํ†ตํ•ด ๋ทฐ๋ฅผ ๋ฐ›์•„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. (๋ทฐ ๋ฆฌ์กธ๋ฒ„๋Š” ๋ทฐ์˜ ๋ Œ๋”๋ง ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜)
    • ๋ทฐ๊ฐ€ ์—†๋Š” REST ํ˜•์‹์˜ @ResponseBody๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ , MessageConverter๋ฅผ ๊ฑฐ์ณ JSON ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. (MessageConverter๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•ด Body ๊ฐ’์„ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰)

 

๐Ÿ’ก @Controller์™€ @RestController์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

@Controller์˜ ์—ญํ• ์€ Model ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  View๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด์ง€๋งŒ,

@RestController๋Š” ๋‹จ์ˆœํžˆ ๊ฐ์ฒด๋งŒ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋Š” JSON ๋˜๋Š” XML ํ˜•์‹์œผ๋กœ HTTP ์‘๋‹ต์— ๋‹ด์•„์„œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“ @RestController๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌด์—‡์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‚˜?

@RestController๋Š” @Controller์™€ @ResponseBody์˜ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค.

Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ RESTful ์›น ์„œ๋น„์Šค๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก Spring 4.0์—์„œ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

@ResponseBody : ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์ด HTTP ์‘๋‹ต ๋ณธ๋ฌธ์— ์ง์ ‘ ์“ฐ์ด๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜, ๊ธฐ๋ณธ์ ์œผ๋กœ JSON, XML ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜

 

 

๐Ÿ’ก IoC / DI์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

IoC (Inversion of Control)

IoC๋Š” ์ œ์–ด์˜ ์—ญ์ „์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ƒ์„ฑ, ์ƒ๋ช… ์ฃผ๊ธฐ์˜ ๊ด€๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ IoC ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ๋„˜๊ธด ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๋ฉด ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•œ ๊ฐ์ฒด๋“ค์„ ๋นˆ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

DI (Dependency Injection) ์˜์กด์„ฑ ์ฃผ์ž…์€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์„ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ด๊ณ , ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ“ DI ๋ฐฉ๋ฒ•?

์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ƒ์„ฑ์ž ์ฃผ์ž…, ํ•„๋“œ ์ฃผ์ž…, ์„ธํ„ฐ ์ฃผ์ž… 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๊ณต์‹ ๋ฌธ์„œ์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์ฃผ์ž… ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ•„์š”ํ•œ ์˜์กด์„ฑ์ด ๋ชจ๋‘ ์ฃผ์ž…๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ผ๊ด€์„ฑ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ฐ•์ œํ™”ํ•˜์—ฌ ์ปดํŒŒ์ผ ์‹œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก AOP(Aspect Oriented Programming)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์ธ์ฆ, ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์ด ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

AOP์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด์ž ์žฅ์ ์€ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ, ์žฌํ™œ์šฉ์„ฑ์˜ ๊ทน๋Œ€ํ™”, ๋ณ€ํ™” ์ˆ˜์šฉ์˜ ์šฉ์ด์„ฑ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ“ AOP์—์„œ Proxy ?

AOP์—์„œ๋Š” ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

(์–ด๋“œ๋ฐ”์ด์Šค๋Š” ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ์˜ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์œผ๋กœ ํŠน์ • ์ง€์ ์—์„œ ์‹คํ–‰๋œ๋‹ค.)

ํ”„๋ก์‹œ๋Š” ์‹ค์ œ ํƒ€๊ฒŸ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ๊ณ , ํƒ€๊ฒŸ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ํ›„์— ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋ก์‹œ๋Š” ํƒ€๊ฒŸ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„๊ณ , ์–ด๋“œ๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ์‹ค์ œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก PSA (Portable Service Abstraction)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์„œ๋น„์Šค๊ฐ€ ํŠน์ • ํ”Œ๋žซํผ์ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ๋„ ์ผ๊ด€๋˜๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” JDBC๊ฐ€ ์žˆ๋Š”๋ฐ, JDBC๋Š” ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณตํ†ต๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”๋Š” ์„œ๋น„์Šค์˜ ์ด์‹์„ฑ์„ ๋†’์ด๊ณ , ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“ Spring์—์„œ ์ œ๊ณตํ•˜๋Š” PSA ?

  • Spring Web MVC
  • Spring Transaction
  • Spring Date

 

๐Ÿ’ก @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์„ ํฌํ•จํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

@SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์€ ๋‚ด๋ถ€์ ์œผ๋กœ @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • @SpringBootConfiguration ์–ด๋…ธํ…Œ์ด์…˜์€ ์Šคํ”„๋ง ๋ถ€ํŠธ์— ๋Œ€ํ•œ ์„ค์ • ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํด๋ž˜์Šค๋ฅผ ์ธ์‹ํ•˜๊ณ ,
    ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์— @Bean ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‹ด๊ธด ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์ƒ์„ฑํ•ด ์ฃผ๋ฉฐ, ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • @EnableAutoConfiguration ์–ด๋…ธํ…Œ์ด์…˜์€ ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ auto-configuration์„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, Classpath์— ์กด์žฌํ•˜๋Š” Jar ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ configuration ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์€ @Component, @Service, @Repository, @Controller์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ž๋™์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ application context์— ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ก Filter์™€ Interceptor์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

ํ•„ํ„ฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฑฐ๋ฅธ ๋’ค ์ •์ œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Dispatcher Servlet ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „/ํ›„์— url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณตํ†ต์ ์ธ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ๊ด€๋ จ ์ž‘์—…
  • ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ๋กœ๊น… ๋˜๋Š” ๊ฒ€์‚ฌ
  • ์ด๋ฏธ์ง€/๋ฐ์ดํ„ฐ ์••์ถ• ๋ฐ ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ
  • Spring๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ

 

์ธํ„ฐ์…‰ํ„ฐ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ž‘์—… ์ „/ํ›„๋กœ ๊ฐ€๋กœ์ฑ„ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Dispatcher Servlet์ด Controller๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „/ํ›„์— ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋ผ์–ด๋“ค์–ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์„ธ๋ถ€์ ์ธ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ๊ด€๋ จ ์ž‘์—…
  • API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋กœ๊น… ๋˜๋Š” ๊ฒ€์‚ฌ
  • Controller๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€๊ณต

 

๐Ÿ’ก ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

์„œ๋ธ”๋ฆฟ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ“ ์„œ๋ธ”๋ฆฟ๊ณผ JSP์˜ ์ฐจ์ด์  ?

์„œ๋ธ”๋ฆฟ

  • ์ž๋ฐ” ์ฝ”๋“œ ๋‚ด์— html ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹
  • ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ฆ
  • ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋™์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜

JSP

  • html ์ฝ”๋“œ ๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹
  • html ์ฝ”๋“œ์™€ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ด
  • ์‹คํ–‰ ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰

 

๐Ÿ’ก Dispatcher Servlet์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

Dispatcher Servlet์€ HTTP ํ”„๋กœํ† ์ฝœ์— ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ฐ€์žฅ ๋จผ์ € ๋ฐ›์•„์„œ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•ด ์ฃผ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ๋ชจ๋“  ์„œ๋ธ”๋ฆฟ์„ URL ๋งคํ•‘์„ ์œ„ํ•ด web.xml ๋“ฑ๋กํ•ด ์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ,

Dispatcher Servlet์ด ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ํ•ธ๋“ค๋งํ•˜๊ณ , ๊ณตํ†ต ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ํŽธํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก BeanFactory์™€ ApplicationContext์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

BeanFactory์™€ ApplicationContext ๋ชจ๋‘ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” IoC ์ปจํ…Œ์ด๋„ˆ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ)์ด๋ฉฐ, Bean์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

BeanFactory๋Š” Bean์„ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ ,

ApplicationContext์€ BeanFactory์˜ ํ™•์žฅ๋œ ๋ฒ„์ „์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ, ์ด๋ฒคํŠธ ๋ฐœํ–‰, AOP ์ง€์› ๋“ฑ์˜ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

BeanFactory๋Š” ์ง€์—ฐ ๋กœ๋”ฉ(lazy loading)์„ ์ง€์›ํ•˜๋ฉฐ, ApplicationContext์€ ์ฆ‰์‹œ ๋กœ๋”ฉ(eager loading)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
BeanFactory๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, BeanFactory ์ƒ์†๋ฐ›์•„ ํ™•์žฅํ•œ ๊ฒƒ์ด ApplicationContext์ž…๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก ์Šคํ”„๋ง ์‹ฑ๊ธ€ํ†ค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

Spring์—์„œ๋Š” @Component, @Service, @Repository, @Controller ๋“ฑ์˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นˆ์„ ์ •์˜ํ•  ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„(๋ฒ”์œ„)๋กœ ๋นˆ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ์‹ฑ๊ธ€ํ†ค์˜ ๋™์ž‘ ๊ณผ์ •์€

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ์ ์— ๋ชจ๋“  ๋นˆ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๋นˆ ์ •์˜์— ๋”ฐ๋ผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์บ์‹œ์— ์ €์žฅ๋˜๋ฉฐ, ์ดํ›„ ํ•ด๋‹น ๋นˆ์„ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 

 

 

๐Ÿ’ก ๊ฒฐํ•ฉ๋„์™€ ์‘์ง‘๋„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๊ฒฐํ•ฉ๋„๋Š” ๋ชจ๋“ˆ ๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด์„ฑ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์œผ๋ฉด ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๊ฐ•ํ•ด์„œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ  ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์œผ๋ฉด ๋ชจ๋“ˆ ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์•ฝํ•˜๊ณ , ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‘์ง‘๋„๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ ๋‚ด์—์„œ ์š”์†Œ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์‘์ง‘๋„๊ฐ€ ๋†’์œผ๋ฉด ๋‚ด๋ถ€์˜ ์š”์†Œ๋“ค์ด ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์–ด ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์œผ๋ฉด ์š”์†Œ๋“ค์ด ์„œ๋กœ ๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•  ๋•Œ, ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ๊ณ  ์‘์ง‘๋„๋Š” ๋†’์•„์ง€๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด ์ฝ”๋“œ์˜ ํ’ˆ์งˆ๊ณผ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก Lombok์ด ๊ฐ€๋Šฅํ•œ ์ด์œ  ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

๋กฌ๋ณต์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์–ด๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋กฌ๋ณต์—์„œ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ, ๋Ÿฐํƒ€์ž„์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ๋กฌ๋ณต์ด ์ƒ์„ฑํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

'Computer Science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Java  (0) 2024.08.30