์ค์๊ฐ ์์ฝ๊ตฌ๋งค ์ผํ๋ชฐ์ธ ์ฐ๊ฝ๋ชฐ ํ๋ก์ ํธ๋ฅผ msa๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ค.MSA์ ๋ฐ๋๋๋ ๊ฐ๋
์ ๋ชจ๋๋ฆฌํฑ ์ํคํ
์ณ์ธ๋ฐ, ๋ณดํต ๊ฐ๋ฐ ์ฒ์ ์์ํ๋ฉด ๊ตฌ์ถํ๊ธฐ ๊ฐํธํ ๋ชจ๋๋ฆฌํฑ ์ค๊ณ๋ก ํ๊ฒ ๋๋ค.์ฌํผ ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ ์ง๋ณด์ ๋ฐ ์ฑ๋ฅ ๊ด๋ฆฌ์ ์ ๋ฆฌํ๊ธฐ ์ํด MSA๋ก ๋ณ๊ฒฝํ๊ฒ ๋์๋ค.์ฌ์ค msa๋ก ๊ตฌํ ๋๋ฌด ํ๊ณ ์ถ์๋ค. ์ํผ msa ๋ง๋ง ๋ค์ด๋ดค์ง ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๊ธฐ์ ์ด ํ์ํ๊ณ ์ด๋ป๊ฒ ๊ตฌ์ถํด๊ฐ์ผํ๋์ง ๋ชจ๋ฅด๊ธฐ์ ๋์ถฉ ์ด ํฌ์คํธ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. ๋จผ์ ๋ทํ๋ฆญ์ค ์ ๋ ์นด ์๋ฒ, ๋ทํ๋ฆญ์ค ์ ๋ ์นด ํด๋ผ์ด์ธํธ(๊ฐ๊ฐ์ ์๋น์ค๋ค)๊ฐ ์กด์ฌ ํ๋๊น ๋ทํ๋ฆญ์ค ์ ๋ ์นด๊ฐ ํ์ํ๋ค.๊ทธ๋ฆฌ๊ณ ๊ฐ ์๋น์ค๋ค์ด ํต์ ํ ๋ ์ด์ฉํ๋ ๊ฒ์ด kafka์ด๋ฏ๋ก ์ด๊ฒ ๋ํ ํ์ํ๋ค.spring cloud๋ ํ์ํ๋ฐ, ์ด๊ฒ์ api gateway์์
์..
ํ๋ก์ ํธ ๊ธฐ๋ก
์ด๋ฐ์์ผ๋ก ๊ตฌ์ฑ๋ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๋ฉฐ ํ๋ก์ ํธ ์ฝ๋ ๋จ์ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ๋ค. 1. ์ต์
๊ด๋ จ DB ํ
์ด๋ธ์ ํด๋น๋๋ ์ํฐํฐ1๏ธโฃ ์ต์
์นดํ
๊ณ ๋ฆฌ ์ํฐํฐ์ฐ์ ์ต์
์นดํ
๊ณ ๋ฆฌ๋ถํฐ ์กด์ฌํด์ผํ๋ค.@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class OptionCategory extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "option_category_id") private Long id; private String name; @OneToMany(mappedBy = "optionCateg..
๐๐ป ์คํ ๋ง์ผ ํ๋ซํผ: ์ํ์ ๊ตฌ๋งค ๋๋ ํ๋งคํ ์ ์๋ ๊ธฐํ๊ฐ ๊ฐ๋ฐฉ๋์ด ์๋ ์จ๋ผ์ธ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ์ผ์ปซ๋๋ค. ์๋น์ค ์ด์์ฌ๊ฐ ๊ฑฐ๋์ ๊ด์ฌํ์ง ์๊ณ ํ๋ซํผ๋ง ์ ๊ณตํ๋ ์ค๊ฐ์์ ์ญํ ๋ง ํ๋ค๋ ์ ์์ ๋ค๋ฅธ ์ ์์๊ฑฐ๋ ํํ์ ๊ตฌ๋ถ๋๋ค.์คํ ๋ง์ผ ํ๋ซํผ์ ํน์ฑ์ ํ๋งค์๊ฐ ์ํ๋ ๋๋ก ์ํ์ ํ๋งคํ ์ ์์ด์ผํ๋ค.์ฆ, ์ํ์ ์ต์
, ์ด๋ฏธ์ง, ํ๊ทธ ๋ฑ๋ฑ ๋์ ์์ ๋๋ฅผ ์ ๊ณตํด์ผํ๋ค๋ ๊ฒ์ด๋ค.์ด๋ฐ ํน์ฑ ๋๋ฌธ์ ์คํ ๋ง์ผ ํ๋ซํผ ํ๋ก์ ํธ๊ฐ ํ๊ณ ์ถ์๊ธฐ๋ ํ๋ค. ๋ฐ๋ผ์, DB ์ค๊ณ ์ ํ์ฅ์ฑ ์ธก๋ฉด์ ๋งค์ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ค.1. ์ต์
DB ERD ์ค๊ณ์ค์ ํ๋ก์ ํธ์์ ๊ตฌํํ ์ํ-์ํ์ต์
๋ถ๋ถ ERD์ด๋ค. 1๏ธโฃ ์ํ๊ณผ ์ต์
์ ๋ค๋๋ค ๊ด๊ณ์ด๋ค.์ฒ์์๋ ์ํ๊ณผ ์ต์
์ N:M์ ๊ด๊ณ๋ก๋ง ์๊ฐํ๋ค.์ํ๋ ์ฌ๋ฌ ์ต์
์ ..
์ง๋ ํฌ์คํ
์ ์ด์ด ์ด์ ์ค์ง์ ์ผ๋ก ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์ง ๊ฑด์ง ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ๋ค.์ฐ์ , ๊ฐ๋ฐํ๊ฒฝ์ JAVA 17, gradle, Spring 3.2.1 ์ด๋ฌํ๋ค. 1. ํ์ํ API ๋ชฉ๋ก ์ ๋ฆฌA. ์ ์ฒด ์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ API์ฒซ ๋ฉ์ธ ํ๋ฉด์ ์ง์
ํ๋ฉด ๊ฐ์ฅ ๋จผ์ ์ ์ฒด ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์กฐํํ๊ฒ ๋๋ค.B. ํน์ ์นดํ
๊ณ ๋ฆฌ์ ํ์ ์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ API๋ง์ฝ "์๋ฅ" ์นดํ
๊ณ ๋ฆฌ๋ผ๋ฉด ๊ทธ ํ์์ ์กด์ฌํ๋ ํฐ์
์ธ , ๋งจํฌ๋งจ/ํ๋ํฐ ๋ฑ๋ฑ์ ํ์ ์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก์ด ํ์ํ๋ค. 2. ์ ์ฒด ์นดํ
๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ API ๊ตฌํ์นดํ
๊ณ ๋ฆฌ ๋ถ๋ถ ์ค์ ๊ตฌํํ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ด๋ค. A. REQ/RES ํํ ์ ์GET ์์ฒญ์ผ๋ก /category/total ์ด ๋ค์ด์จ๋ค๋ฉด,HTTP/1.1 200 OKContent-Type: application/jsonC..
์ด ํ๋ก์ ํธ์ ์ฒ์ ์์์ "์ฟ ํก"์ ๋ชจํฐ๋ธ๋ก ํ ํ๋ก์ ํธ์๊ณ , ๋ง์ฐํ ์ฟ ํก์ ๋ง์ ๊ธฐ๋ฅ์ ์ฐธ๊ณ ํด๋ณด์! ์๋ค.์ ์ฟ ํก์ผ๋ก ์ก์๋๋ฉด, ์ ํ์ ์ธ ์คํ๋ง์ผ ํ๋ซํผ. ์ฆ, ์ฌ๋ฌ ํ๋งค์๊ฐ ์์ฃผ ๋ค์ํ ์ํ์ ์์ ๋กญ๊ฒ ํ๋งคํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.-> ํ์ฅ์ฑ์ด ๋งค์ฐ ์ค์ํ ์์
์ด ๋ ๊ฒ ๊ฐ์๊ณ , ๊ทธ๋ก ์ธํด ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ ๊ณต๋ถํด๋ณด๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ด๋ค. ์, ์ด์ ๋ด๊ฐ ๋งก์ ์นดํ
๊ณ ๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ํด ๊ธฐ๋กํด๋ณด๊ณ ์ ํ๋ค.1. ์ฟ ํก ์นดํ
๊ณ ๋ฆฌ ์ดํด๋ณด๊ธฐA. ์ฟ ํก ์นดํ
๊ณ ๋ฆฌ ํน์ด์ 1. "ํจ์
์๋ฅ/์กํ" ์นดํ
๊ณ ๋ฆฌ๋ ์ต์์ ๋์ค๊ฐ ์๋ ๊ฒ์ด๋ค.ํฌ๋กค๋ง ํ ๋ ์ ์ฌํ ์ดํด๋ณด์๋๋ฐ ์ฟ ํก์ ์ ์ง ์ฒ์์ ํจ์
์๋ฅ/์กํ ์นดํ
๊ณ ๋ฆฌ๊ฐ ๋ฉ์ธ์ด์๋ ๊ฑฐ ๊ฐ๋ค.๋ฐ๊ฟ ๋งํ์๋ฉด, ๊ฐ์ฅ ํฐ ๋๋ถ๋ฅ๊ฐ ์์ ์๋ ์ฌ์ฑํจ์
,๋จ์ฑํจ์
... ๋ถํฐ ์์์ด์๋๊ฑฐ ๊ฐ๋ค.์๋..