๐ŸŒฑ Infra/KeyCloak

[keycloak ๋ง›๋ณด๊ธฐ#9] ์‚ฌ์šฉ์ž ์ธ์ฆ(Authentication)

mini_world 2025. 3. 9. 00:50

 

๐Ÿ“Œ ๊ฐœ์š”

๐Ÿ“Ž ๊ณต์‹๋ฌธ์„œ ๋งํฌ

์ธ์ฆ์€ Client(์‚ฌ๋žŒ/๊ธฐ๊ธฐ/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ)์˜ ์‹ ์›์„ ๊ฒ€์ฆํ•˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค.
Keycloak์€ OAuth2.0 ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ/์ธ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , Keycloak์—์„œ์˜ ์ธ์ฆ์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

 

๐Ÿ“Œ ์ธ์ฆ ํ๋ฆ„ (Authentication flows) 

๐Ÿ“Ž ๊ณต์‹๋ฌธ์„œ ๋งํฌ

 

์ธ์ฆ ํ๋ฆ„์ด๋ž€?

์ธ์ฆ ํ๋ฆ„์ด๋ž€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ๋•Œ ๊ฑฐ์น˜๋Š” ์ธ์ฆ ๋‹จ๊ณ„์˜ ์ˆœ์„œ์™€ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค.
Keycloak์—์„œ๋Š” ์ธ์ฆ ํ๋ฆ„์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก Template ํ˜•ํƒœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Keycloak์—์„œ ์ธ์ฆ์„ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ• ์ง€ ๊ทธ ๋ฐฉ๋ฒ•๊ณผ ์ˆœ์„œ๋ฅผ Authentication Flow๋กœ ์ •์˜ํ•˜๊ณ ,
์ •์˜๋œ Authentication Flow๋ฅผ ํŠน์ • ์ธ์ฆ ์ƒํ™ฉ์— ์—ฐ๊ฒฐ(Bind)ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Keycloak์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ ํ๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ธ์ฆ Flow ํƒฌํ”Œ๋ฆฟ์„ ์ •์˜ํ•ด์„œ Bindํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Browser Flow: ์›น ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ ํ๋ฆ„ (์‚ฌ์šฉ์ž๋ช…/๋น„๋ฐ€๋ฒˆํ˜ธ, OTP, WebAuthn ๋“ฑ)
  • Client Authentication: ํด๋ผ์ด์–ธํŠธ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜) ์ธ์ฆ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ํ๋ฆ„
  • Direct Grant Flow: ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…์„ ์ง์ ‘ API๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹(REST API ์ธ์ฆ์šฉ)
  • Docker Authentication: Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ธ์ฆ์„ ์œ„ํ•œ ํŠน์ˆ˜ ํ๋ฆ„
  • First Broker Login: ์†Œ์…œ ๋กœ๊ทธ์ธ์ด๋‚˜ ์™ธ๋ถ€ IDP ์ตœ์ดˆ ์‚ฌ์šฉ ์‹œ ๊ณ„์ • ์—ฐ๊ฒฐ ๋ฐฉ์‹ ์ •์˜
  • Registration Flow: ์ƒˆ ์‚ฌ์šฉ์ž ๋“ฑ๋ก ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ๊ณ„์™€ ๊ฒ€์ฆ์„ ์ •์˜
  • Reset Credentials Flow: ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ๋ฆ„

"์žฌ์‚ฌ์šฉํ•œ๋‹ค"๋Š” ์˜๋ฏธ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์‹ค์Šต์„ ํ•ด๋ณด์ž.

 

[์ฐธ๊ณ ] OAuth2.0์˜ ๊ถŒํ•œ๋ถ€์—ฌ ์œ ํ˜•(Grant Types)๊ณผ ์–ด๋–ค ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€?

์ด์ „ OAuth2.0 ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์—์„œ ์ฃผ์š” ๊ถŒํ•œ ๋ถ€์—ฌ ์œ ํ˜•์— ๋Œ€ํ•ด ์‚ดํŽด ๋ดค์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ๊ณผ ์–ด๋–ค ๊ด€๊ณ„์ธ๊ฑด์ง€ ํ™•์ธํ•˜๋ณด์ž.

