๋ฐ˜์‘ํ˜•

์ฝ”๋”ฉ ์ž์œจํ•™์Šต Vue.js ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ž…๋ฌธ (~3.3์žฅ)

 

vue
  1. ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ํ”„๋ ˆ์ž„์›Œํฌ
  2. MVVM ์•„ํ‚คํ…์ฒ˜
  3. ๋ทฐ์— ์ง‘์ค‘ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

 

vue ํŠน์ง•?
  1. ๊ฐ€์ƒ DOM ์‚ฌ์šฉ
  2. ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ (๋ทฐ↔๋ทฐ๋ชจ๋ธ↔๋ชจ๋ธ)
  3. ์„ค์น˜๊ฐ„๋‹จ

 

์„ค์น˜๊ด€๋ จ
  1. node.js : ๋ทฐ๊ฐ€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ ํ•„์š”ํ•จ
  2. Vue CLI : ์œˆ๋„์šฐ, ๋งฅ ๋“ฑ์˜ ํ„ฐ๋ฏธ๋„์—์„œ ์‚ฌ์šฉ์ž ๋ช…๋ น์–ด ์ž…๋ ฅ์‹œ PC๊ฐ€ ๊ทธ์—๋งž๋Š” ๊ธฐ๋Šฅ ์‹คํ–‰ํ•ด์ฃผ๋Š” ์ฒ˜๋ฆฌํ•จ
  3. ๋น„์ฃผ์–ผ์ŠคํŠœ๋””์˜ค : ๊ฐœ๋ฐœํˆด
    1. Vue - Official : ๋ทฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ๋ฒ• ๋ฐ ํŒŒ์ผ์„ ์ธ์‹ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ์ต์Šคํ…์…˜
    2. Live Server : HTML ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜
    3. Prettier - Code formatter : ์ฝ”๋“œ ์ด์˜๊ฒŒ ์ •๋ฆฌ
  4. ํฌ๋กฌํ™•์žฅํ”„๋กœ๊ทธ๋žจ : Vue.js devtools

 

๊ฐœ๋ฐœ๋ฐฉ์‹
  1. CDN (์ฝ˜ํ…์ธ ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ)
    1. <script src="https://unpkg.com/vue@3.5.13/dist/vue.global.js"></script> ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ”๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
    1. npm create vue@latest : ๋ทฐ ํ”„๋กœ์ ํŠธ ์„ค์ •
    2. npm install : npm create ์œผ๋กœ ์ƒ์„ฑ๋œ package.json ํŒŒ์ผ ์ฐธ์กฐํ•ด ํŒจํ‚ค์ง€ ์„ค์น˜
    3. npm run dev : ๋ทฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰
    4. npm ์ด์šฉํ•˜์—ฌ ๋ทฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ
      NPM (node.js ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ)

CDN vs NPM
  1. cdn ์€ ๋น ๋ฅด๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ but ์˜์กด์„ฑ ๊ด€๋ฆฌ(=ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ)๋ฅผ ์ง์ ‘ ํ•ด์•ผํ•จ. ์„œ๋น„์Šค ์ปค์งˆ๊ฒฝ์šฐ ๋‚œ๊ฐ
  2. npm ์€ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์‰ฝ๊ณ , ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๊ฐœ๋ฐœํ•˜๊ธฐ ํŽธํ•จ *

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ (์ค‘์š”ํ•œ๊ฒƒ ์œ„์ฃผ)
  1. package.json
    1. ์ค‘์‹ฌ! ๊ธฐ๋ณธ์ •๋ณด ๋ฐ ์˜์กด์„ฑ ๋ชจ๋“ˆ ์ •๋ณด, ์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น ์ •๋ณด
    2. npm run dev ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทผ๊ฑฐ๊ฐ€ script ๋ถ€๋ถ„์˜ dev ์†์„ฑ์ด ์žˆ์–ด ์‹คํ–‰ ๋˜๋Š” ๊ฒƒ
      1. vite ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‹คํ–‰ํ•ด ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๊ตฌ๋™
  2. index.html
    1. npm run dev ์‹คํ–‰์‹œ ํ•ด๋‹นํŒŒ์ผ ๋จผ์ € ๋กœ๋“œ.
  3. main.js
    1. ๋ทฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ์—ญํ• . (index.html ์—์„œ ์‹คํ–‰)
  4. App.vue
    1. ์ปดํฌ๋„ŒํŠธ (SFC: Single File Components)
    2. ๋ฌธ๋ฒ•
      1. <script> : ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋กœ์ง ๋ถˆ๋Ÿฌ์˜ด
      2. <template> : html ํƒœ๊ทธ ์ž‘์„ฑ
      3. <style> : css ์ ์šฉ

 

