แ„‹แ…ตแ„Œแ…ขแ„’แ…ฎแ†ซแ„Œแ…กแ„‰แ…ฉแ„‰แ…ฅแ„‰แ…กแ„Œแ…ตแ†ซแ„‰แ…ฆแ„…แ…ฉแ„แ…กแ†ฒแ„‹แ…ณแ†ซแ„‡แ…ฅแ„Œแ…ฅแ†ซ.png

๐Ÿ“ž phone: 010-2311-1090

๐Ÿ“ง Email : [email protected]


**Github | Tistory | LinkedIn**

๐Ÿ‘ฉโ€๐Ÿ’ป FrontEnd Developer

โš’ Project


๊ธ€์“ฐ๊ธฐ ๋ชจ์ž„์„ ์œ„ํ•œ ๊ธ€์“ฐ๊ธฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ์„œ๋น„์Šค

:: Mile

2 PM / 2 Design / 4 FE / 2 BE


React, Typescript, Tanstack-Query v5, Emotion

2023.12~ ing

https://github.com/Mile-Writings/Mile-Client

MILE

์œ ์ €์—๊ฒ ์—๋””ํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ธ€์„ ์“ฐ๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š”, ๋ชจ์ž„ ๊ด€๋ฆฌ์ž์—๊ฒ admin๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ๊ธ€๋ชจ์ž„์„ ๋งŒ๋“ค๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฐ์Šคํฌํƒ‘ ์›น ์„œ๋น„์Šค

<aside> [ Lighthouse์™€ vite-bundle-visualizer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ๊ฐœ์„  ]

core web vitals๋ฅผ ์ดํ•ดํ•˜๊ณ  Lighthouse์™€ vite-bundle-visualizer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ™•์ธํ•œ ํ›„ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ํฐํŠธ ํŒŒ์ผ์˜ ์šฉ๋Ÿ‰ ๊ฐ์†Œ๋ฅผ ์œ„ํ•ด font dynamic subset์„ ์ ์šฉํ•˜์—ฌ ์ด์ „๊ณผ ๋น„๊ตํ•˜์—ฌ SI 3.2s โ†’ 2.6s **์•ฝ 20%**์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  2. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Coverage ํƒญ์„ ํ™•์ธํ•˜์—ฌ ๋ฉ”์ธํŽ˜์ด์ง€์— ๋ถˆํ•„์š”ํ•œ JSํŒŒ์ผ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” CSSํŒŒ์ผ์„ ํ™•์ธ ํ›„ ํ•ด๋‹น ๋ฒˆ๋“ค์„ ์—ฌ๋Ÿฌ chunk๋กœ ๋‚˜๋ˆ„์–ด ํ•„์š”ํ•œ ์‹œ์ ์— ํ•ด๋‹น ์ฒญํฌ๋“ค์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก code splitting์„ ์ ์šฉํ•˜์—ฌ ์ดˆ๊ธฐ ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ์ฃผ์–ด ์ดˆ๊ธฐ ๋ Œ๋”๋ง๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ 41.0 MB โ†’ 8.0MB๋กœ ์•ฝ 80% ๊ฐ์†Œ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

  3. ๊ณ ํ™”์งˆ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ LCP(load time) ์„ฑ๋Šฅ ์ด์Šˆ๋ฅผ ํ™•์ธํ•œ ํ›„, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์ „์— webP ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ตœ์ ํ™” ๋กœ์ง์„ ์ ์šฉํ•˜์—ฌ LCP load time์„ 30% ๋‹จ์ถ•ํ•˜๊ณ  S3 ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ๋Ÿ‰์„ 30% ์ ˆ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  4. ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋กœ์ง๊ณผ useEffect๋กœ์ง์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„ below the fold ์˜์—ญ์˜ ์ด๋ฏธ์ง€๋ฅผ lazy loadingํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ FCP๋ฅผ 3.3s โ†’ 1.8s ์•ฝ 50% ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์œ„ 4๊ฐ€์ง€๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ์ ์šฉํ•˜์—ฌ ์ตœ์ข… ๋ฉ”์ธํŽ˜์ด์ง€์˜ ๋ฐฐํฌ ์„ฑ๋Šฅ์ง€ํ‘œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. FCP - 3.3s โ†’ 0.5s SI - 3.2s โ†’ 0.5s Lighthouse Performance Score - 66โ†’ 99

</aside>

<aside> [ Tanstack query key ๊ตฌ์กฐ ๊ฐœ์„  ]