Keycloak์€ OAuth 2.0/OIDC ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ œํ’ˆ์ด๋ฉฐ, Grant Types๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Authentication Flow๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
์˜ˆ๋ฅผ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

  • Authorization Code Grant: Browser Flow๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ (์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ, ๊ถŒํ•œ ๋™์˜ ๋“ฑ์˜ ๋‹จ๊ณ„ ํฌํ•จ)
  • Client Credentials Grant: Client Authentication Flow๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ (ํด๋ผ์ด์–ธํŠธ ID/์‹œํฌ๋ฆฟ ๊ฒ€์ฆ)
  • Resource Owner Password Grant: Direct Grant Flow๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ (์‚ฌ์šฉ์ž ID/๋น„๋ฐ€๋ฒˆํ˜ธ ์ง์ ‘ ๊ฒ€์ฆ)
  • Device Authorization Grant: HTTP Challenge Flow๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ (๊ธฐ๊ธฐ ์ธ์ฆ ์ฝ”๋“œ ๊ฒ€์ฆ)

์ฆ‰, Grant Type์€ OAuth2.0์ˆ˜์ค€์—์„œ ์ •์˜๋œ ํ”„๋กœํ† ์ฝœ ์ˆ˜์ค€์˜ ๋ช…์„ธ์ด๊ณ , Keycloak์˜ Authentication Flow๋Š” ๊ตฌํ˜„์ฒด์ธ๊ฒƒ์ด๋‹ค.

 

์ธ์ฆ ํ๋ฆ„ (Authentication flows) ์‹ค์Šตํ•ด๋ณด๊ธฐ

์ด์ œ Keycloak์„ ์‹คํ–‰ํ•ด๋ณด์ž.
์ด์ „ ํฌ์ŠคํŒ…์—์„œ Docker๋กœ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ๊ณผ K8s(minikube) helm์œผ๋กœ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ ๋ชจ๋‘ ์‹ค์Šตํ•ด๋ณด์•˜๋Š”๋ฐ, ์‹คํ–‰ ๋ฐฉ๋ฒ• ํŽธํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜์ž.

# Docker๋กœ ์‹คํ–‰ํ•˜๊ธฐ
docker run -p 8080:8080 \
          -e KEYCLOAK_ADMIN=admin \
          -e KEYCLOAK_ADMIN_PASSWORD=admin \
          quay.io/keycloak/keycloak:24.0.4 \
          start-dev

# k8s(minikube) helm์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ
minikube start
helm install keycloak oci://registry-1.docker.io/bitnamicharts/keycloak \
  --set auth.adminUser=admin \
  --set auth.adminPassword=admin \
  --set postgresql.auth.username=bn_keycloak \
  --set postgresql.auth.password=password \
  --set postgresql.auth.database=keycloak \
  --set postgresql.auth.postgresPassword=password
kubectl port-forward svc/keycloak 8082:80 &

์ƒˆ๋กœ์šด Realm์„ ๋งŒ๋“ ๋‹ค. (my-Authentication)
๊ฐœ๋…๋งŒ ์ดํ•ดํ•  ์˜ˆ์ •์ด๋‹ˆ ๊ธฐ์กด์— ํ…Œ์ŠคํŠธ ํ•˜๋˜ Realm์„ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. 

 

์ด์ œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.
๋‚˜๋Š” user01 ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ Credentials์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž.
์™ผ์ชฝ ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ” Clients์—์„œ account home URL์„ ํด๋ฆญํ•˜๋ฉด ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ๊ณ„์ •๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜์–ด์žˆ๊ณ , ๊ณ„์ • ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ–ˆ์œผ๋‹ˆ, ์ธ์ฆ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ด๋ณด์ž.

์™ผ์ชฝ ๋„ค๋น„๊ฒŒ์ด์…˜๋ฐ”์—์„œ `Authentication`์„ ํด๋ฆญํ•˜์ž.
์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ธ์ฆ Flow๊ฐ€ ์ •์˜๋˜์–ด์žˆ๋‹ค.

 

์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š”๊ฒƒ์ด ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์ž. ๋จผ์ € Browser Flow๋ฅผ ๋ณต์ œํ•œ๋‹ค.

 

