- Position
- FullStack Developer
- ์ฌ์ง ๊ธฐ๊ฐ
- 2020.11 ~ ์ฌ์ง์ค
- ์
๋ฌด
- ์ค์ธํฐ๋ท ํฌํธ ๋ด์ค์ค ์น์๋น์ค ํ์คํ ๊ฐ๋ฐ https://news.zum.com/
- ๋งค์ฒด์ฌ๋ก๋ถํฐ ๊ธฐ์ฌ๋ฐ์ดํฐ ์ก๊ณ ๋ฐ๊ธฐ ์ํ FTP ์๋ฒ์ NAS ์์คํ ์ด์ ๋์
- ๊ธฐ์ฌ๋ฐ์ดํฐ ๋ฌธ์๋ฅผ ํ์ฑ ํ์ฌ ๋ด์ค์ค DB ์ ์ ์ฅํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
- DB ์ ๊ธฐ์ฌ ๋ฐ์ดํฐ๋ฅผ ํฌํธ์ ๋ ธ์ถํ๊ธฐ ์ํ Rest API ๊ฐ๋ฐ
- ๋ด์ค Backoffice ๊ฐ๋ฐ
- ๋ด์ค Pc ๋ฐ Mobile SSR ์๋ฒ ๊ฐ๋ฐ
- DB ๋ฐ์ดํฐ ์ ์ง๋ณด์๋ฅผ ์ํ Batch ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
โ โ โ Java, Javascript, SpringFramework, Vue.js, MySql, Jooq, Linux, โจJquery, Git, Gitlab, IDC
โ โ Shell script, CSS, Nginx, FTP, SFTP, Redis, Spring Batch, JPA, Quartz, Docker, Jenkins, Javadoc, UnitTest, TDD, Swagger, CrossBrowsing, Ehcache, Redis Sentinel, Kafka
โ dart, Express.js, Nest.js, Flutter, React.js, MongoDB
- ๊ธฐ๊ฐ 2024.03 ~ ์งํ์ค
- ๊ฐ์
- ์ฌ๋ฌ ๋งค์ฒด์ฌ์์ ์ก๊ณ ํ XML ํ์ผ์ ํ์ฑํ์ฌ ๋ด์ค์ค๊ณผ ์ค์ธํฐ๋ท์ ์ฌ๋ฌ ์๋น์ค์์ ๊ธฐ์ฌ ์ปจํ ์ธ ๋ฅผ ๋ ธ์ถํ๊ธฐ ์ํ ํ๋ก์ ํธ. ๊ฒ์์์ง์๋ง ๋ ธ์ถ๋๋ ๊ธฐ์ฌ๋ฅผ ์ก๊ณ ํ๋ ๋งค์ฒด์ฌ์ XML ํ์ฑ ๊ด๋ฆฌ. ๊ฒ์์ ํด ๊ธฐ์ฌ ํ์ฑ ๊ณผ์ ์ค ๊ธฐ์กด ํํฉ๊ณผ ๋ฌธ์ ์ ์ ๋ถ์ํ์ฌ ์ ์ฒด์ ์ธ ๊ฐ์ ์ ์งํํจ
- articles
- ๊ธฐ๊ฐ
- 2024.01 ~ 2024.03
- ๊ฐ์
- ๋งค์ฒด์ฌ๋ก ๋ถํฐ ์ก๊ณ ๋ฐ์ ๊ธฐ์ฌ๋ฐ์ดํฐ ํน์ง์ ๋ถ๋ฅํ์ฌ ์นด์ดํธ๋ฅผ ํต๊ณํ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ. ํต๊ณ ๋ฐ์ดํฐ๋ฅผ CMS ์์ ์ด์๋ด๋น์๊ฐ ์กฐํํ๋ ํ์ด์ง ๊ฐ๋ฐ
- ๋ด์ฉ
- Spring Batch ์ Redis Hash, Set ํ์ ์ ์ด์ฉํ ํต๊ณ๊ตฌํ. ์ธ๋ฑ์ค๊ฐ ์๋ ์ปฌ๋ผ์ผ๋ก ์ธํ MySql์ ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ฌธ์ ํด๊ฒฐ. ์ฒ๋ฆฌ ์๋ ํฅ์์ 1์๊ฐ์์ 1๋ถ์ผ๋ก ๋จ์ถ ๐
- MySQL์์ JSON ํ์ ์ ํ์ฉํ์ฌ ํต๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ์ค๊ณํ์์. ์๋ก์ด ํต๊ณ ํญ๋ชฉ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋๋ก ํจ ๐
- ํ ์คํธ ์ฝ๋ ์์ฑ์ผ๋ก, ์ํคํ ์ณ ๋ณ๊ฒฝ์ด 3๋ฒ ์ด์ ์์์์๋ ๋ถ๊ตฌํ๊ณ , ์ฝ๋์ ๊ฒ์ฆ๊ณผ์ ์ ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ์ ์ํ๊ฒ ์๋ฃ
- ๋ ๊ฑฐ์ ํ๋ก์ ํธ์ ํฌํจ๋ ์๊ฐ ๋งค์ฒด ํต๊ณ Job ์ ์๋ก์ด Batch ํ๋ก์ ํธ์ Job ์ผ๋ก Migration ํ์์. Maven XML configuration ํ์ผ ๋ถ์์ ํตํด ๊ธฐ์กด ํต๊ณ ๋ฐฉ์์ ์ดํดํ๊ณ ์ฝ๋ Migration ์งํ. JPA ์ criteria ๋ก ๊ตฌํ๋ ์ฝ๋๋ฅผ Jooq ๋ก migration ํ์์. ํต๊ณ์ ์ฌ์ฉ ๋๋ ํ ์ด๋ธ์ ๋ถ์ํ๊ณ ๊ธฐ์กด ๋ด์ค์์คํ ๊ณผ์ ์ปคํ๋ง ๋์ด์๋ ๋ก์ง์ ๋ถ์ํ์์.
- ๊ตฌํ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ Spring Batch ์ ๋ํ ์ดํด ํฅ์. Spring Batch ํํฐ์ ์ค์ฒฉ์ผ๋ก ์ธํ thread ์ค๋ณต ์คํ ์ด์ ์์ ๐, Batch DB Connection Pool Size ์์ธ ์์ ๐ StepExitStatus ์ข ๋ฃ์ ๋ฐ๋ฅธ flow ์ํ ๊ฒฐ๊ณผ ๊ด์ฐฐ ๐, Scope ์ด์ ํด๊ฒฐ ๐ , JobParameter ์ JobExecution ๐, Spring Quartz JobData ์ Deserialization, Serialization Ingore serialVersionUID Exception ๐
- ๊ธฐ๊ฐ
- 2023.10
- ๊ฐ์
- Copytrack ์๋น์ค๋ก ์ธํ ์ด๋ฏธ์ง ์ ์๊ถ ๋ฌธ์ ๋ก ๋ฐ์ํ ์ฌ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ฌธ์ ๊ฐ ๋๋ ์ด๋ฏธ์ง ๋ฆฌ์์ค ์์ฒญ์ Response ์ฐจ๋จํ๋ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ. ๐
- ๊ธฐ๊ฐ
- 2022.12 ~
- ๊ฐ์
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ค์ฌ์ผ๋ก ํ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ ํ๋ก์ ํธ. MySql ํ ์ด๋ธ ๋์์ผ๋ก ํ๋ ์์ ์ฃผ๋ก ์งํํ์์
- ๋ด์ฉ
- Job ์คํ ์ค์ธ Job ์ข ๋ฃ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๐ ๋ฐฐ์น์ ๋ฉํ ํ ์ด๋ธ BATCH_JOB_EXECUTION์์์ ID ๊ฐ์ Job Parameter๋ก ํ์ฉํ์ฌ ํ์ฌ ์คํ ์ค์ธ Job์ ์ค๋จ์ํค๋ Tasklet์ ๊ตฌํ. ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐ์ด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ JOB ์ค๋จ์ ๋ํ ๋ฌธ์ ํด๊ฒฐ
- ์ ํด ์ข ๋ฃ๋ ๋งค์ฒด์ฌ ๋ฐ์ดํฐ ์ญ์ Job, ๊ธฐ์กด์ 20๊ฐ๊ฐ ๋๋ ์ธ๋ํค๋ฅผ ์ฐธ์กฐํ๋ ํ ์ด๋ธ๋ค์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ . ํ ์๋น์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์ญ์ ๋ฅผ ๋๊ธฐํ ํ๊ธฐ ์ํด ActiveMQ ์ฌ์ฉ. NAS ์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ์ฌ ์ ์๊ถ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ์์. ์๋์ผ๋ก ์ญ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํ
- ์ญ์ ์ํ ๊ธฐ์ฌ ๋ฐ์ดํฐ ์ญ์ Job. 2011๋ ๋ถํฐ ๋ถํ์ํ๊ฒ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐจ์งํ๊ณ ์๋ ์ญ์ ์ํ ๊ธฐ์ฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ญ์ ํ๋๋ก ๊ฐ์ . 1์ต ๊ฑด ์ด์์ ๋์ฉ๋ ํ ์ด๋ธ์์ ์ธ๋ฑ์ค๊ฐ ์๋ ์ปฌ๋ผ์ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ธฐ ์ํด chunk ๋จ์๋ก ์ญ์ ํ์ฌ Query Timeout ์ด์ ๊ฐ์ .
- ์ธ๋ํค ์ฐธ์กฐ๊ฐ ๋ง์ ํ ์ด๋ธ ๋ก๊ทธ ๋ฐ์ดํฐ ์ญ์ Job. 10๋ ๊ฐ ์ถ์ ๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ฌ 200GB ์ด์์ ๊ณต๊ฐ์ ํ๋ณด.
- ์ก๊ณ ๊ธฐ์ฌ ํต๊ณ ์ง๊ณ Job. Flow์ Partitioner๋ฅผ ํ์ฉํ์ฌ ๋งค์ฒด์ฌ๋ณ๋ก ๋ณ๋ ฌ๋ก ์์ ์ด ์คํ๋๋๋ก ํ์ฌ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์. ์ธ๋ฑ์ค๊ฐ ์์ด ๋ฐ์ํ๋ ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ฌธ์ ๋ฅผ Redis ๋ฅผ ์ฌ์ฉํ์ฌ ์ง๊ณ.
- Quartz + Spring Batch ๋ฅผ ์กฐํฉํ์ฌ, ๋์ฉ๋ ์ฒ๋ฆฌ์ ์ ํฉํ Batch ์, Quartz ๋ฅผ ์ฌ์ฉํ์ฌ Quartz Job ์ด Trigger ๊ฐ ๋ ๋ Batch Job ์ ์คํ์ํค๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํจ
- Batch Job ํ ์คํธ์, Jooq ๋ฉ์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ๐
- ๊ธฐ๊ฐ
- 2020.10 ~
- ๊ฐ์
- ๋งค์ฒด์ฌ๋ก๋ถํฐ FTP, SFTP ๋ก ๊ธฐ์ฌ์ XML ๊ณผ ๋ฉํฐ๋ฏธ๋์ด ํ์ผ์ ์ก๊ณ ๋ฐ์ NAS ์ ์ ์ฅํ๋ ๊ณผ์ ์ ์๋ฒ๋ค์ ์ ์ง๋ณด์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ XML ํ์ผ์ Java ๋ง์ฌ๋ฌ ์ ์ ๊ท์์ ์ด์ฉํด ๋ณธ๋ฌธ, ์ด๋ฏธ์ง, ์บก์ ๋ฑ์ HTML ๋งํฌ์ ๊ณผ ๋ด์ค ๋ฉํ์ ๋ณด๋ฅผ ํ์ฑํฉ๋๋ค. ์ด ํ ๋ด์ค์ค์ MySql ์ ๊ธฐ์ฌ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์ค์ธํฐ๋ท์ ๋ฐ์ดํฐ ์์คํ ๋ฐ ๋ฐ ์๋น์ค์ ๋๊ธฐํํ๊ธฐ ์ํด ActiveMQ ๋ฅผ ์ฌ์ฉ
- ์ ํด ๋งค์ฒด์ฌ์ ์ง์์ ์ธ ๋น์ฆ๋์ค ์์ต ๊ด๊ณ๋ฅผ ์ํด, ๋งค์ฒด์ฌ์ ๋ฌธ์ ๋์์ ์ฆ์ ๋์
- ๋ด์ฉ
- PKIX ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ณ , ํ์ ์๋ฒ์์ HTTPS๋ฅผ ํตํ ๋งค์ฒด์ฌ์๋ฒ์ ์์ฒญ์ ์ ์ํ ๐
- ํน์ ๊ธฐ๊ฐ ๋๋ ํฐ๋ฆฌ ๋ด์ ๊ธฐ์ฌ ํ์ผ์ ์ฌํ์ฑ์ ์ํ ๋ฆฌ๋ ์ค ์์คํฌ๋ฆฝํธ ์์ฑ
- FTP PUT, FTP GET, SFTP ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉ ๋ฐ mirror ๋ช ๋ น์ด ๋ฑ์ ํตํด ๋ค์ํ ๋งค์ฒด์ฌ์ ๊ธฐ์ ์ ํน์ฑ์ ๋ง๊ฒ ์ก๊ณ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ์์
- ๋งค์ฒด์ฌ ๋ณ ํน์ด์ฌํญ์ด ๋ฐ์ํ๋ XML ํ์ผ์ ๋ด์ค์ค์ ๋ฉํ๋ฐ์ดํฐ์ ๋ง๊ฒ ํ์ฑํ๊ธฐ ์ํด ์ ๊ท์ ํ์ฑ ๊ท์น ์์ ๋ฐ ์ ์ฉํ์์. ์ ๊ท ๋งค์ฒด์ฌ ์ ํด๋ฅผ ์ํ ๊ธฐ์ฌ ํ์ ์ ๊ท์ ์ค์ ์ ์ฉ.
- ๋งค์ฒด์ฌ ๊ธฐ์ฌ ๋ฏธ๋ ธ์ถ ์ ํ ๊ฐ๋ฐ๋ถ์์ ํ์ ํ์ฌ ์์ธํ์ ์งํ ๋ฐ ์ด์ ํฝ์ค
- ๋ด์ค ํ์์์ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์๋๋ก ํด๋น ์ผ์ด์ค์ ๋ํ ๋ก๊ทธ๋ฅผ ์ ๊ณตํ๋๋ก ์์ ๊ฐ๋ฐ
- ํน์ ๋งค์ฒด์ฌ์์ ๋ฐ์ํ ๋๋ ์ ํฌํ์ผ ์ก๊ณ ๋ก ์ธํ ์ต์ ๊ธฐ์ฌ ๋ฏธ๋ ธ์ถ ์ด์๋ฅผ ์กฐ์น. dumy ํ์ผ์ ์ญ์ ํ๋ ์์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ํด๊ฒฐ. ํ์ผ ํ์ฅ์ ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ftp ์ก๊ณ ์ ์ฑ ์ ์ถ๊ฐํ๋ ๋ฑ์ ๋ณด๋ค ๊ฐ๋ ฅํ ๋์ ๋ฐฉ์์ ๊ตฌ์.
- ๋ฏธ๋ ์์ ์ผ๋ก ์ก์ถ๋ ๊ธฐ์ฌ์ ๋ํ ์์ ์ ์ธ ์ฒ๋ฆฌ ๋ก์ง ์ค๊ณ, MySQL JSON ํ์ ์ ํ์ฉํ์ฌ ์ ์ฐ์ฑ์๋ ํ ์ด๋ธ ์ค๊ณ, ๋ก๊ทธ ์ ๋ณด๋ฅผ ๊ฒ์๊ณผ ๋ถ์์ ์ํด ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ฅ. Vue.js ๋ก ๊ตฌํ๋ ์ด๋๋ฏผ ํ์ด์ง์์๋ ํ์ฑ ๋ก๊ทธ ๋ฐ ์๋ฌ ๋ก๊ทธ์ ๊ด๋ จ๋ ์ ๋ณด ์ ๊ณต. ๋งค์ฒด์ฌ ์๋ฒ์ ํ์ฑ ์๋ฒ ๊ฐ์ TIME ์ฐจ์ด๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ณด๊ฐ ์ค๊ณ.
- ๋ฆฌ๋ ์ค ํ์ผ์ ctime ์ ํตํด ๋์ผ ๊ธฐ์ฌ๊ฐ ์ฌ๋ฌ๋ฒ ์ก๊ณ ๋์์ ๊ฒฝ์ฐ, ์ต์ ํ์ฑ ๊ธฐ์ฌ๋ฅผ ํ๋จํ ์ ์๋๋ก ๊ฐ์ .
- 100MB ์ด์ ๋งค์ฒด์ฌ์ FTP ํ ๋๋ ํฐ๋ฆฌ์ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๋ ์์คํฌ๋ฆฝํธ ์์ฑ
- rsync ๋ฅผ ์ฌ์ฉํ์ฌ ์ก๊ณ ๋ ๊ธฐ์ฌ ํ์ผ๋ค์ QA ํ๊ฒฝ์์๋ ํ ์คํธ ํ ์ ์๋๋ก ๊ตฌ์ฑํ์์
- ISMS ์ง์ ์ฌํญ ์์ . SFTP ์ ํ ๋งค์ฒด์ฌ ๋์ ํ์ฑ ๋ฐ ๊ฒ์ ๋ ธ์ถ ํ์ธ, ์์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๊ธฐ์ฌ ํ์ฑ ๋๋ ํฐ๋ฆฌ์ ๋ชฉ๋ก์ ์ค์บํ๊ณ , ๋งค์ฒด์ฌ ์ฌ์ดํธ๋ฅผ Javascript ๋ก ํฌ๋กค๋งํ์ฌ ์ต์ ๊ธฐ์ฌ ๋ฆฌ์คํธ์ ์ ๋ฐ์ดํธ ์ฑํฌ๋ฅผ ํ์ธํ๋ ์์ ์งํ
- ๊ธฐ๊ฐ
- 2020.10 ~
- ๊ฐ์
- ์ธํ๋ผ ๋ฌธ์ ๋ฅผ ์ธํ๋ผํ๊ณผ ํ์ ํ์ฌ ์์คํ ์์ ์ฑ ํฅ์ ๋ฐ ์ฅ์ ๋์
- ๋ด์ฉ
- Route53 ์ด์ ๋์ ๐ nginx access log ๋ก๊ทธ ์์ ํ์ธ ๋ฐ CDN ์ ํตํ ์๋ฌ ํ์ด์ง๋ก์ ๋ผ์ฐํ ๋ฌธ์ ๋ฅผ ํ์ธํ๊ณ , Route53 ๋ก๋ ๋ฐธ๋ฐ์ฑ ์ค์ ๋ณ๊ฒฝ์ผ๋ก ํด๊ฒฐ
- ๋ชจ๋ฐ์ผ ์๋ฒ์ API ์๋ฒ ๊ฐ ๋๋ฉ์ธ ์ค์ ์ค๋ฅ ๋์ ๊ฒฝํ ๐
- Iptables ์ Hang ๋ฌธ์ ๋ฐ์์ผ๋ก FTP ์๋ฒ 1 ์ฅ์ ๋ฐ์, ๋๊ธฐํ ๋ฏธ๊ตฌ์ฑ๋ ftp ์๋ฒ 2๋ก ์ ํ. ๋๋ฝ๋ ๋งค์ฒด์ฌ์ FTP ๊ณ์ ๋ฐ ๋ฐฉํ๋ฒฝ ์ค์ ์ถ๊ฐ, crontab ์คํฌ๋ฆฝํธ ๋ณต์ ๋ฐ ftp Access ํ์ธ ๐
- FTP ์๋ฒ 2๋ก ์ ํ ํ 2๋ ๋ค ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๊ฐ sudo mv ๋ช ๋ น์ด๋ก ์์๋์์. ๊ณต๊ฐ ๋ถ์กฑ์ผ๋ก NAS 1์์ NAS 2๋ก ๋ฐ์ดํฐ ์ด์ ํ๋ ค๊ณ ๋ช ๋ น์ด ์คํ. ์ค๋จ ์๋ํ๋ ์ด๋ฏธ ์์, ๋ณต๊ตฌ ๋ถ๊ฐ ํ๋จ. FTP 1 ๋ก Migration ์งํ. HA ๋ฏธ๊ตฌ์ฑ์ผ๋ก Failover ์คํจ๋ก ๋น ๋ฅธ ์ ํ์ด ์ด๋ ค์ ์ง๋ง, FTP 2 iptables, IP ๋ณ๊ฒฝ์ผ๋ก ๋์, ๋น ๋ฅธ ๋ณต๊ตฌํ์์. SFTP, FTP ๊ณ์ ์ home ๋๋ ํฐ๋ฆฌ ์์์ผ๋ก ์ธํด ๋งค์ฒด์ฌ ์ก๊ณ ๋ถ๊ฐ. rsync๋ก ์ด์ ์ ๊ถํ ์ต์ ๋ฏธ์ฌ์ฉ์ผ๋ก ๋ฌธ์ ๋ฐ์. sftp์ ftp ๊ณ์ ๋๋ ํฐ๋ฆฌ ๊ถํ ๊ตฌ๋ถ ํ ๋ณต๊ตฌ. ์ฌ๋ฐ ๋ฐฉ์ง๋ฅผ ์ํด ๋ฃจํธ ๊ถํ ์ ํ, ๋ช ๋ น์ด ์ ๋ ฅ ์ ์๋๊ฒฝ๋ก ์ฌ์ฉ, ํญ์ HA ๊ตฌ์ฑ ํ์์ฑ ๊ฐ์กฐ. ๐
- Zabbix ๋ชจ๋ํฐ๋ง ํด์์ ์์ผ ๊ฐ์ ๋ถ์กฑ์ผ๋ก ์ธํ ์๋ฌ๋ก ์ธํด Zabbix ์๋ฌ ๋ก๊ทธ ํ์ผ์ด ์ฆ๊ฐํ๊ณ , ์ด๋ก ์ธํด ์๋ฒ ์คํ ๋ฆฌ์ง๊ฐ ๊ฐ๋ ์ฐจ๊ฒ ๋์ด ์๋ฒ1์ SSH๋ก ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์๋ฒ2๋ ๋ค์ด๋์์ต๋๋ค. Zabbix์ ์ต๋ ์์ผ ๊ฐ์๋ฅผ ์กฐ์ ํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๊ณ , ๋๋ถ์ด Zabbix ๋ก๊ทธ๋ฅผ ์๋ฒ์ ์คํ ๋ฆฌ์ง ์ธ๋ถ๋ก ์ ์ฅํ๋๋ก ์์ ํ์์
- ์๋ฒ์ /etc/fstab ์ค์ ์ด ์๋์ด ์์ด ์๋ฒ ์ฌ๋ถํ ์ ๋ง์ดํธ ํด์ ์ด์ ๋์
- Nas ์ snapshot ์ผ๋ก ์ฉ๋์ด์๋ฅผ snapshot ์ค์ off ์กฐ์นํ์์
- log4j2 ๋ณด์์ด์ ํ์ธํ์ฌ ๋ด๋น ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ฒดํฌ ์ ๊ฒ
- ๊ธฐ๊ฐ
- 2021.03 ~ 2024.01
- ๊ฐ์
- ๋ด์ค์ค PC ํ๋ก์ ํธ https://news.zum.com/ ์ ์ง๋ณด์
- ๋ด์ค์ค Mobile ํ๋ก์ ํธ https://m.news.zum.com/ ์ ์ง๋ณด์
- Spring MVC Template Engine ๊ณผ Jquery ํ๊ฒฝ์ SSR FrontEnd ํ๋ก์ ํธ
- ๋ด์ฉ
- ์ด์ ๋ด๋น์์ ๋ฒ๊ทธ ๋ฐ ์ฅ์ ๋ณด๊ณ ๋ฅผ ๋์ํ๊ธฐ ์ํด, ๋ฌธ์ ์์ธ์ Controller, API, Batch, ํ์ ๋ฑ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ถ์์ ํตํด ํ์ ํ๊ณ ๋ฌธ์ ๋์. ๋ฐ์ดํฐ ํ๋ก์ฐ๋ฅผ ๋ฌธ์ํํ์ฌ ๊ณต์
- HTTP Request ์์ธ ๋ฐ์์ ๋ํ ๋ฐฉ์ด ๋ก์ง ๊ตฌํ
- ๊ด๊ณ ์คํฌ๋ฆฝํธ HTML, Javascript, CSS ๊ต์ฒด ๋ฐ ์ฝ์
- ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ์ฌ ํต๊ณ ์๋ฒ์ ๋ฉํ๋ฐ์ดํฐ ๋ฐ์ดํฐ Request ๊ฐ๋ฐ.
- ์ก๊ณ ๋ ๊ธฐ์ฌ์ ๋ณธ๋ฌธ์ ๋ด์ค์ค Frontend ํ๊ฒฝ์ ๋ง๊ฒ ํฌ๋งคํ ํ์ฌ ๋ ธ์ถ๋๋๋ก ๋ฌธ์์ด ์นํ ๋ก์ง ์ ์ง ๋ณด์
- IOS์ ์น๋ธ๋ผ์ฐ์ ์์ ๊ด๊ณ ๋ ๋๋ง ์ด์ ๋ฐ์, Webkit ๊ธฐ๋ฐ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์๋ง ์ฌํ๋๋ฉฐ, ํน์ ์คํฌ๋ฆฝํธ ์ฌ๋ก๋๋ก ๋ฌธ์ ํด๊ฒฐ ๐
- ๊ธฐ๊ฐ
- 2023.07
- ๊ฐ์
- Spring MVC Template Engine ํ๋ก์ ํธ์์ Api Endpoint ๋ถ๋ฆฌ ๊ฐ๋ฐ.
- ์ฃผ๋ก ์ ์ง๋ณด์์ ๊ด๊ณ ์ฝ์ ์ ์ง์ค๋ ๋ชจ๋ฐ์ผ ํ๋ก์ ํธ์ ์์ ํ ์ํ๋ฅผ ๊ณ ๋ คํ๊ณ . ๋ด์ค์ค ์๋น์ค์ ํ๋์ FE ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ์ํด ํ๋ก ํธํํธ์ ์๋น์ค๋ฅผ ์ธ๊ณํ๊ธฐ ์ํ ์์ ์งํํ์์.
- ๋ด์ฉ ๐
- ๋น์ฆ๋์ค ๋ก์ง์ด ํผ์ฌ๋ Controller ์ฝ๋์ JavaScript ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ API ํ๋ก์ ํธ๋ก Migration.
- ๋ฐฑ์๋ API๋ฅผ ๋ชจ๋ฐ์ผ ์น ์๋น์ค์์ ๋ถ๋ฆฌํ๊ณ , Swagger๋ฅผ ํ์ฉํ์ฌ API ๋ช ์ธ์ ๋ฌธ์ ์์ฑ
- Migration ๊ณผ์ ์์๋ ๊ธฐ์กด ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ก Spring RestController์ ์๋ก์ด Endpoint ์์ฑ ๋ฐ Migrationํ ํ๋ก์ ํธ์ API ๋ฉ์๋ ์ถ๊ฐ
- ์คํ๋ง ์บ์ ์ค์ผ์ค๋ฌ ๋์ ์ผ๋ก ๋ชจ๋ฐ์ผ API ์ ์บ์ ์ ์ฉ. TTL ์ค์ ๊ณผ ์ฃผ๊ธฐ์ ์ ๋ฐ์ดํธ๋ฅผ ๊ณ ๋ คํ์ฌ ์์ ์ฑ ๊ฐํ.
- ๊ธฐ๊ฐ
- 2023.02
- ๊ฐ์
- Redis Cache ์ฌ์ฉํ์ฌ ๋ถ์ฐ๋ ์๋ฒ์ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ Redis๋ก ์ค์ ์ง์คํ. ๋ฐ์ดํฐ ์ผ๊ด์ฑ ํ๋ฆฝ. MySql ์๋ฒ ๋ถํ ๊ฐ์๋ฅผ ์์ผ ์์ ์ฑ๊ณผ ์ฑ๋ฅ ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ฆฌ์ ๋ฆฌ์์ค ํ๋ณด.
- MySql ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ , ์ฝ๋ ๋ฆฌํฉํฐ๋ง, ์ต์ ํ, ์ด์ ์ ๋ต ๋ฑ์ ํตํด ์ฑ๊ณผ๋ฅผ ๋ฌ์ฑ.
- ๋ด์ฉ ๐
- Redis์ ํน์ฑ์ ๋ง์ถฐ ๋ฆฌ์์ค ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ฑ๊ธ์ค๋ ๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ ๋น๋๊ธฐ๋ฅผ ์ง์ํ๋ Lettuce Redis Client ๋ฅผ ์ ํํ์์
- ๋ฉํฐ๋ชจ๋์ ์คํ๊ฒํฐ ์ฝ๋๋ฅผ ํ๋์ ์ธํฐํ์ด์ค๋ก ํตํฉํ์ฌ ๋จ์ผํฌ์ธํธ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , Redis๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์งํ
- Sentinel์ ํ์ฉํ์ฌ ๊ณ ๊ฐ์ฉ์ฑ์ ํ๋ณด
- Redis Benchmark๋ฅผ ํ์ฉํ์ฌ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๋ SET ๋ฐ GET ๋ช ๋ น์ด์ ์ฒ๋ฆฌ๋์ ํ ์คํธํ๊ณ ์์ ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ธ
- Graphana ๋ฅผ ์ด์ฉํ ๋ ๋์ค ์๋ฒ ๋ฆฌ์์ค ๋ชจ๋ํฐ๋ง ์งํ
- Batch ์ CMS ์์ MySQL ์ ์บ์ํ์๋ ๋ฐ์ดํฐ๋ฅผ Redis ๋ก Migration ํ๊ธฐ ์ํด StringRedisSerializer ์ฌ์ฉ. API ๋ Ehache ๋ก๋ถํฐ Migration ํ๊ธฐ ์ํด CacheManager ์ GenericJackson2JsonRedisSerializer ์ค์ . ์์ดํ ํ๊ฒฝ์์ ๋ ๋์ค ํด๋ผ์ด์ธํธ ์ฌ์ฉ ๊ฒฝํํ์์.
- ์์ ์ ์ธ ํ๋ก์ ํธ ์ด์์ ์ํ ๋ฐฐํฌ ๋ฐ ๋กค๋ฐฑ ์๋๋ฆฌ์ค๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฅ์ ๋์ ๋ฐ ์์คํ ์์ ์ฑ์ ๊ณ ๋ ค
- ๋๋ฉ์ธ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ ์ ํ๊ฒ Redis์ maxmemory-policy ์ ์ฑ ์ volatile-lru๋ก ์ค์ ํ์ฌ Expire ์ค์ ๋ ํค ์ค์์ ์ค๋๋ ํค๋ฅผ ์ญ์ ํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
- Sentinel ์ ๋ถํ ๋ถ์ฐ ๋ฐฉ๋ฒ์ผ๋ก, REPLICA_PREFERRED ์ ํ. GET ๋ช ๋ น์ด๋ Replica์์ ์คํํ๊ณ , ์ฅ์ ๋ฅผ ๋๋นํ๊ธฐ ์ํด Replica ๋ฅผ ์ฌ์ฉํ ์ ์์ ๊ฒฝ์ฐ Master์์ ์คํํ๋๋ก ์ค์ ํ์์.
- ๊ธฐ๊ฐ
- 2022.11
- ๊ฐ์
- ์ด๋ฏธ์ง ์๋ฒ์ ์์ฒญ๋ path ๋ก, nginx ์ rewrite ๊ท์น์ ์ ์ฉํ์ฌ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ๋ฆฌํดํ๋ ์๋ฒ๊ฐ ์๋ค. ์ฌ๋ฌ ์คํ ๋ฆฌ์ง๊ฐ ๋ค์ํ ๊ฒฝ๋ก๋ก mount ๋์ด ์๊ธฐ ๋๋ฌธ์ nginx ์ rewrite ๊ท์น์ด ์ ์ฉ๋์ด ์๋ ๊ฒ์ด๋ค.
- ๊ธฐ์กด์ ์ ์๊ถ ๋ฌธ์ ๊ฐ ์๋ ์ด๋ฏธ์ง ์ญ์ ๋ฅผ ์ํด, nginx rewrite ๊ท์น ๋์์ ์์นํ๋ ๋ฆฌ์์ค์ ์์น๋ค์์ ํ์ผ๋ค์ ์กด์ฌ์ฌ๋ถ๋ฅผ ๋ชจ๋ ํ์ธํ๊ณ ์ด๋ฏธ์ง ์ญ์ ํ, CDN ์ ์บ์๋ฅผ purge ํ๋ ๊ณผ์ ์ด ์์๋ค.
- ์ด ๊ณผ์ ๋ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์๋ํ ํ๋๋ก ๊ฐ๋ฐํ์๋ค.
- ๋ด์ฉ
- nginx ์ location, rewrite, root, retry_files ๋ฑ์ ๋ช ๋ น์ด๋ฅผ ์ฝ๋ํํ์ฌ ์์ฒญ๋ path ์ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ ์๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ๋๋ก ๊ตฌํ
- nginx proxy_pass ๋ฅผ ์ด์ฉํ ๋ฌด์ค๋จ ๋ฐฐํฌ ํ๊ฒฝ์ IDC ์์ ๊ตฌ์ฑํ๊ณ , ์ ํจ์ค์ ๋น๋ ํ์ดํ๋ผ์ธ์ ํตํด CICD ํ๊ฒฝ์ ๊ตฌ์ฑํจ.
- ์ด๋ฏธ์ง ์ญ์ ๊ณผ์ ์ ๋จ์ ํ ์คํธ ์ฝ๋ ์์ฑ
- ์ฌ์ฉ์ ์๋ฌ ์ฝ๋๋ฅผ ์ ์ํ์ฌ, ์ด๋ฏธ์ง ์ญ์ ๋ฅผ ์์ฒญํ๋ ์๋ฒ์์ ๋ฌธ์ ๋ฅผ ํ์ ํ๊ณ ๋์ํ ์ ์๋๋กํ์์
๋ด์ค์ค MySQL ์ ๊ทธ๋ ์ด๋, ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ ๋ฐ Replication Delay ์ด์ ํด๊ฒฐ, ๋ฐ์ดํฐ ์ผ๊ด์ฑ ๊ฐํ, ์์ ์ฑ ๊ฐ์ ๋ฑ ๋ค์ํ ์์ ์ํ
- MySQL ์ฌ๋ก์ฐ ์ฟผ๋ฆฌ๋ก ์ธํ Connection request timed out ์ด์ ํด๊ฒฐ ๐
- MySQL ์ Replication Delay ๋ฐ์์ฌ๋ก์ VIP ์์ ์๋ฒ๋ฅผ ์ ์ธํ์ฌ ๋ฐ์ดํฐ ๊ฐฑ์ ์ด์ ํด๊ฒฐ ๐
- MySql 5.5 โ 8.0 ์
๊ทธ๋ ์ด๋
- ์ดํ๋ฆฌ์ผ์ด์ ์ mysql connector driver ๋ฒ์ ์ ๊ทธ๋ ์ด๋
- ์ ๊ทธ๋ ์ด๋ ํ ์ตํฐ๋ง์ด์ ์ ์ฟผ๋ฆฌ ์คํ๊ณํ์ ๋ณ๊ฒฝ์ผ๋ก ์ผ๋ถ, ์ฟผ๋ฆฌ๋ค์ straight join Hint ๋ฌธ ์ถ๊ฐ
- ํธ๋์ญ์ ์ ์๋ก ๋ค๋ฅธ ์คํ ๋ฆฌ์ง์์ง์ ํ ์ด๋ธ ์ ๊ทผ์ด ์กด์ฌํ ๋ ์๋ฌ๋๋ ์ด์, MyISAM ํ ์ด๋ธ์ innoDB ๋ก ๋ณ๊ฒฝ
- Slow query ๋ฅผ ์ ๋ฐํ๋ ์์ธ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๊ธฐํ์ ์ผ๋ก ๊ณ ๋ฏผ ๐
- Join ๊ด๋ จ ์ด์๋ก ์ธํด ํ ์ด๋ธ ๋ถ์ ํ, ์ค๋ณต ๋ฐ์ดํฐ๋ก ์ธํ 2๋ฒ ๋ ธ์ถ ๋ฌธ์ ํด๊ฒฐ ๐
- Slave, Master MySql DB ์ปค๋ฅ์ ์์ ํ์ ์ญํ ๋ถ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด, API ์ดํ๋ฆฌ์ผ์ด์ ์์๋ Slave Datasource ์์ Read ๋ง ํ๋๋ก ์์ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์๊ณ , API ์์ ๋ฐ์ํ๋ Create, Update, Delete ์ฝ๋๋ฅผ Batch ํน์ CMS ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก Migration ์งํ
- ์ค์๋ฒ DB ์ ๋ฆฌํ๋ฆฌ์ผ์ด์ ์ด ๋ QA DB์, autoincrement duplication ๋ฌธ์ ํด๊ฒฐ
- ISMS ์ง์ ์ฌํญ ์์
-
๊ธฐ๊ฐ 2021.02 ~
-
์คํ๋ฐํธ ๋ด์ค๋ฐ์ค ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ๋ฐ์ดํฐ ์ค์ฌ์ ์๋ํ๋ ๋ด์ค ์์ฑ ๋ฐ ํธ์ง ์์คํ ๊ฐ๋ฐ. ๋น ๋ฐ์ดํฐ ์ถ์ฒ ๊ธฐ์ฌ๋ชฉ๋ก ์ค ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ด์ค๋ฐ์ค ๋ฐ์ดํฐ ์๋น ๊ตฌํ
- Backoffice์ ๋ด์ค๋ฐ์ค ํธ์ง ๊ธฐ๋ฅ ์ธ๋ถ๋งํฌ ๊ธฐ์ฌ ์ถ๊ฐ, ์ด๋ฏธ์ง ํธ์ง, ์์ ํธ์ง, ๊ธฐ์ฌ ์ ์ธ/ํฌํจ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์์ฑ, ์์ ๊ณ ์ ๋ฑ์ ๊ธฐ๋ฅ ์ ๊ณต.
- Batch ๋ก ์ฃผ๊ธฐ์ ์ธ ๋ด์ค๋ฐ์ค ๋ฐ์ดํฐ ๊ฐฑ์ .
- ์์ฑ๋ ๋ฐ์ดํฐ ์๋น์ ์ํ Rest Api ๊ฐ๋ฐ.
-
๋งค์ฒด์ฌ ๊ธฐ์ฌ ์๋ฌธ ์ฃผ์ ๋ณ๊ฒฝ ์์
- ๋งค์ฒด์ฌ ๋๋ฉ์ธ ๋ณ๊ฒฝ ๋ฐ ๊ธฐ์ฌ ์๋ณ์ ๋ณ๊ฒฝ์ ๋์ํ๊ธฐ ์ํ์ฌ, Spring Batch ์ ์ ๊ท์์ ํ์ฉํ์ฌ DB ์ ์ปฌ๋ผ ๊ฐ์ ์์ ํ๋ ์์ ์ ์ํํ์์.
- ๋ณ๊ฒฝ๋ ๊ธฐ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํ๋ซํผ์ ๋ด์คDB์ ๊ฐฑ์ ํ๊ธฐ ์ํด ActiveMQ๋ฅผ ํ์ฉ.
- ๋ณ๊ฒฝ ์งํ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด ์์ ๋ฐ์ดํฐ๋ฅผ Redis์ ์ ์ฅํ๊ณ , Backoffice ์์ ๋ณ๊ฒฝ ์งํ์ฌํญ์ ์กฐํํ ์ ์๋๋ก ๊ฐ๋ฐ
-
ํ์ ์ค์ ์ด๋๋ฏผ ๋ฐ API ๊ฐ๋ฐ
- Vue.js, Spring boot ๋ฅผ ์ด์ฉํ์ฌ Backoffice ํ์ ์ค์ ๊ธฐ๋ฅ ๊ฐ๋ฐ. ํ์ ๋ฐ์ดํฐ ์ฌ์ฉ์ ์ํ Rest API ๊ฐ๋ฐ
-
Health Check ํ๋ก์ ํธ ์ค๊ณ
- Pingdom ๊ธฐ๋ฅ ๋ถ์ ์งํ
- ํ๋ก์ ํธ์ ๊ฐ๋ฐ ์คํ๋ฆฐํธ ๋ฐ ์ผ์ , ํ๋ก์ ํธ ํ๋น์ฑ ๋น์ฉ ๊ธฐ์
- ๋ณด์ผ๋ฌํ๋ ์ดํธ์ Kotlin ์ผ๋ก์ ๋ง์ด๊ทธ๋ ์ด์
- MongoDB ์ฐ๋ ๋ฐ ์ค์ , ์ฌ์ฉ์ ๋ฐ ์๋ฆผ ๊ด๋ฆฌ์ ๋ํ ์คํค๋ง ์ค๊ณ.
-
์ฐ๊ด ๊ธฐ์ฌ ์ถ์ฒ ์์คํ ์ ์ฉ
- ๋ด์ค์ค ๊ธฐ์ฌ ์๋น ํธ๋ํฝ ํฅ์์ ์ํด ๊ธฐ์ฌ ์กฐํ ์ ์ฐ๊ด ๊ธฐ์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋นํ๊ธฐ ์ํ ๊ฐ๋ฐ
- RestAPI ๋ฅผ ๊ฐ๋ฐํ๊ณ , Redis ์บ์๋ฅผ ์ ์ฉํจ์ผ๋ก์ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ๋ฐ์ดํฐ ์๋น์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ ํฅ์ ๋ฐ ์๋ฒ ๋ถํ ๊ฐ์.
- Spring MVC Template Engine ์ ์ฌ์ฉํ์ฌ SSR Endpoint ๋ฅผ ๊ตฌํํ๊ณ , ์ฌ์ฉ์์ ๊ธฐ์ฌ click, scroll ๋ธ๋ผ์ฐ์ ์ด๋ฒคํธ ๋ฐ์ ์ ํต๊ณ ์๋ฒ์ ์ ์กํ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ
-
Backoffice ๊ธฐ๋ฅ ๊ฐ๋ฐ
- CSV ํ์ผ ์ ๋ ฅ์ ๋ฐ์ ์ด์๋ด๋น์๊ฐ ๊ธฐ์ฌ์ ์ฒ๋ฆฌ ์ ๋ฌด ํฅ์์ ๋์.
- ...
-
ํฌ์์ค ํด์ธ์ฆ์ ๊ตญ๋ด์ฆ์ API ๊ฐ๋ฐ
- ์ฌ๋ด ํฌ์ ์๋น์ค ์ข ๋ฃ๋ก ์ฝ๋ ์ญ์ ๋ฐ ๋ด์ค์ค ํ๋ก์ ํธ ์ ๋ฆฌ๋ฅผ ์ํ ๋ฐฐํฌ ํ๋ก์ธ์ค ๊ตฌ์ถ. ์ฝ๋ ์ ๊ฑฐ ์ ๊ฐ์ฒด์งํฅ์ ์ค์์ฑ์ ํฌ์คํ ํจ ๐
- ๊ตญ๋ด์ฆ์ ๋ฐ ํด์ธ์ฆ์ ํ์ด์ง Rest API, Backoffice, Batch ๊ฐ๋ฐ ๋ฐ MySQL ์คํค๋ง ์ค๊ณ
-
๋ด์ค์ค news.zum.com ๋ฆฌ๋ด์ผ
- ๋ด์ค์ค ์น์ฌ์ดํธ ๋ฆฌ๋ด์ผ์ ์ํด, ๋ ๊ฑฐ์ ์ํคํ ์ณ๋ฅผ ๋ถ์ํ๊ณ ์ ๊ท RestAPI ๊ฐ๋ฐ, ๋ณต์กํ ๋ก์ง ์ฒ๋ฆฌ์ ๊ธฐ์ฌ ๋ฐฐ์ด ์๋ ํธ์ง์ ์ํ Batch ๊ฐ๋ฐ, Backoffice ๊ฐ๋ฐ
-
2022 ๋์ ์ด๋ฒคํธ ๋ด์ค ํ์ด์ง ๊ฐ๋ฐ
- ํ๋ก ํธ์๋ ๋ด๋น์์ ์ ๊ณตํ Rest API ๊ฐ๋ฐ. Backoffice ๋ฐ Batch Job ๊ฐ๋ฐ์ ํตํด ํจ์จ์ ์ธ ๋ฐ์ดํฐ ํธ์ง ๋ฐ ๊ด๋ฆฌ ์ฒด๊ณ ๊ตฌ์ถ.
- ์ ๊ฑฐ์ ๋ณด, D-day, ๊ฐํ๊ฒฐ๊ณผ, ๋์ ์๋ณด, ๋์ ์ฃผ์๋ด์ค, ์๋นํ๋ณด ๋ฐ ์ ๋น ์ ๋ณด, ํ ๋ง์ฃผ, ํ๋ณด์ ๋ณ ์ ์ฑ ๋ด์ค, ํ ๋ง์ฃผ ํ๊ท ์์ต๋ฅ , ๋์ ์ต์ ๋ด์ค, ๋ํ์ ๋ณด ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ํจ๊ณผ์ ์ธ ํ์
์ผ๋ก ์ํํ ๊ฐ๋ฐ ์งํ ๋ฐ ํ ๊ฐ ์ํํ ์์ฌ์ํต ๋ฌ์ฑ.
- API ๋ช ์ธ์๋ฅผ ํตํด ๋ช ํํ ์ ๋ฌด ์ดํด๋ ๋ฐ ํ๋ก์ ํธ ์งํ ์ํฉ์ ๊ณต์ ํ๊ณ ํฌ๋ช ํ ํ์ ํ๊ฒฝ ์กฐ์ฑ.
- ์์ ์ Notion์ ํ์ฉํ์ฌ ๋น ๋ฅด๊ฒ API ๋ช ์ธ๋ฅผ ํ๋ก ํธ์๋ ํ์ ์ ๋ฌํ๋ฉฐ, ๊ธฐํ ๋ด์ฉ๊ณผ ํจ๊ป API ๊ตฌ์ฑ ์ด์ ๋ฅผ ์ค๋ช .
- ํ๋ก ํธ์๋ ๋ด๋น์์๊ฒ ๋ด๊ฐ ์๊ณ ์๋ ๋ชจ๋ ๋ด์ฉ์ ๊ณต์ ํ๊ณ , ํผ๋๋ฐฑ ์ ๊ทน ์์ฉ.
- ์ค์ ๊ตฌํ์ด ์์๋๋ฉด API ๋ช ์ธ์ ํ์ด์ง์ ๊ตฌํ๊ณผ์ ์ ๊ธฐ๋กํ์ฌ ํ์คํ ๋ฆฌ๋ฅผ ๊ณต์ .
-
์คํํธ์ค start.zum.com, ๋ด์ค ์ปจํ ์ธ ์๋น Rest APIย ๊ฐ๋ฐ
- ์คํํธ์ค์ ์ค์ธํฐ๋ท์ ๋ธ๋ผ์ฐ์ ์์ํ์ด์ง ์๋น์ค.
- ์คํํธ์ค ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ฐ ๊ธฐํ์, ๋ฐ์ดํฐ ์์ง๋์ด ๋ฑ ๋ชจ๋ ๋ด๋น์ ๊ฐ ๋ด์ค API ๊ฐ๋ฐ ํ์คํ ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฉฐ ํ์ ์ ์ค์ ์ ๋์์.
- Swagger-UI๋ฅผ ์ ์ฉํ์ฌ API ๊ฐ๋ฐ ํฌ๋ช ์ฑ ํฅ์
- ๊ธฐ๊ฐ
- 2021.02 ~
- ๋ด์ฉ
- Migration ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ฌ, ๋ถํ์ํ ์์์ ์๋ชจํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ. Batch, CMS, API, ํ์ ๋ฑ์์ ๋ฐ์ดํฐ์์ค์ ๊ด๋ จ ์ฝ๋ ์ ๊ฑฐํ๊ณ ์์ ํ๊ฒ DB๋ฅผ ์ญ์ ํ๋ ์์ ์๋ฃ
- ์ฌ๋ด Nexus์ ํ๋ ์์ํฌ์ ์์กด์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด, ์ ๊ท ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํจ์ผ๋ก์จ ์ ๊ท ๊ฐ๋ฐ์ ์ ์ฐ์ฑ์ ๋ถ์ฌํ์์. MySQL ์ ๊ทธ๋ ์ด๋ ํ Jooq ๋ฒ์ ๋ณ๊ฒฝ, Redis ๋์ , ํ ์คํธ์ฝ๋ ๋์ ๊ณผ ๊ฐ์ ์ด๋ ค์์ ํด๊ฒฐํ์์ต๋๋ค.
- ๋ ๊ฑฐ์ ๋ชจ๋์ ์คํ๊ฒํฐ ์ฝ๋๋ก ์ธํด ํ ์คํธ ์์ฑ๊ณผ ๋ฆฌํฉํฐ๋ง์ด ์ด๋ ค์ ๊ณ , ์ด๋ก ์ธํด ํ๋ก๊ทธ๋จ์ ์ ๋ขฐ์ฑ๊ณผ ์์ ์ฑ์ด ์ ํ๋์์ต๋๋ค. ๋ํ, ์ ๊ท ๊ฐ๋ฐ์์ ์ ์์ด ์ด๋ ค์ ํ๋ก๊ทธ๋จ ํ์ง์ด ์ ํ๋๋ ๋ฌธ์ ์ ์ ์ธ์ํ์ต๋๋ค. ์๋ก์ด ๊ธฐ์ ์ ์ ์ฐํ๊ฒ ์ ์ฉํ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์๋ธ ํ๋ก์ ํธ ๊ฐ์ ์์กด์ฑ์ ์ต์ํํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ ํ์ง๊ณผ ์์ ์ฑ ํฅ์.
- ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ํ์์๊ฒ ๊ณต์ ๐
- ๋จ์ผ gradle ๋ชจ๋์์ ๋ฉํฐ ๋ชจ๋๋ก ํฉ์ณ์ง ํ๋ก์ ํธ์, ์คํ๊ฒํฐ ์ฝ๋๋ฅผ ์ธํฐํ์ด์ค๋ก ํตํฉํ๋ ๊ฐ์ ์์ ์งํ
- ์บ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ ์ผ๋ก, TTL์ ํ์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ธ ๊ฐฑ์ ๋ฐ ๋ถํ์ํ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํํจ. ๐
- API ํ๋ก์ ํธ ์ ์ฒด endpoint ์ swagger ์ ์ฉ ๋ฐ ๋ฌธ์ํ. nginx access ๋ก๊ทธ๋ฅผ ํตํ ์ฌ์ฉ๋์ง ์๋ endpoint ๋ถ์. endpoint ์ฌ์ฉ์ฒ ๋ฌธ์ํ
- Java melody ๋ชจ๋ํฐ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ ๐
Quartz Scheduler ์ด๋๋ฏผ์ ๋์ ๋ฐ์ดํฐ์์ค ๊ตฌํ ๐
- ๊ธฐ๊ฐ
- 2020.12 ~ 2021.02
- ๊ฐ์
- ๋ค์ค ๋ฐ์ดํฐ ์์ค๋ฅผ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ชจ๋ํฐ๋งํ๋ ์ด๋๋ฏผ ๊ตฌํ
- ์ฌ์ฉ ๊ธฐ์
- SpringBoot, Java, Node, SpringJPA, Spring Security, Vuex, Vue2, ES2020, MySQL, RoutingDataSource
- ๋ด์ฉ
- ์ด๋๋ฏผ ํจ๋์ ํตํด ๋์ ์ผ๋ก ๋ฐ์ดํฐ ์์ค๋ฅผ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ๋ค์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ ํ์ ์ฝ๊ฒ ์ํํ๋๋ก ํ์์.
- ๋ฐ์ดํฐ ์์ค์ Connection ์ค์ ์ ๋์ ์ผ๋ก ์ค์ ํ ์ ์๋๋ก ๊ฐ๋ฐ
- ๊ฐ ๋ฐ์ดํฐ ์์ค์ ์ฐ๊ฒฐ ์ํ ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์ฌ์ฉ์์ ์ญํ ์ ๋ฐ๋ผ ์ด๋๋ฏผ์ ํน์ ๊ธฐ๋ฅ์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ๋ฐฐํฌ๋ ํ๋ก์ ํธ ๋ฒ์ ์ ํ์ธํ ์ ์๋ StateController ์ถ๊ฐ
- Gradle ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋
- Spring Boot ๋ฒ์ ์ ๊ทธ๋ ์ด๋ ์ค Quartz jobData Converter ์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์ค๋ฅ ์์ . ๐
- Spring Security์ PasswordEncoder๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ๋น๋ฐ๋ฒํธ ์ ์ฅ
- ๋ฐฑ์๋ ์์ธ๋ฅผ ํ๋ก ํธ์๋๊ฐ ์ดํดํ ์ ์๋ ์์ธ ์ฝ๋๋ก ์ฒ๋ฆฌํ์ฌ ๋ธ๋ผ์ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ๋์ํ ์ ์๋ ๋์์ ์ ์ํจ
- SecurityContextHolder๋ฅผ ํ์ฉํ์ฌ ์์ฒญ์ด ์ธ์ฆ ํ์ธ
- Spring Data์ AuditorAware๋ฅผ ๊ตฌํํ์ฌ JpaAuditing์ผ๋ก ์๋์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด ๊ธฐ๋ก
- Google OAuth ๋ก๊ทธ์ธ ์ ํ์ฌ ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฆ
- ์ฌ์ฉ์ ์ญํ ๋ณ๊ฒฝ ์ ์ธ์ ๋ฌดํจํ๋ฅผ ํตํ ๋ณด์ ๊ฐํ
- ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ๋ฅผ ์ํด ๊ณตํต ๋ชจ๋ฌ ์ปดํฌ๋ํธ ์์ฑ
- ํฐ์บฃ ์ฌ์์ ์ ์ธ์ ์ ๋์คํฌ์ ์ ์ฅํ์ง ์๋๋ก ๊ตฌ์ฑ
- Axios ์์ฒญ ํ์์์ ์ค์ ์ผ๋ก ๋ฐฑ์๋ ์๋ฒ ๋ถํ ์ต์ํ
- Vue keep-alive ์ ๊ฑฐ๋ก ๋ฐ์ดํฐ ์ด๊ธฐํ ๊ฐ์
- ํ ์คํธ ์๋ฆฌ๋จผํธ์ ๋ํ ์์ ์ ์ธ์ผ๋ก ์คํ ์ต์ํ ๋ฐ ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์
- ์คํ ์ค์ธ job์ ID๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ ์ถ๊ฐ
- logback ์ค์ ์ถ๊ฐ
- Batch ์ฌ์ฉ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋ Quartz Scheduler ์์ธ ์ฒ๋ฆฌ.
- ๊ฐ์
- ์ฝ๋ก์ธ์ ์์ฝ ๊ฐ๋ฅ ํฐ์ผ ๋ฐ์ ์, slack ์ผ๋ก ์๋ฆผ์ ๋ฐ์ ์ ์๋ git action flow ์์ฑ.
- repository
- tech
- node.js
- ๊ฐ์
- ๋ฌธํ ์ ๋ณด๋ฅผ ํฌ๋กค๋งํ๋ git action flow ์์ฑํ๊ณ , react ๋ก ์น๋ทฐ ๊ตฌํ
- tech
- node.js, react.js
- repository
- ๊ฐ์
- ๋ชจ๋ฐ์ผ ๊ฐค๋ฌ๋ฆฌ์์ ๋ฐ์ฝ๋๋ฅผ ํฌํจํ ์ด๋ฏธ์ง๋ฅผ ์ค์บํ๊ณ ๋ชจ์์ ์กฐํํ ์ ์๋ ์ ํธ๋ฆฌํฐ ์ฑ. ํฉ์ด์ง ๊ธฐํํฐ์ฝ, ๋ฉค๋ฒ์ญ, ๊ตํต ํฐ์ผ ๋ฑ์ ๋ฐ์ฝ๋๋ฅผ ํตํฉํ์ฌ ํธ๋ฆฌํ๊ฒ ํ์ธํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต ๋ฐ์ฝ๋ ์กฐํ ์ ํ๋ฉด ๋ฐ๊ธฐ๋ฅผ ์ต๋๋ก ์ค์ ํ์ฌ ์ธ์์จ์ ๋์ด๋๋ก ์ค๊ณํจ
-
Java Record โ Non-canonical record constructor must delegate to another constructor
-
Javadoc ์์ฑํ๊ธฐ with IntelliJ, jenkins ์๋ฒ ๋ฐฐํฌ๊น์ง
-
ServletConfig ์๋ธ๋ฆฟ ์ด๊ธฐํ ํ๋ผ๋ฏธํฐ, ServletContext ์ปจํ ์คํธ ์ด๊ธฐํ ํ๋ผ๋ฏธํฐ
-
JVM์ ๋ฌด์์ด๋ฉฐ ์๋ฐ ์ฝ๋๋ ์ด๋ป๊ฒ ์คํํ๋ ๊ฒ์ธ๊ฐ
- Property โspring.profiles.activeโ imported from location โclass path resource
- Gradle Mutli-module Property ์ ์ํ๊ธฐ
- docker-compose ๋ก Kafka ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ทผํ๊ธฐ
- IntelliJ Kafka ๋๊ตฌ ์ฌ์ฉํ๊ธฐ
- Java Kafka Consumer ๊ตฌํ
- Java Kafka CommonErrorHandler ์ ์์ธ๊ฐ ์ ํ๋๊ธฐ ์ ์ AOP ๋ก ์์ธ ์ฒ๋ฆฌํ๊ธฐ
- UTF-8, UNICODE
- BSON VS JSON
- Planning with Google Presentation
- Introduction to Website Planning
- Iterator Pattern
- Why use Kafka Connect as a data pipeline? Unpacking the open source kafka-sink-connector!
- AB Test
- Jira ์ ์๊ธฐ
- ๋น๋ฐ๋ฒํธ์ ๋ฌด์์์ ์์
- ํจ๊ป์๋ผ๊ธฐ
- ์ํํธ์จ์ด ๊ณตํ
- ์คํ์ค์ธ Job ์ ์ข ๋ฃํ๋ Job ๊ฐ๋ฐ, JobOperator, JPA
- ์ฐ๋ ๋ ํํฐ์ ๋ค์ ์ค์ฒฉ ์ด์
- Datasource ConnectionPoolSize Exception
- flow ์step ์์ StepExitStatus ๋ฅผ Failed ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด ๋ค์ Step ์ ์คํ๋์ง ์๋๋ค
- ScopeNotActiveException
- Spring Batch JobParameter ๋ ๋ณ๊ฒฝํ ์ ์๋ค
- Spring Quartz JobData ์ Deserialization, Serialization Ingore serialVersionUID Exception
- MySQL ๊ณผ Spring Batch ์ ํต๊ณ ์์ ๊ฐ๋ฐ
- MultiResourceItemReader ๋ Resource ๋ฅผ ์ด๋ป๊ฒ ์ฝ์ด ์ฌ๊น?
- Spring Batch ExitStatus ๊ณผ Test Code ์์ฑํ๊ธฐ
- Spring Batch ์ ExecutionContext ์ value ํ์
- Spring Batch Partitioner JobScope ์ ์ค๋ณต
- Spring Batch Test ์ฝ๋์์ Job ์คํ ์ํค๊ธฐ
- SimpleStepHandler
- Managing Hierarchical Data in MySQL
- ์ค๋ผํด ์ ๋ฌธ๊ฐ๋ก ๊ฐ๋ ์ง๋ฆ๊ธธ
- dynamoDB
- Introduction to Redis
- MongoDB ์๋ฒฝ๊ฐ์ด๋
- mysql json
- Redis Stream
- ์ด๊ฒ์ด ๋ ๋์ค๋ค
- https://eyabc.github.io/docs/infra/index
- load_balancing
- Web Server์ WAS
- Access Control
- docker
- RAID
- ์๋ IP ๋ก ๋ณ๊ฒฝํ๊ธฐ
- Javascript
- ๊ฐ์ฒด์งํฅ Javascript
- Browser window-opener, Browser_Event
- Clean Code Javascript, airbnb js style guides
- Javascript ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- Javascript ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
- Javascript ๋ชจ๋
- Javascript ๊ฐ์ฒด
- next.js
- html
- css background-image graphics_system
- HTTP headers Referrer ๋ณด์์ด์
- CORS
- HTTPS ๋ฅผ ๊ฐ๋ฐํ๊ฒฝ์์ ์ฌ์ฉํ๋ ์ด์