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

 

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

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

 

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

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

๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•
json web token
์„ค๋ช…

JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ์ž์ฒด์— ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์›นํ† ํฐ.
claims์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํ‘œ์ค€.
HMAC ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ํ•˜๊ฑฐ๋‚˜, RSA or ECDSA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐœ / ๊ฐœ์ธํ‚ค ์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…์ด ๊ฐ€๋Šฅํ•จ.
๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ •๋ณด๊ตํ™˜์‹œ์ ์—์„œ ์‚ฌ์šฉ.

โœณ๏ธŽ claims ?
JWT ์˜ PAYLOAD ๋ถ€๋ถ„์„ ๊ตฌ์„ฑํ•˜๊ณ  ๊ตํ™˜๋˜๋Š” ์ •๋ณด ์ง‘ํ•ฉ.

 

ํ† ํฐ์ƒ๊น€์ƒˆ
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY0MDI2NjczOX0.A5bzyF4jkKVmdDzboK8_qsPbDh3qGO3v2lgcSp5K41CxmSgyDZlKxBfcZNiZ754S_IDhFOPO7m18bsBqhZgBMw

์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ƒ๊ฒผ์œผ๋ฉฐ, https://jwt.io/ ์‚ฌ์ดํŠธ์—์„œ ํ† ํฐ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ตฌ์„ฑ๋ฐฉ์‹

HEADER, PAYLOAD, SIGNITURE ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 
์ด ์„ธ๋ถ€๋ถ„์€ Base64url ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ„๋„๋กœ ์ธ์ฝ”๋”ฉ๋˜๋ฉฐ JWT ์ƒ์„ฑ์„ ์œ„ํ•˜ ์ (.)์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ๋‹ค. 

var token = base64UrlEncoding(HEADER) + '.' + base64UrlEncoding(PAYLOAD) + '.' + base64UrlEncoding(SIGNITURE);

↓↓↓↓

var token = 
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ0ZXN0IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY0MDI2NjczOX0.A5bzyF4jkKVmdDzboK8_qsPbDh3qGO3v2lgcSp5K41CxmSgyDZlKxBfcZNiZ754S_IDhFOPO7m18bsBqhZgBMw

 

๊ฐ ๊ตฌ์„ฑ ์„ค๋ช…์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

HEADER signiture ์ •๋ณด๋ฅผ ํ•ด์‹ฑํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š”๊ณณ.
HMAC, SHA256 or RSA ์™€ ๊ฐ™์€ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋จ.
PAYLOAD ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฃผ๊ณ  ๋ฐ›๋Š” ์‹œ์Šคํ…œ์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋  ์ •๋ณด์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์žˆ์Œ.
PAYLOAD claims ์€ 3๊ฐ€์ง€ ์œ ํ˜•์ด ์กด์žฌ

- registered claims: ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ƒํ˜ธ ์šด์šฉ์„ ์œ„ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ํด๋ ˆ์ž„(RFC 7519) ์ง‘ํ•ฉ (iss, exp, sub, aud..)

- public claims: jwt ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งˆ์Œ๋Œ€๋กœ ์ •์˜. ์ถฉ๋Œ ๋ฐฉ์ง€ ์œ„ํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํฌํ•จํ•˜๋Š” URL๋กœ ์ •์˜ ํ•„์š”

- private claims: ์‚ฌ์šฉ์— ๋™์˜ํ•˜๊ณ  ๋“ฑ๋ก๋œ ํด๋ ˆ์ž„์ด๋‚˜ ๊ณต๊ฐœ ํด๋ ˆ์ž„์ด ์•„๋‹Œ ๋‹น์‚ฌ์ž๊ฐ„์˜ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๋งž์ถค ํด๋ ˆ์ž„
SIGNITURE ํ† ํฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ์œ„ํ•œ ๋ฌธ์ž์—ด. ์ด ๋ฌธ์ž์—ด๋กœ ์œ ํšจํ•œ ํ† ํฐ์ธ์ง€ ํ™•์ธํ•จ.
๋ฉ”์„ธ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉ.

 

 

๋™์ž‘๋ฐฉ์‹

jwt ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ ค๋ณธ๊ฒƒ์ด๋‹ค. (oauth2์˜ ํ—ˆ๊ฐ€๋Š” ์ƒ๋žต)

accessToken, refreshToken์ด jwt ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

 