์ด์ œ ์ด ํผ์„ ์ข€ ๋ฐ”๊ฟ”๋ณด์ž.
AS-IS, TO-BE๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์ˆ˜์ •ํ•ด๋„ ์ข‹๊ณ , ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•ด๋„ ๋œ๋‹ค.
์•„๋ž˜์˜ ๊ฒฝ์šฐ์—๋Š” UsernameForm ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , OTP๋ฅผ Required๋กœ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๊ธˆ ์ˆ˜์ •ํ•œ Form์„ Browser flow๋กœ ๋ฐ”์ธ๋“œ ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ๋‹ค์‹œํ•œ๋ฒˆ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ์ธ์ฆ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด์ „์—๋Š” ๊ณ„์ • ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•œ๋ฒˆ์— ์ž…๋ ฅํ•œ ํ›„ ๋ฐ”๋กœ ๋กœ๊ทธ์ธ ๋˜์—ˆ๋Š”๋ฐ,
my-test-browser ํƒฌํ”Œ๋ฆฟ์œผ๋กœ ๋ณ€๊ฒฝํ•œ ํ›„ ID์ž…๋ ฅ์ฐฝ, PW์ž…๋ ฅ์ฐฝ, OTP์„ค์ •์ด ๊ฐ•์ œ๋œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๐Ÿ“Œ ์ธ์ฆ ์ •์ฑ… (Authentication Policies) 

์ธ์ฆ ์ •์ฑ…์€ ์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ •์˜์ด๋‹ค.
์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ์ธ์ฆํ๋ฆ„์ด "์–ด๋–ค ์ˆœ์„œ๋กœ ์ธ์ฆํ• ๊ฒƒ์ธ๊ฐ€"์— ๋Œ€ํ•œ ์ •์˜์˜€๋‹ค๋ฉด, 
์ธ์ฆ ์ •์ฑ…์€ "์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”๊ฐ€"๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ ์ด๋‹ค.

 

์ธ์ฆ ์ •์ฑ…(Policies) ์ข…๋ฅ˜

Keycloak์˜ Authentication์„ ์‚ดํŽด๋ณด๋ฉด ์ •๋ง ๋‹ค์–‘ํ•œ ์ธ์ฆ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Password policy: ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ธธ์ด, ๋ณต์žก์„ฑ, ํŠน์ˆ˜๋ฌธ์ž ์š”๊ตฌ์‚ฌํ•ญ ๋“ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ•๋„๋ฅผ ์ œ์–ดํ•˜๋Š” ์„ค์ •
  • OTP Policy: ์ผํšŒ์šฉ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฆฟ์ˆ˜, ์œ ํšจ๊ธฐ๊ฐ„ ๋“ฑ์„ ์„ค์ •
  • Webauthn Policy: ์ƒ์ฒด์ธ์ฆ ๋“ฑ FIDO2/WebAuthn ๊ธฐ๋ฐ˜ 2์ฐจ ์ธ์ฆ(MFA)์„ ์œ„ํ•œ ์„ค์ •
  • Webauthn Passwordless Policy: ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด WebAuthn๋งŒ์œผ๋กœ ์ธ์ฆํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ฑ… ์„ค์ •
  • CIBA Policy: ํด๋ผ์ด์–ธํŠธ ์ฃผ๋„ ๋ฐฑ์ฑ„๋„ ์ธ์ฆ์˜ ์‹œ๊ฐ„์ œํ•œ, ์ธ์ฆ๋ฐฉ์‹ ๋“ฑ์„ ์„ค์ •

ํŠนํžˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ •์ฑ…์€ KISAํ™ˆํŽ˜์ด์ง€์—๋งŒ ๊ฐ€๋„ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ์œผ๋‹ˆ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŒจ์Šคํ•œ๋‹ค.

 

 

 

[์ฐธ๊ณ ] WebAuthn(Web Authentication)์ด๋ž€?

๐Ÿ“Ž webauthn.guide

