Hamutaro - Hamtaro 4

Backend/Spring 8

[Spring] JWT (JSON Web Token)

JWT ๋ž€?JSON Web Token, JSON ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๋ฐฉ์‹์ž๊ธฐ ํฌํ•จ (Self-contained) : ํ† ํฐ์•ˆ์— ์œ ์ € ์ •๋ณด๋‚˜ ๊ถŒํ•œ ๊ฐ™์€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋‹ด๊ณ  ์žˆ์–ด์„œ ๋ณ„๋„์˜ ์„ธ์…˜ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”์—†์Œ์„œ๋ช… (Signature) : ํ† ํฐ์€ ์„œ๋ช…๋˜์–ด ์žˆ์–ด์„œ ๋‚ด์šฉ์ด ์œ„์กฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•จStateless : ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ํ•„์š”์—†์ด ํ† ํฐ๋งŒ ํ™•์ธํ•˜๋ฉด ๋จ JWT ๊ตฌ์กฐHeader : ํ† ํฐ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (ex : HS256)Payload : ์œ ์ € ์ •๋ณด ๋ฐ ํด๋ ˆ์ž„(claims)์ด ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ (ex : sub, name, exp ๋“ฑ)Signature : ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๋น„๋ฐ€ํ‚ค๋กœ ํ•ด์‹ฑํ•œ ์„œ๋ช… JWT util class ์˜ˆ์ œimport io.j..

Backend/Spring 2025.02.18

[Spring] IAM(Identity and Access Management) ์ธ์ฆ ์„œ๋ฒ„

IAM(Identity and Access Management) ์ธ์ฆ ์„œ๋ฒ„์‚ฌ์šฉ์ž ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๊ณ , ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ํ‰๊ฐ€ํ•˜๋Š” ์—ญํ•  IAM ์ธ์ฆ ์„œ๋ฒ„์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ธ์ฆ (Authentication)์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ๋•Œ ๋ณธ์ธ์ด ๋ˆ„๊ตฌ์ธ์ง€ ์ฆ๋ช…ํ•˜๋„๋ก ํ•จ์ผ๋ฐ˜์ ์œผ๋กœ ID/๋น„๋ฐ€๋ฒˆํ˜ธ, ์ƒ์ฒด ์ธ์ฆ, ์ธ์ฆ ํ† ํฐ ๋“ฑ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง๊ถŒํ•œ ๋ถ€์—ฌ (Authorization)์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ์—ญํ• (Role) ๊ธฐ๋ฐ˜, ์ •์ฑ…(Policy) ๊ธฐ๋ฐ˜, ์†์„ฑ(Attribute) ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋ธ์„ ํ™œ์šฉ์„ธ์…˜ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ์„ธ์…˜ ๊ด€๋ฆฌ : ์‚ฌ์šฉ์ž ์ธ์ฆ ํ›„ ์„ธ์…˜์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋กœ๊ทธ์ธ ..

Backend/Spring 2025.01.19

[SpringBoot] ์Šคํ”„๋ง๋ถ€ํŠธ +Thymeleaf + H2 Database + JPA - ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์„ค์ • ๋ฐ H2 DB ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

ํ™˜๊ฒฝIDE : VScodeJava : 17SpringBoot : v3.4.0Gradle : v8.11.1DB : H2  1.Spring Initializr ์ด์šฉํ•ด์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ Packaging : JarJava version : 17 (์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฒ„์ „. ํ„ฐ๋ฏธ๋„์—์„œ java -version ๋ช…๋ น์–ด๋กœ ํ™•์ธ)Dependencies : Spring Web, Spring Data JPA, H2 Database, LombokVScode Extensions : Spring Boot Extensions Pack, Java Extension Pack  2. application.properties (application.yml) ์„ค์ • ๋‚˜๋Š” yml์„ ์‚ฌ์šฉํ–ˆ๋‹ค.application.properties : ke..

Backend/Spring 2024.12.12

[SpringBoot] VSCODE์—์„œ Spring Boot ํ™˜๊ฒฝ์„ค์ •ํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

VSCODE์— ์Šคํ”„๋ง๋ถ€ํŠธ ํ™˜๊ฒฝ์„ค์ • 1. ์Šคํ”„๋ง๋ถ€ํŠธ ์ต์Šคํ…์…˜ ์„ค์น˜ํ•˜๊ธฐ์ต์Šคํ…์…˜์—์„œ Spring Boot Extension Pack์„ ๊ฒ€์ƒ‰ํ•ด์„œ install ํ•œ๋‹ค.   2. Ctrl + Shift + P ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ˆ„๋ฅธ๋‹ค. Spring Initializr: Create a Gradle Project... ๊ฒ€์ƒ‰ํ•ด์„œ ์„ ํƒํ•œ๋‹ค.   3. ์Šคํ”„๋ง๋ถ€ํŠธ ๋ฒ„์ „ ์„ ํƒ์›ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์„ ํƒํ•œ๋‹ค.   4. ์–ธ์–ด ์„ ํƒ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.   5. ํ”„๋กœ์ ํŠธ Group Id ์„ค์ •๋””ํดํŠธ๋Š” com.example๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ด€์„ฑ ์žˆ๊ฒŒ ์„ค์ •ํ•ด์ค€๋‹ค. ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋””ํดํŠธ๋กœ ์„ค์ •ํ–ˆ๋‹ค.   6. ํ”„๋กœ์ ํŠธ Artifact Id ์„ค์ •์ด๊ฒƒ๋„ ํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ด€์„ฑ ์žˆ๊ฒŒ ์„ค์ •ํ•ด์ค€๋‹ค. ๋””ํดํŠธ๋Š” demo์ด๋‹ค.   7. ๋นŒ๋“œ ..