๋””๋ ‰ํ‹ฐ๋ธŒ ์‚ฌ์šฉ

์ ‘๋‘์‚ฌ -v ๊ฐ€ ๋ถ™์Œ. <template> ์˜์—ญ์—์„œ ์‚ฌ์šฉ (https://vuejs.org/api)
v-html, v-text, v-pre, v-bind...


์ถœ์ฒ˜
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=341090647&start=pebook
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

ํ˜„์žฌ GUI ๋ชจ๋“œ๋กœ ์šฐ๋ถ„ํˆฌ๋ฅผ ๊ฐ–๊ณ ๋…ธ๋Š”์ค‘์ธ๋ฐ ๊ฐ‘์ž๊ธฐ ํ‚ค๋ณด๋“œ๊ฐ€ ํ•œ๊ธ€์ด ์•ˆ๋จน๋Š” ํ˜„์ƒ์ด ์ƒ๊ฒผ๋‹ค (?)

windows key + space ์„ ์น˜๋‹ˆ ํ•œ์˜ํ‚ค๊ฐ€ ๋จน๋”๋ผ (???)

๋ฐ˜์‘ํ˜•

'๊ฐœ๋ฐœ > etc' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SSE (Server Sent Event)  (1) 2023.08.20
Vault  (1) 2023.02.07
ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ (Hexagonal Architecture)  (2) 2022.09.25
JWT (JSON WEB TOKEN)  (0) 2021.12.22
Rest API  (0) 2021.06.02
๋ฐ˜์‘ํ˜•

์–ด๋Š๋‚  ๋ฏธ๋‹ˆPC์„ ๊ตฌ์ž…ํ•˜์˜€๋‹ค. (?)

์ œํ’ˆ์€ [๋ ˆ๋…ธ๋ฒ„ M710Q] ์ด๊ฑฐ๋‹ค.
(๋ชจ๋‹ˆํ„ฐ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด DP to DP ์–‘๋ฐฉํ–ฅ ์ผ€์ด๋ธ” ๋ฐ usb ํฌํŠธ ์ง€์› ๋งˆ์šฐ์Šค๋„ ๊ฐ™์ด ๊ตฌ๋งค ใ…Ž.. ํ‚ค๋ณด๋“œ๋Š” ์ด๋ฏธ ์žˆ๊ณ ..)


ํ•ด๋‹น PC ์—๋Š” ์ด๋ฏธ ์œˆ๋„์šฐ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์—ˆ๋‹ค. 
๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์œˆ๋„์šฐ๋ฅผ ์ง€์šฐ์ง€ ์•Š๊ณ  ๋ฆฌ๋ˆ…์Šค(์šฐ๋ถ„ํˆฌ!)๋ฅผ ๊ฐ™์ด ์„ค์น˜ํ•˜์—ฌ ๋ฉ€ํ‹ฐ๋ถ€ํŒ…์„ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.
(๋‚˜์ค‘์— ๊ฐœ์ธ์ ์ธ ์šฉ๋ฌด๋กœ ์ธํ•œ? ์œˆ๋„์šฐ ํ™˜๊ฒฝ์œผ๋กœ ๋ญ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ• ์ˆ˜ ์žˆ์„์ˆ˜๋„์žˆ์ง€ ์•Š์„๊นŒ ํ•˜์—ฌ?)

 


โ˜… ๋ฉ€ํ‹ฐ๋ถ€ํŒ…์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„

1) ์šฐ๋ถ„ํˆฌ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์ง‘์— ๋Œ์•„๋‹ค๋‹ˆ๋˜ usb์„ ์ฐพ์•˜๊ณ  ํฌ๋งทํ–ˆ๋‹ค.
(๋Œ€์ถฉ ์ด๋Ÿฐ์‹..https://www.samsungsvc.co.kr/solution/40474)

2) ๋ถ€ํŒ…๋””์Šคํฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
์šฐ๋ถ„ํˆฌ ์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์„œ osi ํŒŒ์ผ์„ PC์— ๋‹ค์šด๋ฐ›๊ณ , Refus ๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜์—ฌ ๋ถ€ํŒ…๋””์Šคํฌ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. 
(https://amkorousagi-money.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B6%80%ED%8C%85-usb-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9A%B0%EB%B6%84%ED%88%AC-%EC%84%A4%EC%B9%98 ์„ ์ฐธ๊ณ ํ–ˆ๋‹ค)

Ubuntu 24.04.1 ๋ฒ„์ „ + GUI ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ Desktop image ์„ ๋‹ค์šด๋ฐ›์Œ ใ…Ž..

 

3) ์œˆ๋„์šฐ ํ•˜๋“œ๋””์Šคํฌ ํŒŒํ‹ฐ์…˜ ๋ถ„ํ• ์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด์œ ๋Š” ์ถ”ํ›„ ์šฐ๋ถ„ํˆฌ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•จ!
(๋Œ€์ถฉ ์ด๋Ÿฐ์‹..https://www.samsungsvc.co.kr/solution/25065)

4) ๋ฏธ๋‹ˆPC์— ๋ถ€ํŒ…๋””์ŠคํฌUSB์„ ๊ผฝ์•„๋†“๊ณ !!!! ์žฌ๋ถ€ํŒ…์„ ํ–ˆ๋‹ค.
๋ถ€ํŒ… ํ™”๋ฉด์ด ๋–ณ์„๋•Œ ๋ถ€ํŠธ ๋””๋ฐ”์ด์Šค ์„ ํƒ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋„๋ก F12์„ ๊ฒ€๋‚˜๊ฒŒ ๋ˆŒ๋ €๋‹ค. (์ด๊ฒŒ PC ๊ธฐ๊ธฐ ๋ณ„๋กœ ์‚ด์ง ๋‹ค๋ฅธ๋“ฏ ํ–ˆ๋‹ค.)