๊ธฐ์กด์˜ ์ค‘๋ณต ๊ฐ€๋Šฅ์„ฑ๊ณผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ํ‚ค ์œ„๊ณ„, ํœด๋จผ ์—๋Ÿฌ๋กœ ๋ฐœ์ƒํ•˜์˜€๋˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **๐Ÿ”—query key factory๋ฅผ ๋„์ž…**ํ•˜์—ฌ React Query key๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ Hierarchy ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์—ˆ๊ณ  ์•„๋ž˜ 4๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•˜๋ฉฐ Query key๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ํ‚ค
  2. ํ™•์‹คํ•œ ์œ„๊ณ„
  3. ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ๊ตฌ์กฐ
  4. ๊ณต๋™๋ฐฐ์น˜(Colocation)

์ด๋ฅผ ํ†ตํ•ด ํ‚ค์˜ ์œ„๊ณ„๋ฅผ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด ํ‚ค์˜ ์„ธ๋ถ„ํ™”์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์—๋„ ์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ๋” ์šฉ์ดํ•œ ์ˆ˜๋™ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

</aside>

<aside> [ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ๋กœ UX ๊ฐœ์„ ]

๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์ด ๋ถˆ์•ˆ์ •ํ•œ ์ƒํ™ฉ์—์„œ ์ข‹์•„์š” ๊ธฐ๋Šฅ์˜ ๋А๋ฆฐ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ข‹์ง€ ์•Š์€ ์œ ์ € ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•˜์—ฌ UX๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„๊ณผ์ • ์ค‘ Tanstack query ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ setQueryData ๋ฉ”์†Œ๋“œ๋ฅผ ๊นŠ๊ฒŒ ๊ณ ์ฐฐํ•˜๋ฉฐ ์–ด๋–ค ์›๋ฆฌ๋กœ ํ•ด๋‹น ๋กœ์ง์ด ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๊ณต์œ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๐Ÿ”—ย ๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ (feat setQueryData ๋œฏ์–ด๋ณด๊ธฐ)

</aside>

<aside> [ MSW๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ๋ณ‘๋ชฉํ˜„์ƒ ๊ฐœ์„  ๋ฐ ์„œ๋ฒ„์˜์กด์„ฑ ๊ฐ์†Œ]

๋ฐฑ์—”๋“œ์— ์˜์กดํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ์˜ ๋ณ‘๋ชฉํ˜„์ƒ๊ณผ ๋””๋ฒ„๊น…์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์— ์„œ๋ฒ„์— ์˜์กดํ•˜๊ณ  ์žˆ๋˜ ๋ฌธ์ œ๋กœ ์ธํ•œ ์Šคํ”„๋ฆฐํŠธ์˜ ์žฅ๊ธฐํ™”๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ  ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด MSW๋ฅผ ๋„์ž…ํ•˜์˜€๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž์™€์˜ ์†Œํ†ต๋น„์šฉ์„ ์ค„์—ฌ ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๊ฐ„์„ ์ผ์ฃผ์ผ๊ฐ€๋Ÿ‰ ๋‹จ์ถ•์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

</aside>

<aside> [ presigned URL ๋„์ž…์œผ๋กœ ๊ณ ํ™”์งˆ ์ด๋ฏธ์ง€ ํ™”์งˆ์ €ํ•˜ ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ ]

์„œ๋ฒ„์— ๊ณ ํ™”์งˆ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹œ์— ํ™”์งˆ์ด ์ €ํ•˜๋˜๋Š” ๋ฌธ์ œ์™€ ๋”๋ถˆ์–ด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ s3๋กœ ์ง์ ‘ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” presigned URL ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ์ด๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ชจ๋“  ๋กœ์ง์— ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์—ฌ ์ด๋ฅผ ์ปค์Šคํ…€ํ›…์œผ๋กœ ๋งŒ๋“ค์–ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์—†์• ๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. ๐Ÿ”—ย PR ๋งํฌ

</aside>

<aside> [ FE Lead Developer ]

