QUOTE THE DAY “ ์๋ฌ ์๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ๊ทธ๋ฐ๋ฐ ์ธ๋ฒ์งธ ๊ฒ๋ง ์๋ํ๋ค. ” - Alan J. Perlis (์จ๋ฐ J. ํ๋ฆฌ์ค) CQRS (Command Query Responsibility Segregation) * CQRS ๋? ๐์ง์ญํ์๋ฉด ๋ช ๋ น๊ณผ ์ฟผ๋ฆฌ์ ์ญํ ์ ๊ตฌ๋ถํ๋ค๋ ๊ฒ์ด๋ค. Create-Insert, Update, Delete ์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ Select-Read ์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒ ๋ ๊ฐ์ง์ ์ฑ ์์ ๋ถ๋ฆฌํ๋ค๋ ๊ฒ์ด๋ค. * ์ ์ฌ์ฉํ ๊น? ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋(ํน์ ์ฌ์ฉํ๋) ์ ํต์ ์ธ CRUD ์ํคํ ์ณ ๊ธฐ๋ฐ์์ ์์คํ ์ ์ ์ง๋ณด์ํ๋ค ๋ณด๋ฉด, ์ถ๊ฐ์ ์ธ ์๊ตฌ์ฌํญ๊ณผ ์ ์ฑ ์ ๋ณํ๋ค๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ก์ง์์ Domain Model ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๊ฒ..
๊ฐ์ API ๋ฅผ ๊ฐ๋ฐํ๊ฑฐ๋, ํน์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ดํ๊ธฐ ์ํด ํ์ ๊ฐ์ ์ง์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. (ํ๋ผ๋ฏธํฐ์ ๋ํ ์ ํจ์ฑ) ๋ฐ๋ก Rule ์ด ์๋ค๋ฉด ๋ฐฉ๋ฒ์ ๋ฌด๊ถ๋ฌด์งํ๋ค. ๋ชจ๋ ์์ฒญ์ if๋ฅผ ๊ฑธ์ด ๊ฒ์ฌํ๊ฑฐ๋.. ๊ณตํต์ผ๋ก ํ๋์ Class ๋ฅผ ๋ง๋ค์ด์ ๊ฒฝ์ ํ๊ฒ ํ๊ฑฐ๋.. ์ด ๊ธ์์๋ ๊น๋ํ ์ฝ๋๋ฅผ ์ํด ํ๋ก์ ํธ ๋ด์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ Exception ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์ ํ๋ค. ๊ทธ๋์ผ ๊น๋ํ๋ค. ๊ธฐ์กด Spring ์ด๋ Spring Boot์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋์ ๊ฐ์ ๋ด์ฉ์ผ๋ก ๋ฐ์ํ๋ค. ์ฐ๋ฆฌ๋ Spring Boot์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฉ์์ง๋ก ์ ์ดํ ์์ ์ด๋ค. *์๋ ๊ธ์์๋ ์ฟ ํฐ์ ๋ฐํํ๊ธฐ ์ํ ๋ด์ฉ์ ์๋๋ฆฌ์ค๋ก @Valid ๋ฅผ ๋ฃ์ด ๊ตฌํํ์๋ค. 1. ์ฌ์ ์ค๋น ๐Maven ์ ๊ธฐ..
๐ ์๊ฐ ์์ง Git ์ ์ฌ์ฉํจ์ ์์ด Pull Request ์ ์ด์ํ ๋ถ๋ค์ ์ํ ๊ธ์ด๋ค. Pull Request๋ ๋ฌด์์ผ๊น? ๐ Pull Request ๋? Repository(ํ๋ก์ ํธ)์ Maker(์์ฑ์), Collaborators(ํ๋ ฅ์) ๊ฐ ์๋๊ธฐ์ Push ๊ถํ์ด ์์ง๋ง, ํด๋น ๊ตฌ์ฑ์๋ค์๊ฒ Contribute ๋ฅผ ํ๊ธฐ ์ํ ์์ฒญ์ด๋ค. ์กฐ๊ธ ๋ ํ์ด ๋งํ์๋ฉด, ๋ด๊ฐ ์์ ํด์ผํ๋(ํน์ ๋ง์์ ๋๋) Repository๊ฐ ์๋๋ฐ ์ฝ๋์ ๊ธฐ์ฌํ๊ณ ์ถ์ ๋(๋ ๋ฐ์ ๋ ์ฝ๋๊ฑฐ๋ Maker์ Collaborators์ ๋์๋๋ ์ฝ๋) ๋ด๊ฐ ์์ ํ ์ฝ๋๊ฐ ์์ผ๋ ๊ฒํ ํ, ์ฝ๋ ๋ณํฉ ์์ฒญ์ ํ๋ ๊ฒ์ด๋ค. ๐ ์ฌ๊ฑด์ ๋ฐ๋จ OO๋~~ A ํ๋ก์ ํธ ์ด์ #12451๋ฒ ์ฒ๋ฆฌ ๋ถํ๋๋ ค์~! ๐์ด๋ณด์๋ ์ด ๋ง์ ๋ฃ..
๋๋ฉ์ธ ์ค์ฌ ์ค๊ณ(Domain-Driven Design)์ด๋? ๋จ์ํ๊ฒ ์ ๋ฆฌํ์๋ฉด ๋๋ฉ์ธ(๋น์ฆ๋์ค ๋ชฉํ)์ ์ค์ฌ์ผ๋ก ์๊ฒ ์ชผ๊ฐ์ด ์ค๊ณ(๋๋ ๋ฌธ์ ํด๊ฒฐ)ํด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ํ๋ก์ ํธ ์ ๋ชจ๋๊ฐ์ ์์กด์ฑ์ ์ต์ํํ๋ฉฐ ์์ง์ฑ์ ์ต๋ํ ํ๋ฉด์ ๋ง์ด๋ค... ์ฒ์ DDD ์ ๋ํ ๊ฐ๋ ์ ์ ํ ๋๋ ๋๋ฌด๋๋ ๋์ ๋ฒ์์ ๋ํดํด์ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ด๋ ค์ ์๋ค. ๊ฐ์ฒด์งํฅ์ ๋ํ ๊ฐ๋ ์ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ์๊ธฐ ๋๋ฌธ์ผ๊น. ๊ฐ์ฒด ์งํฅ์ ๋ ๋ฆฝ์ ์ธ ๊ฐ์ฒด(๊ฐ์ฒด)๋ค์ด ์ํธ์์ฉ์ ํตํด ๋ฐ์์ํค๋ ์ด๋ฒคํธ๋ฅผ ๋ชฉ์ ์ผ๋ก ํ๋ค. ๋ฌผ๊ฑด์ ์ฌ๊ธฐ์ํด(Buy Domain) ๋งํธ์ ๋ค์ด๊ฐ A์จ๋ ๊ทธ๊ณณ์์ ์ผํ๊ณ ์๋ B์จ์๊ฒ ๊ณ์ฐ์ ํ๋ค(Sell Domain) ์ ์ฃผ์ธ C ๋ ์ด๋ฅผ ๊ด๋ฆฌ(Manage Domain)ํ๋ค. ๋ฒ์จ ์ฌ๊ธฐ์๋ง 3๊ฐ ์ด์์ ๋๋ฉ์ธ์ด..
๐ํ๋ก์ ํธ ์๊ฐ์ง๋จ ๐๋๋ผ์, ๊ทธ๋ฆฌ๊ณ .. ์ด ๊ธ์ ๋ด์ฉ์ ๋ณด๊ณ ์ค๋ก ๋๋ผ์ ๋ค. ์ธ์์ ์ฌ์ง์ด ๋ด๊ฐ ์์ ์งํ ์ค์ธ ๋ด์ฉ๋ค์ด๋ค. ๊ฐ์ฌํ๊ฒ๋ ํฌ๊ฒ 10๊ฐ ํญ๋ชฉ์ ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ฃผ์ จ๊ณ , ๋คํํ๋ ๋๋ 10๊ฐ ํญ๋ชฉ ๋ชจ๋์ ์ฒดํฌํ ์ ์์๋ค. ์ ํด์ง ๊ธฐ๊ฐ์ ๋ง์ถ์ด ํ๋ก์ ํธ๋ฅผ ๋๋ด๊ณ , ๋ค์ ํ๋ก์ ํธ๋ฅผ ์ํด ์ฒ ์ํ๊ธฐ ๊ธ๊ธํ๋ค. ์ฐ๋ฆฌ๋ ์๊ธ์์ด๋๊น, ๊ทธ๋ ๋ค๋ณด๋ ์ด๋ฏธ ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ๋ก์ ํธ๋ ์ด์๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์ถ๊ฐ ๊ฐ๋ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด LTS๋ก ๋ณด๊ณ ๋ค์ ๋ณผ ์๊ฐ์ด ๋์ง ์๋๋ค. ๊ทธ๋ฌ๋ค ๋ฌธ๋ ์ฐ์ฐจ๊ฐ ์์ด๊ณ , ๋ด๊ฐ ๊ฐ๋ฐํ ํ๋ก์ ํธ๋ฅผ ๋ณผ ๋, ๊ทธ ์ถฉ๊ฒฉ์.. ์ ๋ญ๋๊น ์๋นํ ๋ฏผ๋งํ๋ค. ๋น์์ ์๊ฐ ์์ด ์งฐ๋ ์ฝ๋๋ ๋ถ๋๋ฌ์์ ์์ ์ ํ๊ณ , ๋ง์ ๊ณ ๋ฏผ์ ํ๋ฉฐ ์งฐ๋ ์ฝ๋๋ ์ง๊ธ ๋ค์ ๋ด๋ ๋งค๋ ฅ์ ์ธ ์ฝ๋๋ค. ๋๋ฅผ ์ํด, ๋..
๐Spring Boot ์ง์ ๊ณํ ํ ์ด ํ๋ก์ ํธ๋ฅผ spring boot๋ก ์งํํ๊ณ ์ Spring initializr ์ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์์๋ค. ๊ทธ๋ฌ๋ ์ค, Spring initializr ์์ ์๋์ ๊ฐ์ด 2.5.x ๋ฒ์ ๋ค์ด ์ฌ๋ผ์ง ๊ฒ์ ๋ณด๊ณ ๋ถ๋ด๋ถ๋ด spring boot์ ์ง์ ๊ณํ์ ๊ณต์ ํ๊ธฐ ์ํด ํฌ์คํ ํ๊ฒ ๋์๋ค. ๐จ๐ปSpring Boot ์ 3.0.x ๋ฒ์ ์ถ์ ์ผ์ (2022-11-24) ์ด ์ฝ์์ผ๋ก ๋ค๊ฐ์ด์ ๋ฐ๋ผ, ์ฌ๋ฌ ๊ธฐ์ ์์ ๊ธฐ์กด์ ์ฌ์ฉ์ค์ด๋ ๋ ๊ฑฐ์ ๋ฒ์ Spring Boot ์ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ๊ณ ์๋ค. ํ์ฌ ๊ทผ๋ฌด ์ค์ธ ํ์ฌ์์๋ ์ง๋ 5์, ์ด์์ค์ธ Spring Boot ํ๋ก์ ํธ์ ์ตํ์ ๋ฒ์ ์ 2.4.2 ๋ฒ์ ์ผ๋ก ๊ณ ์ ์์ผฐ๋ค. ๊ฐ์ธ์ ์ผ๋ก ๊ถ์ฅํ๋ Branch์ ์ตํ์ ๋ฒ..
๐ํ ์ดํ๋ก์ ํธ ๐Front-End ๐React ๐Back-End ๐Spring Boot(2.5.5) ๐DB ๐MySQL or MariaDB ๐API ๐Node.js
๐๋ก๊ทธ ๐๊ฐ์ โจ์ ๋ง์ ํ๋ก์ ํธ์ ์๋น์ค๋ค์ ์ด์ํ๋ค๋ณด๋ฉด ์ฐ๋ฆฌ์ Log ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ(ํน์ ํด๋)๋ ์ธ์ ๋ ํํ ์ด๋ค. ์ฝ๋ฉํ๋๋ผ ๋ฐ์ ์ฐ๋ฆฌ์๊ฒ ๋ก๊ทธ์ ์ฐ์ ์์๋ ์ ~~๋ฉ๋ฆฌ, ์๋์ง ์ ์ผ ๋ค์ ์๋ค. ์ค๊ณ์ ๋ํ ๊ฒ๋ณด๋ค ๋จ๊ธฐ๋ ๊ฒ์๋ง ์ง์คํ๋ค. ๊ทธ๋ ๋ค ๋ณด๋ ๊ท์ฝ์ด ์๊ณ , ๋ชจ๋ ๊ฑธ ๋จ๊ธด ๋ก๊ทธ์ ํ์ง์ ์ ํ๋ ์ ๋ฐ์ ์๋ค. ๋ก๊ทธ ํ์ผ์ด KB๋ ์๋๊ณ MB๋ ์๋ GB..? ์ฌ์ง์ด ๋์ผํ ๋จ์ด์ ๋ฐ์ดํฐ๋ผ๋? ์ผ์์ ! ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์์ ์ฝ๊ธฐ๊ฐ ์ด๋ ต์์! ์์ ๋น์ทํ ๊ฒฝํ์ ๊ฐ์ง ์ ์ด ์๋ค๋ฉด? ์ด ํฌ์คํ ์ด ์ฝ์๋ง ํ์ง ์์๊น ๐๋ก๊ทธ์ '์ ์' ๐๋ก๊ทธ๋ '์ผ์ง[๊ธฐ๋ก]' ์ด๋ผ๋ ๋ป์ ์ง๋๋ค. ์ด ํฌ์คํ ์์ ๋ฐ๋ผ๋ณด๋ ์์ ์ ๋ก๊ทธ๋ ์์คํ ์ด๋ ์๋น์ค ๋ฑ์ ๊ฐ๋ ์ ๋จ๊ธฐ๋ ์ด๋ฒคํธ์ ๋ํ ๊ธฐ๋ก์ด๋ค. ์ฐ๋ฆฌ๋ ์ด ๊ธฐ๋ก..