SPRING 6

[Spring] Spring Cache

์บ์‹œ๋Š” API์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ์บ์‹œ๋Š” ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, JPA, MySQL์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋Œ€ํ‘œ์ ์œผ๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ 1์ฐจ ์บ์‹œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๊ณต์œ ๋˜๋Š” 2์ฐจ ์บ์‹œ, InnoDB์˜ ๋ฒ„ํผํ’€, ์šด์˜์ฒด์ œ์˜ ์บ์‹œ, ๊ทธ๋ฆฌ๊ณ  Redis, memcached ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์›๊ฒฉ ์บ์‹œ๊ฐ€ ์žˆ๋‹ค. ์Šคํ”„๋ง์€ ์ด๋Ÿฌํ•œ ์บ์‹œ๋“ค ์ค‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ์บ์‹œ ์†”๋ฃจ์…˜์˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ํŠน์ • ์บ์‹œ ๊ธฐ์ˆ ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์บ์‹œ ๊ตฌํ˜„์ฒด๋ฅผ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.   โ˜‘๏ธ ์Šคํ”„๋ง ์บ์‹œ์Šคํ”„๋ง์€ ๋กœ์ปฌ ์บ์‹œ์™€ ์›๊ฒฉ ์บ์‹œ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ์ปฌ ์บ์‹œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์˜ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜..

SPRING 2024.10.18

[Spring] DB ์ปค๋„ฅ์…˜ ์ ์œ  ์‹œ๊ฐ„ ๋‹จ์ถ•ํ•˜๊ธฐ

๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ๋งŽ์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค. ํŠนํžˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ DB๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์ปค๋„ฅ์…˜ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๊ณค ํ•œ๋‹ค. ๋˜ํ•œ ์ตœ๊ทผ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ๋– ์˜ค๋ฅด๋Š” Virtual Thread๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์†Œ์Šค์ธ DBCP๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฌผ๋ฆฌ์  ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ ๋‚˜๊ฐ€์•ผํ•œ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ ์œ  ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ํŠธ๋žœ์žญ์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์˜ˆ์ •์ด๋‹ค.   โ›๏ธ ์‚ฝ์งˆ ๊ณผ์ • ํŠธ๋žœ์žญ์…˜ ํญ๋“ ์ง€์ ๊ณผ ๊ด€๋ จ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ํ™•์ธํ•ด..

SPRING 2024.10.08

[Spring] Private ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธ์™€ ๋น„์ง€๋‹ˆ์Šค ๊ณ„์ธต ๋„์ž…

์ด ๊ธ€์€ ๊ธฐ์กด Controller, Service, Repository๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋˜ 3 ๊ณ„์ธต ๊ตฌ์กฐ์— Business ๊ณ„์ธต์„ ๋„์ž…ํ•˜๊ฒŒ ๋œ ๊ณผ์ •๊ณผ ๊ฐœ๋…, ๋ณธ์ธ์ด ์ƒ๊ฐํ•˜๋Š” ์žฅ์ ์— ๋Œ€ํ•ด ๊ธฐ์ˆ ๋˜์–ด ์žˆ๋‹ค.  โ˜‘๏ธ ๋„์ž… ๊ณผ์ • ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ•˜๊ณ ์ž ์ด์— ๋Œ€ํ•ด ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ๊ณต๋ถ€ ์ค‘ Private ๋ฉ”์„œ๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฅผ ์ง€์–‘ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋‹ค๋ฃฌ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ๋จผ์ € ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์€ ๋Ÿฐํƒ€์ž„์— ๋™์ž‘ํ•˜๋Š” ๊ธฐ์ˆ ๋กœ, ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋™์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  Private ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธ์—๋Š” 2๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ๋‹ค. 1๏ธโƒฃ P..

SPRING 2024.03.10

[Spring] RequestBody ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ๊ธฐ

