Toss Bank

Toss Bankํ† ์Šค๋ฑ…ํฌยทSoftware Engineer ยท 2023.09 ~ 2024.04

ํ† ์Šค๋ฑ…ํฌ๋Š” ์ธํ„ฐ๋„ท ์ „๋ฌธ ์€ํ–‰์ž…๋‹ˆ๋‹ค. Housing Loan Squad(์ „์„ธ๋Œ€์ถœ)์—์„œ FullStack Developer๋กœ ์ „์„ธ๋Œ€์ถœ ์‹ฌ์‚ฌยท์šด์˜ ์‹œ์Šคํ…œ LUMOS(Loan Universal Management Operating System)๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์›”์„ธ ๋Œ€์ถœ์˜ ํŠน์„ฑ์ƒ ์‹ฌ์‚ฌยท์šด์˜์— ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ํšจ์œจ์ ์ธ ์‹ฌ์‚ฌ ์‹œ์Šคํ…œ์„ LUMOS์— ๋…น์—ฌ๋‚ด ํƒ€์€ํ–‰ ๋Œ€๋น„ ์••๋„์ ์œผ๋กœ ์ ์€ ์ธ์›(26๋ช…)์œผ๋กœ ๋Œ€์ถœ ์‹ฌ์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์—ฐ๊ฐ„ ์ธ๊ฑด๋น„ ์•ฝ 50์–ต ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

26๋ช…
์‹ฌ์‚ฌ ์ธ์›
ํƒ€์€ํ–‰ ๋Œ€๋น„ ์ตœ์†Œ ์ธ์›์œผ๋กœ ์šด์˜
์•ฝ 50์–ต
์—ฐ๊ฐ„ ์ธ๊ฑด๋น„ ์ ˆ๊ฐ ํšจ๊ณผ
ํšจ์œจ์  ์‹ฌ์‚ฌ ์‹œ์Šคํ…œ LUMOS
50%โ†“
๊ถŒ๋ฆฌ์กฐ์‚ฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„
60๋ถ„ โ†’ 30๋ถ„
9โ†’4๋ถ„
๋ฐฐํฌ ์‹œ๊ฐ„ ๋‹จ์ถ•
yarn berry ยท Docker ์บ์‹ฑ

LUMOS โ€” ์ „์„ธ๋Œ€์ถœ ์‹ฌ์‚ฌยท์šด์˜ ์‹œ์Šคํ…œ

  • ๊ฐˆ์•„ํƒ€๊ธฐยท์ƒˆ๋กœ๋ฐ›๊ธฐยท์ฃผ๊ธฐ๋ณ„์ ๊ฒ€ยท๋ชฉ์ ๋ฌผ ์‹œ์„ธํ™•์ธยท์„ธ์›€ํ„ฐ ์ฃผ์†Œ ๊ฒ€์ƒ‰ยท์ง€ํ‚ด๋ณด์ฆ ๋ณด์ฆ๋ฃŒ์šฐ๋Œ€ยทํ—ˆ์œ„์ž„๋Œ€์ธ๊ด€๋ฆฌ ๋“ฑ ์ „์„ธ๋Œ€์ถœ ์‹ฌ์‚ฌยท์šด์˜์— ํ•„์š”ํ•œ ์ „ ์˜์—ญ์˜ ๊ธฐ๋Šฅ์„ ์ฃผ๋„์ ์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.
  • LUMOS ์ž์ฒด ์•Œ๋ฆผ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด ๋น„๋™๊ธฐ ์ „์„ธ๋Œ€์ถœ ์„œ๋ฅ˜ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค ์‹œ๊ฐ„์„ ๋‹จ์ถ• โ€” ๋‹ด๋‹น์ž์˜ ๊ถŒ๋ฆฌ์กฐ์‚ฌ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ 60๋ถ„์—์„œ 30๋ถ„์œผ๋กœ 50% ์ค„์˜€๊ณ , ์„ค๋ฌธ์กฐ์‚ฌ์—์„œ ๋‹ด๋‹น์ž ์ „์›์ด ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‘๋‹ต์ด ๋А๋ฆฌ๊ฑฐ๋‚˜ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•œ ์ง€์ ์— Optimistic Update๋ฅผ ์ ์šฉํ•ด UX๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๋ธ”๋กœ๊ทธ ๊ธ€๋กœ ์ •๋ฆฌํ•ด ํŒ€์— ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • API ์‘๋‹ตยท์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋“ฑ ์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜จ ๊ฐ’์„ ๋Ÿฐํƒ€์ž„์— ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด Zod๋ฅผ ์ ๊ทน ํ™œ์šฉํ•ด ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€์˜ network waterfall์„ ๋ฐœ๊ฒฌํ•ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ๊ฐœ์„ , LCP๋ฅผ ๋‹จ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • yarn berry ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ Dockerfile ์บ์‹ฑ ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ๋กœ ์ด ๋ฐฐํฌ ์‹œ๊ฐ„์„ 9๋ถ„์—์„œ 4๋ถ„์œผ๋กœ ๋‹จ์ถ•ํ•˜๊ณ , Phantom Dependency๋ฅผ ์ œ๊ฑฐํ•ด ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ๊ฐ„์„ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
  • ์ „์„ธ๋Œ€์ถœ ์šด์˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” CS๋ฅผ ํ•˜๋ฃจ ํ‰๊ท  6~12๊ฑด์—์„œ 0~3๊ฑด์œผ๋กœ ์ค„์—ฌ ์•ˆ์ •์ ์ธ ์šด์˜์— ๊ธฐ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„ํด๋ฆฌ์—์„œ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ์„ ์ ๊ณผ ๋‚˜์•„๊ฐ€์•ผ ํ•  ๋ฐฉํ–ฅ์„ ํ‚ค๋…ธํŠธ๋กœ ์ •๋ฆฌํ•ด ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