์žฅ์ ๊ณผ ๋‹จ์ 
  • ์žฅ์ 
    ์ค‘์•™์˜ ์ธ์ฆ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์—†๊ณ , ์‹œ์Šคํ…œ ์ˆ˜ํ‰ํ™•์žฅ์— ์œ ๋ฆฌํ•˜๋‹ค.

  • ๋‹จ์ 
    PAYLOAD ์ •๋ณด๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•จ.
    ํ† ํฐ์ด ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๊ธฐ์— ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ํ† ํฐ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


์ฐธ์กฐ

https://jwt.io/introduction

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0

 

JSON ์›น ํ† ํฐ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

JSON ์›น ํ† ํฐ์ƒํƒœ์ธํ„ฐ๋„ท ํ‘œ์ค€์ตœ์ดˆ ์ถœํŒ์ผ2010๋…„ 12์›” 28์ผ (2010-12-28)๋งˆ์ง€๋ง‰ ๋ฒ„์ „RFC 75192015๋…„ 5์›”์กฐ์งIETF์•ฝ์–ดJWT JSON ์›น ํ† ํฐ(JSON Web Token, JWT, "jot”[1])์€ ์„ ํƒ์  ์„œ๋ช… ๋ฐ ์„ ํƒ์  ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ

ko.wikipedia.org

https://velog.io/@kshired/Express%EC%97%90%EC%84%9C-JWT%EB%A1%9C-%EC%9D%B8%EC%A6%9D%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-Access-Token%EA%B3%BC-Refresh-Token

 

Express์—์„œ JWT๋กœ ์ธ์ฆ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ ( Access Token๊ณผ Refresh Token )

Express์—์„œ jwt๋ฅผ ์ด์šฉํ•˜์—ฌ access token์œผ๋กœ๋งŒ ์ธ์ฆ์„ ํ•˜๋Š” ๊ธ€์€ ๋งŽ์ด ์žˆ๋Š”๋ฐ, refresh token๊นŒ์ง€ ๊ตฌํ˜„ํ•œ ์ž๋ฃŒ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€์•Š์•„ ์ด ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.์ด ๊ธ€์€ ๊ตฌํ˜„์— ์น˜์ค‘๋˜์–ด ์žˆ์–ด, JWT์˜ ์ž์„ธํ•œ

velog.io

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-jwt/dashboard

 

[๋ฌด๋ฃŒ] Spring Boot JWT Tutorial - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

Spring Boot, Spring Security, JWT๋ฅผ ์ด์šฉํ•œ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ์ธ์ฆ๊ณผ ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ์ง€์‹์„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., [์‚ฌ์ง„] ๋ณธ ๊ฐ•์˜๋Š” Spring Boot, Spring Security๋ฅผ ์ด์šฉํ•ด์„œ JWT ์ธ์ฆ๊ณผ ์ธ๊ฐ€๋ฅผ ์‰ฝ

www.inflearn.com

https://techdocs.akamai.com/api-gateway/docs/json-web-token-jwt-val#jwt-claims

 

JSON web token (JWT) validation

JSON web token is an open standard (RFC 7519) that defines a compact and self-contained method for securely transmitting JSON-encoded information between parties. With <<COMPANY_NICKNAME>>, you can use JWTs to quickly identify and authorize API consumers w

techdocs.akamai.com

 

๋ฐ˜์‘ํ˜•

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

SSE (Server Sent Event)  (1) 2023.08.20
Vault  (1) 2023.02.07
ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ (Hexagonal Architecture)  (2) 2022.09.25
Rest API  (0) 2021.06.02
HTTP๊ด€๋ จ (https, spdy, ajax, websocket)  (0) 2018.12.09
๋ฐ˜์‘ํ˜•

๋žŒ๋‹ค

์„ค๋ช…

์ต๋ช…ํ•จ์ˆ˜๋‹ค. ์ต๋ช…ํ•จ์ˆ˜ ์ฆ‰, ์ฝ”๋“œ ๋ธ”๋Ÿญ์ด๋‹ค.
์ฝ”๋“œ ๋ธ”๋Ÿญ์€ ๋ฉ”์†Œ๋“œ ๋‚ด์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค!

โ€ป ์ต๋ช…ํ•จ์ˆ˜

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋ถ„์„ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ.
ํ•จ์ˆ˜๋“ค์— ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ (์ฝœ๋ฐฑ?)

 

์ฝ”๋“œ์˜ˆ์‹œ
//๊ธฐ๋ณธ ๋ฌธ๋ฒ• 
(args) -> {
	//๋ธ”๋ผ๋ธ”๋ผ
}
/* 
ASIS: ๋žŒ๋‹ค๋Š” ํƒ€์ž… ์ง€์‹œ์ž(Integer)๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค 

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํƒ€์ž…์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด, 
์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
*/
(Intefer x) -> x + 1; 

// TOBE: ์ด๋ ‡๊ฒŒ!
(x) -> x + 1 


//ASIS: ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•˜๋‚˜์ธ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์†Œ๋“œ ์„
(x) -> x + 1 

// TOBE: ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ
x -> x + 1
// ASIS: ์ต๋ช…ํด๋ž˜์Šค ์ผ๋ฐ˜์  ์‚ฌ์šฉ
void annoymousClass() {
	final Server server = new HttpServer();
	waitFor(new Condition() {
		
		@Override
		public Boolean isSatisfied() {
			return !server.isRunning();
		}
	});
}

// TOBE: ๋žŒ๋‹ค ์‚ฌ์šฉ - ํด๋กœ์ €์ง€๋งŒ ๋žŒ๋‹ค๋‹ค.
void Closure() {
	Server server = new HttpServer();
	waitFor(() -> !server.isRunning());
}	


// (๋ณ„๋„) WaitFor ํด๋ž˜์Šค 
class WaitFor {
	static void waitFor(Condition condition) throws
	InterruptedException {
		While (!condition.isSatisfied())
			Thread.sleep(250);
	}
}
public class LambdaStudy {
    private String firstName = "Jack";
    public void ๋žŒ๋‹ค๊ฐ€_firstName_์—_์ง์ ‘_์ ‘๊ทผ() {
        Function<String, String> addSurname = surname -> {
          
          // ๋žŒ๋‹ค๊ฐ€ firstName ๋ณ€์ˆ˜์— ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ. (ํ•„๋“œ,๋ฉ”์†Œ๋“œ,์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅ)
          return this.firstName + " " + surname; 
        };
    }
}

 

๋žŒ๋‹ค๊ฐ€ ๋„์ž…๋œ ์ด์œ 

์„ค๋ช…

๋น…๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ, ์ฆ‰ ๋ณ‘๋ ฌํ™” ๊ธฐ์ˆ ์ด ํ•„์š” ํ•˜์˜€์Œ.
๊ทธ๋ž˜์„œ java8 ์—์„œ๋Š” ๋ณ‘๋ ฌํ™”๋ฅผ ์œ„ํ•ด ๋ฐฐ์—ด, List, Set, Map์„ ๊ฐ•ํ™”ํ•˜์˜€๊ณ  ์ŠคํŠธ๋ฆผ์„ ๊ฐ•ํ™” ํ•˜์˜€๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ŠคํŠธ๋ฆผ์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ๋žŒ๋‹ค,
๋žŒ๋‹ค๋ฅผ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€ํ™”๊ฐ€ ์ˆ˜๋ฐ˜ ๋˜์—ˆ๋‹ค.

๋น…๋ฐ์ดํ„ฐ ์ง€์› → ๋ณ‘๋ ฌํ™” ๊ฐ•ํ™” → ์ปฌ๋ ‰์…˜ ๊ฐ•ํ™” → ์ŠคํŠธ๋ฆผ ๊ฐ•ํ™” → ๋žŒ๋‹ค ๋„์ž… → ์ธํ„ฐํŽ˜์ด์Šค ๋ช…์„ธ ๋ณ€๊ฒฝ → ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…

 

๋žŒ๋‹ค์˜ ์žฅ/๋‹จ์ 

์žฅ์ 

์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๋‹ค. ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•จ.
ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์„ ๋œ ๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

์ฝ”๋“œ ๋‚จ์šฉ์‹œ ๋””๋ฒ„๊น…์ด ํž˜๋“ค ์ˆ˜ ์žˆ๋‹ค.
์žฌ๊ท€ ๋กœ์ง ๋งŒ๋“œ๋Š”๊ฒƒ์€ ์–ด๋ ต๋‹ค.

 

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ

์„ค๋ช…

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ๋ฅผ ๋žŒ๋‹ค๋กœ์„œ ์‚ฌ์šฉํ•  ๋•Œ์—” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ๊ฒƒ์€ ์ด๋ฏธ ๋ชธ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ํ–‰๋™.

โ€ป ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค (@FunctionalInterfate)

ํ•จ์ˆ˜ํ˜• ๋ฉ”์†Œ๋“œ or SAM(๋‹จ์ผ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ)
ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
๋ถ€๋ชจ์˜ ํ•จ์ˆ˜ํ˜• ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ
@FunctionalInterface
interface A {
	abstract void apply();
}

// ๊ฐ€๋Šฅ
interface B extends A {
	
	@Override
	abstract void apply();
} 

// ๋ถˆ๊ฐ€๋Šฅ
interface B extends A {
	
	@Override
	abstract void illegal();
} 

 

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ์˜ ํŠน์ง•

์Œ์ฝœ๋ก (::)์˜ ์•ž๋ถ€๋ถ„์€ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ํด๋ž˜์Šค๋ช…, ๋’ท๋ถ€๋ถ„์€ ๋ฉ”์†Œ๋“œ๋ช…
method ๋’ค์— ์†Œ๊ด„ํ˜ธ()์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์†Œ๋“œ ์ฐธ์กฐ์˜ ์œ ํ˜•

์ƒ์„ฑ์ž ์ฐธ์กฐ (String::new)
  ์Œ์ฝœ๋ก  ๋’ค์— new๊ฐ€ ๋ถ™์Œ

  String ํด๋ž˜์Šค์˜ ์ธ์ž์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋žŒ๋‹ค๋ฅผ ์ƒ์„ฑ
  () → new String() ๊ณผ ๊ฐ™์€ ์˜๋ฏธ

์ •์  ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ (String::valueOf)
  x → String.valueOf(x)

๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์ฐธ์กฐ (x::toString)
  x๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํŠน์ • ์ธ์Šคํ„ด์Šค๋ผ ๊ฐ€์ •

  () → x.toString()

 

 

๋žŒ๋‹ค์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์„ค๋ช…

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

๋น„์ง€๋‹ˆ์Šค ๋กœ์ง < ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์œ„ํ•œ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ

 

 

ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค

์„ค๋ช…

ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๋˜์–ด์•ผ ํ•จ. ํ•จ์ˆ˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Œ.
ํด๋ž˜์Šค๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฉด ๊ฐ์ฒด๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋จ.
ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋”ฑ ํ•œ๋ฒˆ ํ• ๋‹น ๋จ. (์ž๋ฐ” ํž™์˜ ํผ๋จธ๋„ŒํŠธ(permanent)์˜์—ญ์— ์ €์žฅ ๋จ.
๊ฐ์ฒด๋Š” ์ž์‹ ๋งŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€์ง€๋งŒ ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.
์ž๋ฐ” ํด๋ž˜์Šค์˜ ์ •์  ๋ฉ”์†Œ๋“œ๋Š” ํ•จ์ˆ˜์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค.

 


์ฐธ๊ณ 

(์ฑ…) ์ž๋ฐ” ๋žŒ๋‹ค ๋ฐฐ์šฐ๊ธฐ
(์ฑ…) ์Šคํ”„๋ง ์ž…๋ฌธ์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์›๋ฆฌ์™€ ์ดํ•ด
https://coding-factory.tistory.com/265

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

๋กœ์ปฌ์—์„œ ์‹คํ–‰๋จ์„ ํ™•์ธํ•˜์˜€๋‹ค.


์ด๋ฒˆ์—” ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„์—์„œ ์‹คํ–‰ ํ•ด ๋ณผ ์ƒ๊ฐ์ด๋‹ค.


0. ์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ


0-0. ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„(๋‚˜์˜ ๊ฒฝ์šฐ๋Š” [AWS EC2 - ubuntu]๋ฅผ ์ด์šฉ)

 * ์ฐธ๊ณ  : http://mungmange.tistory.com/59?category=741355,


0-1. java8์„ค์น˜

 * ์ฐธ๊ณ  : https://zetawiki.com/wiki/%EC%9A%B0%EB%B6%84%ED%88%AC_Java_8_%EC%84%A4%EC%B9%98

          : http://bluexmas.tistory.com/734 << ๋‚˜๋Š” ์ด๊ฑธ ์ฐธ๊ณ ํ•จ


  $ add-apt-repository ppa:webupd8team/java
  $ apt-get update
  $ apt-get install oracle-java8-installer
  $ java -version
  $ apt-get install oracle-java8-installer
  $ java -version


0-2. tomcat 7.0์„ค์น˜

* ์ฐธ๊ณ  : https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%ED%86%B0%EC%BA%A37_%EC%BB%B4%ED%8C%8C%EC%9D%BC_%EC%84%A4%EC%B9%98

http://kingle1024.tistory.com/60 << ๋‚˜๋Š” ์ด๊ฑธ ์ฐธ๊ณ ํ•จ


 $ apt-get install tomcat7
 $ service tomcat7 start
 $ sudo ln -s /usr/lib/jvm/java-8-oracle/ /usr/lib/jvm/default-java
 $ service tomcat7 start


๋ญ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋งŽ์ด ๋‚˜์˜จ๋‹ค.




1. ๋ฆฌ๋ˆ…์Šค 8080ํฌํŠธ๋ฅผ ์—ด์–ด๋ผ.


tomcat ๊ธฐ๋ณธ ํฌํŠธ๋Š” 8080์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ๋‹ค.

๋‚˜๋Š” 8080์œผ๋กœ ์„ค์ •์„ ํ•ด๋†“๊ณ  ์‹คํ–‰ํ•˜์˜€๋‹ค.


์ฐธ๊ณ ๋กœ AWS๋ฅผ ์‚ฌ์šฉํ•œ ๋‚˜๋Š” AWS ๋Œ€์‹œ๋ณด๋“œ์— ๋“ค์–ด๊ฐ€์„œ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.


โ€ป ์™ ๋งŒํ•˜๋ฉด ์ฝ˜์†”๋‚ด์—์„œ ๋ฐฉํ™”๋ฒฝ ์„ค์ •์„ ํ•˜์ง€ ๋ง๊ธฐ๋ฅผ

--> ์˜ˆ์ „์— ์ฝ˜์†”๋กœ ๋ฐฉํ™”๋ฒฝ ์ž˜๋ชป ๊ฑด๋“ค์˜€๋‹ค๊ฐ€ ์ ‘์†์•ˆ๋˜์„œ EC2 ์ƒˆ๋กœ ์„ค์น˜ํ•œ ์ ์ด ์žˆ์—ˆ๋‹ค. (ใ… ใ… )


* ์ฐธ๊ณ  : http://mungmange.tistory.com/66?category=741355 (์‰ฝ๋‹ค)


ํฌํŠธ๋ฅผ ์—ฐ ํ›„, ํ•ด๋‹น URL์„ ์ ‘์†ํ•ด๋ณธ๋‹ค.

์ด๋Ÿฌํ•œ ํ˜•ํƒœ์ผ ๊ฒƒ์ด๋‹ค.


http://๋ฆฌ๋ˆ…์Šค์ฃผ์†Œ:8080

2. war ํŒŒ์ผ ์ง‘์–ด๋„ฃ๊ธฐ.


์œ„์˜ ๊ทธ๋ฆผ์—๋„ ๋‚˜์™€์žˆ์ง€๋งŒ, ์ € It works ! ~~ ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€์˜ ๊ฒฝ๋กœ๋Š”

/var/lib/tomcat7/webapps/ROOT/index.html ์ด๋‹ค. (์œ„์— ๋‚˜์™€์žˆ๋‹ค.)


ํ•ด๋‹น์œ„์น˜๊ฐ€ ํ†ฐ์บฃ ์‹คํ–‰ ํ–ˆ์„ ๋•Œ์˜ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ์ด๋‹ค.

์ด๊ฑด server.xml์—์„œ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 


๋‚˜๋Š” 

/var/lib/tomcat7/webapps/ROOT 

๊ฒฝ๋กœ์— mungmang_java.war ์„ ์ง‘์–ด๋„ฃ๊ณ , ์••์ถ•์„ ํ’€์—ˆ๋‹ค.

์ง‘์–ด๋„ฃ๋Š”๊ฑด ํŒŒ์ผ์ฆ๋ผ ํ”„๋กœ๊ทธ๋žจ(SFTP ์—ฐ๊ฒฐ ํ”„๋กœ๊ทธ๋žจ) ์ด์šฉ.


$ unzip mungmang_java.war -d /var/lib/tomcat7/webapps/ROOT/mungmang_java


โ€ป ๋งŒ์•ฝ unzip ์ด ubuntu์— ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์„ค์น˜ํ•ด๋ผ (apt-get install unzip)



3. server.xml๋ฅผ ์ฐพ์•„ context๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


$ find / -name 'server.xml' 
$ vi /ํ†ฐ์บฃ์œ„์น˜๊ฒฝ๋กœ/server.xml


ํ•ด๋‹น ์œ„์น˜๋ฅผ ์ฐพ์•„ ๋นจ๊ฐ„๊ธ€์”จ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

      <Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true">

        <Context docBase="./ROOT/mungmang_java" path="/mungmang_java" reloadable="true"/>

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>


๊ทธ๋ฆฌ๊ณ  tomcat ์žฌ์‹œ์ž‘


$ service tomcat7 restart


โ€ป ๋งŒ์•ฝ appBase๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด


      <Host name="localhost"  appBase="/var/abcd"

            unpackWARs="true" autoDeploy="true">

        <Context docBase="mungmang_board.war" path="/springpj" reloadable="true"/>

        <Context docBase="mungmang_java.war" path="/mungmang_java" reloadable="true"/>


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log." suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>


# ์ฐธ๊ณ  : http://dimdim.tistory.com/entry/Tomcat-WAR-%ED%8C%8C%EC%9D%BC-%EB%B0%B0%ED%8F%AC-%EC%82%BD%EC%A7%88%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A0%95%EB%A6%AC



4. ์‹คํ–‰ํ•ด๋ณธ๋‹ค.


http://๋ฆฌ๋ˆ…์Šค์ฃผ์†Œ:8080/mungmang_java/test.jsp


โ€ป ๋งŒ์•ฝ jstl ๊ด€๋ จ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ฑฐ๋“ ,

/var/lib/tomcat7/webapps/ROOT/mungmang_java/WEB-INF/lib ์œ„์น˜์— jstl-1.2.jar ํŒŒ์ผ์„ ๋„ฃ์–ด์ฃผ์ž.




-- ๋

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


[1] ์„ค์น˜๋ชฉ๋ก : ์ž๋ฐ”, ํ†ฐ์บฃ, maven, ์ดํด๋ฆฝ์Šค...DB..


1) ์ž๋ฐ”์„ค์น˜

  ๋ณด์•„ํ•˜๋‹ˆ 1.9 ๋ฒ„์ „๊นŒ์ง€ ๋‚˜์˜จ๊ฑฐ๊ฐ™์€๋ฐ ๋‚˜๋Š” 1.8 ๋ฒ„์ „ ์•„๋ฌด๊ฑฐ๋‚˜ ์„ค์น˜ํ•จ.

  http://www.oracle.com/technetwork/java/javase/downloads/index.html


  ์„ค์น˜ํ•˜๋Š”๋ฒ•์€ ๋งŽ์ด ๋‚˜์˜ค๋‹ˆ ์•Œ์•„์„œ ์„ค์น˜ํ•˜๊ณ , 

  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹ํŒ… ๊ผญ ํ•˜๋„๋ก(maven ์„ค์น˜ํ•˜๊ณ  ์ง์ ‘ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๋•Œ ํ•ด๋ด์•ผํ•˜๋‹ˆ..)

  ์ œ์–ดํŒ\์‹œ์Šคํ…œ ๋ฐ ๋ณด์•ˆ\์‹œ์Šคํ…œ\๊ณ ๊ธ‰์‹œ์Šคํ…œ์„ค์ •\ํ™˜๊ฒฝ๋ณ€์ˆ˜ 

   --> ์‹œ์Šคํ…œ๋ณ€์ˆ˜์— JAVA_HOME ๋ณ€์ˆ˜ ์ถ”๊ฐ€ (์ด๋ฆ„์„ JAVA_HOME, ๊ฒฝ๋กœ๋ฅผ ์ž๋ฐ”jdk์œ„์น˜ ๊นŒ์ง€ ex) c:\~~~\java~~~\jdk~~~)

   --> ์‹œ์Šคํ…œ๋ณ€์ˆ˜์ค‘ path๋ผ๋Š” ๋ณ€์ˆ˜ ํŽธ์ง‘๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ JAVA_HOME ์ถ”๊ฐ€ (ex. ๋ธ”๋ผ๋ธ”๋ผ~~;%JAVA_HOME%\bin)

   --> cmd ๋“ค์–ด๊ฐ€์„œ javac ์ณ๋ณด๊ณ  ์ด์ƒํ•˜๋ฉด java ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด๋ณด๋„๋ก....


