[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-47์ผ์ฐจ] Spring Boot์—์„œ JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ตฌํ˜„
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
โœ… JWT ๊น€์ˆ˜ ์„ค์ • (JwtUtil.java)JwtUtil ํด๋ž˜์Šค๋Š” ๊ฐœ์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  JWT ํ† ํฐ์„ ์ƒ์„ฑ, ๊ฒ€์ฆ, ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์ฃผ์š” ๊ธฐ๋Šฅ:Access Token ๊ฐœ์‹œ (5๋ถ„)Refresh Token ๊ฐœ์‹œ (10๋ถ„)JWT ์œ ํšจ์„ฑ ๊ฒ€์ฆ๊ฒ€์ฆ ์ •๋ณด์—์„œ ๊ฐœ์ธ ์ •๋ณด ์ถ”์ถœpublic String generateAccessToken(Long userId, String email, UserRole userRole) { return BEARER_PREFIX + Jwts.builder() .setSubject(String.valueOf(userId)) .claim("email", email) ..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-46์ผ์ฐจ] ํ•„ํ„ฐ vs ์ธํ„ฐ์…‰ํ„ฐ vs AOP
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„ํ„ฐ(Filter), ์ธํ„ฐ์…‰ํ„ฐ(Interceptor), AOP(Aspect-Oriented Programming)๋Š” ๋ชจ๋‘ ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ธ ๊ฐ€์ง€๋Š” ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ์ ์šฉ ์‹œ์ , ๋™์ž‘ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ฐ์ž์˜ ์—ญํ• ๊ณผ ์ฐจ์ด๋ฅผ ์ •๋ฆฌํ•˜์—ฌ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. ํ•„ํ„ฐ(Filter)์—ญํ• ํ•„ํ„ฐ(Filter)๋Š” HTTP ์š”์ฒญ์ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ๋„๋‹ฌํ•˜๊ธฐ ์ „์— ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๊ธฐ ์ „์— ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.ํ•„ํ„ฐ๋Š” ์„œ๋ธ”๋ฆฟ API์˜ ์ผ๋ถ€๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ง์ ‘์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์‚ฌ์šฉ ์˜ˆ์‹œ์š”์ฒญ ๋กœ๊ทธ ๊ธฐ๋ก๋ณด์•ˆ ๊ฒ€์‚ฌ (์˜ˆ: ํ† ํฐ ๊ฒ€์ฆ)์บ์‹ฑ ์ฒ˜๋ฆฌ๋ฐ์ดํ„ฐ ์••์ถ•ํŠน์ง•์„œ๋ธ”..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-45์ผ์ฐจ] Spring ์‹ฌํ™” ์ฃผ์ฐจ ๊ฐœ์ธ ๊ณผ์ œ
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
Lv 1. ์ฝ”๋“œ ๊ฐœ์„  ํ•„์ˆ˜1. ์ฝ”๋“œ ๊ฐœ์„  ํ€ด์ฆˆ - Early Return[ ๋ฌธ์ œ์  ]- ์ด๋ฉ”์ผ์ด ์ค‘๋ณต์ผ ๊ฒฝ์šฐ passwordEncoder.encode() ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.- if ๋ฌธ์˜ ์œ„์น˜๋งŒ ์ ์ ˆํžˆ ๋ฐ”๊พธ์–ด ์ค€๋‹ค๋ฉด, ์—๋Ÿฌ๊ฐ€ ๋จผ์ € ๋ฆฌํ„ด๋˜๋ฉด์„œ ์•„๋ž˜์˜ ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์ด ํ•„์š”์—†์–ด์งˆ ๊ฒƒ์ด๋‹ค.[ ํ•ด๊ฒฐ ]@Transactionalpublic SignupResponse signup(SignupRequest signupRequest) { if (userRepository.existsByEmail(signupRequest.getEmail())) { throw new InvalidRequestException("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค."); } St..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-44์ผ์ฐจ] TestCode
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ž€?ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋กœ์ง์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€, ๋˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•ด ์ ์ ˆํžˆ ๋Œ€์‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค !๋ฒ„๊ทธ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ๋ฆฌํŒฉํ† ๋ง ์‹œ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๊นจ์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ์ฝ”๋“œ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋„ ์ƒ์Šน๋ฌธ์„œํ™” ์—ญํ•  (์–ด๋–ค ๋™์ž‘์ด ๊ธฐ๋Œ€๋˜๋Š”์ง€ ๋ช…์‹œ์ ์œผ๋กœ ๋ณด์—ฌ์คŒ)์„œ๋น„์Šค ํ…Œ์ŠคํŠธ๋ž€?Spring Boot์—์„œ ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ํ•ต์‹ฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” Service ํด๋ž˜์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๊ธฐ๋Œ€ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•ด์•ผํ•œ๋‹ค.์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ๋กœ์ง์ด ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•œ..
Lv 5. ์œ„ ์ œ์‹œ๋œ ๊ธฐ๋Šฅ ์ด์™ธ โ€˜๋‚ดโ€™๊ฐ€ ์ •์˜ํ•œ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๊ณผ์ •
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/๋ฌธ์ œํ’€์ด
1. [๋ฌธ์ œ ์ธ์‹ ๋ฐ ์ •์˜] 2. [ํ•ด๊ฒฐ ๋ฐฉ์•ˆ] 2-1. [์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •] 2-2. [ํ•ด๊ฒฐ ๊ณผ์ •] 3. [ํ•ด๊ฒฐ ์™„๋ฃŒ] 3-1. [ํšŒ๊ณ ] 3-2. [์ „ํ›„ ๋ฐ์ดํ„ฐ ๋น„๊ต]1๏ธโƒฃ ๋น„๋ฐ€๋ฒˆํ˜ธ Valid ์ˆ˜์ •1. [๋ฌธ์ œ ์ธ์‹ ๋ฐ ์ •์˜]๋ ˆ๋ฒจ 1 ์—์„œ Validation ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ธ๋ฐ, ํšŒ์›๊ฐ€์ž… ์‹œ์—๋Š” ์ ์šฉ๋˜๊ณ  ์žˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์‹œ์—๋งŒ Valid ๋ฅผ ์ ์šฉํ•ด์ฃผ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.ํšŒ์›๊ฐ€์ž… ์‹œ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์ด ์ ์šฉ๋˜์ง€ ์•Š์•˜๊ณ , ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์‹œ์—๋งŒ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์ด ์ ์šฉ๋˜๋Š” ๋ฌธ์ œ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.์ด๋กœ ์ธํ•ด, ํšŒ์›๊ฐ€์ž… ์‹œ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ์ œ์•ฝ์ด ์ ์šฉ๋˜์ง€ ์•Š์•„ ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ๋กœ์ง์„ ํšŒ์›๊ฐ€์ž…์—๋„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.2. [ํ•ด๊ฒฐ ๋ฐฉ์•ˆ..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-43์ผ์ฐจ] N+1 ๋ฌธ์ œ
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
1๏ธโƒฃ FetchType : Eager ์™€ LazyN+1 ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ• ๋ ค๋ฉด,๋จผ์ € Eager ์™€ Lazy ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผํ•œ๋‹ค."์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์–ธ์ œ ๊ฐ€์ ธ์˜ฌ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹, Fetch Type ์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค."์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ „๋ถ€๋‹ค ์กฐํšŒํ•  ๊ฑด์ง€? ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋‚˜์ค‘์— ์กฐํšŒํ•  ๊ฒƒ์ธ์ง€? ์ด๋ ‡๊ฒŒ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.1. Eager- Eager ๋ผ๋Š” ๊ฒƒ์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์ฆ‰์‹œ ์—ฐ๊ด€ ๊ฐ์ฒด๋„ ํ•จ๊ป˜ ๋กœ๋”ฉ ๋œ๋‹ค- ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋А๋ฆด ์ˆ˜ ์žˆ๋‹ค. (๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๊ฐ€์ ธ์˜ด)- ์ง„์งœ ํ•ญ์ƒ ๊ฐ™์ด ์“ฐ๋Š” ๊ด€๊ณ„์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.- ์ฝ”๋“œ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์—์„œ ๋น„๊ตํ•  ๋•Œ ๋ณด์—ฌ์ฃผ๊ฒ ๋‹ค.2. Lazy- ์—ฐ๊ด€ ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋กœ๋”ฉ๋œ๋‹ค. ํ•ด๋‹น ์—ฐ๊ด€ ๊ฐ์ฒด๋ฅผ get ๋“ฑ์„ ํ•  ๋•Œ ๋กœ๋”ฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค.- ์ฒ˜..
[๊ณผ์ œ] Spring ์‹ฌํ™” ์ฃผ์ฐจ ๊ฐœ์ธ ๊ณผ์ œ
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
Lv 1. ์ฝ”๋“œ ๊ฐœ์„  ํ•„์ˆ˜1. ์ฝ”๋“œ ๊ฐœ์„  ํ€ด์ฆˆ - Early Return[ ๋ฌธ์ œ์  ]- ์ด๋ฉ”์ผ์ด ์ค‘๋ณต์ผ ๊ฒฝ์šฐ passwordEncoder.encode() ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค.- if ๋ฌธ์˜ ์œ„์น˜๋งŒ ์ ์ ˆํžˆ ๋ฐ”๊พธ์–ด ์ค€๋‹ค๋ฉด, ์—๋Ÿฌ๊ฐ€ ๋จผ์ € ๋ฆฌํ„ด๋˜๋ฉด์„œ ์•„๋ž˜์˜ ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์ด ํ•„์š”์—†์–ด์งˆ ๊ฒƒ์ด๋‹ค.[ ํ•ด๊ฒฐ ]@Transactionalpublic SignupResponse signup(SignupRequest signupRequest) { if (userRepository.existsByEmail(signupRequest.getEmail())) { throw new InvalidRequestException("์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค."); } St..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-42์ผ์ฐจ] Persistence Context ์ดํ•ดํ•˜๊ธฐ
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
1. Persistence Context ๊ฐ€ ๋ญ์•ผ ?์ž๋ฐ”์˜ ์—”ํ‹ฐํ‹ฐ(Entity)๋ฅผ ๊ด€๋ฆฌ(๋ณด๊ด€)ํ•˜๋Š” JPA์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ด๋‹ค.์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์—์„œ, ๊ฐ์ฒด(Entity)๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” JPA์˜ ์ €์žฅ ๊ด€๋ฆฌ ๊ณ„์ธต์ด๋‹ค.์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ†ตํ•ด, ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  DB์™€์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋™๊ธฐํ™”ํ•œ๋‹ค.๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ์ €์žฅ์†Œ ์—ญํ• ์ธ ๊ฒƒ์ด๋‹ค.์—ฌ๊ธฐ์„œ, ํ•˜๋‚˜ ์˜๋ฌธ์ด ๋“ค ๊ฒƒ์ด๋‹ค.โ€œDB๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ ์ €์žฅ์†Œ์ธ๋ฐ, ์™œ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์‚ฌ์ด์— JPA๋‚˜ Persistence Context ๊ฐ™์€ ์ €์žฅ์†Œ๊ฐ€ ๋˜ ํ•„์š”ํ•ด?โ€ ๋‹ต์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.> ์ž๋ฐ”๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ์‹œ์Šคํ…œ์ด๋‹ค..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-41์ผ์ฐจ] ์˜ค๋ฒ„ํ—ค๋“œ๋ž€?
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
1. ์˜ค๋ฒ„ํ—ค๋“œ๋ž€ ?๊ณ„์†ํ•ด์„œ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ž์ฃผ ๋“ค๋ฆฌ๋Š” ๋ง์ด ์žˆ๋‹ค.๋ฐ”๋กœ " ์˜ค๋ฒ„ํ—ค๋“œ Overhead " ์ด๋‹ค.๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ž์› ์†Œ๋ชจ๋ฅผ ๋œปํ•œ๋‹ค.์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘์ ์ธ ์ผํ•˜๋Š” ๊ฒƒ ์™ธ์— ์ถ”๊ฐ€๋กœ ๋“œ๋Š” ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ, ์—ฐ์ƒ ๋“ฑ์˜ ๋น„์šฉ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ, ํ™•์žฅ์„ฑ, ์‘๋‹ต ์†๋„ ๋“ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ์˜ค๋ฒ„ํ—ค๋“œ ์ข…๋ฅ˜๋ฐฑ์—”๋“œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.1. ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œAPI ์š”์ฒญ/์‘๋‹ต, REST ํ†ต์‹ 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ฒ„ํ—ค๋“œ์ฟผ๋ฆฌ ๋น„ํšจ์œจ, ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ3. ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์‹คํŒจ, ๊ณผ๋„ํ•œ ๋กœ์ง4. ์Šค๋ ˆ๋“œ/๋™์‹œ์„ฑ ์˜ค๋ฒ„ํ—ค๋“œ..
[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„Spring-40์ผ์ฐจ] ๊ฐ์ฒด์ง€ํ–ฅ
ยท
๋ฐฑ์—”๋“œ ๋ถ€ํŠธ์บ ํ”„/TIL
โœ… ์บก์Аํ™”์บก์Аํ™” " Client ๊ฐ์ฒด๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ์˜์กดํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ˆจ๊ธฐ๊ณ  ์ถ”์ƒ์ ์ธ ๊ฒƒ๋งŒ ์˜์กดํ•˜๋„๋ก ํ•˜๋Š” ๋ชจ๋“  ๊ณผ์ • "Client ๊ฐ์ฒด๋ž€? ํ˜‘๋ ฅ์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฐ์ฒด์ด๋‹ค.1 ) ๊ตฌ์ฒด์ ์ธ ๊ฒƒ : ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒƒ | How ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ (์ธ์Šคํ„ด์Šค) > ๋‚ฎ์€ ๊ฒƒ-> ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๊ฒƒ์„ ๊ฒƒ์„ ์˜์กดํ–ˆ์„ ๋•Œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ > ๊ตฌ์ฒด์ ์ธ๊ฒƒ์— ์˜์กดํ•˜๋ฉด ํ•  ์ˆ˜๋ก ์šฐ๋ฆฌ๋Š” ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํ•จ. -> ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์€ ๊ฒƒ์€ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ ์˜์กด์„ฑ์ด ๋†’์•„์ง„๋‹ค๋Š” ๊ฒƒ. ๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ์˜ ์ „ํŒŒ๊ฐ€ ํด ๊ฒƒ์ž„.2) ์ถ”์ƒ์ ์ธ ๊ฒƒ : ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ๊ฒƒ | ๋ฉ”์„œ๋“œ ์ด๋ฆ„, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ˜ํ™˜๊ฐ’๋“ฑ What์— ๋Œ€ํ•œ ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ธ ์ถ”์ƒ์ ์ธ ๊ฒƒ > ๋†’์€ ๊ฒƒ โœ… ์บก์Аํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•1. ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์„ ..