WebAuthn(Web Authentication)์€ ์›น ์ƒ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Œ€์‹  ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์˜ ๋กœ๊ทธ์ธ์„ ์ง€์›ํ•˜๋Š” ์ธ์ฆ ๊ธฐ์ˆ ์ด๋ฉฐ,
2019๋…„ 3์›”์— W3C(World Wide Web Consortium)์™€ FIDO ์–ผ๋ผ์ด์–ธ์Šค๊ฐ€ ๊ณต๋™์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ๊ณต์‹ ์›น ํ‘œ์ค€์œผ๋กœ ์Šน์ธ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

  • ์ž‘๋™ ๋ฐฉ์‹:
    • ์‚ฌ์ดํŠธ์— ๋“ฑ๋กํ•  ๋•Œ:
      1. ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋ก์„ ์‹œ์ž‘ํ•˜๋ฉด ์›น์‚ฌ์ดํŠธ(Keycloak)๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ธ์ฆ ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.
      2. ์ธ์ฆ๊ธฐ(Authenticator- iCloud ํ‚ค์ฒด์ธ, ํœด๋Œ€์ „ํ™”/ํƒœ๋ธ”๋ฆฟ์˜ ๋ณด์•ˆ ๋ชจ๋“ˆ, USB ๋ณด์•ˆํ‚ค ๋“ฑ)๊ฐ€ ๊ณ ์œ ํ•œ ์•”ํ˜ธํ™” ํ‚ค ์Œ์„ ์ƒ์„ฑํ•œ๋‹ค.
      2. ๊ฐœ์ธ ํ‚ค๋Š” ์ธ์ฆ๊ธฐ(Authenticator) ๋‚ด๋ถ€์— ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅ๋˜๊ณ , ๊ณต๊ฐœ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์›น์‚ฌ์ดํŠธ์— ์ „์†ก๋˜์–ด ์‚ฌ์šฉ์ž ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋œ๋‹ค.
    • ๋กœ๊ทธ์ธํ•  ๋•Œ:
      1. ์›น์‚ฌ์ดํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ธ์ฆ ์š”์ฒญ(challenge)์„ ์ „์†กํ•œ๋‹ค.
      2. ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์š”์ฒญ์„ ์ธ์ฆ๊ธฐ(Authenticator)๋กœ ์ „๋‹ฌํ•œ๋‹ค.
      3. ์‚ฌ์šฉ์ž๊ฐ€ ์ง€๋ฌธ, ์–ผ๊ตด ์ธ์‹, PIN ์ฝ”๋“œ ๋˜๋Š” ๋ฒ„ํŠผ ํ„ฐ์น˜ ๋“ฑ์œผ๋กœ ์ž์‹ ์„ ์ธ์ฆํ•˜๋ฉด, ์ธ์ฆ๊ธฐ๋Š” ์ €์žฅ๋œ ๊ฐœ์ธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ challenge์— ์„œ๋ช…ํ•˜๊ณ  ์ด ์„œ๋ช…๋œ ์‘๋‹ต์„ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์›น์‚ฌ์ดํŠธ๋กœ ์ „์†กํ•œ๋‹ค.
      4. ์›น์‚ฌ์ดํŠธ๋Š” ๋“ฑ๋ก๋œ ๊ณต๊ฐœ ํ‚ค๋กœ ์„œ๋ช…์„ ๊ฒ€์ฆํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ๋‹ค.
  • ์žฅ์ :
    • ํ”ผ์‹ฑ ๋ฐฉ์ง€: ๊ฐ€์งœ ์›น์‚ฌ์ดํŠธ๋Š” ์‹ค์ œ ์›น์‚ฌ์ดํŠธ์˜ ํ‚ค๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์—†์Œ
    • ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์Œ: ๊ธฐ์–ตํ•  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ•„์š” ์—†์Œ
    • ํŽธ๋ฆฌํ•จ: ์ง€๋ฌธ ํ•˜๋‚˜๋กœ ๋น ๋ฅด๊ฒŒ ๋กœ๊ทธ์ธ
    • ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ: ๋น„๋ฐ€๋ฒˆํ˜ธ๋ณด๋‹ค ํ›จ์”ฌ ํ•ดํ‚นํ•˜๊ธฐ ์–ด๋ ค์›€
728x90