2) ํ†ฐ์บฃ์„ค์น˜(์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„œ๋ฒ„)

  ์–ด์Œ ๋‚˜๋Š” tomcat 7์„ ์„ค์น˜ํ•จ... ๊ฒ€์ƒ‰ํ•˜๋ฉด ์„ค์น˜ํ•˜๋Š”๋ฒ• ๋งŽ์ด๋‚˜์˜ด. ๋‹ค์šด๋ฐ›๊ณ  ์›ํ•˜๋Š” ํด๋”์— ๋„ฃ์Œ.

  https://tomcat.apache.org/download-70.cgi 


  โ€ป ์ฐธ๊ณ  : ํ†ฐ์บฃ ๋ฒ„์ „๋ณ„ ์„œ๋ธ”๋ฆฟ ์ŠคํŽ™

  http://zetawiki.com/wiki/%ED%86%B0%EC%BA%A3_%EB%B2%84%EC%A0%84%EB%B3%84_%EC%84%9C%EB%B8%94%EB%A6%BF_%EC%8A%A4%ED%8E%99

ํ†ฐ์บฃ ๋ฒ„์ „Servlet ์ŠคํŽ™JSP ์ŠคํŽ™์›น์†Œ์ผ“ ์ŠคํŽ™์ตœ์†Œ Java ๋ฒ„์ „
9.04.02.4(์˜ˆ์ •)1.2(์˜ˆ์ •)8
8.03.12.31.17
7.03.02.21.16
6.02.52.1-5
5.52.42.0-1.4
4.12.31.2-1.3
3.32.21.1-1.1

  โ€ป ์•„ํŒŒ์น˜๋Š” ์›น์„œ๋ฒ„, ํ†ฐ์บฃ์€ ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(์›น์„œ๋ฒ„ ํฌํ•จ)

  http://gap85.tistory.com/45



