Skip to content
View eyabc's full-sized avatar

Highlights

  • Pro

Organizations

@DKU-STUDY
Block or Report

Block or report eyabc

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
eyabc/README.md

Currier

EST AID (๊ตฌ Zum Internet)

  • Position
    • FullStack Developer
  • ์žฌ์ง ๊ธฐ๊ฐ„
    • 2020.11 ~ ์žฌ์ง์ค‘
  • ์—…๋ฌด
    • ์คŒ์ธํ„ฐ๋„ท ํฌํ„ธ ๋‰ด์Šค์คŒ ์›น์„œ๋น„์Šค ํ’€์Šคํƒ ๊ฐœ๋ฐœ https://news.zum.com/
    • ๋งค์ฒด์‚ฌ๋กœ๋ถ€ํ„ฐ ๊ธฐ์‚ฌ๋ฐ์ดํ„ฐ ์†ก๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ FTP ์„œ๋ฒ„์™€ NAS ์‹œ์Šคํ…œ ์ด์Šˆ ๋Œ€์‘
    • ๊ธฐ์‚ฌ๋ฐ์ดํ„ฐ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑ ํ•˜์—ฌ ๋‰ด์Šค์คŒ DB ์— ์ €์žฅํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ
    • DB ์˜ ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ„ธ์— ๋…ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ Rest API ๊ฐœ๋ฐœ
    • ๋‰ด์Šค Backoffice ๊ฐœ๋ฐœ
    • ๋‰ด์Šค Pc ๋ฐ Mobile SSR ์„œ๋ฒ„ ๊ฐœ๋ฐœ
    • DB ๋ฐ์ดํ„ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ Batch ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

TechSet

โ˜…โ˜…โ˜… 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

Project

๋‰ด์Šค ๊ฒ€์ƒ‰ ํŒŒ์„œ ๋ฆฌํŒฉํ„ฐ๋ง

  • ๊ธฐ๊ฐ„ 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 ์ฐจ๋‹จํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ. ๐Ÿ”—

๋‰ด์Šค์คŒ Batch ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํ”„๋กœ์ ํŠธ

  • ๊ธฐ๊ฐ„
    • 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 ๋ณด์•ˆ์ด์Šˆ ํ™•์ธํ•˜์—ฌ ๋‹ด๋‹น ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒดํฌ ์ ๊ฒ€

๋‰ด์Šค์คŒ PC / MOBILE ํ”„๋กœ์ ํŠธ

  • ๊ธฐ๊ฐ„
    • 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 ๊ธฐ๋ฐ˜ ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์žฌํ˜„๋˜๋ฉฐ, ํŠน์ • ์Šคํฌ๋ฆฝํŠธ ์žฌ๋กœ๋“œ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ๐Ÿ”—

๋‰ด์Šค์คŒ ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ Frontend-Backend ๋ถ„๋ฆฌ

  • ๊ธฐ๊ฐ„
    • 2023.07
  • ๊ฐœ์š”
    • Spring MVC Template Engine ํ”„๋กœ์ ํŠธ์—์„œ Api Endpoint ๋ถ„๋ฆฌ ๊ฐœ๋ฐœ.
    • ์ฃผ๋กœ ์œ ์ง€๋ณด์ˆ˜์™€ ๊ด‘๊ณ ์‚ฝ์ž…์— ์ง‘์ค‘๋œ ๋ชจ๋ฐ”์ผ ํ”„๋กœ์ ํŠธ์˜ ์•ˆ์ •ํ™” ์ƒํƒœ๋ฅผ ๊ณ ๋ คํ•˜๊ณ . ๋‰ด์Šค์คŒ ์„œ๋น„์Šค์˜ ํ˜„๋Œ€์  FE ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ”„๋ก ํŠธํŒŒํŠธ์— ์„œ๋น„์Šค๋ฅผ ์ธ๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ์ง„ํ–‰ํ•˜์˜€์Œ.
  • ๋‚ด์šฉ ๐Ÿ”—
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํ˜ผ์žฌ๋œ Controller ์ฝ”๋“œ์™€ JavaScript ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ API ํ”„๋กœ์ ํŠธ๋กœ Migration.
    • ๋ฐฑ์—”๋“œ API๋ฅผ ๋ชจ๋ฐ”์ผ ์›น ์„œ๋น„์Šค์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , Swagger๋ฅผ ํ™œ์šฉํ•˜์—ฌ API ๋ช…์„ธ์„œ ๋ฌธ์„œ ์ž‘์„ฑ
    • Migration ๊ณผ์ •์—์„œ๋Š” ๊ธฐ์กด ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก Spring RestController์˜ ์ƒˆ๋กœ์šด Endpoint ์ƒ์„ฑ ๋ฐ Migrationํ•  ํ”„๋กœ์ ํŠธ์˜ API ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
    • ์Šคํ”„๋ง ์บ์‹œ ์Šค์ผ€์ค„๋Ÿฌ ๋„์ž…์œผ๋กœ ๋ชจ๋ฐ”์ผ API ์— ์บ์‹œ ์ ์šฉ. TTL ์„ค์ •๊ณผ ์ฃผ๊ธฐ์  ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”.

๋‰ด์Šค์คŒ Redis Cache ๋„์ž…

  • ๊ธฐ๊ฐ„
    • 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์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•˜์˜€์Œ.

๋‰ด์Šค์คŒ NAS์˜ static ์ด๋ฏธ์ง€ ์‚ญ์ œ ํ”„๋กœ์ ํŠธ

  • ๊ธฐ๊ฐ„
    • 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 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ.

Side Project

collosseum-ticketing

  • ๊ฐœ์š”
    • ์ฝœ๋กœ์„ธ์›€ ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ํ‹ฐ์ผ“ ๋ฐœ์ƒ ์‹œ, slack ์œผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” git action flow ์ž‘์„ฑ.
  • repository
  • tech
    • node.js

culture-infomation

๋ฐ”์ฝ”๋“œ ์‚ฌ์ง„ ์ธ์‹ ์•ฑ ๊ฐœ๋ฐœ

  • ๊ฐœ์š”
    • ๋ชจ๋ฐ”์ผ ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ๋ฐ”์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ ์ด๋ฏธ์ง€๋ฅผ ์Šค์บ”ํ•˜๊ณ  ๋ชจ์•„์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์•ฑ. ํฉ์–ด์ง„ ๊ธฐํ”„ํ‹ฐ์ฝ˜, ๋ฉค๋ฒ„์‹ญ, ๊ตํ†ต ํ‹ฐ์ผ“ ๋“ฑ์˜ ๋ฐ”์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต ๋ฐ”์ฝ”๋“œ ์กฐํšŒ ์‹œ ํ™”๋ฉด ๋ฐ๊ธฐ๋ฅผ ์ตœ๋Œ€๋กœ ์„ค์ •ํ•˜์—ฌ ์ธ์‹์œจ์„ ๋†’์ด๋„๋ก ์„ค๊ณ„ํ•จ

Articles

IDE

Test Code

Java

JPA

MySql

Spring

Kafka

ETC

Search Engine Optimization

Linux

frontend

Spring Batch

Database

Infrastructure

Javascript & Browser

Book

Pinned

  1. culture-infomation culture-infomation Public

    ๋ฌธํ™” ์ •๋ณด๋ฅผ ๋ชจ์•„์„œ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

    JavaScript