2023๋ 10์ 24์ผ ํ ์คํธ ํ ์ ์ ์ฑ๊ณต ํ์ธ๊ตฌ๊ธ๋งํด๋ ์ ๋ง๋ค ์ธํ ์์๊ฐ ๋ค๋ฅด๊ธฐ์ ์ ๋ ์์ ๊ป ์ ์ ์ฑ๊ณตํ jdbc URL ๊ณต์ ํฉ๋๋ค.
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ผ๋ก, ์ด์์ฒด์ ์ ์ฃผ์ ์์ ๋จ์์ด๋ฉฐ ํ๋ก์ธ์ค ๊ด๋ฆฌ๋ ์ด์์ฒด์ ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ญํ ์ ๋๋ค. ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ํ ์คํธ ์ธ์ , ๋ฐ์ดํฐ ์ธ์ , ํ ์์ญ ์ธ์ , ๊ทธ๋ฆฌ๊ณ ์คํ ์์ญ ์ธ์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด์์ฒด์ ๋ ์ปดํจํฐ ์์คํ ์ ํต์ฌ์ผ๋ก, CPU์ ๋๋ฐ์ด์ค ์ปจํธ๋กค๋ฌ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ ์ ํต์ ์ธ ์ปดํจํฐ ์์คํ ์ ์ ์ดํฉ๋๋ค. ์ปดํจํฐ ๋ถํ ์ OS๋ฅผ ๋ก๋ํ๋ Bootstrap ํ๋ก๊ทธ๋จ๊ณผ CPU์ I/O ๋๋ฐ์ด์ค ํต์ ์ ๊ฐ๋ฅ์ผ ํ๋ Interrupts ๋ฑ์ด ์ค์ํ ๊ตฌ์ฑ ์์์ ๋๋ค
์ด์์ฒด์ ๋ ์ปดํจํฐ ์์คํ ์ ์ด์ํ๊ณ ๊ด๋ฆฌํ๋ ์ํํธ์จ์ด๋ก, ์ปดํจํฐ์์ ํญ์ ์คํ๋๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋จ ๋์ ํ๋์จ์ด์ ์ ๊ทผํ์ฌ ์์คํ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ฉฐ, ํ๋ก์ธ์ค ๊ด๋ฆฌ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ด ๋ฌธ์๋ STS์์ ์ฝ๋ฉ ๋ฐ ๋๋ฒ๊น ์ ์ ์ฉํ ๋จ์ถํค ๋ชฉ๋ก์ ์ ๊ณตํฉ๋๋ค. ์ฝ๋ ํธ์ง ๋ฐ ๋๋ฒ๊น ์ ๋ํ ๋ค์ํ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ด๋ณด์๋ถํฐ ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ๊น์ง ์๊ฐ์ ์ ์ฝํ๊ณ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ ๋จ์ถํค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Git๊ณผ SVN์ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์ ํน์ง์ ์๊ฐํ๊ณ , SVN์ ์ฉ์ด์ ๋ช ๋ น์ด๋ฅผ ์ค๋ช ํ๊ณ ์๋ค. SVN์ Client/Server ํ์ ํ์ ๊ด๋ฆฌ ํด, Git์ ๋ถ์ฐ ์ ์ฅ์ ํ์ ํ์ ๊ด๋ฆฌ ํด์ด๋ค.
๋ฆฌ๋ ์ค ๋ช ๋ น์ด์ ๋ํ ์์ฝ๋ฌธ์ ๋๋ค. ls, cd, cat, vi, ps, ifconfig, ping, ssh, grep ๋ฑ ์ฌ๋ฌ ๋ช ๋ น์ด์ ๋ํ ๊ฐ๋จํ ์ค๋ช ์ด ์์ต๋๋ค. ์๋ก์ด ๋๋ ํ ๋ฆฌ ์์ฑ, ํ์ผ ์ญ์ , ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋คํธ์ํฌ ๊ด๋ฆฌ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ด ์๊ฐ๋์ด ์์ต๋๋ค
Tika๋ฅผ ์ฌ์ฉํ๋ฉด MIME Type์ ์ ํํ๊ฒ ํ์ธํ ์ ์์ง๋ง, ํ์ผ ์ด๋ฆ์ ํ์ฅ์๊ฐ ์์ ๋์๋ง ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. MultipartFile์ getContentType() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ธ ํ์ผ ์ ํ ํ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ฌ์ฉ์ด ๊ฐํธํฉ๋๋ค.
Google Java Style Guide ์ฝ๋ฉ ์ปจ๋ฒค์ , Plug-in์ ํตํด Google Java Style Guide ํฌ๋งทํ ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ, Github Actions๋ฅผ ์ด์ฉํ ์ ์ฅ์ ๋ ๋ฒจ ํฌ๋งทํ ์ ์ฉ ๋ฐฉ๋ฒ ๋ฑ์ ๋ํ ๊ฐ์ด๋์ ๋๋ค.
CodeMetrics๋ ์ฝ๋ ๋ณต์ก๋ ํ์ธ ํ๋ฌ๊ทธ์ธ์ผ๋ก, ๋๋ต์ ์ธ ์ฝ๋ ํ์ง ํ์ธ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ณต์ก๋ ๋ ๋ฒจ์ Extreme, High, Normal, Low๋ก ๊ตฌ๋ถ๋๋ฉฐ, ๋ณต์ก๋ ์ ์๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด์๋ if ์ ๋จ์ํ, return, throw ๊ฐ์ ๊ฐ์ ๋ฑ์ ๋ฐฉ๋ฒ ์ฌ์ฉ
Java 10๋ถํฐ ๋์ ๋ var ํค์๋๋ ์ง์ญ ๋ณ์์์๋ง ์ฌ์ฉ๋๋ฉฐ, ์ปดํ์ผ๋ฌ๊ฐ ํ์ ์ ์ถ๋ก ํ๋ค. ์ด๊ธฐํ ํ์ํ๋ฉฐ, null๋ก ์ด๊ธฐํ ๋ถ๊ฐ๋ฅํ๊ณ , ๋ฐฐ์ด๊ณผ ๋๋ค์์๋ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง, ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐ๋ณต๋ฌธ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ด ๋ฌธ์๋ Mockito๋ฅผ ์ฌ์ฉํ Controller ๋จ์ ํ ์คํธ์ ๋ํ ์ค๋ช ๊ณผ ์์ ์ฝ๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. Mockito ์ด๋ ธํ ์ด์ ์ข ๋ฅ์ ๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ๋จ์ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ์ ๋ํ ๋ด์ฉ์ด ๋ค๋ฃจ์ด์ง๋ฉฐ, @WebMvcTest๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ๋ ์๊ฐ๋ฉ๋๋ค.
MockMvc์ Rest Assured๋ ํ ์คํธ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค. MockMvc๋ ์ปจํธ๋กค๋ฌ ๋จ์ ํ ์คํธ์ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฒ๋ฆฌํ๋ค. Rest Assured๋ End-to-End Test ์ ๊ตฌ๊ฐ ํ ์คํธ์ ์ฌ์ฉ๋๋ฉฐ, ์ค์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ด ๋ฌธ์๋ SpringBoot ํ ์คํธ ์ ๋ฐ์ํ๋ DB ๊ฒฉ๋ฆฌ ๋ฌธ์ ์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. `@Transactional` ์ด๋ ธํ ์ด์ ์ผ๋ก๋ ํด๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ `@SpringBootTest`์์์ ๋ฌธ์ ์ ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
AWS EC2 ํ๋ฆฌํฐ์ด t2.micro ์ ํ์์ Jenkins๋ฅผ ๋ฐฐํฌํ๋ฉด ์๋ฒ๊ฐ ์ค๋จ๋ ์ ์๋ค. RAM ์ฉ๋์ด ๋ถ์กฑํ ๋ฌธ์ ๋ swap ํ์ผ์ ๋ง๋ค์ด ํด๊ฒฐํ ์ ์๋ค.
Spring์ @Transactional ์ด๋ ธํ ์ด์ ์, AOP๋ฅผ ์ด์ฉํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํธ๋์ญ์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์ผ๋ฉฐ, ๋กค๋ฐฑ ์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํด์ฃผ๋ ๋ฑ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Java 14์ record class๋ DTO ํด๋์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ ์ฉํ๋ฉฐ, ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ด๊ณ ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์์ฑ์, ๋ฐ์ดํฐ ํ๋, getter ๋ฉ์๋, equals(), hashCode(), toString() ๋ฉ์๋๋ฅผ ์๋ ์์ฑํฉ๋๋ค.
AWS Summit Seoul 2023 ํ๊ธฐ: ์๋ง์ ๊ธฐ์ ๋ค์ด ์ฌ์ฉํ๋ AWS์ ๋ํ ์ปจํผ๋ฐ์ค. ๋ฐํ๋ ๋ค์ํ ์ธ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์๊ณ , ๊ฐ๋ฐ์์ ๋น๊ฐ๋ฐ์ ๋ชจ๋์๊ฒ ํฅ๋ฏธ๋ก์ด ๋ด์ฉ์ด์๋ค. ๋ํ์ ์ธ ์ธ์ ์ผ๋ก๋ ์นด์นด์ค์ AWS ๊ธ๋ก๋ฒ ์ฑํ ์๋น์ค์ ์ฟ ํก์ ๋๊ท๋ชจ ๋ฐ์ดํฐ ํ์ฉ
Dockerfile๋ก ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ, ์์ฑ๋ ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๋น๋ ์ปจํ ์คํธ์ .dockerignore ํ์ผ์ ๋ํ ์ค๋ช ์ด ๋ด๊ธด ๋ฌธ์์ ๋๋ค.
Dockerfile์ ์ปจํ ์ด๋์ ์ค์นํด์ผ ํ๋ ํจํค์ง, ์์ค์ฝ๋, ๋ช ๋ น์ด, ์ ธ ์คํฌ๋ฆฝํธ ๋ฑ์ ํ๋์ ํ์ผ์ ๊ธฐ๋กํด ๋น๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ ๋๊ตฌ์ด๋ค. Dockerfile์ ๋ช ๋ น์ด๋ FROM, LABEL, RUN, ADD, WORKDIR, EXPOSE, CMD ๊ฐ ์๋ค