๋ฐ˜์‘ํ˜•
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

 

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

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

 

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

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 ๋ฉ”๋‰ด)

๋ฐ˜์‘ํ˜•

+ Recent posts