๐ SESSION 01: ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ๋ง์ดํฌ๋ก์๋น์ค ์ฌํ๊ธฐ(๊น์ํ)
๋งค๋ ์ฃผ๋ฌธ ์๊ฐ ํ๊ท 3๋ฐฐ ์ด์ ์ฆ๊ฐํ ์ ๋๋ก ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๋ค.
2015
- ํ๋ฃจ ์ฃผ๋ฌธ์ 5๋ง ์ดํ
- MS SQL + PHP,ASP
- ๋๋ถ๋ถ ๋ฃจ๋นDB(MS SQL) ์คํฐ์ด๋ ํ๋ก์์ ๋ฐฉ์ ์ฌ์ฉ
- ํ๋์ ๋ฃจ๋นDB๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฅ์ ์ ์ ์ฒด ์๋น์ค์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ค.
2016
- ํ๋ฃจ ์ฃผ๋ฌธ์ 10๋ง ๋ํ
- PHP์์ Java๋ก ๋ณ๊ฒฝ
- ๋ง์ดํฌ๋ก์๋น์ค ๋์ ์์ (๊ฒฐ์ ์๋น์ค)
- ๊ฒฐ์ , ์ฃผ๋ฌธ์ค๊ณ ๋ ๋ฆฝ
- IDC์์ AWS ํด๋ผ์ฐ๋ ์ธํ๋ผ๋ก ์ด์ ์์
์นํจ ๋๋์ค
- ์ ์ฐฉ์ ๊ฒฐ์ ํ ์ธ ์ด๋ฒคํธ (7์ฒ ์ ํ ์ธ)
- ํ๋ก ํธ ์๋ฒ -> ์ฃผ๋ฌธ -> ๊ฒฐ์
- ๋ง์ ํธ๋ํฝ์ผ๋ก ์ธํด ํ๋ก ํธ ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ ธ๋ค.
- IDC์์ ํ๋ฃจ ๋ง์ AWS๋ก ์ด์ (์ฅ๋น 100๋ ์ฆ์ค)
- ํ์ง๋ง ์ฃผ๋ฌธ ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ ค์ ์ฃผ๋ฌธ ์์คํ ๋ AWS๋ก 100๋ ์ฆ์ค
- ๊ฒฐ์ ๊น์ง ๋์ด๊ฐ์ง๋ง ์ธ๋ถ PG, ์นด๋์ฌ์์ ์ฃฝ์ด๋ฒ๋ฆผ (2๋ฐฐ ์ฅ๋น ํฌ์ )
2017
- ํ๋ฃจ ์ฃผ๋ฌธ์ 20๋ง ๋ํ (๋ง์ ์ฅ์ ์ ์๋)
- ๋ฉ๋ด, ์ ์ฐ, ๊ฐ๊ฒ ๋ชฉ๋ก ์์คํ ๋ ๋ฆฝ
- ์ฅ์ ๋ฐ์ ์ ํ๊ฒฉ์ด ์ฌํจ.
2018 ์๋ฐ๊ธฐ
- ์ ์ฌ 1์์ ๊ณผ์ ๋ ์์คํ ์์ ์ฑ
- N ๊ณต๊ณ ํญํ์ํค๊ณ ์ฅ์ ๋์ TF ์ฐฝ์ค
- ์ฟ ํฐ, ํฌ์ธํธ ํ๋ฃจ๋น
- ์คํ๋ผ์ธ ๋ชจ๋ ์ ์ฉ
- ์ ๊ท ๊ฐ๊ฒ์์ธ -> 1๋ถ~5๋ถ ์ฃผ๊ธฐ๋ก ํฐ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค AWS ๋ค์ด๋๋ชจ DB์ ์ฌ๋ ธ๋ค.
2018 ํ๋ฐ๊ธฐ
- ์ฃผ๋ฌธ, ๋ฆฌ๋ทฐ ํ๋ฃจ๋น
- ๋ชจ๋ ๋ถ๋ถ์์ ์ฃผ๋ฌธ ์์คํ ์ด ์ฎ์ด๊ธฐ ๋๋ฌธ์ ์ปค๋จธ์ค ๋๋ฉ์ธ์์ ๊ฐ์ฅ ๋ณต์กํ๋ค.
- ๋ ๊ฑฐ์ 3๋์ฅ - ์ฃผ๋ฌธ, ๊ฐ๊ฒ/์ ์ฃผ, ๊ด๊ณ
- ๊ธฐ์กด API ๊ธฐ๋ฐ์ด๋ผ ์ฃผ๋ฌธ ์์คํ ์ด ๋ค๋ฅธ ์์คํ ์ ์ํฅ์ ๋ฏธ์ณค๋ค. ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด์ ์ฅ์ ๊ฐ ๊ธ๊ฒฉํ๊ฒ ์ค์ด๋๋ ํจ๊ณผ๋ฅผ ๋ดค๋ค.
๋จผ๋ฐ์ด ์ํคํ ์ฒ
- ๋์ฉ๋ ํธ๋ํฝ์ ์ด๋ป๊ฒ ๋์ํ ๊ฒ์ธ๊ฐ?
- ๋ฉ์ธ, ๊ฐ๊ฒ ๋ฆฌ์คํธ, ๊ฐ๊ฒ ์์ธ API๋ ์ด๋น 15,000ํ ํธ์ถ
- ๋ชจ๋ ์์คํ ์ด ๋์ฉ๋ ํธ๋ํฝ์ ๊ฐ๋นํ๊ธฐ๋ ์ด๋ ต๋ค. ํธ๋ํฝ๋ณด๋ค ์ ํ์ฑ์ด ๋ ์ค์ํ ์์คํ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ๊ฒ๋ ๊ด๊ณ ๊ฐ์ ๋ด๋ถ ์๋น์ค๋ DB์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๊ณ ๊ฐ ์๋น์ค๋ฅผ ์ ์งํ๊ณ ์ฃผ๋ฌธ์ด ๊ฐ๋ฅํด์ผ ํ๋ค.
- ๋ง์ดํฌ๋ก์๋น์ค๋ ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ๋๊ธฐํ๋ฅผ ์์ผ์ผํ ์ง ๊ณ ๋ฏผ์ด ์์๋ค.
- ํด๊ฒฐ ๋ฐฉ์ - CQRS ์์คํ ์ผ๋ก ๊ฒฐ์ , ํต์ฌ ๋น์ฆ๋์ค ๋ช ๋ น ์์คํ , ์กฐํ ์ค์ฌ ์๋น์ค๋ฅผ ๋ถ๋ฆฌ
- ์ฅ์ ๊ฒฉ๋ฆฌ - ๊ฐ ์์คํ ๋ด๋ถ์ ํ์ํ ๋ฐ์ดํฐ ๋ณด๊ดํ๊ณ , ๋ด๋ถ ์๋น์ค์ ๋ชจ๋ ๋ณ๊ฒฝ ๋ด์ญ์ด ์ด๋ฒคํธ๋ก ์ ๋ฌํ์ฌ ์ฅ์ ์ ๋ฐ์ดํฐ ์ฑํฌ๊ฐ ๋ฆ์ด๋ ๊ณ ๊ฐ ์๋น์ค๋ ๊ฐ๋ฅํ๋ค.
์ ๋ฆฌ
- ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ์์คํ ์ ๊ฑฐ๋ํ CQRS
- ์ฑ๋ฅ์ด ์ค์ํ ์ธ๋ถ ์์คํ ๊ณผ ๋น์ฆ๋์ค ๋ช ๋ น์ด ๋ง์ ๋ด๋ถ ์์คํ ์ผ๋ก ๋ถ๋ฆฌ
- ์ด๋ฒคํธ ๋ฐํ์ ํตํ Eventually Consistency(์ต์ข ์ ์ผ๊ด์ฑ)
- ๊ฐ ์์คํ ์ API or ์ด๋ฒคํธ ๋ฐฉ์์ผ๋ก ์ฐ๋
- ๋ง์ดํฌ๋ก์๋น์ค๋ ๊ท๋ชจ๊ฐ ์์ด์ผ ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฑํฌํ๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๋ค์์ ๋ฐ์ํ๋ ๋น์ฉ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋งํผ ๊ฐ์น๊ฐ ์์ด์ผ ๋์ ํ๋ ๊ฒ์ด ๋ง๋ค๊ณ ์๊ฐํ๋ค.
๐ SESSION 02: ๋ฐฐ๋ฏผ ํ๋ก ํธ์๋ฒ์ ์ฌ์ค๊ณผ ์คํด(๊ถ์ฉ๊ทผ)
ํ๋ก ํธ ์๋ฒ๋?
์ฌ์ฉ์ ์ ๋ฉด ์๋ฒ (์ ์ ์์คํ ๋ฑ ๋ค์ํ ์ฉ์ด๋ค์ด ์์ง๋ง ์ฌ๊ธฐ์ ํ๋ก ํธ ์๋ฒ๋ผ๊ณ ๋ช ์นญํ๋ค)
ํ๋ก ํธ ์๋ฒ์ ๊ธฐ์ ์ ๋จ์ํ๋ค?
- Spring, MVC, Redis๋ฅผ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์์ํ๋ค.
- ์ ๋ง์ ์ธ๋ถ ์๋น์ค์ ์ค์๊ฐ ์ํ๊ฐ ํ์ํ๋ค.
- ex) 1๊ฐ ๊ฐ๊ฒ ๋ ธ์ถํ๋๋ฐ ํ์ํ ์ธ๋ถ ์์ฒญ ์๋ 13๊ฐ๊ฐ ์ด๋ค. ์์ฒญ๋ง๋ค 50ms๊ฐ ์์๋๋ค๊ณ ํ๋ฉด 650ms๊ฐ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ฌ์ฉ์ ์ ์ฅ์์ ๋๋ฆฌ๊ฒ ๋๊ปด์ง ์ ์๋ค.
- ๋ฐ๋ผ์ ๋น๋๊ธฐ๋ก ์์ ํด์ผ ํ๋ค. ํ์ง๋ง ์ค๋ ๋ ์ง์ฅ์ ๋ง์ฃผํ ์ ์๋ค.
- ๋๊ธฐ ์ํฉ์์ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ Non-Blocking I/O๊ฐ ํ์ํ๋ค.
- Spring 5์ WebFlux๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ ๊ธฐ์ ๊ณผ ํจ๋ฌ๋ค์์ด ๋ฌ๋ผ ๊ธฐ์ ์ ์ธ ํฐ ๋์ ์ด ํ์ํ ์ ํ์ด์๋ค.
- ๋ง์ ๋์ ์์ฒญ, ํธ๋ํฝ, ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํด์ผ ํ๊ธฐ์ WebFlux๋ฅผ ์ฌ์ฉํ๋ค.
- MSA ์ต์ ๋ฐฉ
- CQRS - ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋ถ๋ฆฌํ๋ ์์คํ
- ์ ํฉ์ฑ์ด ์ค์ํ ์์คํ ๊ณผ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์๋ต๊ณผ ์ข์ ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ์์คํ ์ ๋ถ๋ฆฌ
- Eventually Consistency(์ต์ข ์ ์ผ๊ด์ฑ) - ์ง์ ์์ฒญํ๋ ๊ฒ์ด ์๋ ์ด๋ฒคํธ๋ฅผ ๋ฐํํ์ฌ ์ค์ค๋ก ํ ์ผ๋ง ์ํ๋ฉด ๋์ด์ ๊ฐ ์์คํ ์ด ์ ํฉ์ฑ์ด ๋์์ง ์ ์๋ค. ์ด๋ฒคํธ๋ ์ ์ค๋์ง ์๋ ํ์ ๋ณด๋ด์ด ์์ ํ๋ ์์คํ ๋ค์ ์ด๋ฒคํธ๋ฅผ ์ธ์ ๊ฐ๋ ์์ ํ ์ ์๋ค.
ํ๋ก ํธ ์๋ฒ๋ ๊ฐ์ฒด, ๋๋ฉ์ธ ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์ ํ ์ ์๋ค?
- ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ
- ์ ์ฅ์์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ผ๋ฉด ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์์๊ฐ์ด ์์๋๋ค.
- ์ ์ฅ์์ ์๋ณธ์ ํํ์ ์ ์ฌํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ค๋ฉด ๋ณต๊ตฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์งง์์ง๋ค.
- ์์ ๋ ์์กด ๊ด๊ณ ์์น(SDP) - ๋ถ์์ ์ฑ = ๋๊ฐ๋ ์์กด์ฑ / (๋ค์ด์ค๋ ์์กด์ฑ + ๋๊ฐ๋ ์์กด์ฑ) -> 1์ ๋ถ์์ ํ ์ํ
- ์์ ๋ ์ถ์ํ ์์น(SAP) - ์์ ๋ ์ ๋๋งํผ๋ง ์ถ์ํ๋์ด์ผ ํ๋ค. (๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์ถ์์ ์ธ ๊ฒ๊ณผ ๋ฐ๋๋๋ ๋ง)
- ์์กด ์ญ์ ์์น(DIP) - ์์ ํ ์ชฝ์์ ๋ถ์์ ์ ์์กดํ๋ ๊ฒ์ ์ธํฐํ์ด์ค๋ก ์ถ์ํํ์ฌ ์์กด์ ์ญ์ ํ ์ ์๋ค.
- ๋๋ฉ์ธ์ ๊ดํ์ฌ
- MSA๋ ํฐ ๋ฌธ์ ๋ฅผ ๋ถํ ํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด ๋ฌธ์ ๋ฅผ ํ์ด๊ฐ๋ค.
- ํ๋ก ํธ ์๋ฒ๋ ์์ ๋ฌธ์ ๋ฅผ ๋ค์ ๋ชจ์ ํฐ ๋ฌธ์ ๋ฅผ ํ์ด๋๊ฐ๋ค.
- Serivce๋ API ์ ๋ณด์ ๋ฐ์ดํฐ๋ค์ ์ ๋ณด๋ฅผ ์กฐํฉํด์ผ ํ๋๋ฐ ์ด๋ฌ๋ฉด ์๋น์ค๋ ๋๊บผ์์ง ์ ๋ฐ์ ์๋ค.
- Service๋ ์์์ผ ํ๋ค.
- ๋น๋ํด์ง ์๋น์ค๋ฅผ ๋๋ฉ์ธ ์ชฝ์ผ๋ก ํก์ํ์ฌ ์์ ์๋น์ค๋ก ๋ง๋ค๊ณ , ๋ฉ์ธ์ด ๋ ๋ฑ๋ฑํด์ง๋ ๋งํด ํ์ธ๋ฌ์ ์ด์์ ์ธ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๐ SESSION 03: ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ DB IDC ํ์ถ๊ธฐ(๋ฐ์ฃผํฌ)
๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์ ๊ธฐ์น์ ๊ฒฐ๋ก ๋๋ ์ ์ดํด๋ณด๋๋ก ํ๋ค.
๊ธฐ: ์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ง ๊ณผ์
- ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ก๋๋ ์ฆ๊ฐํ๊ณ ์๋น์ค๋ ์ฑ์ฅํ๊ณ ์์๊ธฐ์ ์์คํ ์ ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ค.
- ์ด๊ธฐ์ ํต์ง ๋ชจ๋ธ๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ, ๋ฐฐํฌ ํ ์ ์์์ง๋ง, ๋ณํ์ ๋ํด ๋ช๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์
- ์ฅ์ ํ์ฐ - ํ๋์ DB๋ฅผ ๊ณต์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์๋น์ค์ ์ ํํ ์ ์๋ค. (์ํ๋ ์๊ฐ์ ์ํ๋ ๊ฒ์ ๋จน์ง ๋ชปํจ)
- ํธ๋ํฝ ์ฆ๊ฐ ๋์ ๋ถ๊ฐ - ์ ์ฌ, ์ ๋ ์๊ฐ ํธ๋ํฝ์ด ์์ญ๋ฐฐ ์ฐจ์ด๊ฐ ๋๋ค.
- ์ ๊ท ์๋น์ค ๊ฐ๋ฐ ์๋ ์ ํ - ๊ด๋ จ๋ ๋ชจ๋ ํ ์ด๋ธ์ ๋ถ์ํ๊ณ ์์ ํด์ผ ํ๊ธฐ์ ๋ณต์ก๋๊ฐ ๋งค์ฐ ์ฆ๊ฐํ์๋ค.
์น: ์ฐ์ํํ์ ๋ค์ ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ , ๊ทธ ์์
- ๋ฌ๋ฆฌ๋ ์๋ ์ ๋ฐํด๋ฅผ ๋ค๋ ๊ฒ์ด ์ฝ์ง ์๋ค.
- AWS ๋์ , MSA ๊ตฌ์กฐ ๋์
- ์์กด๋๋ฅผ ๋ฎ์ถ๋ ์์ ์ ํ๋ค.
- ๋ฐ์ดํฐ ์ฑํฌ๋ฅผ ์ ์งํ๋ ๊ฒ์ ์๋ฒฝํ๊ฒ ๊ทน๋ณตํ์ง ๋ชปํ๋ค.
์ : ์คํจ์ ์ฑ์ฅ
- ๋ชจ๋๋ฆฌํฑ ๊ตฌ์กฐ๋ฅผ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ผ๋ก ์ด๊ดํ๋ ์์ ์ ํ๋ค.
- ๋น์ ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๊ฐ๋นํ ์ ์์๋ค. (์ฝ๋ผ๋ฆฌ๋ฅผ ๋์ฅ๊ณ ์ ๋ฃ์ ์ ์์๋ค) ์ด์ ๊ฐ์ ์ด์ ๋ก ์คํจํ์๋ค.
- ์คํจ ์ด์ - ๊ธฐ์ ์ ๋ณต์ก๋ ์ฆ๊ฐ, ๋น์ฉ ์ ๊ฐ ํจ๊ณผ ๋ฏธ๋น, ๋ถ์กฑํ ํ์ฅ์ฑ
- ๊ธฐ์กด ๋ฉ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ์ค์ผ์ผ ์์์ผ๋ก ํธ๋ํฝ ๋์์ด ํ๋ค์ด์ ์ค์ผ์ผ ์ ์ ํ์์ง๋ง ์ต๊ณ ์คํ์ ์ฅ๋น๋ฅผ ๊ฐ์ ธ ๋ ์ด์์ ํ์ฅ์ ํ๋ค์๋ค.
๋๊ฐ์ง ์ ๋ต
- ๋ฌด์ค๋จ ๋ง์ด๊ทธ๋ ์ด์
- ๋ง์ด๊ทธ๋ ์ด์ ๋ฒ์๊ฐ ๋๊ณ , ์๋น์ค ์ค๋จ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ ํฉํ๋ค.
- ๋ง์ด๊ทธ๋ ์ด์ ์ค ์ง์์ ์ธ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
- Validation์ ์ํ ์ถฉ๋ถํ ์๊ฐ์ด ํ์ํ๋ค.
- Master-Standby ๊ตฌ์กฐ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ดํ ์ด์ ๋ฐ์ ์ ๋น ๋ฅธ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.
- ๋น ๋ฅธ ๋ง์ด๊ทธ๋ ์ด์
- ์๋น์ค ์ด์ ์๊ฐ์ด ์ ํ ๋์ด ์๊ฑฐ๋, ๋ด๋ถ ์ด์์ ์ํด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ํฉํ๋ค.
- ์๋น์ค ์ค๋จ์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ ์ ์๋ค.
- ์ถ๊ฐ ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ณผ์ ์ ์๋ต ํ ์ ์๋ค.
๊ฒฐ: ๋ถ๊ฐ๋ฅํ ์ค ์์๋ ์ผ
- 600๊ฐ ์ด์์ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๊ตฌ์ฑ
- ์ํคํ ์ฒ ์ต์ ํ, ๋ก ์นญ ์๊ฐ ๋จ์ถ, ์ฅ์ ํ์ฐ ๋ฐฉ์ง
- ์๋น์ค ๋จ์ ์ฑ๋ฅ ์ต์ ํ(์ค์ผ์ผ ์ , ์ค์ผ์ผ ์์์ ์ ์ ํ๊ฒ ํ์ฉ), ๊ฐํ๋ ๋ชจ๋ํฐ๋ง
๐ SESSION 04: ๊ฒ๋ฐ์์ด ์นํจ์ ๊ณจ๋ ํ์์ ์งํค๊ธฐ ์ํด ๋ฐฐ๋ฏผ์ด ํ๋ ์ผ(์ด์ฌ์ผ)
๋ฌธ์ ์
- ์๋ ๋์ฐฉ ์์ ์๊ฐ๋ณด๋ค ๋ฆ๊ฒ ๋ฐฐ๋ฌ๋ ํ๋ฅ ์ด ๋์ ์ ์๋ค.
- ๋ฌด๋ฆฌํ ๋ฐฐ์ฐจ๋ก ์ฌ๊ณ ๊ฐ ์ผ์ด๋ ์ ์๋ค.
- ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ค.
AI ์ถ์ฒ๋ฐฐ์ฐจ(beta)
- 1๋จ๊ณ: ๋น์ฉ์ ๊ณ์ฐํ์
- 2๋จ๊ณ: ๊ฒฝ๋ก ์ ํ (๋ด ์นํจ์ ์ด๋์ ๋ผ์ด๋ค์ง?) - ๋ชจ๋ ๊ฒฝ๋ก ๊ณ์ฐ
- ํ๋์ ์ฃผ๋ฌธ์ ๋ํด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง์๋ฐ ๋ฌธ์ ๋ ๋ง์ ์ฃผ๋ฌธ์ด ์ผ์ด๋๋ค.
- Greedy Algorithm(ํ์ ์๊ณ ๋ฆฌ์ฆ) ํ์ฉ
- ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ธฐ ๋ณด๋ค ์ต๋ํ ๊ทผ์ฌ๊ฐ์ ๊ตฌํ๋ค.
- n๊ฐ ๋ฐฐ๋ฌ ์ํํ๋ ์ต์ ๊ฒฝ๋ก = n-1๊ฐ ๋ฐฐ๋ฌ์ ์ํํ๋ ์ต์ ์ ๊ฒฝ๋ก ์ค ๋ฐฐ๋ฌ์ ์ฌ์ด ์ฌ์ด์ ์ฒ๋ฆฌํ ์ ์๋ ๋ชจ๋ ๊ฒฝ๋ก์ค ์ต์ ์ ๊ฒฝ๋ก
- ์ต์ ์ ๋น์ฉ๋ณด๋ค, ๊ฐ๋ฅํ ๋ฎ์ ๋น์ฉ์ ๊ณ์ฐํ ์ ์๋ค.
- 3๋จ๊ณ: ์ต์ ์ ๋ผ์ด๋ ์ ์
- ์ ๊ท ๋น์ฉ - ์ด์ ๋น์ฉ์ด ๊ฐ์ฅ ์ ์ ๋ผ์ด๋ ์ ์
- 4๋จ๊ณ: ๊ฑฐ๋ฆฌ๊ฐ ์ง์ ๊ฑฐ๋ฆฌ๋ ์ข ๊ทธ๋ ์์์?
- ์ง์ ์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ค๋ฉด ์ฐ์ ๋์ด๊ฐ ์๋ ์๋ค.
- OSRM - ์ต์ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ ์คํ์์ค ํด
- ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ
- ๊ผญ ์ ํํ ์ค๊ฑฐ๋ฆฌ๋ ์๋์ฌ๋ ๋๋ค.
- ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ Cached์ฌ์ผ ํ๋ค.
- ๋ฏธ๋ฆฌ ๋ชจ๋ ๊ณ์ฐํด์ ์ ์ฅํ ์๋ ์์๊น? - REDIS ์ ํ
๋ง์ง๋ง ๋๊ด
- ๋ฉ์น๊ฐ ํฐ ๋ฐ์ดํฐ
- ๋ฐ์ด๋๋ฆฌ ์์ถ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ ๋น ๋ฅธ ๊ตฌํ์ ์ํด ๋ฐ์ดํธ๋ก ์ ์ก
๐ SESSION 07: ์์ญ์ต๊ฑด์์ QUERYDSL ์ฌ์ฉํ๊ธฐ(์ด๋์ฑ)
์ ์ฌ๋ ๋ฐ์ดํฐ๊ฐ 1000๋ง๊ฑด์์ 10์ต๊ฑด๊น์ง ๋๋ ๊ณผ์ ์์ ์ป์ Querydsl-JPA ๊ฐ์ TIP์ ๋ํด ์๊ฐํ๊ณ ์ ํ๋ค.
์๋ฐ์
- extends / implements ์ฌ์ฉํ์ง ์๊ธฐ
- ๋งค๋ฒ ์ธํฐํ์ด์ค/Impl ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค.
- ๊ผญ ๋ฌด์ธ๊ฐ๋ฅผ ์์/๊ตฌํ ๋ฐ์ง ์๊ฑฐ๋, ํน์ ์ํฐํฐ๋ฅผ ์ง์ ํ์ง ์๋๋ผ๋ Queydsl์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๋ค.
- JPAQueryFactory๋ง ์์ผ๋ฉด Querydsl์ ์ฌ์ฉํ ์ ์๋ค. (extends/implements ์ ๊ฑฐ ๊ฐ๋ฅ)
- if๋ฌธ์ผ๋ก ๋ถ๊ธฐ์ฒ๋ฆฌํ๋ฉด ์ด๋ค ์ฟผ๋ฆฌ์ธ์ง ํ์ ํ๊ธฐ ํ๋ค๊ธฐ ๋๋ฌธ์ ๋์ ์ฟผ๋ฆฌ๋ BooleanExpression๋ฅผ ์ฌ์ฉํ๋ค.
์ฑ๋ฅ๊ฐ์ - Select
- exist ๋ฉ์๋๋ฅผ ๊ธ์งํ๋ค.
- exists๊ฐ ๋น ๋ฅธ ์ด์ ๋ ์กฐ๊ฑด์ ํด๋นํ๋ ๋ฐ์ดํฐ 1๊ฐ๋ง ์ฐพ์ผ๋ฉด ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ผ์๋ ๊ธ์งํ๋ ์ด์ ๋ Querydsl์ exsists๋ ์ค์ ๋ก count() > 0 ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
- JPQL์ from ์์ด๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค. ๊ทธ๋์ ์ด๋ฅผ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
- limit 1๋ก ์กฐํ๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ ์กฐํ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด null์ด๋ผ์ ์ฒดํฌํด์ค์ผ ํ๋ค. (์ด ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด ์ฑ๋ฅ์ ํฐ ์ฐจ์ด๊ฐ ์๋ค)
- Cross Join ํํผํด์ผ ํ๋ค. ๋ฌต์์ Join์ผ๋ก Cross Join์ด ๋ฐ์ํ๋๋ฐ Hibernate ์ด์๋ผ์ Spring Data JPA๋ ๋์ผํ๊ฒ ๋ฐ์ํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ช ์์ Join์ผ๋ก Inner join์ ๋ฐ์์ํค๋ ๊ฒ์ด๋ค.
- Entity ๋ณด๋ค Dto๋ฅผ ์ฐ์ ์ผ๋ก ํ๋ค. Entity ์กฐํ์ Hibernate ์บ์ ๋ถํ์ํ ์ปฌ๋ผ์ ์กฐํํ๋ฉฐ OneToOne N+1 ์ฟผ๋ฆฌ ๋ฑ ๋จ์ ์กฐํ ๊ธฐ๋ฅ์์๋ ์ฑ๋ฅ ์ด์ ์์๊ฐ ๋ง๋ค.
- ์กฐํ ์ปฌ๋ผ์ ์ต์ํ ํด์ผ ํ๋๋ฐ ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์๊ณ ์๋ ์ปฌ๋ผ์ ์ ์ธํ๋ฉด ์ข๋ค.
- Select ์ปฌ๋ผ์ Entity ์์ - id ์ปฌ๋ผ์ ์กฐํํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ์ด์ ์ด ํฌ๋ค.
- Group By ์ต์ ํ
- MySQL์์ Group By๋ฅผ ์คํํ๋ฉด Filesort ๊ฐ ํ์๋ก ๋ฐ์ํ๋ค.
- MySQL์์ order by null์ ์ฌ์ฉํ๋ฉด ์ ๊ฑฐ ๊ฐ๋ฅํ๋ค.
- Querydsl์์ order by null ๋ฌธ๋ฒ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด ํด๋์ค๋ฅผ ์์ฑํด์ ์ ์ฉํ๋ค.
- ์ ๋ ฌ์ด ํ์ํด๋ ์กฐํ ๊ฒฐ๊ณผ๊ฐ 100๊ฑด ์ดํ๋ผ๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋ ฌํ๋ ๊ฒ์ด ์ข๋ค. ๋จ, ํ์ด์ง์ผ ๊ฒฝ์ฐ order by null์ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
- ์ปค๋ฒ๋ง ์ธ๋ฑ์ค
- ์ฟผ๋ฆฌ๋ฅผ ์ถฉ์ ์ํค๋๋ฐ ํ์ํ ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ๊ณ ์๋ ์ธ๋ฑ์ค
- select/where/order by/group by ๋ฑ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค์ ํฌํจ๋ ์ํ
- JPQL์ from์ ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง ์๋๋ค.
- Cluster Key(PK)๋ฅผ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ๋น ๋ฅด๊ฒ ์กฐํ ํ, ์กฐํ๋ Key๋ก SELECT ์ปฌ๋ผ๋ค์ ํ์ ์กฐํํ๋ค.
- ๋ ๋ฒ์ ๋คํธ์ํฌ ์ฐจ์ด๋ฅผ ์ ์ธํ๊ณ ๋น์ทํ ์ฑ๋ฅ์ ๊ฐ์ง ์ ์๋ค.
์ฑ๋ฅ๊ฐ์ - Update/Insert
- ์ผ๊ด Update ์ต์ ํ
- ๋ฌด๋ถ๋ณํ DirtyChecking์ ๊ผญ ํ์ธํด๋ด์ผ ํ๋ค.
- 1๋ง๊ฑด ๋จ์ผ ์ปฌ๋ผ ๊ธฐ์ค ์ฝ 2000๋ฐฐ๋ ์ฐจ์ด๋๋ค.
- ์ผ๊ด Update๊ฐ ํญ์ ์ข์ ๊ฒ์ ์๋๋ค. ํ์ด๋ฒ๋ค์ดํธ ์บ์๋ ์ผ๊ด ์ ๋ฐ์ดํธ์ ์บ์ ๊ฐฑ์ ์ด ์๋๊ณ ์ ๋ฐ์ดํธ ๋์๋ค์ ๋ํ Cache Eviction์ด ํ์ํ๋ค.
- DirtyChecking์ ์ค์๊ฐ ๋น์ฆ๋์ค ์ฒ๋ฆฌ ๋ฐ ์ค์๊ฐ ๋จ๊ฑด ์ฒ๋ฆฌ์ ์ ํฉํ๋ค.
- Querydsl.update๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด๋ก Update ์ฒ๋ฆฌ์ ์ ํฉํ๋ค.
- ์ง์ง Entity๊ฐ ํ์ํ๊ฒ ์๋๋ผ๋ฉด Querydsl๊ณผ Dto๋ฅผ ํตํด ๊ผญ ํ์ํ ํญ๋ชฉ๋ค๋ง ์กฐํํ๊ณ ์ ๋ฐ์ดํธํด์ผ ํ๋ค.
- JPA๋ก Bulk Insert๋ ์์ ํ๋ค.
- JdbcTemplate๋ก Bulk Insert๋ ์ฒ๋ฆฌ๋๋๋ฐ ์ปดํ์ผ์ฒดํฌ, ์ฝ๋-ํ ์ด๋ธ ๋ถ์ผ์น ์ฒดํฌ ๋ฑ Type Safe ๊ฐ๋ฐ์ด ์ด๋ ต๋ค.
- Type Safaํ Bulk Insert๋ฅผ ํ ์ ์์๊น?
- Querydsl != Querydsl-jpa
- JdbcTemplate๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , Querydsl-SQL์ ์ฌ์ฉํ ์ ์์ง ์๋?
- ๋ก์ปฌ PC์ DB๋ฅผ ์ค์นํ๊ณ ์คํ ํ, ๋ก์ปฌ DB ์ ๋ณด๋ฅผ ๋ฑ๋กํด์ flyway๋ก ํ ์ด๋ธ ์์ฑ ํ Querydsl-SQL ํ๋ฌ๊ทธ์ธ์ผ๋ก ํ ์ด๋ธ Scanํ๋ค๋ฉด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋ฒ๊ฑฐ๋กญ๋ค.. -> EntityQL๋ก ๊ฐ๋ฅ? -> ๋จ์ ์ด ๋ช ํํด์ ์ฌ์ฉํ์ง ์๊ณ ์๋ค.
๋ง๋ฌด๋ฆฌ
- ์ํฉ์ ๋ฐ๋ผ ORM / ์ ํต์ Query ๋ฐฉ์์ ๊ณจ๋ผ ์ฌ์ฉํ ๊ฒ
- JPA / Querydsl๋ก ๋ฐ์ํ๋ ์ฟผ๋ฆฌ ํ๋ฒ ๋ ํ์ธํ๊ธฐ
- ์ ์ ๊ฐ๋ฐ์์๊ฒ JPA ์ฑ ์ด๋, RealMySQL ์ฑ ์ ๊ถํ๊ณ ์๋ค.
'Develop' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ IntelliJ: ๋ฉ์๋ ์ฌ์ฉ ์ ๋ณด ํ์ํ๊ธฐ (0) | 2020.09.19 |
---|---|
๐ฃ "์๋ฆฌ์ผ ๋ฐฐํฌํด์ค" (Travis CI) (0) | 2020.04.11 |
๐ช SSH ์ฝ๊ฒ ์ ์ํ๊ธฐ (0) | 2020.03.27 |