(์๊ฐ ์ด๋ฏธ์ง ํผ์น๊ธฐ)
- ์นผ๊ฐ์ ์ด๋๋ฃจํด์ ์งํค๋ "ํฌ์ฐฝ"์ ์ ๋ค์๊ฒ ํธ์์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ๊ทธ๋ฃน์ ๋ฉค๋ฒ๊ฐ ์ด๋์ค์ผ์ค ๊ณต์ , ๋๊ธฐ๋ถ์ฌ๋ฅผ ๋๋ชจํฉ๋๋ค.
- [๋ด ์ด๋ํต๊ณ] , [์ฐ๋ฆฌ ๊ทธ๋ฃน์ ์ด๋ํต๊ณ] ์๋ฃ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
- [์ฃผ๊ฐ ์ด๋ํต๊ณ] , [์๊ฐ ์ด๋ํต๊ณ] ๋ชจ๋ ํ ๋์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
- ์ง์ ์กฐํํ๊ธฐ ๋ฐ์ ์ ์ ๋ฅผ ์ํด, ์ฃผ๊ฐ/์๊ฐ ์ด๋ํต๊ณ ์๋ฃ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์กํฉ๋๋ค.
- ๋ฌธ์ ์์ ์ฌ๋ถ๋ ์ ํ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ์์ ํํ์ฌ ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๐๏ธ์ด ์์๊ธฐ๊ฐ ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2023.12.20 ~ 2024.03.02 โ 74์ผ๊ฐ]
ย ย ย โฐ์ค๊ณย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2023.12.20 ~ 2024.01.05 โ 17์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ์ํคํ ์ฒ ์ค๊ณย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2023.12.20 ~ 2023.12.25 โ 6์ผ๊ฐ]ย ย ย ย ย ย ย ย ย ย ย ย โณUI ์ค๊ณย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2023.12.26 ~ 2023.12.29 โ 4์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณDB ์ค๊ณย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2023.12.30 ~ 2024.01.02 โ 4์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ์ดํ๋ฆฌ์ผ์ด์ ์ค๊ณย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.01.03 ~ 2024.01.05 โ 3์ผ๊ฐ]
ย ย ย โฐ๊ฐ๋ฐย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.01.06 ~ 2024.02.03 โ 30์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณํ ์ด๋ธ-์ํฐํฐ ๋งคํย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.01.03 ~ 2024.01.04 โ 2์ผ๊ฐ]ย ย ย ย ย ย ย ย ย ย ย ย โณ๋๋ฉ์ธ, ์๋น์ค ๊ณ์ธต ๊ฐ๋ฐย ย ย ย ย [2024.01.05 ~ 2024.01.15 โ 11์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ๋ฐฐ์นJOB, ์ค์ผ์ค๋ฌ ๊ฐ๋ฐย ย ย ย ย ย ย [2024.01.16 ~ 2024.01.17 โ 2์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ์ธ์ฆ/์ธ๊ฐ ํ๊ฒฝ ๊ตฌ์ถย ย ย ย ย ย ย ย ย ย ย ย ย [2024.01.18 ~ 2024.01.21 โ 4์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณAPI ๋ฐ ํ๋ก ํธ์๋ ๊ฐ๋ฐย ย ย ย ย ย ย ย [2024.01.22 ~ 2024.02.02 โ 12์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ๋ณด์์ทจ์ฝ์ ๋ณด์ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.02.03 ~ 2024.02.03 โ 1์ผ๊ฐ]
ย ย ย โฐ๋ฐฐํฌ ๋ฐ ํตํฉํ ์คํธย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.02.04 ~ 2024.03.02 โ 28์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณ์ด๊ธฐ ์ด์์๋ฒ ๊ตฌ์ถย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.02.04 ~ 2024.02.17 โ 14์ผ๊ฐ]ย ย ย ย ย ย ย ย ย ย ย ย โณ์ด์ ์๋ฒ ์ปจํ ์ด๋ ์ ํย ย ย ย ย ย ย [2024.02.18 ~ 2024.02.24 โ 7์ผ๊ฐ]
ย ย ย ย ย ย ย ย ย ย ย ย โณCI/CD ํ๊ฒฝ ๊ตฌ์ถย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย [2024.02.25 ~ 2024.03.02 โ 7์ผ๊ฐ]
๐์ค๊ณ์ (์ด๋)
ย ย ย ๐ 01. ์ํคํ ์ฒ ์ค๊ณ
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 01. ์ฌ์ฉ ๊ธฐ์ ์ ์ย ย ย ย ย ย ย ย ย ย ย ย ๐ 02. ์ธํ๋ผ ์ ์
ย ย ย ๐ 02. UI ์ค๊ณ
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 01. ํ์ด์ง ๋ชฉ์ย ย ย ย ย ย ย ย ย ย ย ย ๐ 02. ์คํ ๋ฆฌ๋ณด๋
ย ย ย ๐ 03. DB ์ค๊ณ
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 01. ๊ฐ๋ ๋ชจ๋ธ๋งย ย ย ย ย ย ย ย ย ย ย ย ๐ 02. ๋ ผ๋ฆฌ ๋ชจ๋ธ๋ง
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 03. ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 04. ์ต์ข DDL
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 05. ์ด๊ธฐํ DDL
ย ย ย ๐ 04. ์ดํ๋ฆฌ์ผ์ด์ ์ค๊ณ
ย ย ย ย ย ย ย ย ๐ 01. ์ธ์ฆ ๋ฐ ์ธ๊ฐ
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ 01-1. ๊ธฐ์ ๋ถ์ ๋ฐ ์์คํ ์ฌ์ ํ์ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ๐ 01-2. ํ๋ณด ๋ฐฉ์ ๋ถ๋ฅ
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 03. API ์ ์
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 04. ๋ฐฐ์น JOB ์ ์
ย ย ย ย ย ย ย ย ย ย ย ย ๐ 05. ๊ฐ๋ฐ ํ์ค ์ ์
- domain1 - ํ์ ๋๋ฉ์ธ
- domain2 - ์ด๋์ผ์ง ๋๋ฉ์ธ
- domain3 - ๊ทธ๋ฃน ๋๋ฉ์ธ
- domain4 - ์ด๋ํต๊ณ ๋๋ฉ์ธ
2024.06 ๊ฐ๋ฐ ์์
๐ MPA์ SPA ํผ์ฉ ์ค๊ณ์ ์์ฌ์
o ํ์ : ํ๋ก ํธ ์๋ ๊ฐ๋ฐ ๋จ๊ณ์์ ์ค๋ณต๋๋ ์ปดํฌ๋ํธ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ ๋ฐ์ํ์๋ค. ํ์ง๋ง ์ด๋ฏธ ํ์ด์ง ๋ชฉ์ ๋จ๊ณ์์ ํ์ด์ง์ ๊ฐฏ์์ ๊ธฐ๋ฅ์ด ์ ํด์ก๊ธฐ ๋๋ฌธ์, ๊ตฌ์กฐ๋ฅผ ์ฌ์ ์ํ๊ธฐ๋ ์ด๋ ค์ ๋ค. ์ด๋ก ์ธํด Copy&Paste๋ก ๊ฐ๋ฐํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ก๊ณ , ์ด๋ ๊ฒ ๊ฐ๋ฐ๋ ์ปดํฌ๋ํธ์ ์์ ์ด ์๊ฒผ์๋ ์ผ์ผ์ด ๋ชจ๋ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ์ ํ๋ฅผ ์ผ๊ธฐํ๋ค.
o ์์ธ : UI์ค๊ณ ๋น์ ๋ช ํํ SPA๋ก ์ ์ํ์ง ์๊ณ , MPA์ ํผ์ฉํ์ฌ ์ค๊ณํ ํ์ด ํฌ๋ค. ๊ฒฐ๊ณผ๋ก ์ ์ด์ง๋ง ๊ฐ๋ฐ์ด ๋๋๊ณ ๋๋์๋ณด๋, ๋ ์ด์์์ผ๋ก ํ๋์ ํ์ด์ง๋ง ๋๊ณ ์ฌ์ฉ์์ ์์ฒญ์ด ์์๋๋ง๋ค ๋ฐ์ดํฐ์ ๋ ๋๋ง๋ง CSR ๋ฐฉ์์ผ๋ก ํด๋ ๋์์ ๊ฒ ์ฒ๋ผ ๋ณด์๋ค.
o ํด๊ฒฐ์ : ์์ผ๋ก ํ ๋ ๊ฐ๋ง์ ์ ๊ท ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ์์ ์ด๋ผ๋ฉด ๊ธฐ์กด์ ๊ตฌ์กฐ๋ฅผ ์ ์งํ ์ฑ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ๋ก ๋ณด์ธ๋ค. ํ์ง๋ง ์ ๊ท ๊ธฐ๋ฅ์ด ๋ง์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ผ๋ ํ์ ์ด ๋ ๋ค๋ฉด, ํ๋ก ํธ์๋ ์์ค์ ์ฌ ๊ฐ๋ฐ์ ํ๋ ํธ์ด ์์ผ๋ก์ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๊ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๐ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ๋ถ์ฌ๋ก ์ธํ ๊ฐ๋ฐ ์์ฐ์ฑ ์ ํ
o ํ์ : ๋ฌด๊ฒ๊ณ ๋ณต์กํ CSR ์คํฌ๋ฆฝํธ.
o ์์ธ : ํ๋ฉด ๋ฐ์ดํฐ์ ๋ ๋๋ง ๋ฐฉ์์ 90%๋ CSR(Client Side Rendaring)๋ฐฉ์์ด์๋ค. ํ๋ก ํธ์ํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , CSR๋ฅผ ๋ฐ๋๋ผ Javascript ๋ง์ผ๋ก ๊ตฌํํ ํ์ createElement, setAttribute, appendChild ๋ฑ์ ๋จ๋ฐ์ ํ๊ฒ ๋์ด ์คํฌ๋ฆฝํธ๋ ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์์ก์ผ๋ฉฐ, ๊ธฐ์ ์ ์ธ ํ๊ณ์ ๋ถ๋ชํ๋ค.
o ํด๊ฒฐ์ : ๋ฆฌ์กํธ ๋ฑ์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์ ์กด์ฌ ์ด์ ๋ฅผ ๋ชธ์ ์ฒด๊ฐํ๊ฒ ๋์๊ณ , ํ์ต์ ํ์์ฑ์ ๋๊ผ๋ค. ๋ง์ ์ ๊ท ๊ธฐ๋ฅ์ ์ถ๊ฐ๊ฐ ํ์ ๋๋ค๋ฉด, ํ๋ก ํธ์๋ ์์ค์ ์ฌ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ์ด ํ์ํ ๋ฏ ์ถ๋ค.
๐ ์ฆ์ ๋ณ๊ฒฝ/์ญ์ ๊ฐ ์ผ์ด๋๋ PK์ ๋ํ ์ธ๋ฑ์ค ์ค๊ณ ๋ฏธํก
o ํ์ : "์ด๋์ผ์ง์ด๋์ข ๋ชฉ" ํ ์ด๋ธ์ PK์ด๋ฉฐ Unique Index์ธ ์ด๋์ผ์ง์ด๋์ข ๋ชฉID์ ๋น๋ฒํ ์์ ๋ฐ ์ญ์ ๋ฐ์. ์ด๋ก ์ธํด ์ธ๋ฑ์ค ์ปฌ๋ผ์์๋ ๋ถ๊ตฌํ๊ณ ์กฐํ ์ฑ๋ฅ์ ์ ํ.
o ์์ธ : "์ด๋์ผ์ง์ด๋์ข ๋ชฉ: ํ ์ด๋ธ์ ์์ ๋ฐ ์ญ์ ๊ฐ ๋งค์ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ ํ ์ด๋ธ์ด๋ค. ๊ทธ ์ด์ ๋ ์ด๋์ผ์ง์์ ํธ๋์ญ์ ์ด ์๋์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
1) ๊ธฐ์กด์ ์ด๋์ผ์ง์ด๋์ข ๋ชฉ cascade all ์ญ์
2) ์ ๋ ฅ๋ฐ์ ์๋ก์ด ์ด๋์ผ์ง์ด๋์ข ๋ชฉ์ผ๋ก ๋ชจ๋ INSERT
๋ฐ๋ผ์ ์ค์ ๋ก "์ด๋์ผ์ง์ด๋์ข ๋ชฉ" ํ ์ด๋ธ์ ์กด์ฌํ๋ row์ ๊ฐฏ์๋ณด๋ค ์ธ๋ฑ์ค์ ์์ด ๋น๋ํด์ ธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
o ํด๊ฒฐ์ : ํ ์ด๋ธ ๊ตฌ์กฐ ์์ or ์ธ๋ฑ์ค ์ญ์ ๊ฐ ๊ฐ์๋๋ค. ๊ทธ ์ด์ ๋ ์ด๋์ผ์ง ์์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌ ๋ก์ง์ ๋ฐ๊พธ๋ ๊ฒ์ ์ฝ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.(ํ๋ฉด์์ ํ ์ด๋ธ์ PK๋ฅผ ์ถ์ ํ๊ธฐ ์ฝ์ง ์์) ๋ฐ๋ผ์ ๊ณ ์ํ ํด๊ฒฐ ๋ฐฉ์์ ์๋์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค.
1) ํ ์ด๋ธ์ del_yn ์ปฌ๋ผ์ ๋๊ณ , row์ ์ญ์ ๊ฐ ์ผ์ด๋ ๋ ๋ ผ๋ฆฌ์ ์ญ์ ์ฒ๋ฆฌ๋ง ํ์ฌ ๋ถํ์ํ ์ธ๋ฑ์ค row ์ฆ๊ฐ๋ฅผ ๋ฐฉ์งํ๋ค.
2) PK์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ญ์ ์ฒ๋ฆฌํ ํ, ๋ค๋ฅธ ์ปฌ๋ผ์ ์กฐํฉ์ผ๋ก Unique ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค.
๐ ๊ฐ๋ ๋ชจ๋ธ๋ง ๋จ๊ณ์์ ๋์น ์ํฐํฐ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ํด
o ํ์ : ๊ฐ์ธ์ด๋์บ๋ฆฐ๋์์ ๋ณด์ฌ์ง๋ [์ด๋๋ถ์ ์ปดํฌ๋ํธ์ ์๊น] ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฃน์ด๋์บ๋ฆฐ๋์์ ๋ณด์ฌ์ง๋ [ํ์ ์ปดํฌ๋ํธ์ ์๊น] ์ด ๋ ๊ฐ์ง ๋งคํ ์ ๋ณด๋ DB๊ฐ ์๋, ํ๋ฉด ์คํฌ๋ฆฝํธ์์ Map์ผ๋ก ๊ด๋ฆฌ๋๊ณ ์๋ค.
o ์์ธ : "์๊น ์ ๋ณด"์ ๊ด๋ฆฌ ๋ฐฉ์์ ๊ฐ๋ ๋ชจ๋ธ๋ง ๋จ๊ณ์์ ๋ช ํํ๊ฒ ์ ์ํ์ง ์์ ํ์ด๋ค. ์๊น์ ๊ด๋ จ๋ ์ ๋ณด๋ ๋๋ค์ผ๋ก ๋ถ์ฌ๋๊ธฐ ๋ณด๋ค, ๋ช ํํ๊ฒ ์ ํด์ ธ ์์ด์ผ ํ๋ค. ํ์ง๋ง ์ด๋ฅผ ์คํฌ๋ฆฝํธ์์ ๊ด๋ฆฌํ๊ฒ ๋ ๊ฒฝ์ฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ํด์ผ ํ๋ ํ์์ฑ์ด ์๊ธด๋ค.
o ํด๊ฒฐ์ : DB์ค๊ณ์ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ๋ฌด์๋ณด๋ค ์ฌ์ด๋ ์ดํํธ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์, ๊ฐ๋ ๋ชจ๋ธ๋ง ๋จ๊ณ์์ ๋ช ํํ ์ํฐํฐ ์๋ณ์ ์ค์์ฑ์ ๋ค์ ํ๋ฒ ๋๋๋ค. ๊ทธ๋ผ์๋ ๊ณ ์์ ํด๊ฒฐ์์ ์๋์ ๊ฐ๋ค.
1) ์๊น ์ ๋ณด ๋ง์คํฐ ํ ์ด๋ธ์ ์ถ๊ฐ
2) ์ด๋๋ถ์-์๊น ์ ๋ณด ๋ฆด๋ ์ด์ ํ ์ด๋ธ์ ์ถ๊ฐ
3) ํ์-์๊น ์ ๋ณด ๋ฆด๋ ์ด์ ํ ์ด๋ธ์ ์ถ๊ฐ
๐ Native Query ๊ฐ์์ ์ํ JPA์ DBMS ์ข ์
o ํ์ : JPQL์ด ์๋ Native Query๋ก ์์ฑ๋ SQL๋ก ์ธํ, DBMS์ ์ ํ ์ ์ค๋ณต ๊ฐ๋ฐ ๋ฐ์.
o ์์ธ : ์๋ธ์ฟผ๋ฆฌ ํน์ Oracle์ ๊ทธ๋ฃนํจ์ ๋ฑ์ด ๋ถ๊ฐํผํ๊ฒ ์ฌ์ฉ๋์๋ค. ์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ ์บ๋ฆฐ๋์ ๋ ๋๋ง์ ์๋ ์ ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ One Query ์๋น์ค์ ์ฌ์ฉ๋์๊ณ , ๋ ์ง์ ๊ด๋ จ ๋ค์ํ ์ ๋ณด๋ฅผ ํ ์ด๋ธ์์ ์กฐํํ๊ธฐ ์ํด Oracle์ ๊ทธ๋ฃน ํจ์ ๋ช ๊ฐ๊ฐ ์ฌ์ฉ๋์๋ค. ํ๋ก์ ํธ์ ๋๋ถ๋ถ SQL์ JQPL๋ก ์์ฑ๋์์ง๋ง, DBMS ์ ํ์์๋ ์๊ธฐ์ Native Query์ ์ผ์ผ์ด ๋ชฉํ DBMS์ ๋ง๊ฒ ์์ ํด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ค๋ณต ๊ฐ๋ฐ์ด ๋ฐ์ํ๋ค.
o ํด๊ฒฐ์ : ๋ช ํํ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์์ง๋ง, Native Query๋ฅผ JPQL๋ก ๋์ฒดํ๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํด์ผ ํ๋ค. ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋์ฒดํ๋ฉฐ ์ฑ๋ฅ์ ํ๋ฅผ ๋ง๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ณ ์ํ๊ฑฐ๋, QueryDSL์ ์ฌ์ฉํ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณผ ์ ์๋ค.
๐ Stateless ์ธ์ ์ ์ฑ ์ ์ํด, ๋ชจ๋ Ajax ์์ฒญ์ ์ธ์ฆ ์คํจ
o ํ์ : Ajax ์์ฒญ์๋ง ์ ํจํ์ง ์์ ์ธ์ ID๊ฐ ๋ด๊ฒจ์์๋ค. ์์ํจ์ ๋๊ปด Ajax ๊ฐ ์๋ ๋ค๋ฅธ ์์ฒญ์ ์ธ์ ID ๋ฅผ ๋ถ์ํด ๋ณธ ๊ฒฐ๊ณผ, ์๋ฒ์์ ์ธ์ฆ ๊ฐ๋ฅํ ์ธ์ ID๋ฅผ ๋งค๋ฒ ์๋ก ๋ง๋ค์ด์ฃผ๊ณ ์์๋ค.
o ์์ธ : ์ธ์ ์ ์ฑ ์ Stateless ๋ก ์ค์ ํด ๋ ๊ฒ์ด ์์ธ. ๋น๋๊ธฐ ํต์ ์ธ AJAX๋ Statelessํ SessionID๋ฅผ ๋ณด์ฅํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
o ํด๊ฒฐ์ : ์ธ์ ๊ด๋ฆฌ ๋ฐฉ์์ Default ๋ฐฉ์์ธ IF_REQUIRED๋ก ์์ . ๋ฐ๋ผ์ ํ๋์ ์ธ์ ID๊ฐ ์ ์ง๋๋๋ก ํจ(Statefull).
์์ธ๋ถ์์ ํ๋ฉด์ ์๋์น ์๊ฒ CORS์ ์ฑ ์ ๊ดํด์ ๋ง์ด ๊ณต๋ถํ๊ฒ ๋์๋ค. ์ด๊ธฐ์๋ "CORS์ ์ฑ ์ ์ํ ์ธ์ฆ ๊ฑฐ๋ถ"๋ฅผ ์์ธ์ผ๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์์ AuthenticationEntryPoint(์ธ์ฆ ์คํจ)์ AccessDeniedHandler(์ธ๊ฐ ์คํจ) ๊ฐ๋ ์ ์์งํ์๊ณ , Session์ Cookie์ ๊ด๋ฆฌ๋ฐฉ์์ ๋์ผ๋ก ๋ณด๋ฉฐ ์ฒด๊ฐํ ์ ์์๋ค.
๐ ๋ค๋ฅธ ์๋ฒ์ ์์ฒญ๊ฐ CORS ์ ์ฑ ์๋ฐ
o ํ์ : ์จ๋๋งจ๋๋ฐฐ์น ์คํ ์์ฒญ(API์๋ฒ -> ๋ฐฐ์น์๋ฒ)์ ๋๋ฉ์ธ ๋ถ์ผ์น๋ก ์ธํ CORS ์ ์ฑ ์๋ฐ
o ์์ธ : ํ๋ก๊ทธ๋จ์ ์ค๊ณ์, ์์์ด ์๋น์ค๋๋ ์ต์ด ๋๋ฉ์ธ์ API์๋ฒ(8080 port)์ ๋๋ฉ์ธ์ด์ง๋ง ์จ๋๋งจ๋ ๋ฐฐ์น ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ฐฐ์น ์๋ฒ(8081 port)์์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ CORS์ ์ฑ ์ ์๋ฐ์ ํผํ ์ ์์๋ค.
o ํด๊ฒฐ์ : JSONP๋ฅผ ์ด์ฉํ GET๋ฐฉ์ ์์ฒญ์ ํตํด, CORS๋ฅผ ์ฐํํ ์์ฒญ์ ๋ฐฐ์น์๋ฒ๋ก ๋ณด๋ผ ์ ์์๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์ ๊ธฐ ๋ฐฐ์น ๋์ค ์คํจํ ๋์์ ์ฌ์ํํ๋ ์๋น์ค๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๐ JpaPagingItemReader์ N+1 ๋ฌธ์
o ํ์ : chunk size = 1 ์กฐ๊ฑด์์ ๋ฌธ์ ๊ฐ ๋ฐ์. ์๋ฅผ ๋ค์ด 6๊ฑด์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์, [2,4,6] ๋ฒ์งธ Item์ processor๋ก ์ ๋ฌ๋์ง ์๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์.
o ์์ธ : ๋ก๊ทธ ๋ถ์ ๊ฒฐ๊ณผ, [1,3,5] ๋ฒ์งธ Item์ ์กฐํํ ๋ ๊ฐ๊ฐ 2๋ฒ์ select qeury๊ฐ ์คํ๋์ด [2,4,6] ๋ฒ์งธ Item์ด through pass ์ฒ๋ฆฌ๋จ.
o ํด๊ฒฐ์ : ์์์ ์ผ๋ก chunk size = 1000 ์ผ๋ก ์ค์ ํ์ฌ ํด๊ฒฐํจ. ItemReader์ queryString join๋ฌธ ๋ถ๋ถ์ fetch๋ฅผ ์ฝ์ ํ์ฌ ํด๊ฒฐํ๋ ๋ฐฉ์์ ํ ์คํธํ ์์ .
๐ ๋ค์ค์๋ฒ ํ๊ฒฝ์์ ์ธ์ฆ/์ธ๊ฐ ๋ฉ์ปค๋์ฆ์ ์ดํด
o ํ์ : 2๊ฐ์ ์๋ฒ(API์๋ฒ, ๋ฐฐ์น์๋ฒ) ์ ๋จ์ผ DB์ ์ํคํ ์ฒ๋ก ์ค๊ณํ์๋ค.
o ์์ธ : ์ธ์ฆ/์ธ๊ฐ ์ ๋ณด๋ฅผ ๋ ์๋ฒ๊ฐ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค. ๋ก๊ทธ์ธ์ API์๋ฒ๋ฅผ ํตํด ์ฒ๋ฆฌ๋์ด์ผ ํ์ง๋ง, ๋ฐฐ์น์๋ฒ ๋ํ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค. ์ด์ ๋ [API์๋ฒ -> ๋ฐฐ์น์๋ฒ] ์์ฒญ ์ค ADMIN ๊ถํ์ ์๊ตฌํ๋ API๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
o ํด๊ฒฐ์ : ๋ค์ํ ์๋ฃจ์ ์ด ์กด์ฌํ์ง๋ง, ๊ทธ ์ค Redis Cach DB ๋ฅผ ๋์ด ์ธ์ ์ ์ฅ์๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ํํ๋ค. ๋น๋ฒํ ๋ก๊ทธ์ธ ๊ณผ์ ์์ Main DB์ I/O๊ฐ ๊ฐํด์ง์ง ์๋ ๋ค๋ ์ ์ด ํฐ ์ฅ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ํ๋ก๊ทธ๋จ์ ๊ฐ์ฅ ์ ํฉํ ์ธ์ฆ/์ธ๊ฐ ํ๊ฒฝ์ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๋ค์ํ ์ํคํ ์ฒ์ ๋ฉ์ปค๋์ฆ๊ณผ ์ฅ๋จ์ ์ ๊ณต๋ถํ ์ ์์๋ค.
๐ ํ๋ผ๋ฏธํฐ ๋ณ์กฐ ์ทจ์ฝ์ ๋ฐ ๋ฐฉ์ด์ ์ดํด
o ํ์ : ์ ๊ทผ ๊ถํ์ด ์๋ ์์(๋ค๋ฅธ ์ฌ๋์ ์ด๋์ผ์ง, ํ ๊ทธ๋ฃน์ ๊ทธ๋ฃน์ ๋ณด ๋ฑ)์ ์ ๊ทผ์ด ํ์ฉ๋จ
o ์์ธ : ๋ํ์ ์ธ ์น ํดํน ๋ณด์ ์ทจ์ฝ์ ์ธ "ํ๋ผ๋ฏธํฐ ๋ณ์กฐ" ์ทจ์ฝ์ ์ด ๋ ธ์ถ ๋์ด์์๋ค.
o ํด๊ฒฐ์ : ์ปจํธ๋กค๋ฌ ๊ณ์ธต์์ ๊ถํ๊ฒ์ฌ๋ฅผ ์ํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ์๋ค. ๋ก๊ทธ์ธ Session์ ๋ณด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋น๊ตํ์ฌ ๊ถํ๊ฒ์ฌ๋ฅผ ์ํํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์คํ๋ง์ํ๋ฆฌํฐ์ ๊ธฐ๋ฅ์ ํ์ฉํด ๊ฐ๋จํ๊ฒ ๋ฐฉ์ดํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ณด์์ง๋ง ๋พฐ์กฑํ ์๊ฐ ์์ด ๋ณด์๊ธฐ ๋๋ฌธ์, ๊ถํ๊ฒ์ฌ ๋ก์ง์ ์ผ์ผ์ด ์ฝ์ ํด์ผ ํ๋ค. ์ด๋์ผ์งID, ํ์ID, ๊ทธ๋ฃนID ๋ฑ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ๋ณธ ์๋น์ค์์ ๋ฌด์ฌ์ฝ ๋ฐ์ํ ์ ์๋ค๋ ์ ์ ์๊ธฐํ๋ฉฐ, ๋ค์ ํ๋ฒ ์ํ์ด ์ฝ๋ฉ์ ์ค์์ฑ์ ์ผ๊นจ์ ๋ค.