๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (72)

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

5์žฅ ๋ชฉ๊ณผ ํ…Œ์ŠคํŠธ ์ทจ์•ฝ์„ฑ

๋ชฉ๊ณผ ์Šคํ… ๊ตฌ๋ถ„ํ…Œ์ŠคํŠธ ๋Œ€์—ญ ์œ ํ˜•๋ชฉ (๋ชฉ, ์ŠคํŒŒ์ด)์™ธ๋ถ€ ๋กœ ๋‚˜๊ฐ€๋Š” ์ƒํ˜ธ์ž‘์šฉ์„ ๋ชจ๋ฐฉํ•˜๊ณ  ๊ฒ€์‚ฌ์Šคํ… (์Šคํ…, ๋”๋ฏธ, ํŽ˜์ดํฌ)๋‚ด๋ถ€ ๋กœ ๋“ค์–ด์˜ค๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ๋ชจ๋ฐฉโญ๏ธ ๋ชฉ์€ SUT ์™€ ๊ด€๋ จ ์˜์กด์„ฑ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋ชจ๋ฐฉํ•˜๊ณ  ๊ฒ€์‚ฌ. BUT! ์Šคํ…์€ ๋ชจ๋ฐฉ๋งŒ ํ•จ์Šคํ…์œผ๋กœ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ฒ€์ฆํ•˜์ง€ ๋ง ๊ฒƒ์Šคํ…์€ ์™ธ๋ถ€๋กœ์˜ ํ˜ธ์ถœ์ด ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ๊ณผ์ž‰๋ช…์„ธ๊ฐ€ ํ”ํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ๊ณผ์ž‰๋ช…์„ธ : ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹Œ ์‚ฌํ•ญ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ด€ํ–‰  CQS (๋ช…๋ น ์กฐํšŒ ๋ถ„๋ฆฌ)์™€ ๋ชฉ & ์Šคํ…๋ช…๋ น : ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์ดˆ๋ž˜ → ๋ฐ˜ํ™˜๊ฐ’ ์—†์Œ โžก๏ธ ๋ชฉ์กฐํšŒ : ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์—†์Œ → ๊ฐ’ ๋ฐ˜ํ™˜ โžก๏ธ ์Šคํ…์ด ๋‘˜์€ ํ˜ผ์šฉํ•˜๋ฉด ์•ˆ๋จ๐Ÿ™Œ๐Ÿป CQS ์›์น™์„ ํ•ญ์ƒ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ตœ๋Œ€ํ•œ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹์Œ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘๊ณผ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋™..

๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ž€? (๋Ÿฐ๋˜ํŒŒ vs ๊ณ ์ „ํŒŒ)

๋‹จ์œ„ํ…Œ์ŠคํŠธ๋Š” ์ข‹์€ ๋ถ€์ • ์ง€ํ‘œ์ด์ง€๋งŒ ๋‚˜์œ ๊ธ์ •์ง€ํ‘œ์ด๋‹ค ๊ณต์œ  ์˜์กด์„ฑ : ํ…Œ์ŠคํŠธ ๊ฐ„์— ๊ณต์œ ๋˜๊ณ  ์„œ๋กœ์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๋Š” ์˜์กด์„ฑ ๋น„๊ณต๊ฐœ ์˜์กด์„ฑ : ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ์˜์กด์„ฑ ํ”„๋กœ์„ธ์Šค ์™ธ๋ถ€ ์˜์กด์„ฑ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค ์™ธ๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์˜์กด์„ฑโžก๏ธ ํ”„๋กœ์„ธ์Šค ์™ธ๋ถ€ ์˜์กด์„ฑ์€ ๋Œ€๋ถ€๋ถ„ ๊ณต์œ  ์˜์กด์„ฑ์— ํ•ด๋‹น but ๋ชจ๋‘ ๊ทธ๋Ÿฐ ๊ฒƒ์€ X โžก๏ธ ์•„์ง ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ”„๋ก์‹œ ํœ˜๋ฐœ์„ฑ ์˜์กด์„ฑ : ๊ฐœ๋ฐœ์ž ๋จธ์‹ ์— ๊ธฐ๋ณธ ์„ค์น˜๋œ ํ™˜๊ฒฝ ์™ธ์— ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์˜ ์„ค์ • ๋ฐ ๊ตฌ์„ฑ์„ ์š”๊ตฌํ•จ or ๋น„๊ฒฐ์ •์  ๋™์ž‘์„ ํฌํ•จํ•จ (e.g. ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ ๋˜๋Š” ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํด๋ž˜์Šค) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์ •์˜ ์ž‘์€ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๊ฒ€์ฆํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•จ ๐Ÿ’ก ํ…Œ์ŠคํŠธ๋Š” ์ฝ”๋“œ์˜ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋™์ž‘์˜ ๋‹จ์œ„๋ฅผ..