LUMOS ํ™”๋ฉด

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ โ€” React ํด๋ผ์ด์–ธํŠธ๊ฐ€ API Gateway๋ฅผ ํ†ตํ•ด loans-management ยท loans-housing ยท scraping-server(Spring)์™€ ํ†ต์‹ ํ•˜๊ณ , MySQL ยท MongoDB๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํ•œ๋„์กฐํšŒ ยท ๋ชฉ์ ๋ฌผ ์‹œ์„ธ ์กฐํšŒ โ€” ๊ฐ์ •ํ‰๊ฐ€ ์—ฐ๋™์œผ๋กœ ๋‹ด๋ณด ์‹œ์„ธ๋ฅผ ์ฆ‰์‹œ ํ™•์ธ
์ž„๋Œ€์ฐจ๊ณ„์•ฝ์„œ ์‹ฌ์‚ฌ โ€” ๊ณ„์•ฝ ยท ๋ณด์ฆ ์ •๋ณด ์ž…๋ ฅ๊ณผ ์ œ์ถœ ์„œ๋ฅ˜ ๊ฒ€ํ† 
์ฃผ๊ธฐ๋ณ„ ์ ๊ฒ€ ยท ์ตœ์ข…ํ™•์ธ โ€” ๋ฌผ๊ฑด์ง€ ๋“ฑ๊ธฐ ยท ์‹œ์„ธ ์žฌํ™•์ธ ์—…๋ฌด
์ „์„ธ๋Œ€์ถœ ์‹ ์ฒญ ์—…๋ฌด ๋ถ„๋ฐฐ โ€” ๋‹ด๋‹น์ž๋ณ„ ยท ๊ทธ๋ฃน๋ณ„ ์‹ฌ์‚ฌ ํ• ๋‹น ๊ด€๋ฆฌ
์ „์„ธ๋Œ€์ถœ LUMOS ๊ด€๋ จ CS ์ถ”์ด โ€” ์•Œ๋ฆผ ์„œ๋น„์Šค ๊ตฌ์ถ•๊ณผ ์šด์˜ ๊ฐœ์„ ์œผ๋กœ ํ•˜๋ฃจ ํ‰๊ท  6~12๊ฑด์—์„œ 0~3๊ฑด์œผ๋กœ ๊ฐ์†Œ

๋ฐœํ‘œ ์ž๋ฃŒ

Tossbank FullStack Engineer Weekly ยท 2023.10 โ€” ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ์„ ์ ๊ณผ ๋‚˜์•„๊ฐ€์•ผ ํ•  ๋ฐฉํ–ฅ์„ ์ •๋ฆฌํ•ด ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์Šคํƒ

FrontendReactNext.jsTypeScriptToss Design SystemZodReact QueryReact Hook Form
BackendKotlinSpringMySQLMongoDBKafka

๊ด€๋ จ ๊ธ€ ยท ์˜์ƒ

๋ฏฟ์„ ์ˆ˜ ์žˆ๋Š” ์ „์„ธ๋Œ€์ถœ์˜ ์‹œ์ž‘ ยท ํ† ์Šค๋ฑ…ํฌ ์ „์›”์„ธ๋ณด์ฆ๊ธˆ๋Œ€์ถœ
ํ† ์Šค๋ฑ…ํฌ๋‹ค์šด ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ์‹ ยท 2024 ํ† ์Šค๋ฑ…ํฌ ๊ณต๊ฐœ ์ฑ„์šฉ