๐Ÿ“Œ ํ•™์Šต๋‚ด์šฉ

โ— JWT ๊ธฐ๋ฐ˜์˜ Spring Security

- 

โ— ๋Œ“๊ธ€ ์ž‘์„ฑ์šฉ CRUD

- 

โ— GitHub Fork

 

โ— React์™€์˜ ์—ฐ๊ณ„ (CORS)

- 

 


๐Ÿ“Œ ๋А๋‚€์ 

โ— ์ฑ„๋„ ํ†ต์ผ(

- ํด๋ผ์ด์–ธํŠธ<->์„œ๋ฒ„ : API ๊ตฌ์ฒดํ™”

- ์„œ๋ฒ„๋ผ๋ฆฌ : ๋ฌธ๋ฒ•์ด๋‚˜ ํ‘œํ˜„, ์ฃผ์„๋“ฑ์˜ ํŒŒ์ผ ๋‚ด ํ†ต์ผ

โ—

- 

โ—

- 


๐Ÿ“Œ ์•„์‰ฌ์› ๋˜ ์ 

โ— 

- 

โ—

- 

โ—

- 

 


๐Ÿง ์ข€๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฐœ๋…

  • p6spy
  • Slf4j
  • Template Engine (Mustache, Thymeleaf ๋“ฑ๋“ฑ..)
  • Hibernate
  • @RequestBody
  • @Controller vs @RESTController
  • Optional String
  • @Bean
  • xml๊ณผ jsp
  • @ModelAndView
  • Servlet
  • IoC(Inversion of Control)
  • DI(Dependency Injection)
  • JPA Repository์˜ findbyId vs findallbyId
  • JUnit ํ…Œ์ŠคํŠธ

 

'Computer ๐Ÿ’ป > ํ•ญํ•ด99 โ›ต๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ•ญํ•ด99 WIL : Week5  (0) 2021.04.04
ํ•ญํ•ด99 WIL : Week04  (0) 2021.03.28
ํ•ญํ•ด99 WIL : Week03  (0) 2021.03.21
ํ•ญํ•ด99 WIL : Week02  (0) 2021.03.14
ํ•ญํ•ด99 WIL : Week01  (0) 2021.03.07

๐Ÿ“Œ ํ•™์Šต๋‚ด์šฉ

โ— Spring

โ—‹ Security (๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž…, OAuth)

-> ํด๋ก ์ฝ”๋”ฉ๋•Œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ(React)์™€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์šฐ์—๋Š” ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์“ฐ์ผ ๊ฒƒ๊ฐ™๋‹ค.
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด ๋ฌด์—‡๋ฌด์—‡์ด ์žˆ๋Š”์ง€๋Š” ์•„์ง ํ•™์Šต๋œ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ผ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ, ๋‹ค์Œ์ฃผ WIL์— ์ •๋ฆฌํ•ด์„œ ๊ธฐ๋กํ•˜๋ ค ํ•œ๋‹ค.

์นด์นด์˜ค ์†Œ์…œ๋กœ๊ทธ์ธ์˜ ๋‹จ๊ณ„๋ณ„ ์ฝ”๋“œ ๋ถ„๋ฆฌ

โ—‹ @Controller์™€ @RestController์˜ ์ฐจ์ด

  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐ์„ ํ•˜์ž๋ฉด RestController = Controller + ResponseBody๋ผ๊ณ  ์ƒ๊ฐ์„ ํ•˜๋ฉด ๋ ๊ฒƒ๊ฐ™๋‹ค.
  ์Šค๋ฆฐ์ด์ธ ๋‚˜๋Š” ์ง€๊ธˆ ๋‹จ๊ณ„์—์„œ ์ด๋ ‡๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค.
"RestController๋Š” JSON ํ˜•์‹์˜ ์ถœ๋ ฅ์„, Controller์€ String ํ˜•์‹์˜ ์ถœ๋ ฅ์„ ํ•œ๋‹ค"
์ถœ๋ ฅ๋˜๋Š” ํ˜•ํƒœ๋งŒ ๋ดค์„๋Œ€๋Š” RestController๊ฐ€ ํ›จ์”ฌ ๋‹ค์–‘ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. List, Optional<> ๋“ฑ๋“ฑ
๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋„ Controller ์•ˆ์— model์„ parameter๋กœ ์จ์„œ ๋„˜๊ธธ ๊ฐ’(์ด ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์ธ ๋œ ์•„์ด๋””)์„ model.addattribute์— ๋„ฃ์–ด attribute value๋กœ ๋ณด๋‚ด์คฌ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณด๋‚ด์ค€ ๊ฐ’์€ ์ถœ๋ ฅ๊ฐ’์— String์œผ๋กœ ์“ฐ์ธ html ํŒŒ์ผ์—์„œ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ Thymeleaf Template Engine์„ ์‚ฌ์šฉํ•˜์—ฌ์„œ ๊ฐ’์„ ๋ฐ›์•„์ค„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•œ ์ •์„์ง„๋‹˜์˜ ๋ธ”๋กœ๊ทธ _ https://github.com/strong1133/TIL/blob/main/spring/Controller%20vs%20RestController(21-03-25).md

 

โ—‹ ์˜ˆ์™ธ์ฒ˜๋ฆฌ(if ... throw ... / orElseThrow ...)

ํ˜ผ์ž์„œ ํ•œ์ฐธ์„ ํ—ค๋งธ๋˜ ๋ถ€๋ถ„์ด๋‹ค.(ํ•˜๋ฃจ์ •๋„ ๊ฑธ๋ ธ๋˜๊ฒƒ๊ฐ™๋‹ค.)
์ด ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ฆฌ๋Š” ์ข€ ๋” ํ•„์š”ํ• ๊ฒƒ๊ฐ™์•„์„œ ๋‹ค์Œ์ฃผ WIL์— ์˜ฌ๋ฆด ๊ณ„ํš์ด๋‹ค.

 

โ—‹ ORM(Object Relational Mapping) _ ERD

JPA๋ฅผ ํ™œ์šฉํ•œ Entity ํ˜•์„ฑ์‹œ Entity๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ ์„œ๋กœ์˜ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๊ทธ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ณด๋ ค ํ–ˆ๋‹ค.๊ฒฐ๋ก ์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด ์™„์ „ํžˆ ์‹คํ˜„ํ•˜์ง€๋Š” ๋ชปํ–ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ์–ด๋А์ •๋„ ์ดํ•ด๊ฐ€ ๋๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ง์ ‘์ ์œผ๋กœ Spring์—์„œ Database๋ฅผ ํ™œ์šฉํ•ด ๋‚˜ํƒ€๋‚ด๋ณด๋ ค ํ•˜๋‹ˆ๊นŒ ๋ฏธ์น˜๋„๋ก ์•ˆ๋˜์—ˆ๋‹ค. ํ•จ๊ป˜ ํ•ญํ•ด์ค‘์ธ ๊ฐ•์ƒ์—ฐ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋‹ˆ, ๋‚ด๊ฐ€ ๊ณ„์† ๋‹ต๋‹ตํ•ดํ–ˆ๋˜ ๋ถ€๋ถ„์€ invalidํ•œ ๋นจ๊ฐ„ ๋ฐ‘์ค„์ด ์•„๋‹ˆ๋ผ warning ๊ฐœ๋…์˜ ์ฃผํ™ฉ์ƒ‰ ๋ฐ‘์ค„์ด์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋‹ค์‹œ ๋ด์•ผ๊ฒ ๋‹คใ… 
๋‹ค์‹œ ๋ณผ๋•Œ๋Š” ๋”๋ถˆ์–ด์„œ Model ์™ธ์— ์–ด๋–ค ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋‹ค๋ค„์•ผํ•˜๋Š”์ง€๋„ ์ƒ๊ฐํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ์˜ˆ์ •์ด๋‹ค.

Spring Week2 ๊ณผ์ œ์ค‘ ์ฐธ๊ณ ์šฉ์œผ๋กœ ๊ทธ๋ ค๋ณธ ERD (์ƒํ™œ์ฝ”๋”ฉ ์บก์ณ์ด๋ฏธ์ง€์—์„œ ๋ง๋ถ™์ž„)

 

Spting Data JPA์— ๋Œ€ํ•œ ์ถ”๊ฐ€์ •๋ณด _ ๊ฐ•์ƒ์—ฐ๋‹˜ ๋ธ”๋กœ๊ทธ ๊ธ€  https://sanyoni.postype.com/post/9544578


๐Ÿ“Œ ๋А๋‚€์ 

โ—  ์–ด๋ ต๋‹ค.

- ์ด๋ฒˆ์ฃผ ๊ฐ•์˜ ์ง„ํ–‰์€ ์ง€๋‚œ์ฃผ์— ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ํ•˜๋“œ์ฝ”๋”ฉ์˜ ํ˜•ํƒœ๋กœ ๋น„๊ต ๋Œ€์กฐ๋ฅผ ํ•˜๋ฉด์„œ ์ง„ํ–‰์ด ๋๋‹ค.

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

 

โ— ์„ฑ์žฅํ†ต

- ์ฃผ์–ด์ง„ ๋‹จ์œ„์‹œ๊ฐ„๋‹น ๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฃผ๋ณ€ ์‚ฌ๋žŒ์„ ํ†ตํ•œ ๋„์›€์ด ๊ฐ„์ ˆํ•ด์ง€๋Š”๊ฑธ ๋А๊ผˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋Œ€ํ•™์‹œ์ ˆ ์†”๋ฃจ์…˜์„ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‚˜์—๊ฒŒ ์œ ์ต์ด ํ•˜๋‚˜๋„ ์—†๋‹ค๋Š”  ๋ฐ˜๋ฌธ์„ ํ•˜๋ฉด์„œ ๊ฐ€๊ธ‰์  ์ตœ๋Œ€ํ•œ ๋‚ด๊ฐ€ ํ•œ์ฐธ ๊ณ ๋ฏผํ•˜๊ณ  ํ•ด๊ฒฐํ•ด๋ณด๋ ค๋Š” ์—ฐ์Šต์„ ํ•˜๊ณ ์žˆ๋‹ค. ๋‚˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กฐ์›๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋„ ๊ฐ™์€ ์ƒํ™ฉ๊ณผ ๊ณ ๋ฏผ์œผ๋กœ ์”จ๋ฆ„ํ•˜๊ณ  ์žˆ๋Š”๊ฒŒ ๋ณด์ธ๋‹ค. ์–ธ์ œ๊นŒ์ง€๋‚˜ ์†์„ ๋นŒ๋ฆด ์ˆ˜๋Š” ์—†์œผ๋‹ˆ ๋‚ด๊ฐ€ ์Šค์Šค๋กœ ์ตœ๋Œ€ํ•œ ์ž˜ ์ •๋ฆฌํ•ด๋‘๋Š”๊ฒŒ ๋ชจ๋ฒ”๋‹ต์•ˆ์ด ์•„๋‹๊นŒ..

 

โ— Good Viber

- ๋‚˜๋Š” ์ฃผ๋ณ€์— ์–ด๋–ค ์‚ฌ๋žŒ์ผ๊นŒ? ๋‚˜๋Š” ์–ด๋–ค ๊ฐ€์น˜๋ฅผ ์ „ํ•ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ?

์ด๋Ÿฐ ์ƒ๊ฐ์— ๋Š˜ ์‚ฌ๋กœ์žกํ˜€์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ์˜ ์ด๋Ÿฐ ์ƒ๊ฐ์€ ๋‚˜๋ผ๋Š” ์ž์•„๋ฅผ ๊ฑด๊ฐ•ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฐ€์šด๋ฐ ์ฃผ๋Š” ์˜ํ–ฅ์„ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฒซ์ฃผ๋ถ€ํ„ฐ ๋Š˜ ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋‚ด๊ฐ€ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋Ÿฐ ์ƒ์ƒ์„ ํ•ด์˜ค๋Š”๋ฐ, ํ˜„์‹ค์—์„œ์˜ ๋‚˜๋Š” ๋Š˜ ๋ฐ˜๋Œ€์˜ ์œ„์น˜์—์„œ ๋„์›€์„ ๋ฐ”๋ผ๊ณ  ์žˆ๋‹ค.

ํ‘ธ๋…ํ•˜๋ฉด์„œ ์ฐก์ฐก๋Œ€๋Š”๊ฑด ์•„๋‹Œ์ง€ ์ต๋ช… ์‹œํŠธ๋กœ ํ”ผ๋“œ๋ฐฑ์ข€ ๋ฐ›์•„๋ณด๊ณ ์‹ถ์€ ๊ทธ๋Ÿฐ ๋งˆ์Œ์ด๋‹ค.

์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์ด ๋ฟœ์–ด๋‚ด๋Š” ๋ฐ”์ด๋ธŒ๊ฐ€ ์ข‹์€์ง€ ๋‚˜์œ์ง€๊ฐ€ ๋‚˜์˜ ํ•˜๋ฃจ์— ํฐ ์˜ํ–ฅ์„ ์ค€๋‹ค๊ณ  ๋А๋‚€๋‹ค. ํ•ญํ•ด๋ฅผ ํ•˜๋ฉด์„œ๋Š” ๋”๋”์šฑ ๊ทธ๋Ÿฐ๊ฒƒ๊ฐ™๋‹ค. ์ง€๊ธˆ ๊ตฟ๋ฐ”์ด๋ธŒ๋ฅผ ๋– ์˜ฌ๋ ธ์„๋•Œ ์ƒ๊ฐ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค. ๊ทธ๋ถ„๋“ค์˜ ์žฅ์ ์„ ๋‹ฎ์•„๊ฐ€๊ณ ์‹ถ๋‹ค.


๐Ÿ“Œ ์•„์‰ฌ์› ๋˜ ์ 

โ— ๊ฐ•์˜์— ๋Œ€ํ•œ ์—ฐ์†์„ฑ์ด ๋งŽ์ด ๋ถ€์กฑํ–ˆ๋‹ค. 

- ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง„ ์ ์œผ๋กœ๋Š” ํŠœํ„ฐ๋‹˜์ด ๋ฐ”๋€Œ์—ˆ๊ณ , ๊ทธ์— ๋”ฐ๋ผ์„œ ๊ฐ•์˜ ์ง„ํ–‰๋ฐฉ์‹์ด ๋„ˆ๋ฌด ๋‹ค๋ฅด๊ฒŒ ๋А๊ปด์กŒ๋‹ค. ํ๋ฆ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๋Š” ๋‚ด์šฉ์€ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ์„ค๋ช…์ด ์ง€๋‚˜๋ฉด ๋ฐ”๋กœ ์ฝ”๋“œ์Šค๋‹ˆํŽซ์„ ๊ฐ€์ง€๊ณ  ์ „์ฒด์˜ ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ๋„ฃ๋‹ค๋ณด๋‹ˆ ์–ด๋А ๋ถ€๋ถ„์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ์ˆ˜์‹œ๋กœ ๋†“์ณ์„œ ๋‚˜์ค‘์— ๊ฐ€์„œ๋Š” ๋„๋Œ€์ฒด ์–ด๋А ๋‚ด์šฉ์œผ๋กœ ์–ด๋””๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ๋А๋‚Œ์„ ํฌ๊ฒŒ ๋ฐ›์•˜๋‹ค. ์‹œ๊ฐ„์ด์•ผ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒ ์ง€๋งŒ ์ดˆ๋ณด์ผ์ˆ˜๋ก ๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐจ๋ก€๋Œ€๋กœ ๊ตฌํ˜„ํ•ด๋‚˜๊ฐ€์‹œ๋Š” ์‹์˜ ๊ฐ•์˜์ง„ํ–‰์ด ํ›จ์”ฌ ๋‚ซ๋‹ค๋Š”๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค.

 

โ— ๋ถ€์กฑํ•จ์„ ์–ด๋–ค ์‹์œผ๋กœ ์ปค๋ฒ„ํ• ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด (Curation)

๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋‚˜์˜ ๋ถ€์กฑํ•จ์„ ์ฑ„์›Œ๋‚˜๊ฐ€๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ๋Œ€์„ธ๊ฐ€ ๋˜์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์Ÿ์•„์ง€๋Š” ์ธํ„ฐ๋„ท์ƒ์˜ ์ •๋ณด๊ฐ€ ๊ณผ์—ฐ ์–‘์งˆ์˜ ์ •๋ณด๋ผ๊ณ  ๋ฏฟ์„ ์ˆ˜ ์žˆ์„๊นŒ? ์ด๋Ÿฐ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด์˜ ๊ฐ๊ด€์„ฑ์€ ์–ด๋А์ •๋„ ๊ฒ€์ฆ๋œ ๊ธฐ๊ด€์ด๋‚˜ ๊ณต์‹ ๋ธ”๋กœ๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ฌด๋„ ๋ณด์žฅํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€์„ ๋ณด๋ฉฐ ๋”ฐ๋ผํ•˜๋‹ค๊ฐ€ ๋’ค์ง‘๊ธฐ๊ฐ€ ์ผ์‘ค์˜€๋‹ค. ํ•˜๋‚˜์˜ ์—๋Ÿฌ๋‚˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ด๋Ÿฐ ๋ธ”๋กœ๊ทธ ์ฐธ๊ณ  ์‹œ๋„์˜ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋’ค์ฃฝ๋ฐ•์ฃฝ์˜ ์•Œ์ˆ˜์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋˜์–ด๊ฐ”๋‹ค. ์ฐจ๋ผ๋ฆฌ ์ด๋Ÿด๋ฐ”์—๋Š” ํ•จ๊ป˜ํ•˜๊ณ ์ž‡๋Š” ํ•ญํ•ด ํฌ๋ฃจ์›๋“ค๋ผ๋ฆฌ ์ข€ ๋” ์†Œํ†ต์„ ๋งŽ์ด ํ•˜๋ฉด์„œ ์ •์ •์ด๋ผ๋„ ์›ํ™œํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

 

โ— ๋™๊ธฐ๋ถ€์—ฌ

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

 


๐Ÿง ์ข€๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฐœ๋…

  • p6spy
  • Slf4j
  • Template Engine (Mustache, Thymeleaf ๋“ฑ๋“ฑ..)
  • Hibernate
  • @RequestBody
  • @Controller vs @RESTController
  • Optional String
  • @Bean
  • xml๊ณผ jsp
  • @ModelAndView
  • Servlet
  • IoC(Inversion of Control)
  • DI(Dependency Injection)
  • JPA Repository์˜ findbyId vs findallbyId
  • JUnit ํ…Œ์ŠคํŠธ

'Computer ๐Ÿ’ป > ํ•ญํ•ด99 โ›ต๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ•ญํ•ด์ผ์ง€ WIL _ Week06  (0) 2021.04.12
ํ•ญํ•ด99 WIL : Week04  (0) 2021.03.28
ํ•ญํ•ด99 WIL : Week03  (0) 2021.03.21
ํ•ญํ•ด99 WIL : Week02  (0) 2021.03.14
ํ•ญํ•ด99 WIL : Week01  (0) 2021.03.07

๐Ÿ“Œ ํ•™์Šต๋‚ด์šฉ

โ— Java & Spring ๊ธฐ๋ณธ ์šฉ์–ด์™€ ๊ฐœ๋… ์ •๋ฆฌ(์ฃผ๊ด€์ ์ผ ์ˆ˜ ์žˆ์Œ!)

 

Java & Spring ๊ธฐ๋ณธ์šฉ์–ด ํ•œ์ค„๋กœ ํ‘œํ˜„ํ•ด๋ณด๊ธฐ

 

โ— Web Service ๊ตฌ์กฐ ํŒŒ์•…

ํด๋ผ์ด์–ธํŠธ <-> ์„œ๋ฒ„ <-> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ

์„œ๋ฒ„๋ฅผ ๋ฐฐ์šฐ๋Š” ์ง€๊ธˆ์˜ ์ƒํ™ฉ์—์„œ JPA, Repository, Service, Controller์˜ ๊ฐ๊ฐ ๊ธฐ๋Šฅ๊ณผ DTO, Model์˜ ์—ญํ• ์„ ์ตํžˆ๋Š”๋ฐ ์ง‘์ค‘ํ–ˆ๋‹ค.

 

JPA

  • Java Persistence API. ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด Spring Data JPA์™€๋Š” ๋™์ผํ•œ ๊ฐœ๋…์ด ์•„๋‹ˆ๋‹ค(Spring Data JPA๊ฐ€ ์ข€ ๋” ํ•˜์œ„๊ฐœ๋…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)
  • Java ์–ธ์–ด์™€ SQL ์–ธ์–ด์˜ ํ†ต์—ญ์„ ๋‹ด๋‹นํ•œ๋‹ค. JPA์˜ ๋ฌธ๋ฒ•์„ ์กฐ๊ธˆ ์ตํžŒ๋‹ค๋ฉด Spring ๋‚ด์—์„œ ๋ณ„๋„๋กœ SQL์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด๊ฐ€๋ฉด์„œ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ, CRUD, ์—ฐ๊ฒฐ ํ•ด์ œ๋ฅผ ์ง์ ‘ ํ•  ํ•„์š” ์—†์ด JPA๊ฐ€ ๊ทธ ๊ธฐ๋Šฅ์„ ๋Œ€์‹  ํ•ด์ค€๋‹ค.

Repository

  • Spring Framework์˜ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ SQL์„ ๋ถˆ๋Ÿฌ๋“ค์ผ์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“๋Š” Interface.
  • Interface๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜ ์—†์ด ๋ฉค๋ฒ„๋ฉ”์†Œ๋“œ๋งŒ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

Service

  • Business Logic์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฐ€๊ณต์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ service์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.(CRUD์ค‘ Update)
  • ์ด ๋•Œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ณ€์ˆ˜๋“ค์€ final๋กœ ์„ ์–ธํ•ด์ค€๋‹ค.

Controller

  • ์„œ๋ฒ„์˜ ๊ณ„์ธต์ค‘ Client์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณ„์ธต
  • Return ๊ฐ’์œผ๋กœ JSON์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ client์™€ ํ†ต์‹ (@RestController)์„ ํ•˜๊ฑฐ๋‚˜, parameter๋กœ ํŽ˜์ด์ง€ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„ return ๊ฐ’์„  htmlํŒŒ์ผ๋ช…์˜ string ๊ฐ’์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค(@Controller)

 

 

โ— Java Spring์œผ๋กœ ๋‚˜๋งŒ์˜ ํ•ญํ•ด ๋ธ”๋กœ๊ทธ ๋งŒ๋“ค๊ธฐ

- FindbyId๋ผ๋Š” Repository method์™€ Optional์ด๋ผ๋Š” ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์ต์ˆ™ํ•˜์ง€๊ฐ€ ์•Š์•„ ํญํ’๊ฒ€์ƒ‰์œผ๋กœ ๋ช‡์ผ์„ ํ—ˆ๋น„ํ–ˆ๋‹ค..

์ด ๋ฐฉํ™ฉ ๋•๋ถ„(?)์— Java Template Engine์˜ Thymleaf๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋œป๋ฐ–์˜ ์†Œ๋“๋„ ์žˆ์—ˆ๋‹ค.

 

/*ArticleViewController.java ํด๋ž˜์Šค ํŒŒ์ผ*/

@RequiredArgsConstructor
@Controller
public class ArticleViewController {

    private final ArticleRepository articleRepository;

    @GetMapping("/api/articles/detail/{id}")
    public String readOneArticle(Model model,Article article, @PathVariable Long id) {
        model.addAttribute("article", articleRepository.findById(article.getId()).get());
        return "articleview.html";
    }
}

๐Ÿ“Œ ๋А๋‚€์ 

โ— Week1์˜ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ ๋ฐ์ž๋ทฐ

- ํ•ญํ•ด๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ฒซ์ฃผ ๋ฏธ๋‹ˆํ”„๋กœ์ ํŠธ์˜ ๊ณผ์ œ๋กœ ํ–ˆ๋˜ ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งŽ์ด ์ƒ๊ฐ๋‚ฌ๋‹ค.

๊ฐ€์žฅ ๋šœ๋ ทํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ๋‹น์—ฐํžˆ Python Flask FrameWork๋กœ ๊ตฌํ˜„ํ–ˆ๋˜ ๊ณผ๊ฑฐ์™€๋Š” ๋‹ฌ๋ฆฌ ์ด๋ฒˆ์—๋Š” Java Spring Framework๋กœ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค๋Š” ๊ฒƒ.

JSON์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์€ ์•„์ง๋„ ๋งŽ์ด ์„œํˆด๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

์ด๋ฒˆ ํ•œ์ฃผ์—์„œ ๊ฐ€์žฅ

SSR(Server Side Rendering)๊ณผ CSR(Client Side Rendering)

โ— ๊ต๋ฅ˜๋ฅผ ํ†ตํ•œ ์„ฑ์žฅ

- 

โ— ์ ˆ์ฐจ์  -> ๊ฐ์ฒด์ง€ํ–ฅ

- 


๐Ÿ“Œ ์•„์‰ฌ์› ๋˜ ์ 

โ— '์–ด๋–ป๊ฒŒ ์งˆ๋ฌธ(๊ฒ€์ƒ‰)ํ• ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š๋Š” ๊ฒƒ'

- ๋ฌด์Šจ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ๋“  ๊ฑธ์Œ๋งˆ ๋‹จ๊ณ„์—์„œ ๊ฐ€์žฅ ๊ป„๋„๋Ÿฌ์šด ์ƒํ™ฉ ์•„๋‹๊นŒ? ํ•™์Šต ๋‚ด์šฉ์˜ ๋งจ ๋งˆ์ง€๋ง‰๋ถ€๋ถ„์— ์–ธ๊ธ‰ํ–ˆ๋˜ Repository.findById๋กœ Optional ๊ฐ’์„ ๋ฐ›๋Š” ๋ถ€๋ถ„์—์„œ 2์ผ ์ด์ƒ์„ ๊ณ ์Šค๋ž€ํžˆ ๋ฐ”์ณค๋‹ค. ์ˆ˜๋งŽ์€ ์‹œ๋„์˜ ๊ฒ€์ƒ‰์œผ๋กœ ๊ฒฐ๊ตญ ํ•ด๊ฒฐ์„ ํ–ˆ๋‹ค.

ํ•จ๊ป˜ ๋ฐฐ์šฐ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋‚˜๊ฐ™์ด ํ•˜๋Š” ๋ง์ด ์ด๋ ‡๊ฒŒ ์ง์ ‘ ๋ถ€๋”ชํžˆ๋ฉฐ ํ•ด๊ฒฐํ•˜๋Š” ์—๋Ÿฌ๋Š” ๊ธฐ์–ต์— ์˜ค๋ž˜ ๋‚จ๋Š”๋‹ค๊ณ  ํ•˜๋˜๋ฐ.. ๋‹ค์‹œ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋กœ ๊ฐ™์€ ์‹ค์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š์•„์•ผ๊ฒ ๋‹ค๐Ÿ”ฅ

โ— ์‹œ๊ฐ„ํšจ์œจ

- ์˜ค์ „9์‹œ๋ถ€ํ„ฐ ์˜คํ›„9์‹œ๊นŒ์ง€ ์˜จ์ „ํžˆ ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ์—๋Š” ์ง‘์ค‘๋ ฅ์ด ํํŠธ๋Ÿฌ์ง€๋Š” ์ˆœ๊ฐ„์ด ๊ฝค ์ž์ฃผ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์˜คํ›„9์‹œ ์ดํ›„๋กœ ๋ฏธ๋ จ์„ ๊ฐ€์ง„ ์ฑ„ ์ข€ ๋” ํ•˜๋‹ค๊ฐ€ ์• ๋งคํ•˜๊ฒŒ ์ž ๋“ ๊ฒŒ ๋‹ค๋ฐ˜์‚ฌ์˜€๋˜ ํ•œ์ฃผ์˜€๋‹ค. ๊ทธ๋‚ ๊ทธ๋‚ ์˜ ๋ชฉํ‘œ๋ฅผ ์ข€ ๋” ์„ธ๋ถ„ํ™”ํ•ด์„œ ๋‹จ์œ„์‹œ๊ฐ„ ํ™œ์šฉ ํšจ์œจ์„ ๋†’์—ฌ์•ผ๊ฒ ๋‹ค.

โ— ๊นƒํ—ˆ๋ธŒ..

- ์ฃฝ์ด๋๋“  ๋ฐฅ์ด๋๋“  ๊ทธ๋‚ ๊ทธ๋‚  ์ž‘์—…ํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์„ ๊พธ์ค€ํžˆ ์˜ฌ๋ฆฌ๋ ค๊ณ ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์—ญ์‹œ ์Šต๊ด€ํ™”๊ฐ€ ์ž˜ ์•ˆ๋œ๋‹ค. Readme ์ž‘์„ฑ, gitignore๋“ฑ๋“ฑ ๊ฐœ์ธ Repository ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋ถ€๋ถ„๊ณผ ํ˜‘์—…์‹œ ๊ณ ๋ คํ•ด์•ผํ•  Branch merge ๋“ฑ๋“ฑ๋„ ํ‰์ƒ๊ณต๋ถ€๊ฐ€ ๋ ๊ฒƒ๊ฐ™์œผ๋‹ˆ ๊ธฐ๋ณธ์„ ์ž˜ ๋‹ค์ ธ๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค.

 


๐Ÿง ์ข€๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฐœ๋…

  • p6spy
  • Slf4j
  • Template Engine (Mustache, Thymeleaf ๋“ฑ๋“ฑ..)
  • Hibernate
  • @RequestBody
  • @Controller vs @RESTController
  • Optional String
  • @Bean
  • xml๊ณผ jsp
  • @ModelAndView
  • Servlet
  • IoC(Inversion of Control)
  • DI(Dependency Injection)
  • JPA Repository์˜ findbyId vs findallbyId

Written by Joony-up

@๋ธŒ๋ผ์šดํ•ธ์ฆˆ ๋„๊ณก์ 

2021.03.28 19:30-21:28

'Computer ๐Ÿ’ป > ํ•ญํ•ด99 โ›ต๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ•ญํ•ด์ผ์ง€ WIL _ Week06  (0) 2021.04.12
ํ•ญํ•ด99 WIL : Week5  (0) 2021.04.04
ํ•ญํ•ด99 WIL : Week03  (0) 2021.03.21
ํ•ญํ•ด99 WIL : Week02  (0) 2021.03.14
ํ•ญํ•ด99 WIL : Week01  (0) 2021.03.07

๐Ÿ“Œ ํ•™์Šต๋‚ด์šฉ

โ— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋… ์‹ฌํ™”

- ๋ธŒ๋ฃจํŠธํฌ์Šค

- ๊ทธ๋ฆฌ๋””์•Œ๊ณ ๋ฆฌ์ฆ˜

- ๋ถ„ํ• ์ •๋ณต

   BOJ 2630, 1992

- ๋ฐฑํŠธ๋ž˜ํ‚น

   BOJ 15650, 9663

- ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

    BOJ 1003, 11053, 9183, 1932, 1149, 9461, 2679, 11054

 

โ— Python ๋ฌธ๋ฒ•

- list.sort() ์™€ sorted(list) ์˜ ๋น„๊ต

- split() ๊ณผ join()์˜ ๋น„๊ต

- zip()

 

โ— Java & Spring ๊ด€๋ จ

- IntelliJ IDE ์„ค์น˜ ๋ฐ ์‹คํ–‰

- Java

   Java ๊ธฐ์ดˆ๋ฌธ๋ฒ•

   Java Class

- H2 Database : ์„œ๋ฒ„๊ฐ€ ์ž‘๋™๋˜๋Š”๋™์•ˆ์—๋งŒ CRUD๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๊ฐ€๋ฒผ์šด ์šฉ๋„์˜ ํ•™์Šต์šฉ์œผ๋กœ ์ข‹์Œ

- ARC(Advanced REST Client) : ์ฃผ์†Œ, method, header, body ๋“ฑ์˜ ์กฐ์ž‘์„ ํ†ตํ•ด ์„œ๋ฒ„์‘๋‹ต๋‚ด์šฉ์„ ํ™•์ธํ•˜๋Š” ํˆด


๐Ÿ“Œ ๋А๋‚€์ 

โ— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๊ฒƒ๊ณผ ๋ชจ๋ฅด๊ณ  ํ‘ธ๋Š” ๊ฒƒ์˜ ์ฐจ์ด

 

์ง€๋‚œ์ฃผ๋•Œ๋„ ๋А๊ผˆ๋˜ ์ ์ด์ง€๋งŒ, ์ด๋ฒˆ์ฃผ๋Š” ์ข€ ๋” ์ˆ˜์‹œ๋กœ ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์ด๋‹ค. ํŠนํžˆ ์ข€ ๋” ๋‚œ์ด๋„๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค ์‹ถ์€ ๊ฐœ๋…์˜ ๋ฌธ์ œ๋“ค์€ ์—ฌ์ง€์—†์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐœ๋…์„ ๋– ์˜ฌ๋ ค ํ•จ๊ป˜ ๋…น์—ฌ๋‚ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋“ค์ด์—ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, DFS๋ฅผ ๋ฐฐ์šธ๋•Œ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์˜ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ Stack์˜ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. BFS๋ฅผ ๋ฐฐ์šธ๋•Œ๋Š” Queue์˜ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. BackTracking ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์žฌ๊ท€๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ๋ณด๋‹ค ๋” ์ง๊ด€์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋œ๋‹ค. ๋ถ„ํ• ์ •๋ณต ๋˜ํ•œ ์žฌ๊ท€๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ Dynamic Programming์ด๋ผ๊ณ  ๋А๊ผˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋А๋ผ๊ธฐ์— ์ด๋ฒˆ์ฃผ์— ์ƒˆ๋กœ์ด ํ•™์Šตํ•ด๋ณด๋ผ๊ณ  ํ•˜์…จ๋˜ ๊ฐœ๋…๋“ค ์ค‘ ๋ธŒ๋ฃจํŠธํฌ์Šค๋‚˜ ๊ทธ๋ฆฌ๋””์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ๋Š” ๋ณ„ ์–ด๋ ค์›€ ์—†์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ '์ด๋Ÿฐ๊ฑธ ๊ทธ๋ ‡๊ฒŒ ๋ถ€๋ฅด๋‚˜๋ณด๋‹ค'๋ผ๋Š” ์‹์œผ๋กœ ์ดํ•ด๋ฅผ ํ–ˆ๋‹ค๋ฉด, ๊ทธ ์™ธ์˜ ๋ถ„ํ• ์ •๋ณต, BackTracking, DynamicProgramming ๋“ฑ์€ ์—ฌ๊ธฐ์ €๊ธฐ ์—ด์‹ฌํžˆ ๋’ค์ ธ๊ฐ€๋ฉฐ ๊ทธ ๊ฐœ๋…์„ ์ตํ˜”๋‹ค.

 

โ— ๊ฐœ๋… ์ดํ•ด ≠ ์‘์šฉ

 

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

 

โ— ์ข‹์€ ๋™๋ฃŒ๋ž€?

 

์—ญ์‹œ๋‚˜ ๋งˆ์ง€๋ง‰ ๋А๋‚€์ ์€ ์†Œํ”„ํŠธ์Šคํ‚ฌ์— ๊ด€ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

์ด๋ฒˆ ์กฐ์—์„œ ๋‚˜๋Š” ๋˜ ์กฐ์žฅ์ด ๋˜์—ˆ๊ณ , ๊ณผ์—ฐ ๋‚ด๊ฐ€ ์Šค์ผ€์ค„์„ ์ž˜ ๋ถ„๋ฐฐํ•ด์„œ ํ™œ๋ฐœํžˆ ๊ต๋ฅ˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ๋ผ๋Š” ๋งˆ์Œ์˜ ๊ธฐ๋Œ€ ๋ฐ˜, ๊ฑฑ์ • ๋ฐ˜์ด์—ˆ๋‹ค.

๊ฑฑ์ •์„ ํ–ˆ๋˜ ์ด์œ ๋Š” ๊ณ„์†ํ•ด์„œ ํ•˜์ฐจํ•˜๋Š” ์กฐ์›๋“ค์„ ๋ด์™”๊ธฐ ๋•Œ๋ฌธ๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” ๋‚ด๊ฐ€ ๋ถ€์ง€๋Ÿฐํžˆ ์ง„๋„๋ฅผ ๋นผ์„œ ์กฐ์›๋“ค์—๊ฒŒ ์ตœ๋Œ€ํ•œ ์„ค๋ช…ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๊ฐ€ ๋˜์–ด์•ผ๊ฒ ๋‹ค๋Š” ๋งˆ์Œ์œผ๋กœ ์ž„ํ–ˆ๋‹ค.

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

๋‹ค๋ฅธ ํ•œ๋ช…์€ ๋ญ”๊ฐ€ ๋ชฉ์ ์ง€ํ–ฅ์ ์ด๋ž„๊นŒ? ์ •ํ•ด์ง„ ํŒ€ ๋ฌธ์ œํ’€์ด ๊ณต์œ ์‹œ๊ฐ„๋งˆ๋‹ค ๋น ์ง์—†์ด ์„ฑ์‹คํžˆ ์ž„ํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ ์™ธ์˜ ๊ต๋ฅ˜๋Š” ์‚ฌ์‹ค์ƒ ํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ๋•๋ถ„์— ๋ฌธ์ œํ’€์ด ๊ณต์œ ๋ผ๋Š” ๋ณธ์งˆ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์‹œ๊ฐ„์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค. 

์ด๋ฒˆ ํ•œ์ฃผ๋ฅผ ๊ทธ๋ ‡๊ฒŒ ํ•จ๊ป˜ ๋ณด๋‚ด๋ฉด์„œ ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌธ๋“ ๋“ค์—ˆ๋˜ ์งˆ๋ฌธ์ด์—ˆ๋‹ค. ์ข‹์€ ๋™๋ฃŒ๋ž€ ์–ด๋–ค ์œ ํ˜•์˜ ๋™๋ฃŒ์ผ๊นŒ? ์–ด๋А ์œ ํ˜•์ด ๋” ์ƒ์‚ฐ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์–ด๋А ํ•œ์ชฝ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ๋งž๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 


๐Ÿ“Œ ์•„์‰ฌ์› ๋˜ ์ 

์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ 6์ผ๊ฐ„๊ฒฉ์œผ๋กœ ๋‘ํ†ต์ด ์ฐพ์•„์˜ค๊ณ  ์žˆ๋‹ค. ๋งˆ์Œ์˜ ์—ฌ์œ ๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ•œ ํƒ“์ธ์ง€ ๋‘ํ†ต์„ ํ•œ๋ฒˆ ๊ฒช๊ณ ๋‚˜๋ฉด ์—„์ฒญ๋‚œ ์••๋ฐ•๊ฐ์ด ๋ฐ€๋ ค์˜จ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠœํ„ฐ๋‹˜์ด ๋ฉ˜ํ† ๋ง์‹œ๊ฐ„์— ๋ง์”€ํ•ด์ฃผ์…จ๋˜ ๋ฉ˜ํƒˆ์‹ธ์›€์ด๋ผ๋Š”๊ฒŒ ์ด๋Ÿฐ๊ฑด๊ฐ€ ๋ผ๋Š” ์ƒ๊ฐ๋„ ํ•ด๋ณด๋ฉด์„œ ์ข€๋” ์ž๊ธฐ๊ด€๋ฆฌ๋ฅผ ์ฒ ์ €ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๋˜ํ•˜๋‚˜ ์•„์‰ฌ์› ๋˜ ์ ์€ ์—ญ์‹œ๋‚˜ ์‹œ๊ฐ„ํ™œ์šฉ์— ๊ด€ํ•œ ๋ถ€๋ถ„์ธ๋ฐ, ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ๋ชฐ์ž…๋„๋ฅผ ๋†’์—ฌ ํ•™์Šตํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์ง€ ์•Š์•˜์„๊นŒ ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•œ๋‹ค.

Github๋Š” ๋Š˜ ๋‚˜๋ฅผ ๊ดด๋กญ๊ฒŒ ํ•œ๋‹ค.. ์™„์ „ํ•œ ์ดํ•ด ์—†์ด ๊ณ„์† ๊ทธ๋•Œ๊ทธ๋•Œ ์ž„๊ธฐ์‘๋ณ€์‹์œผ๋กœ ์ฐพ์•„๊ฐ€๋ฉด์„œ ์“ฐ๋‹ค๋ณด๋‹ˆ CLI ๊ธฐ๋ฐ˜์˜ ๋ช…๋ น์— ์• ๋ฅผ ๋จน๊ณ  ์žˆ๋‹ค. ๊นƒํ—ˆ๋ธŒ๋‚˜ ๊ฐœ๋ฐœ๋ธ”๋กœ๊ทธ์— ๊พธ์ค€ํ•œ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ๋ณด๋ฉฐ ํŒ์ข€ ๋“ค์œผ๋ฉฐ ๋‚˜๋„ ์Šต๊ด€ํ™”๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

Java Spring์ด๋ผ๋Š” ์ฃผํŠน๊ธฐ๋ฅผ ๊ณจ๋ž๋Š”๋ฐ, ๋ถ„๋ช…ํžˆ ์ƒ๋‹นํžˆ ๋ฒ„๊ฑฐ์šธ๊ฒƒ์ด๋ผ๋Š” ์˜ˆ์ƒ์€ ํ–ˆ์ง€๋งŒ ๋ง‰์ƒ ๋ถ€๋”ช์ณ๋ณด๋‹ˆ ์ƒ์ƒ ์ด์ƒ์˜ ๋ฒ„๊ฑฐ์›€์ด ๋А๊ปด์ง„๋‹ค.

๋ฌธ๋“ 1์ฃผ์ฐจ๋•Œ ๋ญฃ๋„ ๋ชจ๋ฅด๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋˜ ๊ธฐ๋Šฅ๊ณผ ๊ฐœ๋…๋“ค์— ๋Œ€ํ•ด ์ด์ œ๋Š” ์–ธ์ œ๋“  ๋ณต์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์†Œํ•œ์˜ ๋ฉ”๋ชจ๋ผ๋„ ํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ '๐Ÿง์ข€ ๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฐœ๋…'์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 


๐Ÿง ์ข€ ๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฐœ๋…

โ— ์ถœ๋ ฅํ˜•์‹(formatting)

- signed char & unsigned char

- integer with size

 

โ—Rest

- RestController

 

โ— Controller, Service, Domain

- ๊ฐ๊ฐ์˜ ๊ฐœ๋…๊ณผ ์—ญํ• ์˜ ๋ฒ”์œ„์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๊ธฐ

 

โ— Dto

- ์กด์žฌ๋ชฉ์ ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ

 


Written by Joony-up

@๋ธŒ๋ผ์šดํ•ธ์ฆˆ ๋„๊ณก์ 

2021.03.21 20:00-21:25

 

'Computer ๐Ÿ’ป > ํ•ญํ•ด99 โ›ต๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ•ญํ•ด99 WIL : Week5  (0) 2021.04.04
ํ•ญํ•ด99 WIL : Week04  (0) 2021.03.28
ํ•ญํ•ด99 WIL : Week02  (0) 2021.03.14
ํ•ญํ•ด99 WIL : Week01  (0) 2021.03.07
Starting Assignment 01 (6์กฐ)  (0) 2021.03.01

+ Recent posts