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

Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„55

[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 3 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ์‹ฌํ™” Spring 3์ฃผ์ฐจ ๊ฐ•์˜ ๋“ฃ๊ธฐTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ์‹ฌํ™” Spring ๊ฐ•์˜ ๋“ฃ๊ธฐ@PostConstruct, @PreDestroy annotation์€ ํ‘œ์ค€ annotation์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.→ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ดˆ๊ธฐํ™”, ์ข…๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” @Bean์˜ initMethod, destroyMethod๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.Bean ScopeSpring ์ปจํ…Œ์ด๋„ˆ์—์„œ Bean์ด ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.@ExceptionHandler annotation์ด ์„ ์–ธ๋˜์ง€ ์•Š์€ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.Annotation์šฉ๋„๋ฐ˜ํ™˜ ํ˜•์‹์˜ˆ์‹œ ์ฒ˜๋ฆฌ ๋ฒ”์œ„@ExceptionHandlerํŠน์ • ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ.. 2025. 1. 1.
[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 2 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ์‹ฌํ™” Spring 1์ฃผ์ฐจ ๊ฐ•์˜ ๋“ฃ๊ธฐ → ์–ด์ œ ๋“ค์—ˆ๋˜ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ด์–ด์„œ ์ˆ˜๊ฐ•์‹ฌํ™” Spring 2์ฃผ์ฐจ ๊ฐ•์˜ ๋“ฃ๊ธฐํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ด๋ก  ์„ธ์…˜ ๋“ฃ๊ธฐ์—ฐ๋ง ๊ธฐ๋… ๋ผ๋””์˜ค ๐ŸคฉTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ์‹ฌํ™” Spring ๊ฐ•์˜ ๋“ฃ๊ธฐProxy ๊ฐ์ฒด๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋„์›€์„ ๋ฐ›์•„์•ผ๋งŒ ์‹ค์ œ Entity์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.LazyInitializationException → ์‹ค์ œ JPA ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋งˆ์ฃผ์น˜๋Š” Exception์˜์†์„ฑ ์ „์ด๋Š” ์ง€์—ฐ ๋กœ๋”ฉ, ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋‹ค.๊ฐ•์˜๋ฅผ ๋“ฃ๋‹ค๊ฐ€ ๊ถ๊ธˆํ–ˆ๋˜ ์ FetchType.LAZY์˜ ๊ฐœ๋… ์žก๊ธฐFetchType.LAZY: ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ œ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ด€๋ จ๋œ Entity๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์กฐํšŒ.. 2024. 12. 31.
[ TIL ] ์ฃผํŠน๊ธฐ ์‹ฌํ™”_Day 1 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ํ”„๋กœ์ ํŠธ ๋ฐœ์ œ ๋“ฃ๊ธฐ์‹ฌํ™” Spring 1์ฃผ์ฐจ ๊ฐ•์˜ ๋“ฃ๊ธฐ์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐํŠœํ„ฐ๋‹˜์˜ ๋ฏธ๋‹ˆ ์„ธ์…˜(์ด๋ ฅ์„œ ํŠน๊ฐ•) ๋“ฃ๊ธฐTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ์‹ฌํ™” Spring 1์ฃผ์ฐจ ๊ฐ•์˜HttpMessageConverter → ์šฐ์„  ์ˆœ์œ„์™€ ๋™์ž‘ ์ˆœ์„œArgumentResolverRequestMappingHandlerAdapterReturnValueHandlerTypeConverterํƒ€์ž… ๋ณ€ํ™˜Converter Interface์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜ - ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜JWT & ์„ธ์…˜์ด๋ ฅ์„œ ๋ฏธ๋‹ˆ ์„ธ์…˜๋‚จ๋“ค๊ณผ๋Š” ๋‹ค๋ฅธ ๋ชจ์Šต์„ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค. ์ฐจ๋ณ„์ ์„ ๋‘ฌ์•ผ ํ•œ๋‹ค.ํ‰๊ฐ€์ž์˜ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.์• ๋งคํ•œ ์‚ฌ๋žŒ์€ ๋ฝ‘์ง€ ์•Š๋Š”๋‹ค.๋ฌด์–ธ๊ฐ€๋ฅผ ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทผ๊ฑฐ๊ฐ€ ํ•จ๊ป˜ ๋˜์–ด์•ผ ํ•œ๋‹ค.๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ์ ๋Š” ๊ฒƒ๋„ ๊ต‰.. 2024. 12. 30.
๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ_Day 5 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง• ์กฐํšŒ ๊ธฐ๋Šฅ ํŒ€์›๋“ค๊ณผ ์ƒ์„ฑ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ๋ณ‘ํ•ฉ ์ถฉ๋Œ ๊ณผ์ • ํ•ด๊ฒฐ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ์„œ๋ฒ„ ๋ฐฐํฌ(๊ตฌ๊ฒฝ)์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜ ๋ฒ ์ด์ง๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ (๋‰ด์Šคํ”ผ๋“œ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ)ํ”ผ๋“œ ํŽ˜์ด์ง• ์กฐํšŒ ๊ธฐ๋Šฅ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑํŒ€์›๋ถ„์ด ํ™”๋ฉด ๊ณต์œ  ํ•ด์ฃผ์‹œ๊ณ  ํ•จ๊ป˜ ํ”ผ๋“œ ์ „์ฒด๋ฅผ ํŽ˜์ด์ง• ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.์ฒ˜์Œ ๋ณด๋Š” pageable๊ณผ page ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง• ์กฐํšŒ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.GitHub ๋ณ‘ํ•ฉ ๊ณผ์ •์—์„œ์˜ ์ถฉ๋Œ ๋ฐœ์ƒ๋Œ“๊ธ€ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ 2๋ช…์ด์„œ ๋‹ด๋‹นํ–ˆ๋Š”๋ฐ ์ƒ์„ฑ, ์กฐํšŒ / ์ˆ˜์ •, ์‚ญ์ œ ๋‹ด๋‹นํ•ด์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.๊ฐ์ž ๊ตฌํ˜„์— ์„ฑ๊ณตํ•˜๊ณ  GitHub์— Pull Request, fetch, rebaseํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณ‘ํ•ฉ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.In.. 2024. 12. 26.
๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ_Day 7 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ์ˆ˜์ •์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜ ๋ฒ ์ด์ง๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐ์ˆ˜์ค€๋ณ„ ํ•™์Šต๋ฐ˜ ์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜ ๋“ฃ๊ธฐ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…(GitHub ๊ด€๋ จ) ์ž‘์„ฑTIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ (๋‰ด์Šคํ”ผ๋“œ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ)ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ ์ˆ˜์ •ํŒ”๋กœ์ž‰๋งŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ด์„œ ํŒ”๋กœ์›Œ ์ „์ฒด ์กฐํšŒ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.ํŒ”๋กœ์šฐ๋ฅผ ๊ณ„์† ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ด์„œ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.๋ฒ ์ด์ง๋ฐ˜ ์„ธ์…˜์ธ์ฆ์ธ๊ฐ€ํ™œ์šฉ(ํ† ํฐ์ธ์ฆ๋ฐฉ์‹: JWT)์Šคํƒ ๋‹ค๋“œ๋ฐ˜ ์„ธ์…˜์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ๊ฒƒ ์˜ค๋Š˜ ํ•˜๋ฃจ ์ •๋ฆฌ โœ๏ธ์˜ค๋Š˜ ํ•˜๋ฃจ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ์˜ ๋งˆ๋ฌด๋ฆฌ...? ๋‹จ๊ณ„์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋‚ด์ผ ์˜ˆ์ •๋˜์–ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋ฐœํ‘œ๋ฅผ ์œ„ํ•ด ๊ธฐ๋Šฅ์„ ์ ๊ฒ€ํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.๋‚ด๊ฐ€ ๋งก์•˜๋˜ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ์—์„œ ํŒ”๋กœ์ž‰์„ ์กฐํšŒํ•˜๋Š” .. 2024. 12. 26.
๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ_Day 4 ์˜ค๋Š˜ ํ•œ ๊ณต๋ถ€ ๐Ÿง ๊ธฐ์ดˆํ”„๋กœ์ ํŠธ ํŒ”๋กœ์šฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ํŒ”๋กœ์šฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ ํŠน์ • ๋ฉค๋ฒ„์˜ ํŒ”๋กœ์šฐ ์ „์ฒด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„TIL ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ์˜ค๋Š˜ ์–ป์€ ๋‚ด์šฉ ์ •๋ฆฌ โœ๏ธ ๊ธฐ์ดˆ ํ”„๋กœ์ ํŠธ (๋‰ด์Šคํ”ผ๋“œ ๋งŒ๋“ค๊ธฐ ํ”„๋กœ์ ํŠธ)ํŒ”๋กœ์šฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„Follow Entity ์ƒ์„ฑ ํ›„ ํŒ”๋กœ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.member_id(PathVariable)์™€ following_id)๋ฅผ ๋ฐ›์•„ ํŒ”๋กœ์šฐ ๊ด€๊ณ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ์„ฑ๊ณตํ–ˆ๋‹ค.ํŒ”๋กœ์šฐ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„member_id(PathVariable)์™€ follow_id(Pathvariable)๋ฅผ ๋ฐ›์•„ ํŒ”๋กœ์šฐ ๊ด€๊ณ„๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ์„ฑ๊ณตํ–ˆ๋‹ค.ํŠน์ • ๋ฉค๋ฒ„์˜ ํŒ”๋กœ์šฐ ์ „์ฒด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„member_id(PathVariable)๋ฅผ ๋ฐ›์•„ ํŒ”๋กœ์ž‰ ๋ฉค๋ฒ„๋ฅผ ์ „์ฒด .. 2024. 12. 23.