์ „์ฒด ๊ธ€

https://github.com/kimhyeyun/spring-master-personal-assignment ์™„๋ฃŒ...?๐Ÿค”? ใ…Ž ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ƒ๋žต... ๋‚ด๋ง˜๋Œ€๋กœ... ์•„๋‹ˆ๋‹ค ๋‚ด์ผ๋งˆ์ €ํ•ด์„œ ์‹œ๊ฐ„์•ˆ์— ์™„์„ฑํ•˜์ž ใ… ใ…  JQuery์— ์‹œ๊ฐ„์„ ๋งŽ์ด์”€ ํ•˜์ง€๋งŒ ํ•ด๋ƒˆ๋‹ค ๋‚˜๋Š” ํ•ด๋ƒˆ๋‹ค. ์“ธ๊ฒŒ์—†๋‹ค... ๋‚ด์ผ์€ ์—ด์‹ฌํžˆ ํ•ด์•ผ๊ฒ ๋‹ค.
JWT ํ† ํฐ ๊ฒ€์ฆ ์‹œ ๊ณ„์†๋œ ์—๋Ÿฌ ์™œ์ง€์™œ์ง€... ์™œ ์ž๊พธ ๋ชจ๋“  ๊ฒ€์ฆ์—์„œ Unsupported JWT token ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ......... ์ด์ „ ํ”Œ์ ์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๋Š”๋ฐ...... ํ˜น์‹œ๋‚˜ ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ์•ŒํŒŒ๋ฒณ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ชผ๊ฐœ์„œ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ parseClaimsJws() ์ด parseClaimsJwt()๋กœ ์ž˜๋ชป๋˜์–ด์žˆ์—ˆ๋‹ค. ์ž๋™ ์™„์„ฑ๊ธฐ๋Šฅ์˜ ํํ•ด... ์ฒ˜์Œ์— ํ† ํฐ์„ ์ƒ์„ฑํ•  ๋•Œ, parseClaimsJws() parseClaimsJws()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฑฐ ๋Œ€์‹ ์— parseClaimsJwt()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.์ด๋Š”, ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜์Œ์— ํ† ํฐ์„ ์ƒ์„ฑํ•  ๋•Œ signWith์„ ํ†ตํ•ด์„œ ์„œ๋ช…์„ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณตํ˜ธํ™” ์‹œ์—๋„ ์„œ๋ช…์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (Jw..
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์œผ๋กœ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜ ์ฆ‰, ์ด๋ฒคํŠธ๋ฅผ ํ•„์š”๋กœ ..
KIMHYEYUN
๐Ÿ’