๋ฆฌ์•กํŠธ React SSE ์‘๋‹ต ์ฒ˜๋ฆฌํ•˜๊ธฐ (ChatGPT stream)

๊ธฐ์กด์— ๊ทธ๋ƒฅ ์™„์„ฑ๋œ ๋‹ต๋ณ€์œผ๋กœ ๋ฐ›์•˜๋˜ ChatGPT ์‘๋‹ต์„ SSE(Serve-Sent-Event) ๋ฅผ ์ด์šฉํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์™„์„ฑํ•˜๋Š” ๊ฑธ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ฐ›์•„์™€์•ผํ• ์ง€ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋Š”๋ฐ SSE ํ‘œ์ค€์€ ์• ์ดˆ์— POST ๋ฐฉ์‹์€ ์ง€์›์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. (๊ทธ๋ž˜์„œ SSE๋Š” ๋ณดํ†ต EventSource๋ฅผ ์ด์šฉํ•ด ์‘๋‹ต์„ ๋ฐ›์ง€๋งŒ ๋‹จ์ˆœ GET์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.) ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ๋‚ด๊ฐ€ ์š”์ฒญํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋ฐ›์•„์•ผํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ... ์‘์šฉ ๋ฐฉ์‹์„ ์—ฌ๋Ÿฟ ์ฐพ์•„๋ณด์•˜๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ ๋‚˜์˜ ์ƒํ™ฉ์— ์•„์ฃผ ๋”ฑ ๋งž๋Š” ์œ ํŠœ๋ฒ„์˜ ์„ค๋ช… ๋“ฑ์žฅ... ์ตœ๊ณ ์„ธ์š”... https://www.youtube.com/watch?v=JxIQCOrsxxg ๋ฌผ๋ก  ์ด ๋ถ„์€ ChatGPT ๊ธฐ๋Šฅ์„ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐ”๋กœ ๊ตฌํ˜„ํ•œ๊ฑฐ๋ผ ์•ฝ๊ฐ„ ์ฐจ์ด์ ์ด ์žˆ์—ˆ๊ธฐ์— ์ด์Šˆ..

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 9. ์Šคํ”„๋ง Spring ๊ตฌ๊ธ€ ์†Œ์…œ ๋กœ๊ทธ์ธ ๋กœ์ง ๋ณ€๊ฒฝ (๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์›น๋ทฐ ๊ด€๋ จ)

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ ์ค‘์— ์ ค ๋ง‰ํ˜”๋˜ ๋ฌธ์ œ... ๋ฌธ์ œ๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋ƒ.. ํ•˜๋ฉด์€ ์›๋ž˜ ๊ตฌ๊ธ€ ์†Œ์…œ๋กœ๊ทธ์ธ์˜ A to Z๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ๋‹ด๋‹นํ•˜๋„๋ก ๊ตฌํ˜„์„ ํ–ˆ๋‹ค. ์˜ค๋žœ๋งŒ์— ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ๋„ ๊ทธ๋ ค๋ดค๋Š”๋ฐ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. (draw. io ๋Š” ๊ทธ๋ฆฌ๊ธฐ๋Š” ์ฐธ ํŽธ๋ฆฌํ•œ๋ฐ ์ €์žฅํ•  ๋•Œ ํ™”์งˆ์ด ์กฐ๊ธˆ๋งŒ ๋” ๊ฐœ์„ ๋˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.. .ใ…Ž..) ๋กœ๊ทธ์ธ ์š”์ฒญ๋ถ€ํ„ฐ Authorization Code๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž ์ •๋ณด ์š”์ฒญํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ์„œ๋ฒ„์—์„œ ์ง„ํ–‰์„ ํ•˜๊ณ  ์ตœ์ข… accessToken ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. (ํšŒ์›์ด๋ฉด ์ธ์ฆ/์ธ๊ฐ€๋ฅผ ์œ„ํ•œ accessToken๋งŒ, ๋น„ํšŒ์›์ด๋ผ๋ฉด ํšŒ์›๊ฐ€์ž…์„ ๋ฐ”๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ์šฉ์ž์ •๋ณด (name, email, picture) ์„ ๋‹ด์•„๋ณด๋‚ธ๋‹ค. ๊ทผ๋ฐ ์ •๋ง ์˜ˆ์ƒ์น˜๋„ ๋ชปํ•˜๊ฒŒ ํ”„๋ก ํŠธ(Re..

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 7. ์Šคํ”„๋ง aws ec2 ๋ฐฐํฌ

#mood ์›๋ž˜ ๊ณ„ํš์€ aws ํ”„๋ฆฌํ‹ฐ์–ด๋„ ์–ผ๋งˆ ์•ˆ๋‚จ์•˜์„ํ…๋ฐ ๊ทธ๋ƒฅ ํ”„๋ก ํŠธ ์ชฝ์—์„œ ์Šคํ”„๋ง application ๋Ÿฐํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฑธ๋ฃจ ํ•˜์ž.. ํ–ˆ๋Š”๋ฐ ์—ญ์‹œ๋‚˜ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ์—ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ฑ ๋ฐฐํฌ ํ•œ๋ฒˆ ๋”ฑ ํ•ด๋†“๋Š”๊ฒŒ ์˜ค๋žซ๋™์•ˆ ํž˜๋“ค์ง„ ์•Š์„ ๊ฒƒ ๊ฐ™๋‹ค...! ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋ฐฐํฌ๋ฅผ ํ•˜๊ฒŒ ๋๋‹ค ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๋ฆฌ์•กํŠธ ์ฝ”๋“œ๋Š” ์ด๋ฏธ ec2์— ๋ฐฐํฌํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ ๋Œ€์ถฉ ๋น„์Šทํ•˜๊ฒ ์ง€ ํ•˜๊ณ  ์‹œ์ž‘! ๊ทผ๋ฐ ๋ฐ”๋กœ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ๋• ๋ณด์•ˆ ์„ค์ •์ด ๋งŽ์ด ์—†๋‹ค๋ณด๋‹ˆ ๊ฑฐ์˜ ๋‹ค ๊นƒํ—ˆ๋ธŒ์— ๋ฐ”๋กœ ํ‘ธ์‹œ๋ฅผ ํ–ˆ์—ˆ๊ณ  gitignore ํ–ˆ๋˜ node_modules ๋งˆ์ €๋„ ๊ทธ๋ƒฅ npm installํ•˜๋ฉด ๋ฐ”๋กœ ์ƒ์„ฑ๋˜๋˜ ๊ฒƒ๋“ค์ด์—ˆ๋Š”๋ฐ, ์Šคํ”„๋ง์€ ์ผ๋‹จ gitignore ํ•ด๋‘”๊ฒŒ ๋งŽ์•˜๊ณ  ๊นƒํ—ˆ๋ธŒ ํด๋ก ํ•ด์„œ ์› ์ƒํƒœ๋กœ ๋ณต๊ตฌ์‹œํ‚ฌ ์ˆ˜๋„ (npm install ์ฒ˜๋Ÿผ..

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 6. ๊ฒฝ๊ธฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ๋ชจ์ง‘๊ธ€ ํƒœ๊ทธ๋ณ„ ํ•„ํ„ฐ๋ง ๊ตฌํ˜„

์‚ฌ์‹ค ์ƒ ๋ฉ”์ธ ๊ธฐ๋Šฅ์ธ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ์ด๋‹ค. ์ฒ ์ €ํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋˜ ๊ธฐ๋Šฅ๋“ค์ด ์ด์ œ๋Š” ์ด๊ฒƒ์ €๊ฒƒ ์„ž์ด๊ธฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ ์ด ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๊ธฐ๋‹ค๊ฐ€ ๋‘๋Š”๊ฒŒ ๋‚˜์„๊นŒ ์ €๊ธฐ๋‹ค๊ฐ€ ๋‘๋Š”๊ฒŒ ๋‚˜์„๊นŒ.. ํ•˜๋Š” ๊ณ ๋ฏผ์ด ์ƒ๊ธฐ๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ ์  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฐจ์›์—์„œ ๋‹ค๋ค„์•ผํ•  ์ œ์•ฝ ์กฐ๊ฑด๋“ค์ด ์ƒ๊ธฐ๋‹ˆ ์ œ๋ฒ• ์žฌ๋ฐŒ๋‹ค !! ๐Ÿฅน๐Ÿ‘ ๊ฒฝ๊ธฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๊ธฐ๋Šฅ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โŒ user์˜ ์กฐ๊ฑด์ด ํ•ด๋‹น ๋งค์น˜ ํƒœ๊ทธ๋“ค์˜ ์กฐ๊ฑด๊ณผ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€ โŒ match์˜ ํ˜„์žฌ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ธ์›์ด ์ „์ฒด ๋ชจ์ง‘ ์ธ์›๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ, (์ฐธ๊ฐ€ ์ธ์›์„ ๋ชจ๋‘ ๋ชจ์ง‘ํ–ˆ์„ ๊ฒฝ์šฐ) ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€ โŒ user ๊ฐ€ ์ด๋ฏธ ์ฐธ๊ฐ€ ์‹ ์ฒญํ•œ ๋งค์น˜๋“ค๊ณผ ์‹œ๊ฐ„์ด ๊ฒน์น˜๋ฉด ์ฐธ๊ฐ€ ์‹ ์ฒญ ๋ถˆ๊ฐ€ โœ… ์ด์™ธ๋Š” ์ฐธ๊ฐ€ ์‹ ์ฒญ ์™„๋ฃŒ ํ›„์— ํ•ด๋‹น ๋งค์น˜์˜ ํ˜„์žฌ ์ฐธ๊ฐ€ ์‹ ์ฒญ ์ธ์› ์ˆ˜ 1 ์ฆ๊ฐ€ ์ด ์กฐ๊ฑด..

[์›น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ] 4. ๋ชจ์ง‘๊ธ€ ๋“ฑ๋ก ๊ตฌํ˜„ (๋ชจ์ง‘๊ธ€๊ณผ ํƒœ๊ทธ, ๋งค์น˜ ์—ฐ๊ฒฐ)

๋ชจ์ง‘๊ธ€์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋Š” api๋ฅผ ๊ตฌํ˜„ํ•ด๋ณธ๋‹ค. ๋ชจ์ง‘๊ธ€์—๋Š” ๊ธฐ๋ณธ์ ์ธ title, content , category, (๋“ฑ๋กํ•˜๋Š” ์‚ฌ์šฉ์ž์˜) userEmail (โžก๏ธ ์ด๊ฑด ํ† ํฐ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์˜ˆ์ •์ด๋‹ค.) ์ด ํ•„์š”ํ•˜๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ๋ชจ์ง‘๊ธ€ ๋“ฑ๋ก ์‹œ์— ํ•จ๊ป˜ ์ƒ์„ฑํ•ด์•ผ ํ•  Match ๊ฐ์ฒด์˜ ํ•„๋“œ๋“ค์ด ํ•„์š”ํ•˜๊ณ  ์„ฑ๋ณ„, ๋‚˜์ด๋Œ€, ๋‚œ์ด๋„ ๋“ฑ์„ ํ‘œ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” Tag ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. (โœ… Match : ๊ฒฝ๊ธฐ ์ธ์› ์ˆ˜, ๊ฒฝ๊ธฐ ์žฅ์†Œ, ๊ฒฝ๊ธฐ ๋‚ ์งœ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.) ํ˜„์žฌ๊นŒ์ง€์˜ ํŒจํ‚ค์ง€ ๊ณ„์ธต ๊ตฌ์กฐ ๋‚˜๋ฆ„๋Œ€๋กœ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ธ๋ฐ ์ž˜ํ•˜๊ณ  ์žˆ๋‚˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..~ AddPostRequest.java ๋ชจ์ง‘๊ธ€ ๋“ฑ๋ก ์‹œ request body์— ๋“ค์–ด๊ฐˆ dto @NoArgsConstructor @AllArgsConstructor..