3) maven ์„ค์น˜

  ๋ฉ”์ด๋ธ์ด.... ์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ์“ธ๋•Œ ํŽธ๋ฆฌํ•˜๊ฒŒ ํด๋” ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ทธ๋Ÿฐ ๋ชจ๋“ˆ์ธ๊ฐ€๋ด„

  * ๊ด€๋ จ๋‚ด์šฉ : http://javacan.tistory.com/entry/MavenBasic

  * ๋ฉ”์ด๋ธ ์„ค์น˜ : https://maven.apache.org/download.cgi


4) ์ดํด๋ฆฝ์Šค ์„ค์น˜ ๋ฐ ํ™•์ธ

 https://www.eclipse.org/downloads/download.php?file=/oomph/epp/oxygen/R/eclipse-inst-win64.exe ๊ฐ€์„œ์„ค์น˜..


5) DB

 ๋ญ์Œ....mysql?



[2] ํ”„๋กœ์ ํŠธ ์‹คํ–‰์ „์—..


1) ์ดํด๋ฆฝ์Šค ์„ค์ •

  1.ํ†ฐ์บฃ ์„ค์ • 

    -> window>properties>server>Runtime Environments ๊ฐ€์„œ Add๋ฒ„ํŠผํด๋ฆญ 

    -> ํ•ด๋‹น ํ†ฐ์บฃ๋ฒ„์ „ ํด๋ฆญ ํ›„ next (๋‚˜์˜๊ฒฝ์šฐ๋Š” 7.0) 

    -> Browses ๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ ํ†ฐ์บฃ ํด๋” ์œ„์น˜ ๋“ฑ๋ก. (ํ†ฐ์บฃํด๋”์œ„์น˜) ๋ฐ Finish


  2.์ธ์ฝ”๋”ฉ ์„ค์ •

    -> ๋‚˜์˜๊ฒฝ์šฐ๋Š” UTF-8๋กœ ์„ค์ •...

  

  3.์ดํด๋ฆฝ์Šค ๋‚ด์— ์Šคํ”„๋งํˆด ์„ค์น˜

    -> help>eclips marketplace ํด๋ฆญํ•˜์—ฌ sts ๊ฒ€์ƒ‰ ํ›„ install

    -> ์„ค์น˜๋๋‚˜๋ฉด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ +๋ฒ„ํŠผํด๋ฆญํ•˜์—ฌ spring ์ถ”๊ฐ€