์ง€๋‚œ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋ฒ„ ์šด์˜ ์ค‘ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์—๋„ ์ด ์‚ฌ์‹ค์„ ๋ชจ๋ฅธ์ฑ„ ๋ฐฉ์น˜ํ•˜๊ฒŒ ๋˜๋Š” ์ผ์ด ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•ด ์ง์ ‘ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฒˆ๊ฑฐ๋Ÿฌ์›€์ด ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์Šฌ๋ž™์„ ์—ฐ๋™ํ–ˆ๊ณ  AOP์—์„œ RequestBody์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์—๋Ÿฌ ๋‚ด์šฉ์„ ํŒŒ์‹ฑํ•œ ํ›„ ์Šฌ๋ž™์œผ๋กœ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ RequestBody๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ์–ด์•ผ๋งŒ ํ–ˆ๊ณ  ๊ทธ ๋ฐฉ๋ฒ•์„ ์ด ๊ธ€์— ์จ๋ณด๊ณ ์ž ํ•œ๋‹ค.    โ˜‘๏ธ  HttpServletRequest Body HttpServletRequest์˜ Body ๋ฐ์ดํ„ฐ๋Š” getInputStream() ๋˜๋Š” getReader()๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์ŠคํŠธ..

SPRING 2024.03.06

[Spring] Spring Event๋ฅผ ์ด์šฉํ•œ ๋ฆฌํŒฉํ„ฐ๋ง

์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋ฉด ๋ฉ”์„œ๋“œ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์™ธ์— ์•Œ๋ฆผ ์ „์†ก, ๋กœ๊ทธ ์ €์žฅ๊ณผ ๊ฐ™์€ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ๋กœ์ง์— ์ถ”๊ฐ€ํ•ด์•ผํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋‹ค๋ถ„ํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š์€ ์ฑ„ ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ด๋Š” ์˜์กด์„ฑ ์ฆ๊ฐ€, ๊ฐ€๋…์„ฑ ๊ฐ์†Œ, ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐ์†Œ ๋“ฑ ๋งŽ์€ ๋‹จ์ ์„ ๋ถˆ๋Ÿฌ ์ผ์œผํ‚ฌ ์ˆ˜์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํžŒ ๋ฐฉ๋ฒ•์—๋Š” Event, Aop, Intercepter ๊ฐ€ ์žˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Event ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ๊ณผ ๊ฐ„๋‹จํ•œ ๋™์ž‘ ๊ณผ์ •์„ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.    โ˜‘๏ธ Event ์‚ฌ์šฉ ๋ฐฐ๊ฒฝ๊ณผ ๊ฐ ๋ฐฉ๋ฒ•์˜ ์žฅ๋‹จ์   ํ˜„์žฌ ๋ฆฌํŒฉํ„ฐ๋ง ์ค‘์ธ ์„œ๋น„์Šค์—๋Š” ๋กœ๊น…, ์•Œ๋ฆผ ์ „์†ก, ๊ฐ ๋ฉ”์„œ๋“œ ๋กœ์ง์— ๋”ฐ๋ฅธ ํ›„ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ ์œ ์ €๊ฐ€ ํ•˜๋‚˜์˜ ํŒ€์—๋งŒ ์†ํ•  ..

SPRING 2024.03.02

์„œ๋ฒ„ ๋กœ๊ทธ ๊ด€๋ฆฌ

โ˜‘๏ธ ์Šคํ”„๋ง ๋กœ๊ทธ์Šคํ”„๋ง์—์„œ๋Š” ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ application.properties ์™€ logback-spring.xml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์„ค์ •๋ฐ–์— ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋ณ„, ์ผ์ž๋ณ„๊ณผ ๊ฐ™์ด ์ž์„ธํ•œ ์„ค์ •์„ ์œ„ํ•ด์„œ๋Š” logback-spring.xml์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.LogbackLogback์€ log4j๋ฅผ ๋ฐœ์ „์‹œํ‚จ Logging Framework๋กœ Spring Boot๋Š” spring-boot-starter-web -> spring-boot-starter-logging์— logback ๊ตฌํ˜„์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.๊ทธ๋ž˜์„œ ์˜์กด์„ฑ์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ logback์ด ๊ธฐ๋ณธ ๋กœ๊น… ๊ตฌํ˜„์ฒด๋กœ ์ž๋™ ์ ์šฉ๋œ๋‹ค.์ด๋ ‡๊ฒŒ ์ ์šฉ๋œ ๋กœ๊น… ๊ตฌํ˜„์ฒด๋Š” SLF4J(Simpl..

SPRING 2024.02.27