๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ199

[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 9 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ Java 1๋ฌธ์ œ ํ’€์ด & ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ5๋ถ„ ๊ธฐ๋ก ๋ณด๋“œ ์„ธ์…˜ ๋“ฃ๊ธฐํ”„๋กœ์ ํŠธ ์ค‘๊ฐ„์ค‘๊ฐ„ ๊ธฐ๋ก์„ ํ•ด๋‘๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.๋‚˜์ค‘์— ๋ณด๊ณ  ์Šคํ† ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.S.A ์ž‘์„ฑ์™€์ด์–ด ํ”„๋ ˆ์ž„ ์ž‘์„ฑERD Diagram ์ž‘์„ฑAPI ๋ช…์„ธ์„œ ์ž‘์„ฑ ์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ๏ธ์˜ค๋Š˜๋ถ€ํ„ฐ ํŒ€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค.๋ฐฐ๋‹ฌ์•ฑ์„ ์ฐธ๊ณ ํ•ด์„œ API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ฃผ์ œ์˜€๋‹ค.๋จผ์ € ERD๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ์ž‘์„ฑํ–ˆ๋‹ค. ์™€์ด์–ดํ”„๋ ˆ์ž„๊ณผ ERD๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์ปค์ง„ ๋Š๋‚Œ์ด์—ˆ๋‹ค..๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ๋งก์€ ๋ถ€๋ถ„์„ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ..?๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ๋„ ์ž ์‹œ ๋ˆˆ์•ž์— ๋‹ฅ์นœ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ–ˆ๋‹ค.์˜คํ›„์—๋Š” 5๋ถ„ ๊ธฐ๋ก ๋ณด๋“œ ์„ธ์…˜์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋™์•ˆ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ ๊ฒƒ์ธ์ง€ ๊นจ๋‹ซ๋Š”.. 2025. 1. 7.
[ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java ] ๊ณผ์ผ ์žฅ์ˆ˜ ๋ฌธ์ œ ์„ค๋ช…https://school.programmers.co.kr/learn/courses/30/lessons/135808?language=java ํ”„๋กœ๊ทธ๋ž˜๋จธ์ŠคSW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„programmers.co.kr ๊ณผ์ผ ์žฅ์ˆ˜๊ฐ€ ์‚ฌ๊ณผ ์ƒ์ž๋ฅผ ํฌ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๊ณผ๋Š” ์ƒํƒœ์— ๋”ฐ๋ผ 1์ ๋ถ€ํ„ฐ k์ ๊นŒ์ง€์˜ ์ ์ˆ˜๋กœ ๋ถ„๋ฅ˜ํ•˜๋ฉฐ, k์ ์ด ์ตœ์ƒํ’ˆ์˜ ์‚ฌ๊ณผ์ด๊ณ  1์ ์ด ์ตœํ•˜ํ’ˆ์˜ ์‚ฌ๊ณผ์ž…๋‹ˆ๋‹ค. ์‚ฌ๊ณผ ํ•œ ์ƒ์ž์˜ ๊ฐ€๊ฒฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํ•œ ์ƒ์ž์— ์‚ฌ๊ณผ๋ฅผ m ๊ฐœ์”ฉ ๋‹ด์•„ ํฌ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ž์— ๋‹ด๊ธด ์‚ฌ๊ณผ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๊ฐ€ p (1 ≤ p ≤ k)์ ์ธ ๊ฒฝ์šฐ, ์‚ฌ๊ณผ ํ•œ ์ƒ์ž์˜ ๊ฐ€๊ฒฉ์€ p * m์ž…๋‹ˆ๋‹ค. ๊ณผ์ผ ์žฅ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์‚ฌ๊ณผ๋ฅผ ํŒ”์•˜์„ ๋•Œ, .. 2025. 1. 7.
[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 8 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ๊ฐœ์ธ ๊ณผ์ œ ๋ ˆ๋ฒจ 5 - 2๊นŒ์ง€ ๋งˆ๋ฌด๋ฆฌ ํ›„ ์ œ์ถœ๊ณผ์ œ ํ•ด์„ค ์„ธ์…˜ ๋“ฃ๊ธฐ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐ์ˆ˜๊ฐ•์ƒ ๋ฏธ๋‹ˆ ์„ธ์…˜ ๋“ฃ๊ธฐTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ - AOPAOP: ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.ํŠน์ •ํ•œ ๋„๋ฉ”์ธ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ๋‚ด๊ฐ€ ์–ด๋–ค ์‹œ์ ์— ์ผ๊ด„์ ์œผ๋กœ ๋ชจ๋‘ ์ ์šฉํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ’์— ๋Œ€ํ•ด์„œ ์ถœ๋ ฅํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ → ๋ชจ๋‘๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ → AOP๋กœ ๋งŒ๋“ค์–ด์„œ ์ถ”๊ฐ€ํ•˜๋ฉด ํŽธํ•˜๋‹ค.๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์—ˆ๋Š”์ง€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ถœ๋ ฅํ•ด ์ฃผ๋Š” ๋กœ๊ทธ๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ ธ๋Š”์ง€ ์„ฑ๋Šฅ์„ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๊ถŒํ•œ ๊ฒ€์‚ฌํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๊ฒƒ์„? ์–ธ์ œ? ์–ด๋–ป๊ฒŒ? → ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.๋Œ€์ƒ ์ง€์ • → PointCut์„.. 2025. 1. 6.
[ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] ์ˆ™๋ จ CRUD ๊ธฐ๋ฐ˜์˜ ํ…Œ์ŠคํŠธ, ๊ฐœ์„  ๊ณผ์ œ ๊ณผ์ œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋ฌธ์ œ ์ƒํ™ฉFilter์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ GlobalExceptionHandler๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, Postman์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ 500 Internal Error๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.๋ฌธ์ œ ์›์ธ@RestControllerAdvice๋Š” Filter์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.Filter๋Š” Controller๋กœ ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, @RestController๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ์ด๋‹ค.์ด๋กœ ์ธํ•ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  500 Internal Error๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค.ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•Filter ๋‚ด์—์„œ ์ง์ ‘ HTTP ์ƒํƒœ ์ฝ”๋“œ์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์„ค์ •ํ•ด์„œ ์‘๋‹ตํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.์ˆ˜์ •๋œ ์ฝ”๋“œif (session == null || session.getAttribute("loginM.. 2025. 1. 6.
[ Spring ] ํŠธ๋žœ์žญ์…˜.. ๋‹ค๊ฐ€๊ฐˆ์ˆ˜๋ก ๋ฉ€๊ฒŒ ๋Š๊ปด์ง€๋Š” ์นœ๊ตฌ ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๊ณผ์—ฐ ๋ฌด์—‡์ผ๊นŒ??ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์ค€๋‹ค!์ด๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ACID ์†์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค! (๋ฉด์ ‘์—์„œ ๋‚˜์˜ค๋Š” ํ•„์ˆ˜ ์งˆ๋ฌธ์ด๋‹ค!!)์›์ž์„ฑ (Atomicity)์ž‘์—…์ด ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๋ฅผ ๋กค๋ฐฑํ•œ๋‹ค.ex) ์†ก๊ธˆ ์‹œ, ๋ˆ์ด A ๊ณ„์ขŒ์—์„œ ๋น ์กŒ์ง€๋งŒ B ๊ณ„์ขŒ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์œผ๋ฉด ๋กค๋ฐฑํ•œ๋‹ค.์ผ๊ด€์„ฑ (Consistency)์ž‘์—… ์ „ํ›„์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๊ฐ€ ํ•ญ์ƒ ์œ ํšจํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.๊ฒฉ๋ฆฌ์„ฑ (Isolation)ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.์˜ต์…˜์— ๋”ฐ๋ผ์„œ ์„ค์ •์„ ์ด๋ฆฌ์ €๋ฆฌ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.์ง€์†์„ฑ (Durability)ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณตํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋œ๋‹ค.โ–ถ MySQL์„ ๋งŒ๋“ค ๋•Œ ์ด ์›์น™์„ ๋ชจ๋‘ ๊ณ ์ˆ˜ํ•ด์„œ ๋งŒ๋“ค์–ด ๋†จ๋‹ค. ์•ž์œผ.. 2025. 1. 5.
[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 5 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ๊ฐœ์ธ ๊ณผ์ œ 3๋‹จ๊ณ„ ๋๋‚ด๊ธฐ๊ฐœ์ธ ๊ณผ์ œ 4๋‹จ๊ณ„ ๋„์ „์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ํŠธ๋žœ์žญ์…˜ ์„ธ์…˜ ๋ณต์ŠตTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ Lv 3. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ์„ ๋จผ์ € ์ฃผ์–ด์ง„ GitHub Repository๋กœ ๋“ค์–ด๊ฐ€์„œ Fork ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ ๋‚ด Repository๋กœ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค.1. ์ฝ”๋“œ ๊ฐœ์„  ํ€ด์ฆˆ: Early Return์กฐ๊ฑด์— ๋งž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ฆ‰์‹œ ๋ฆฌํ„ดํ•ด์„œ, ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์˜ ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.AuthService ํด๋ž˜์Šค ์•ˆ์— ์žˆ๋Š” signup( ) ๋ฉ”์„œ๋“œ ๋‚ด์˜ ์ฝ”๋“œ ์ผ๋ถ€์˜ ์œ„์น˜๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์„œ passwordEncoder์˜ encode() ๋™์ž‘์ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ผ์–ด๋‚˜์ง€ ์•Š๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.if (userRepository.existsByEmail(signupRequest... 2025. 1. 3.