USB ์„ ์„ ํƒ! ์—”ํ„ฐ!

 

5) ์šฐ๋ถ„ํˆฌ ์„ค์น˜ ์‹œ์ž‘!

...์ญ‰์ญ‰

์•„๊นŒ ์œˆ๋„์šฐ ํ•˜๋“œ๋””์Šคํฌ ํŒŒํ‹ฐ์…˜ ๋‚˜๋ˆด๋˜๊ฑธ ๊ธฐ์–ต!ํ•˜์—ฌ ์ˆ˜๋™ ํŒŒํ‹ฐ์…”๋‹์œผ๋กœ ์„ ํƒ!

์ญ‰์ญ‰...๊ณ„์ • ์„ค์ •๊นŒ์ง€ ํ•˜๋ฉด ์šฐ๋ถ„ํˆฌ ์„ค์น˜ ๋!

6) ๋ฏธ๋‹ˆPC์—์„œ USB ์ œ๊ฑฐ ๋ฐ ์žฌ์‹คํ–‰์‹œ F12์„ ๋ˆŒ๋Ÿฌ OS์„ ์„ ํƒ ๋ฐ ์‹คํ–‰ํ•˜๋„๋กํ•จ!


 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
REST & API
  • REST : HTTP URL ๋กœ ์„œ๋ฒ„์˜ ์ž์›(resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•ด CRUDํ•˜๋Š”๊ฒƒ
  • API : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ์ž์›์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„์— ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค 

 

PUT / PATCH ์ฐจ์ด
  • PUT: ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋ถ€ ์ƒˆ ๋‚ด์šฉ์œผ๋กœ ๋ณ€๊ฒฝ. ๋งŒ์•ฝ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ! (requestBody ์— ์ „์ฒด ์š”์ฒญ๊ฐ’์„!)
  • PATCH: ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋งŒ ์ƒˆ ๋‚ด์šฉ์œผ๋กœ ๋ณ€๊ฒฝ (requestBody ์— ์ผ๋ถ€ ์š”์ฒญ๊ฐ’์„!)

 

HTTP ์ƒํƒœ
  • 1XX : ์š”์ฒญ์ด ์ˆ˜์‹ ๋ผ ์ฒ˜๋ฆฌ ์ค‘
  • 2XX : ์„ฑ๊ณต (์ •์ƒ)
  • 3XX : ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ ค๋ฉด ์ถ”๊ฐ€ ํ–‰๋™์ด ํ•„์š”ํ•จ (๋ฆฌ๋‹ค์ด๋ ‰ํŠธ..)
  • 4XX : ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์ž˜๋ชป๋˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ
  • 5XX : ์„œ๋ฒ„ ๋‚ด๋ถ€์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ!

 

RequestBody (์š”์ฒญ ๋ฉ”์„ธ์ง€)
  • ์š”์ฒญ๋ผ์ธ: method type: POST, PATCH.., url..
  • ํ—ค๋”: content-type..host..
  • ๋ณธ๋ฌธ: json 

 

ResponseBody (์‘๋‹ต ๋ฉ”์„ธ์ง€)
  • ์ƒํƒœ๋ผ์ธ: 200..201..
  • ํ—ค๋”: content-type...
  • ๋ณธ๋ฌธ: json
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๋กœ๊น… (logging)

์‹œ์Šคํ…œ์ด ์ž‘๋™ํ•  ๋•Œ ๋‹น์‹œ์˜ ์ƒํƒœ์™€ ์ž‘๋™ ์ •๋ณด๋ฅผ ๊ธฐ๋ก 

 

๋กœ๊น…๋‹จ๊ณ„
๋ช…์นญ ์„ค๋ช…
TRACE 1๋‹จ๊ณ„ - DEBUG ๋ ˆ๋ฒจ๋ณด๋‹ค ์ƒ์„ธํ•œ ์ •๋ณด
DEBUG 2๋‹จ๊ณ„ - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์„ธ๋ถ€ ์ •๋ณด
INFO 3๋‹จ๊ณ„ - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆœ์กฐ๋กœ์šด ์ง„ํ–‰ ์ •๋ณด
WARN 4๋‹จ๊ณ„ - ์ž ์žฌ์ ์œผ๋กœ ์œ ํ•ดํ•œ ์ƒํ™ฉ ์ •๋ณด
ERROR 5๋‹จ๊ณ„ - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋„์˜ ์˜ค๋ฅ˜ ์ •๋ณด
FATAL 6๋‹จ๊ณ„ - ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋  ๋งŒํ•œ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ์ •๋ณด
OFF 7๋‹จ๊ณ„ - ๋กœ๊น… ๊ธฐ๋Šฅ ํ•ด์ œ 

 

JPA ๋ฐ ๋กœ๊น… ๊ด€๋ จ properties ์„ค์ • 
-- ํ”„๋กœ์ ํŠธ ๋‚ด resources > application.properties (or yaml)

server.servlet.encoding.force = true
spring.h2.console.enable=true
spring.jpa.defer-datasource-initialization=true

# JPA ๋กœ๊น… ์„ค์ •
logging.level.hibernate.SQL=DEBUG

# ์ฟผ๋ฆฌ ์ค„๋ฐ”๊ฟˆ
spring.jpa.properties.hibernate.format_sql=true

# ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’ ๋ณด์—ฌ์ฃผ๊ธฐ
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

# ์œ ๋‹ˆํฌ URL ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ
spring.datasource.generate-unique-name=false

# ๊ณ ์ • URL ์„ค์ •
spring.datasource.url=jdbc:h2:mem:testdb

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๋งํฌ (Link)

 ๋ฏธ๋ฆฌ ์ •ํ•ด ๋†“์€ ์š”์ฒญ์„ ๊ฐ„ํŽธํžˆ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ (ํŽ˜์ด์ง€์ด๋™!)
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งํฌ๋ฅผ ํ†ตํ•ด ์–ด๋Š ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒ ๋‹ค๊ณ  ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋ฅผ ์‘๋‹ต!

 

๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (Redirect)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งํฌ๋ฅผ ํ†ตํ•ด ์–ด๋Š ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒ ๋‹ค๊ณ  ์š”์ฒญํ•˜๋ฉด,
์„œ๋ฒ„๋Š” ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋ฅผ 
์‘๋‹ต ํ•˜์ง€ ์•Š๊ณ  ์žฌ์š”์ฒญํ•˜๋ผ๋Š” ํšŒ์‹ ์„ ๋ณด๋ƒ„ (์žฌ์š”์ฒญ)
๋ฆฌ๋‹ค์ด๋ ‰ํŠธ(์žฌ์š”์ฒญ)
์„ ์ง€์‹œ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ค€ ์ฃผ์†Œ๋กœ ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋Š” ์ด์—๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต

ํด๋ผ์ด์–ธํŠธ ๋งํฌ ์ด๋™ ์š”์ฒญ → ์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋กœ ์‘๋‹ต → ํด๋ผ์ด์–ธํŠธ๋Š” ์žฌ์š”์ฒญ ์ฃผ์†Œ๋กœ ๋‹ค์‹œ ์š”์ฒญ  → ์„œ๋ฒ„์‘๋‹ต

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๋กฌ๋ณต (Lombok)

• ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™”ํ•ด ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (@Data)
    → https://projectlombok.org/features/Data 

 

@Data

 

projectlombok.org

    → ๊ผญ ํ•„์š”ํ•œ ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค. (@Data ์ง€์–‘ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰)

๋กœ๋”ฉ ๊ธฐ๋Šฅ ์ง€์› (@Slf4j)

 

๋ฆฌํŒฉํ„ฐ๋ง

 ์ฝ”๋“œ์˜ ๊ธฐ๋Šฅ์—๋Š” ๋ณ€ํ•จ์—†์ด ๊ตฌ์กฐ ๋ฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ์ž‘์—…

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
ํผ๋ฐ์ดํ„ฐ (form data)

• <form> ํƒœ๊ทธ์— ์‹ค๋ ค ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ. ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ฐ์ฒด์— ๋‹ด์•„ ๋ฐ›์Œ(=DTO)
DTO(Data Transfer Object) ์„ ์ง€์ง€๊ณ  ๋ณถ์•„ DB ์— ์ €์žฅ

 

Database & JPA

 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฐฝ๊ณ  (DB)
 DB๋Š” ์ž๋ฐ”์–ธ์–ด๋ฅผ ๋ชจ๋ฆ„! DB๋Š” SQL(Structured Query Languate) ๋งŒ ์•Œ๊ณ ์žˆ์Œ.
์ž๋ฐ”์—์„œ DB์— ๋ฐ์ดํ„ฐ ๊ธฐ๋ก์„ ํ•˜๊ธฐ์œ„ํ•œ ์ˆ˜๋‹จ์ค‘์— ํ•˜๋‚˜๋กœ JPA๊ฐ€ ์žˆ์Œ 
    → JPA(Java Persistence API) ์„ ํ†ตํ•ด ์ž๋ฐ”์–ธ์–ด๋กœ DB์— ๋ช…๋ น์„ ๋‚ด๋ฆผ!
    → ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ
    → JPA ๋Š” entity, repository ๊ฐ€ ์žˆ์Œ

 

์‹ค์Šต๊ด€๋ จ

1. H2 DB์— ์›น ์ฝ˜์†”๋กœ ์ ‘๊ทผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•จ (application.yaml)

spring.h2.console.enabled=true

2. h2 db ์ ‘์† ๊ด€๋ จ
→ ์ธํ…”๋ฆฌ์ œ์ด > debug ์ฝ˜์†” > jdbc: ๊ฒ€์ƒ‰ ํ›„, jdbc url ์ •๋ณด ์ฐพ์•„ localhost:8080/h2-console ๋‚ด์˜ JDBC URL ์— ๊ธฐ์ž…

์„œ๋ฒ„ ์‹คํ–‰ํ• ๋•Œ๋งˆ๋‹ค JDBC URL์€ ๋ฐ”๋€œ

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๋ทฐํ…œํ”Œ๋ฆฟ (View Template)

• ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ์ˆ 
 ์›นํŽ˜์ด์ง€(View) ์„ ํ•˜๋‚˜์˜ ํ‹€(Template) ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ๋ณ€์ˆ˜๋ฅผ ์‚ฝ์ž…ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ณด์—ฌ์คŒ โ“
    → ์ •๋ณด์„ฑ์˜ ๋ฐ์ดํ„ฐ(๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ •๋ณด) ๋“ค์„ ์œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค๋Š” ๋‚ด์šฉ
• mustache
     ๋ทฐํ…œํ”Œ๋ฆฟ ๋งŒ๋“œ๋Š” ๋„๊ตฌ (ํ…œํ”Œ๋ฆฟ ์—”์ง„)
     src > main > resources > templates ์— ์œ„์น˜
     ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ ์—์„œ mustache ํŒŒ์ผ๋ช…์„ return ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ๋Š” ์•Œ์•„์„œ mustache ํŒŒ์ผ์„ ์ฐพ์•„ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•จ!

       


     ํ”Œ๋Ÿฌ๊ทธ์ธ ์ถ”๊ฐ€ ํ•„์š” 
 ๊ทธ์™ธ์—๋„ Thymeleaf..JSP ๋“ฑ์ด ์žˆ๋‹ค.ใ…Žใ…Žใ…Ž

 

MVC ํŒจํ„ด 

 Model : ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ!

 View : ํ™”๋ฉด์— ๋ณด์—ฌ์คŒ!

 Controller : ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ฐ›์Œ!

 

์‹ค์Šต๊ด€๋ จ

1. html ํŒŒ์ผ ๋‚ด์—์„œ ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ, application.properties ํŒŒ์ผ ๋‚ด์— ์•„๋ž˜์˜ ๋‚ด์šฉ ์ถ”๊ฐ€ ํ•„์š” 

server.servlet.encoding.force=true

 

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
๊ฐ์ฒด์ง€ํ–ฅ์ด ๋‚˜์˜ค๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ

 1970๋…„๋Œ€ ์ด์ „์—๋Š” ์„ค๊ณ„์—†์ด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰
    → ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ์ค‘๋ณต์ฝ”๋“œ ์ฆ๊ฐ€, ์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€ ๋ฐœ์ƒ์œผ๋กœ ์‹ ๋ขฐ๋„ ๋ฐ”๋‹ฅ ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๋“ฑ์˜ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋จ

 1970๋…„๋Œ€ ์ดํ›„, ํ”„๋กœ๊ทธ๋žจ์„ ์ชผ๊ฐœ์–ด ๊ฐœ๋ฐœํ•˜๋Š” ๊ตฌ์กฐ์  ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์‚ฌ์šฉ (๋ถ„์„ - ์„ค๊ณ„ - ๊ฐœ๋ฐœ - ํ…Œ์ŠคํŠธ)
    → ์‚ฌ์šฉ์ž ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ช…ํ™•ํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ๋งŽ์ด ์•Š์€ ํ™˜๊ฒฝ์—์„œ๋Š” ํšจ์œจ์ ์ด๋‚˜, ์ƒ๋ช…์ฃผ๊ธฐ ๊ฐ ๋‹จ๊ณ„๋ณ„(ex. ๋ฌผํ’ˆ๊ตฌ๋งค..๋ฌผํ’ˆ์กฐํšŒ..๋ฌผํ’ˆ์‚ญ์ œ..)๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ๋“ค์€ ๋ฐ์ดํ„ฐ์™€ ๋ณต์žกํ•˜์—ฌ ์–ฝํ˜€์žˆ์–ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒŒ ์‰ฝ์ง€ ์•Š์Œ
     ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€
     ๊ฐ์ฒด์ง€ํ–ฅ์ด ๋‚˜์˜ค๊ฒŒ๋จ

 ๊ฐ์ฒด์ง€ํ–ฅ์€ ํ˜„์‹ค์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์‹ค์ฒด ๋ฐ ๊ฐœ๋…๋“ค์„ ๊ฐ์ฒด๋ผ๋Š” ๋…๋ฆฝ๋œ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ & ๋ฉ”์„ธ์ง€๋กœ ์ƒํ˜ธ์ž‘์šฉ & ๊ฐ์ฒด์ง€ํ–ฅ ์‹œ์Šคํ…œ์„ ๊ฐ€์‹œํ™”ํ•˜๊ณ  ๋ช…์„ธํ™”ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•œ๊ฒƒ์ด UML

 

๊ฐ์ฒด์ง€ํ–ฅ ์š”์†Œ

• ๊ฐ์ฒด(Object) : ์†์„ฑ๊ณผ ํ–‰๋™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒƒ
     (์ž๋ฃŒ(=์†์„ฑ(๋ณ€์ˆ˜) + ๊ฐ’(๋ณ€์ˆ˜๊ฐ’)=ํด๋ž˜์Šค์—์„œ ์ •์˜) ๋ฐ ์˜คํผ๋ ˆ์ด์…˜(=ํด๋ž˜์Šค์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ๋ฉ”์†Œ๋“œ))

 ํด๋ž˜์Šค(Class) : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์™€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ‹€ 

 ๋ฉ”์„ธ์ง€(Message) : ์–ด๋–ค ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ํŠน์ • ์ž‘์—…์„ ์š”์ฒญํ•˜๋Š” ์‹ ํ˜ธ
     ์ˆ˜์‹ ๊ฐ์ฒด ์ด๋ฆ„ + ์ˆ˜ํ–‰ํ•  ์˜คํผ๋ ˆ์ด์…˜ ์ด๋ฆ„ + ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ 

 

๊ฐ์ฒด์ง€ํ–ฅ ํŠน์„ฑ

 ์บก์Šํ™”(Encapsulation) : ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ๋™์ž‘์— ๋Œ€ํ•œ ํ๋ฆ„์„ ์ž์„ธํ•˜๊ฒŒ ์•Œํ•„์š” ์—†์ด, ์™ธ๋ถ€์—์„œ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š”๊ฒƒ. 
     ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด ๋‚ด ์ง์ ‘ ์ ‘๊ทผ X
     ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํผ๋ ˆ์ด์…˜์„ ํ†ตํ•ด ๊ด€๋ จ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ (์ด๋กœ์จ ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„๊ฐ€๋Šฅ)
     ์ •๋ณด์€๋‹‰์ด ๊ฐ€๋Šฅ 

 ์ƒ์†(Inheritance) : ํ”„๋กœ๊ทธ๋žจ์„ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ์ˆ˜๋‹จ
     ์žฌ์‚ฌ์šฉ ๋ฐ ํ™•์žฅ์„ฑ 
     ์ผ๋ฐ˜ํ™”(Generalization) : ํ•˜์œ„ํด๋ž˜์Šค์˜ ๊ณตํ†ต์  ํŠน์„ฑ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๋Š”๊ฒƒ (ํ•˜์œ„ -> ์ƒ์œ„)
     ํŠน์ˆ˜ํ™”(Specialization) : ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์†์„ฑ์„ ์ƒ์†๋ฐ›์•„ ํ•˜์œ„ ํด๋ž˜์Šค์— ์‹ค์ฒดํ™” (์ƒ์œ„ -> ํ•˜์œ„)

 ์ถ”์ƒํ™”(Abstraction) : ํŠน์ •์ธก๋ฉด์„ ๊ฐ•์กฐํ•˜์—ฌ ๋‚˜ํƒ€๋‚ธ๊ฒƒ. ์‹ค์„ธ๊ณ„์ƒํ™ฉ์„ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋ชจ๋ธ๋งํ•˜์—ฌ ์ด๊ฒƒ์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ตฌํ˜„(=์‹ค์ฒดํ™”)

 ๋‹คํ˜•์„ฑ(Polymorphism) : ์—ฌ๋Ÿฌํด๋ž˜์Šค์— ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ช…์„ ์‚ฌ์šฉํ•˜๋‚˜, ๋™์ž‘์ด ๋‹ค๋ฅธ ์ผ€์ด์Šค (์˜ค๋ฒ„๋ผ์ด๋”ฉ)

 

>>> ์บก์Šํ™”์™€ ์ถ”์ƒํ™”๋ฅผ ํ—ค๊น”๋ฆฌ๋ฉด ์•ˆ๋ ๋“ฏ!
์บก์Šํ™”๋Š” ๊ฒฐ๊ณผ์˜ ํ–‰๋™๋งŒ ๋ฐ”๋ผ๋ณด๋Š”๊ฒƒ์ด๋ฉด(ํ˜ธ์ถœํ•˜๋Š”์ž์˜ ์ž…์žฅ์—์„  ๋‚ด๋ถ€์‚ฌ์ •์€ ์•Œํ•„์š” ์—†๋‹ค!), ์ถ”์ƒํ™”๋Š” ๊ตฌ์ฒดํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์˜ ์‹œ์ž‘์œผ๋กœ ๋ด์•ผํ• ๋“ฏ

๋ฐ˜์‘ํ˜•

+ Recent posts