Backend/Spring 2024.10.30

[Spring] Maven๊ณผ Gradle์˜ ์ฐจ์ด์ 

Maven 1. ๊ตฌ๋ฌธ ๋ฐ ๊ตฌ์„ฑXML ๊ธฐ๋ฐ˜์˜ pom.xml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ, ๋นŒ๋“œ ์„ค์ • ์ •์˜ํ•จ2. ์˜์กด์„ฑ ๊ด€๋ฆฌ์ค‘์•™ ์ €์žฅ์†Œ์™€ ์ง€์—ญ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ3. ๋นŒ๋“œ ์†๋„XML ๊ธฐ๋ฐ˜์˜ ์ •์  ๊ตฌ์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ๊ณผ์ •์ด ๋‹จ์ˆœํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ๋А๋ฆผ4. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ™•์žฅ์„ฑ๋งŽ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•˜๋ฉฐ XML ์„ค์ •์œผ๋กœ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ Gradle 1. ๊ตฌ๋ฌธ ๋ฐ ๊ตฌ์„ฑGroovy ๋˜๋Š” Kotlin DSL์„ ์‚ฌ์šฉํ•˜์—ฌ build.gradle ๋˜๋Š” build.gradle.kts ํŒŒ์ผ๋กœ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐ์„ฑ์ด ๋†’์Œ2. ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜์กด์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์ข€ ๋” ์œ ์—ฐํ•˜๋ฉฐ, implementation, api ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์˜์กด์„ฑ ๋ฒ”์œ„๋ฅผ ์ œ๊ณตํ•จ3. ๋นŒ๋“œ ์†๋„๋นŒ๋“œ ์บ์‹œ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘..

Backend/Spring 2024.08.29

[Spring] SSO(Single Sign-on)์— ๋Œ€ํ•ด์„œ

SSO(Single Sign-On)๋ž€?์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ ๋˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๋‹จ์ผ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์‚ฌ์šฉ์ž๋Š” ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋กœ๊ทธ์ธ ์„ธ์…˜์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ SSO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ํŽธ์˜์„ฑ ๋ฐ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ : ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋กœ๊ทธ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•  ํ•„์š”๊ฐ€ ์—†์Œ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ : ํ•˜๋‚˜์˜ ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ๊ด€๋ฆฌํ•˜๋ฉด ๋จ๋ณด์•ˆ ๊ฐ•ํ™” : SSO ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ค‘์•™ํ™”๋œ ์ธ์ฆ ๋ฐ ์ ‘๊ทผ ์ œ์–ด๋น„์šฉ ์ ˆ๊ฐ : ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋ฐ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ์ง€์›์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ SSO ๋งค์ปค๋‹ˆ์ฆ˜ 1. ์ธ์ฆ ( Authentication )์‚ฌ์šฉ์ž๊ฐ€ SSO๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์–ด๋–ค ์„œ๋น„์Šค์— ์ฒ˜์Œ ๋กœ๊ทธ์ธํ•˜๋ฉด, ํ•ด๋‹น ์„œ๋น„์Šค..

Backend/Spring 2023.12.26

[Spring] MVC (Model, View,Controller) ํŒจํ„ด

MVC ํŒจํ„ด์ด๋ž€? Model, View, Controller์˜ ์•ฝ์ž๋กœ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•˜๋‚˜์ด๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ๋ถ„์‹œ์ผœ ์„œ๋กœ ์˜ํ–ฅ์—†์ด ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๋ชจ๋ธ(Model)์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ƒ์ˆ˜, ๋ณ€์ˆ˜๋ทฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•จ๋ทฐ(View)์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์˜์—ญ. ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์ด๋ฒคํŠธ ๋“ฑ ๋ฉ”์ธ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•จMVC ํŒจํ„ด์˜ ์žฅ์ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์„ธ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ”์œผ๋กœ์จ ๊ฐ๊ฐ์˜ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ์šฉ์ดMVC ํŒจํ„ด์˜ ๋‹จ์ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ๊ด€๊ณ„๋˜ํ•œ ๋ณต์žกํ•ด์ง

Backend/Spring 2022.01.12

[Spring] ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ (Spring Framework)

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

Backend/Spring 2021.08.20