ํ”„๋ก ํŠธ์—”๋“œ ํŒ€ ๋ฆฌ๋”๋กœ์„œ ๊ณต์œ ํ•˜๋Š” ํŒ€ ๋ฌธํ™”๋ฅผ ๋งŒ๋“ค์–ด ๋„์ž…ํ•ด์•ผํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์„ธ์…˜์„ ์ง„ํ–‰ํ•ด์„œ ํŒ€์› ๋ชจ๋‘์—๊ฒŒ ๊ณต์œ ํ•˜๋Š” ๋ฌธํ™”, ์Šคํ”„๋ฆฐํŠธ ๋์— ์„œ๋กœ๊ฐ€ ๋งˆ์ฃผํ•œ ํŠธ๋Ÿฌ๋ธ”์„ ๊ณต์œ ํ•˜๊ณ  ํšŒ๊ณ ํ•˜๋Š” ๋ฌธํ™”๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค. Pn๋ฃฐ์„ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋ช…ํ™•ํ•œ ์˜์‚ฌ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜์˜€๊ณ , PR์ด ์ปค์ง€๋Š” ๊ฒƒ์ด ๋น ๋ฅธ ๋ฆฌ๋ทฐ์™€ ๋ฐ˜์˜์„ ์–ด๋ ต๊ฒŒ ํ•˜์—ฌ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด PR size labeling์„ ๋„์ž…ํ•˜๋Š” ๋“ฑ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด ํŒ€ ์ปจ๋ฒค์…˜์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค.

</aside>

์ตœ์ ์˜ ํšŒ์˜์‹œ๊ฐ„ ๋„์ถœ ์„œ๋น„์Šค

:: ASAP

2 PM / 2 Design / 2 FE / 2 BE


React, Typescript, Recoil, styled-components

2023.06~2023.10,

2024.06~ 2024.08

https://github.com/ASAP-as-soon-as-possible/ASAP_Client

๋ชจ๋“  ํšŒ์˜์˜ ์‹œ์ž‘, ASAP

ํšŒ์˜์‹œ๊ฐ„์„ ์žก์„ ๋•Œ์˜ ๋น„์šฉ์„ ์ค„์ด๊ณ  ๋ถˆํŽธํ•จ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ฐ”์ผ ์›น ์„œ๋น„์Šค

<aside> [ ์ผ์ƒ์ƒํ™œ์˜ ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์—ฌ ๋ˆ„์ ์‚ฌ์šฉ์ž 400๋ช… ์œ ์น˜ ] ํŒ€ํ”„๋กœ์ ํŠธ์™€ ํ˜‘์—…์—์„œ ํŒ€ ๊ตฌ์„ฑ์›๋“ค์˜ ํšŒ์˜์‹œ๊ฐ„์„ ์„ ์ •ํ•˜๋Š”๋ฐ์— ๋ถˆํŽธํ•จ์„ ๋А๊ปด ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋„ˆ์‹ญ์„ ๊ฐ€์ง€๊ณ  ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์ด๋ฉฐ ์ง€์†์ ์œผ๋กœ ์œ ์ € ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ UX๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ์ง€๊ธˆ๊นŒ์ง€ ์•ฝ 400๋ช… ์˜ ๋ˆ„์  ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

</aside>

<aside> [ ์ˆ˜๋™ ๋ฐฐํฌ ํ”Œ๋กœ์šฐ ์ž๋™ํ™” ] github actions์˜ workflow๋ฅผ ํ†ตํ•ด CI๋‹จ๊ณ„์—์„œ Lint์™€ ๋นŒ๋“œํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฐํฌ์‹œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ฎ์ถ”์—ˆ๊ณ  ๊ธฐ์กด์— vercel ๋ฐฐํฌ์— ๋Œ€ํ•œ ๊ณผ๊ธˆ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋˜ ๋ฐฐํฌ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ด์ฃผ๋Š” workflow๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๊ธฐ์กด์— ๋ฒˆ๊ฑฐ๋กœ์› ๋˜ ์ˆ˜๋™ ๋ฐฐํฌ ํ”Œ๋กœ์šฐ๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

</aside>

<aside> [ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ํ™˜๊ฒฝ ๋Œ€์‘ ] html2canvas, web share api๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋Œ€์‘์„ ํ†ตํ•ด ์œ ์ €์—๊ฒŒ ๋ถˆํŽธํ•จ์—†์ด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

</aside>

๐ŸŽฏ Experience


๐Ÿง‘โ€๐Ÿซย 2024 ์นด์นด์˜ค ํ…Œํฌ ์บ ํผ์Šค WEB ์‹ค์Šต์ฝ”์น˜ (2024.06~ 2024.08)

๐ŸŒณย IT ๋ฒค์ฒ˜ ์ฐฝ์—… ๋™์•„๋ฆฌ SOPT 34๊ธฐ ์›นํŒŒํŠธ์žฅ (2024.01 ~ 2024.08)