๋ฐ˜์‘ํ˜•

์–ด๋Š๋‚  ๋ฏธ๋‹ˆ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) : ์—ฌ๋Ÿฌํด๋ž˜์Šค์— ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ช…์„ ์‚ฌ์šฉํ•˜๋‚˜, ๋™์ž‘์ด ๋‹ค๋ฅธ ์ผ€์ด์Šค (์˜ค๋ฒ„๋ผ์ด๋”ฉ)

 

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

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
์Šคํ”„๋ง๋ถ€ํŠธ?

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ž๋ฐ” ์›น๊ฐœ๋ฐœ์„ ๋นจ๋ฆฌ ํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค. (ํ”„๋ ˆ์ž„์›Œํฌ)

 

์Šคํ”„๋ง๊ณผ ์Šคํ”„๋ง๋ถ€ํŠธ์˜ ์ฐจ์ด

1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ค์ • ๊ฐ„์†Œํ™” 
    โ€ฃ ์Šคํ”„๋ง์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง์ ‘ ์—ฐ๋™ํ•ด์•ผํ•˜๋‚˜, ์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ๋ฏธ๋ฆฌ ์„ค์ •๋œ ์Šคํƒ€ํ„ฐ ํ”„๋กœ์ ํŠธ๋กœ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ตœ์ ํ™”ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์—ฐ๋™ X

2. ์›น์„œ๋ฒ„ ๋‚ด์žฅ
    โ€ฃ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ํ†ฐ์บฃ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Œ, ์Šคํ”„๋ง์€ ํ†ฐ์บฃ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Œ

 

์›น ์„œ๋น„์Šค ๋™์ž‘ ์›๋ฆฌ

1. ํด๋ผ์ด์–ธํŠธ
    โ€ฃ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ or ์ปดํ“จํ„ฐ

2. ์„œ๋ฒ„
    โ€ฃ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ or ์ปดํ“จํ„ฐ

โœ“ ํด๋ผ์ด์–ธํŠธ ←→ ์„œ๋ฒ„ ์‚ฌ์ด์—๋Š” ์š”์ฒญ(request) ์™€ ์‘๋‹ต(response) ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    โ€ฃ ์ „์ œ์กฐ๊ฑด์€ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰์ค‘! ์ด์—ฌ์•ผ ํ•จ 

 

localhost ์™€ ์Šคํ”„๋ง์—์„œ์˜ ํ˜ธ์ถœ!

    โ€ฃ 127.0.0.1 ์„ ๊ณ ์œ  ์ง€์นญํ•œ๊ฒƒ (๋‚ด ์ปดํ“จํ„ฐ์˜ ์ฃผ์†Œ)
    โ€ฃ ํด๋ผ์ด์–ธํŠธ๊ฐ€ localhost:8080/hello.html ์„ ํ˜ธ์ถœ ํ•œ๋‹ค๋ฉด ์Šคํ”„๋ง๋ถ€ํŠธ๊ฐ€ ์‘๋‹ต์œผ๋กœ hello.html  ์„ ๋ณด์—ฌ์คŒ
    โ€ฃ hello.html์€ ์„œ๋ฒ„์—์„œ ์š”์ฒญํ•œ ํŒŒ์ผ! (src > main > resources > static ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฐพ์Œ)

 

์‹ค์Šต๊ด€๋ จ

1. JVM ์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™

cd Library/Java/JavaVirtualMachines


2. JDK ์‚ญ์ œ ๋ช…๋ น

sudo rm -rf ์„ค์น˜๋œ JDK ๋ฒ„์ „

 

3. ์ธํ…”๋ฆฌ์ œ์ด ์˜์–ด ๋ฉ”๋‰ด ๊ถŒ์žฅ
    โ€ฃ ์ธํ…”๋ฆฌ์ œ์ด ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฐ”์—์„œ Intellij IDEA > ์„ค์ • > ํ”Œ๋Ÿฌ๊ทธ์ธ > ์„ค์น˜ํƒญ > Korean Language Pack ์ฒดํฌ ํ•ด์ œ 

 

4. ์ž๋ฐ” ๋ฒ„์ „ ์˜ค๋ฅ˜
    โ€ฃ springboot3.x ๋ถ€ํ„ฐ๋Š” JDK17 ์ด์ƒ๋งŒ ์ง€์›ํ•จ! ๋งŒ์•ฝ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ build.gradle ์„ค์ • ํ™•์ธ! (sourceCompatibility = '17') 
    โ€ฃ ๊ทธ๋ž˜๋„ ์•ˆ๋˜๋ฉด ์ธํ…”๋ฆฌ์ œ์ด java ์„ค์ • ํ™•์ธ! (File → Settings ๋ฉ”๋‰ด)

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

AOP ๊ฐ€ ์ ์šฉ๋œ ํด๋ž˜์Šค์—์„œ(=ํฌ์ธํŠธ์ปท์˜ ์˜ํ–ฅ์„ ๋ฐ›์€ ํด๋ž˜์Šค) ํ”„๋ก์‹œ๊ฐ€ ์ ์šฉ์•ˆ๋˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ์Œ!

SampleService ํด๋ž˜์Šค์˜ sample() ๋ฉ”์†Œ๋“œ ๋‚ด์— sampleRecall1(), sampleRecall2() ๋Š” ๋ชจ๋‘ AOP ์˜ ์˜ํ–ฅ์„ ๋ฐ›์„๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡์ง€๊ฐ€ ์•Š์•˜์Œ!
์ด์œ ๋Š”, AOP๊ฐ€ ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜์ด์˜€๊ธฐ ๋•Œ๋ฌธ์ด์˜€์Œ!

ํ”„๋ก์‹œ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ํ”„๋ก์‹œ ํด๋ž˜์Šค(SampleServiceV2ProcxyImpl)๊ฐ€ ํ•ต์‹ฌ๊ธฐ๋Šฅ ํด๋ž˜์Šค(SampleServiceV2)๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ํ”„๋ก์‹œ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ(SampleServiceV2ProcxyImpl ์˜ sample())๋ฅผ ํ˜ธ์ถœํ•œ ํ›„, ํ•ต์‹ฌ๊ธฐ๋Šฅ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ(SampleServiceV2 ์˜ sample())๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋จ  
= ํ•ต์‹ฌ๊ธฐ๋Šฅ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ(SampleServiceV2 ์˜ sample()) ์‹คํ–‰์‹œ์  ๊ธฐ์ค€์œผ๋กœ ํ”„๋ก์‹œ(SampleServiceV2ProcxyImpl ์˜ sample())๋ฅผ ์ ์šฉํ• ์ˆ˜์žˆ๋‹ค๋Š”๊ฑธ ์•Œ์ˆ˜์žˆ์Œ

๋”ฐ๋ผ์„œ ํ•ต์‹ฌ๊ธฐ๋Šฅ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ(SampleServiceV2 sample()) ๋‚ด์˜ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋“ค(SampleServiceV2 ์˜ sampleRecall1(), sampleRecall2())์€ ํ”„๋ก์‹œ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋จ!

๋ฐ˜์‘ํ˜•

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

[WebSocket] ์›น์†Œ์ผ“  (0) 2022.03.29
ํŠธ๋žœ์žญ์…˜  (0) 2021.11.25
Spring - ์Šคํ”„๋ง MVC ๊ฐ„๋‹จ ์ •๋ฆฌ  (0) 2021.06.05
Spring - DI (Dependency Injection)  (0) 2021.06.01
Spring - AOP(Aspect-Oriented Programming)  (0) 2021.05.25

+ Recent posts