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

Spring Boot18

Spring Data Cassandra๋กœ ScyllaDB์—์„œ ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ•˜๊ธฐ ScyllaDB๋Š” Cassandra์˜ csql๊ณผ ํ˜ธํ™˜๋˜๋„๋ก ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— Cassandra ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํ†ต์‹  ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Spring Data Cassandra๋ฅผ ํ†ตํ•ด ScyllaDB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.๊ฐœ๋…Cassandra๋Š” OFFSET ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ , LIMIT๊ณผ PagingState๋ฅผ ํ™œ์šฉํ•œ Cursor-based Pagination์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋•Œ Cursor ์—ญํ• ์„ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ PagingState๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Cassandra๋Š” ํ˜„์žฌ๊นŒ์ง€ ์ฝ์€ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋‹ด์€ PagingState๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ธด๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ PagingState๋ฅผ page size์™€ ํ•จ๊ป˜ ๋ณด๋‚ด ์ด์ „์— ์ฝ์€ ์œ„์น˜ ์ดํ›„๋ถ€ํ„ฐ ๋ฐ์ด.. 2025. 6. 21.
Spring Cacheable์˜ ๋™์ž‘ ์›๋ฆฌ Cacheable ์ด๋ž€Spring์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์บ์‹ฑ ์ „๋žต์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.๊ฐ ์บ์‹œ ๋ฒค๋”์‚ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” CacheManager๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ๋ฉด ๋‹ค์–‘ํ•œ ์บ์‹œ ์ €์žฅ์†Œ๋ฅผ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ๋จผ์ €, Spring Data Redis์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.implementation 'org.springframework.boot:spring-boot-starter-data-redis' ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด Configuration์— Redis์™€ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ RedisConnectionFactory์™€ RedisCacheManager์˜ ๋นˆ์„ ๋“ฑ๋กํ•œ๋‹ค.@Co.. 2024. 9. 22.
Spring Boot ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ•˜๊ธฐ (AWS ec2 + Nginx + Github self -hosted runner) ๋“ค์–ด๊ฐ€๋ฉฐ ์‹ค๋ฌด์— ์ ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ ๊ฐ„๋‹จํ•œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฐํฌ ๋ฐฉ์‹์€ Github Action์„ ์ด์šฉํ•ด ๋ธŒ๋žœ์น˜๊ฐ€ ํ‘ธ์‹œ๋˜๋ฉด ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ๋„์šฐ๋Š” ๋ฐฉ์‹์ผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋„์šฐ๋Š” ์‚ฌ์ด์— ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ์ค‘๋‹จ ์—†์ด ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Blue/Green ๋ฐฐํฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค. Blue/Green ๋ฐฐํฌ ๋ฐฉ์‹์€ ์˜›๋‚  ๋ฒ„์ „์œผ๋กœ ์‹คํ–‰์ค‘์ธ WAS๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น WAS๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค์ง€ ์•Š์€ ์ฑ„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ WAS๋ฅผ ๊ตฌ๋™์‹œํ‚จ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ๋™๋˜์—ˆ๋‹ค๋ฉด Nginx๊ฐ€ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ WAS๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ .. 2024. 3. 11.
6์žฅ: AWS ์„œ๋ฒ„ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ Table of Contents ํด๋ผ์šฐ๋“œ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ํด๋ผ์šฐ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„, ์Šคํ† ๋ฆฌ์ง€, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋„คํŠธ์›Œํฌ, ์†Œํ”„ํŠธ์›จ์–ด, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ์ปดํ“จํŒ… ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ํด๋ผ์šฐ๋“œ ํ˜•ํƒœ IaaS (Infrastructure as a Service) ๊ธฐ์กด ๋ฌผ๋ฆฌ ์žฅ๋น„๋ฅผ ๋ฏธ๋“ค์›จ์–ด์™€ ํ•จ๊ป˜ ๋ฌถ์–ด IT ์ธํ”„๋ผ๋ฅผ ๋Œ€์—ฌํ•ด์ฃผ๋Š” ์ถ”์ƒํ™” ์„œ๋น„์Šค AWS EC2, S3๋“ฑ์ด ํ•ด๋‹น๋จ PaaS (Platform as a Service) IaaS๋ฅผ ํ•œ๋ฒˆ ๋” ์ถ”์ƒํ™”ํ•˜์—ฌ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์ž๋™ํ™”๋œ ์„œ๋น„์Šค Beanstalk, Heroku๋“ฑ์ด ํ•ด๋‹น๋จ Saas (Software as a Service) ์†Œํ”„ํŠธ์›จ์–ด ์„œ๋น„์Šค ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ, ๋“œ๋ž๋ฐ•์Šค ๋“ฑ์ด ํ•ด๋‹น๋จ EC2 ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ธฐ AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ์„ฑ๋Šฅ, ์šฉ๋Ÿ‰ ๋“ฑ์„ ์œ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„ .. 2022. 6. 27.
3์žฅ: JPA๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค๋ฃจ๊ธฐ (2) Table of Contents API ๋งŒ๋“ค๊ธฐ API๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ ํ•„์š”ํ•œ ํด๋ž˜์Šค - Request ๋ฐ์ดํ„ฐ ๋ฐ›์„ Dto - API ์š”์ฒญ ๋ฐ›์„ Controller - ํŠธ๋žœ์žญ์…˜, ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ ๊ฐ„ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” Service (๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜์ง€๋Š” ์•Š์Œ) Spring ์›น ๊ณ„์ธต Web Layer - ์ปจํŠธ๋กค๋Ÿฌ์™€ JSP๋“ฑ์˜ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์˜์—ญ - Filter, ์ธํ„ฐ์…‰ํŠธ, ControllerAdvice ๋“ฑ ์™ธ๋ถ€ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์˜์—ญ Service Layer - @Service์— ์‚ฌ์šฉ๋˜๋Š” ์˜์—ญ - Controller์™€ Dao ์ค‘๊ฐ„์—์„œ ์‚ฌ์šฉ๋จ - @Transactional์ด ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•จ Repository Layer - ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ์˜์—ญ DTOs - Data Transfer O.. 2022. 6. 15.
3์žฅ: JPA๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‹ค๋ฃจ๊ธฐ (1) Table of Contents JPA JPA์™€ Spring Data JPA ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค. ORM vs. SQL Mapper - ORM์€ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ, ๋Œ€ํ‘œ์ ์ธ ๊ธฐ์ˆ ๋กœ๋Š” JPA๊ฐ€ ์žˆ์Œ - SQL Mapper๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ, ๋Œ€ํ‘œ์ ์ธ ๊ธฐ์ˆ ๋กœ๋Š” MyBatis๊ฐ€ ์žˆ์Œ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ง€ ์ดˆ์ ์„ ๋งž์ถ”์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์‹ฌ JPA๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ SQL์„ ์ƒ์„ฑํ•ด ์‹คํ–‰ํ•ด์ฃผ๋ฏ€๋กœ SQL์— ์ข…์†์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์•„๋„ ๋จ Spring Data JPA - JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค, ์ž๋ฐ” ํ‘œ์ค€ ๋ช…์„ธ์„œ์ด๋ฏ€๋กœ ๊ตฌํ˜„์ฒด๊ฐ€ ํ•„์š”ํ•จ. ๊ตฌํ˜„์ฒด๋กœ๋Š” .. 2022. 6. 15.