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

DB ๋ฅผ Java ์•ฑ๊ณผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด JDBC ํƒ„์ƒ๐ŸŽ‰ JDBC(Java Database Connectivity) JDBC Driver๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ DB์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต JDBC Driver Manager๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— Connection(์—ฐ๊ฒฐ)์„ ์ƒ์„ฑํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  Statement(์ƒํƒœ)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์š”์ฒญํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ  ResultSet(๊ฒฐ๊ณผ ์…‹)์„ ์ƒ์„ฑํ•ด ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. โš ๏ธ ๊ผญ ์‚ฌ์šฉ ํ›„์—๋Š” close()๋ฅผ ํ˜ธ์ถœํ•ด ์ž์› ํ•ด์ œ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. โš ๏ธ JDBC ์˜ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋กœ QueryMapper ํƒ„์ƒ ๐ŸŽ‰ JDBC๋กœ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ–ˆ์„ ๋•Œ์˜ ๋ฌธ์ œ SQL ์ฟผ๋ฆฌ ์š”์ฒญ ์‹œ ์ค‘๋ณต ์ฝ”๋“œ ๋ฐœ์ƒ DB ๋ณ„ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๊ตฌ๋ถ„ ์—†์ด Checked ..
๋ณต์Šต๊ณผ์ œ ์™„? https://github.com/kimhyeyun/spring-challenge-assignment ์ฃผ์–ด์ง„ ์š”๊ตฌ์‚ฌํ•ญ๋“ค์„ ๋Œ€๋ถ€๋ถ„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ๋ชปํ•œ ๋ถ€๋ถ„์€ ๋”ฑํ•˜๋‚˜ (์ฑŒ๋ฆฐ์ง€ ๊ณผ์ œ) ๊ฒŒ์‹œ๊ธ€์ด ์‚ญ์ œ๋  ๋•Œ ์—ฐ๊ด€๋œ ๋Œ“๊ธ€๋„ ๊ฐ™์ด ์ง€์šฐ๋„๋ก ์Šค์ผ€์ค„๋Ÿฌ ์ฝ”๋“œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ด ๋ถ€๋ถ„์ธ๋ฐ, ์ดํ•ด๊ฐ€ ์ž˜๊ฐ€์ง€์•Š์•˜๋‹ค... ์Šค์ผ€์ค„๋Ÿฌ๋กœ ์—ฐ๊ด€๋œ ๋Œ“๊ธ€ ์‚ญ์ œ....? ํ—ค?? ๊ทธ๋ž˜๋„ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ์ž˜ํ–ˆ๋‹ค,.. s3 ์—ฐ๊ฒฐ๋„ ํ–ˆ๊ณ , ์ˆ˜์ •๋œ์ง€ 90์ผ์ด ์ง€๋‚œ ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ์ง€์šฐ๋Š” ์Šค์ผ€์ค„๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœ ๋ถ€๋ถ„๋„ ํ–ˆ๋‹ค. ๋‚˜๋Š” ๋งค์ผ ์ž์ •์— ๋งˆ์ง€๋ง‰ ์ˆ˜์ •์ผ๋กœ๋ถ€ํ„ฐ 60์ผ์ด ๋„˜์€ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ–ˆ๋‹ค. ๋ณดํ†ต 2๋‹ฌ ๋‹จ์œ„๋กœ ํœด๋จผ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋งŽ์ด ๋ดค์–ด์„œ ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์ˆ˜์ •์ผ๋กœ 2๋‹ฌ์ด๋ฉด ์ด๋ฏธ ์žŠํ˜€์กŒ๋‹ค๊ณ  ๋Š๊ปด์ ธ์„œ ใ…Žใ…Ž ๋‚ด์ผ๋ถ€ํ„ฐ๋Š” ์‹ฌํ™”๋ณต์Šต๊ณผ์ œ ใ„ฑใ„ฑ
๋ณต์Šต ๊ณผ์ œ ์ค‘ ๐Ÿ˜ญ (์ฑŒ๋ฆฐ์ง€ ๊ณผ์ œ) ํšŒ์› ๊ฐ€์ž… ์‹œ, ์ด๋ฉ”์ผ ํ˜น์€ SNS๋กœ ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ์ „๋‹ฌ ๋ฐ›๊ณ  5๋ถ„ ์ด๋‚ด์— ํ•ด๋‹น ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ๊ฒ€์ฆํ•ด์•ผ ํšŒ์› ๊ฐ€์ž…์— ์„ฑ๊ณตํ•˜๋„๋ก ํ•ด๋ณด๊ธฐ (redis TTL ํŠน์ง•์„ ์ข€ ๋” ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•จ.)์ด ๋ถ€๋ถ„์—์„œ ๋ง‰ํ˜”๋‹ค. ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ๋‚ด์ผ๋กœ ๋ฏธ๋ค˜๋‹ค. ๊ณ ๋ฏผ๋˜๋Š” ๋ถ€๋ถ„์ด view ๋‹จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์›๊ฐ€์ž… ์ด ์ฒ˜๋ฆฌ ์„œ๋น„์Šค ์ฝ”๋“œ ์ „์— ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฉ”์ผ ์ธ์ฆ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํšŒ์›๊ฐ€์ž…์ด ๋˜๋ฉด ์•ˆ๋œ๋‹ค. ์ด ๋ถ€๋ถ„์ด ๋ทฐ ๋‹จ์ด ์—†์œผ๋‹ˆ๊น, ์–ด๋–ป๊ฒŒ ๋กœ์ง์„ ์งœ์•ผํ•˜๋Š”์ง€ ๊ณ ๋ฏผ๊ณ ๋ฏผ ๐Ÿค” ํšŒ์› ๊ฐ€์ž… ์ค‘์— ๋ฉ”์ผ ์ธ์ฆ ๋กœ์ง์„ ๋„ฃ๋Š” ๊ฒƒ์ด ๋งž๋Š”๊ฐ€? ์•„๋‹ˆ๋ฉด, ๋”ฐ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์งœ๊ณ , ์ด ๊ณณ์— ๋„˜์–ด์˜ฌ ๋•Œ๋Š” ์ด๋ฏธ ๋ฉ”์ผ์ธ์ฆ์ด ์™„๋ฃŒ๋˜์–ด์žˆ์Œ์„ ํ™•์‹ ํ•˜๊ณ  ๊ฐ€์ž…ํ•ด์•ผํ•˜๋‚˜? ์•„๋‹ˆ๋ฉด request ๋‚˜ entity์— ๋ถˆ๋ฆฐ๊ฐ’์„ ๋„ฃ..
Spring Event ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ ์žฅ์  ๊ฐ€์žฅ ์ฃผ๋œ ์ด์œ ๋Š” ์„œ๋น„์Šค ๊ฐ„์˜ ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•จ ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๊ณ , ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•œ ๋’ค ํ‘ธ์‰ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ณ , ๋ฉ”์ผ์„ ์ „์†กํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๊ณ  ๊ฐ€์ • ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ์™€, ํ‘ธ์‰ฌ ๋ฉ”์„ธ์ง€ ๋ฐœ์†ก, ๋ฉ”์ผ ์ „์†ก ๊ธฐ๋Šฅ์ด ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค(OrderService, PushService, MailService)์— ๊ตฌํ˜„๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” OrderService์—์„œ ํ‘ธ์‰ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์ƒํ•˜๋Š” PushService์™€ ๋ฉ”์ผ ์ „์†ก์„ ํ•˜๋Š” MailService์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. @Service public class OrderService { private final PushS..
์ฑŒ๋ฆฐ์ง€๋ฐ˜ ๊ฐ•์˜๋ฅผ ๋‹ค์‹œ ๋“ค์œผ๋ฉด์„œ ๊ณต๋ถ€ !!๐Ÿ™‹‍โ™€๏ธ!! ์˜ค๋Š˜์€ S3์™€ EDA ์–ด๋Š์ •๋„~? AWS S3(Simple Storage Service)? ํŒŒ์ผ ์„œ๋ฒ„์˜ ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋น„์Šค ์ผ๋ฐ˜์ ์ธ ํŒŒ์ผ ์„œ๋ฒ„๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ์„œ ์žฅ๋น„๋ฅผ ์ฆ์„คํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•œ๋ฐ, S3๋Š” ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋Œ€์‹ ํ•ด์ค€๋‹ค. ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ์ ์ธ ๋ฌธใ„ด์ œ๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค. ๋˜, ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ŠคํŒ… ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠน์ง• ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•ด๋„ ์ด๋ฅผ ๊ฐ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์ ์ธ ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ˆ˜์˜ ์ œํ•œ์ด ์—†๋‹ค. ์ตœ์†Œ 1๋ฐ”์ดํŠธ์—์„œ ์ตœ๋Œ€ 5TB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์„œ๋น„์Šคํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒŒ์ผ์— ์ธ์ฆ์„ ๋ถ™์—ฌ์„œ ๋ฌด๋‹จ์œผ๋กœ ์—‘์„ธ์Šคํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค..
EDA(Event Driven Architecture)? ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ(๋ฐœํ–‰)ํ•˜๊ณ , ๋ฐœํ–‰๋œ ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ˆ˜์‹ ์ž๋Š” ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์˜ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์‚ฐ ์•„ํ‚คํ…์ฒ˜ ํ™˜๊ฒฝ์—์„œ ์ƒํ˜ธ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ์ฃผ๋กœ Message Broker(Kafka, RabbitMQ)์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ตฌ์„ฑ๋œ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ Event Generator(Publisher, Producer, Creater) ํ‘œ์ค€ํ™”๋œ ํ˜•์‹์˜ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ๋œ ์ด๋ฒคํŠธ๋Š” Event Channel๋กœ ์ „์†ก๋œ๋‹ค. Event Channel(Bus) Event Generator์—์„œ Event Processing Engine์œผ๋กœ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ ์ฆ‰, ์ด๋ฒคํŠธ๋ฅผ ํ•„์š”๋กœ ..
KEEP ๊ตณ์ด ๋ง์„ ํ•˜์ง€ ์•Š์•„๋„ ์ •ํ•ด์ง„ ๋ฒ”์œ„๊นŒ์ง€ ์•Œ์•„์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜์˜€๋‹ค. ์ด๋ฒˆํ”„๋กœ์ ํ‹€์—์„œ GIT์„ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋•Œ๋ณด๋‹ค ๋งŽ์ด์จ๋ด์„œ ๋งค์šฐ์ข‹์•˜๊ณ  ์‹ค๋ ฅ์žˆ๋Š” ํŒ€์›๋“ค ๋•๋ถ„์— ๋ฐฐ์›Œ๊ฐ„๊ฒŒ ๋งŽ๋‹ค. ์„ค๊ณ„๋‹จ๊ณ„์—์„œ ERD์™€ API๋ช…์„ธ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ํ•„์š”ํ•œ API๊ธฐ๋Šฅ๋“ค๊ณผ Entitiy์™€ ํ•ด๋‹น Entity๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฉด๋ฐ€ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ์‹ค ์„œ๋ฒ„ ๊ตฌ์ถ•๋‹จ๊ณ„์—์„œ ๋น ๋ฅด๊ฒŒ ๋ชฉํ‘œํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ํ• ์ˆ˜์žˆ๋˜ ์  ํŒ€์›๊ณผ์˜ ์›ํ™œํ•œ ์†Œํ†ต์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ง„ํ–‰๋„ ๋ฐ ๋ฌธ์ œ์  ๊ณต์œ ๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ PROBLEM ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ํ™”๋ฉด๊ณต์œ ๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ๋ฐฉํ•œ ๋…ผ์˜ @Valid๋ฅผ ์ด์šฉํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ๊ธ€๋กœ๋ฒŒ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์•„์ง ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•ด์„œ ํ•˜์ง€๋ชปํ–ˆ๋‹ค. ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ๋ฐฑ์˜คํ”ผ์Šค์˜ ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ์„ ๊นŠ๊ฒŒ ์ƒ๊ฐ ..
์˜ค๋Š˜๋กœ 4๋ฒˆ์งธ ํŒ€ํ”„๋กœ์ ํŠธ, ๋ฐฐ๋‹ฌ์•ฑ ๊ตฌํ˜„ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚ฌ๋‹ค. ์ฒ˜์Œ ๊ธฐํšํ–ˆ๋˜ ๊ธฐ๋Šฅ์ด ์ผ์ฐ ๋๋‚˜์„œ ์ค‘๊ฐ„์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ํ•˜๋‚˜์˜ ๊ฐ€๊ฒŒ์˜ ๋ฐฐ๋‹ฌ ์•ฑ์ด๋‹ค๊ฐ€, ์ดํ›„ ๊ฐ€๊ฒŒ ๋ณ„๋กœ ๋‚˜๋ˆ„๊ณ  ์ข‹์•„์š” ๊ธฐ๋Šฅ๊นŒ์ง€ ๊ตฌํ˜„ํ–ˆ๋‹ค. ํŒ€์›๋“ค๊ณผ ์†Œํ†ต๋„ ์ž˜๋๊ณ  ์ž˜๋งž์•„์„œ ์žฌ๋ฐŒ๊ฒŒ ์ง„ํ–‰ํ–ˆ๋‹ค.!! ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋“ค ์ด๊ฑฐ ํ•ด์ฃผ์„ธ์š” ํ•˜๋ฉด ๋š๋”ฑ๋š๋”ฑ ๊ณต์žฅ๋งˆ๋ƒฅ ์ฐ์–ด๋‚ด์…”์„œ ์ง„๋„๋„ ์ฐธ ๋น ๋ฅด๊ฒŒ ๋‚˜๊ฐ„๋“ฏ!!!!! ์“ธ๊ป˜ ์—†๋„ค์š”....ใ…Žใ…Ž ์•„! ์—ฌ๊ธฐ์„œ ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉํ•ด๋ณธ jwt, refreshtoken๊ณผ ๋‹ค๋ฅธ ํŒ€๋“ค์ด ์‚ฌ์šฉํ•˜์‹  ํ˜„์žฌ ์‚ฌ์šฉ์ž ์• ๋…ธํ…Œ์ด์…˜ ๊ตฌํ˜„๋“ฑ์„ ์ด์šฉํ•ด์„œ ๊ธฐ์กด์— ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์ง„ํ–‰ํ•ด์•ผ๊ฒ ๋‹ค. ๋งˆ๊ตฌ์žก์ด๋กœ ํ•˜์ง€๋ง๊ณ  ๋š๋”ฑ๋š๋”ฑ S.A ๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ ๋‹ค ์ž‘์„ฑํ•ด์•ผ์ง€~!
KIMHYEYUN
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)