[3] Maven ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ


1) ์ง์ ‘ ๋งŒ๋“ค๊ธฐ

  1. ๋ฉ”์ด๋ธ ์„ค์น˜ํ•  ํด๋” ์ƒ์„ฑํ•˜๊ธฐ (C:\aaa)


  2. cmd๋กœ aaa ํด๋” ์ด๋™ํ•˜์—ฌ mvn archetype:generate ๋ช…๋ น์–ด ์‹คํ–‰. ๊ทธ๋Ÿผ ๋ง‰ ๋‹ค์šด๋ฐ›์•„์ง

     ๋ฌด์Šจ ์ž…๋ ฅํ•˜๋Š”๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ๊ณ„์† ์—”ํ„ฐ์น˜๋‹ค๊ฐ€ 

     groupId : ํŒจํ‚ค์ง€root์ž…๋ ฅ(ex. aaa.bbb.ccc), artifactId : ํŒจํ‚ค์ง€ ์ƒ์œ„ ํด๋”๋ช…(ex. A) 

     ์ž…๋ ฅ ํ›„ ์—”ํ„ฐ

     --> ์ด๊ฑฐ ์•ˆ๋˜๋ฉด, java ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ์ œ๋Œ€๋กœ ์•ˆ๋œ๊ฑด์ง€ ๋“ฑ๋“ฑ ํ™•์ธ ํ•„์š”ํ•จ.

  

  3. ๋‹ค์šด๋ฐ›๊ธฐ ๋๋‚˜๋ฉด src/main ์— resources ํด๋” ์ƒ์„ฑ 

     (ํ›—๋‚  ์Šคํ”„๋ง์—์„œ ํŠน์ • ํ”„๋กœ์ ํŠธ ์ž‘์—…์‹œ์— ์‚ฌ์šฉํ•˜๋Š” xml ํŒŒ์ผ ๋‹ด๋Š” ํด๋”์ธ๋“ฏ....ํด๋ž˜์ŠคํŒจ์Šค์— ์œ„์น˜ํ•ด์•ผํ•  xml...properties...)


  3. pom.xml ์— ๋‚ด์šฉ์ถ”๊ฐ€ (์Šคํ”„๋ง ๋ฒ„์ „ ๋ญ์“ด๋‹ค, ์ธ์ฝ”๋”ฉ ๋ญ์“ด๋‹ค ๋‚ด์šฉ์ถ”๊ฐ€)

  

  4. ์ดํด๋ฆฝ์Šค ๋‚ด์— Import ์ฒ˜๋ฆฌ

     ์ดํด๋ฆฝ์Šค ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํ™”๋ฉด์— ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ Import ํ•˜๊ธฐ.

     (Maven/Exsisting Maven Project ํด๋ฆญํ•˜์—ฌ import ์ฒ˜๋ฆฌ, pom.xml ์€ ์ฒดํฌ๊ผญ!)


  5. ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ ๋‚ด์— JRE System Library ์˜ค๋ฅธ์ชฝ๋ฒ„ํŠผํด๋ฆญ> properties๊ฐ€์„œ java ๋ฒ„์ „ ์„ค์ • ๋‹ค์‹œํ•˜๊ธฐ (๋‚˜์˜๊ฒฝ์šฐ๋Š” 1.8)



2) ์ดํด๋ฆฝ์Šค ๋‚ด์—์„œ ๋งŒ๋“ค๊ธฐ

  1. ์ดํด๋ฆฝ์Šค์—์„œ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๋“ฏ์ด ๋งŒ๋“ค๋ฉด๋จ. 

     (๋‚˜์˜๊ฒฝ์šฐ๋Š” legacy project๋กœ ๋งŒ๋“ค์—ˆ๊ณ , ๋งŒ๋“ค๋•Œ groupId, artifactId ์ž…๋ ฅํ•˜๋Š”๊ฒƒ์ด ๋‚˜์˜ฌ๊ฒƒ์ž„)

  

๋ฐ˜์‘ํ˜•

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

ํŠธ๋žœ์žญ์…˜  (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
IOC/DI, DI์‘์šฉ  (0) 2017.11.20

+ Recent posts