๐ phone: 010-2311-1090
๐ง Email : [email protected]
**Github | Tistory | LinkedIn**
Why๋ฅผ ํตํด ํ์ตํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์ฆ๊น๋๋ค.
๊น์ด ๊ณ ์ฐฐํ ๊ฒ์ด๋, ๋๋ง์ ๋ ์จ๋ฐ์ ๊ณต์ ํ๋ ๊ฒ์ ์ฆ๊น๋๋ค.
์น๊ฐ๋ฐ์ ๋ํ ๊น์ด์๋ ํ์ต์์ธ์ ๊ณต์ ๋ฅผ ํตํด ์ํธ์ฑ์ฅํ๋ ๋ชจ์ต, ํ์ ์ด๋๋ ๋ฆฌ๋์ญ์ ์ธ์ ๋ฐ์ 200๋ช ๊ฐ๋์ ์ธ์์ด ์ฐธ์ฌํ๋ IT ๋์๋ฆฌ SOPT์ ์น๊ฐ๋ฐํํธ์ฅ์ ๋งก์์ต๋๋ค.
:: 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
์ ์ ์๊ฒ ์๋ํฐ๋ฅผ ํ์ฉํด ๋ค์ํ ๊ธฐ๋ฅ์ผ๋ก ๊ฐํธํ๊ฒ ๊ธ์ ์ฐ๊ณ ์ํธ์์ฉํ ์ ์๋, ๋ชจ์ ๊ด๋ฆฌ์์๊ฒ admin๊ธฐ๋ฅ์ ์ ๊ณตํด ๊ธ๋ชจ์์ ๋ง๋ค๊ณ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํด์ฃผ๋ ๋ฐ์คํฌํ ์น ์๋น์ค
<aside> [ Lighthouse์ vite-bundle-visualizer๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ๊ฐ์ ]
core web vitals๋ฅผ ์ดํดํ๊ณ Lighthouse์ vite-bundle-visualizer๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ํ์ธํ ํ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ์ ๊ฐ์ ํ์์ต๋๋ค.
ํฐํธ ํ์ผ์ ์ฉ๋ ๊ฐ์๋ฅผ ์ํด font dynamic subset์ ์ ์ฉํ์ฌ ์ด์ ๊ณผ ๋น๊ตํ์ฌ SI 3.2s โ 2.6s **์ฝ 20%**์ ์ฑ๋ฅ์ ๊ฐ์ ํ์์ต๋๋ค.
๊ฐ๋ฐ์ ๋๊ตฌ์ Coverage ํญ์ ํ์ธํ์ฌ ๋ฉ์ธํ์ด์ง์ ๋ถํ์ํ JSํ์ผ, ์ฌ์ฉํ์ง ์๋ CSSํ์ผ์ ํ์ธ ํ ํด๋น ๋ฒ๋ค์ ์ฌ๋ฌ chunk๋ก ๋๋์ด ํ์ํ ์์ ์ ํด๋น ์ฒญํฌ๋ค์ ๋ถ๋ฌ์ค๋๋ก code splitting์ ์ ์ฉํ์ฌ ์ด๊ธฐ ๋ฒ๋ค ์ฌ์ด์ฆ๋ฅผ ์ค์ฌ์ฃผ์ด ์ด๊ธฐ ๋ ๋๋ง๋๋ ๋ฆฌ์์ค๋ฅผ 41.0 MB โ 8.0MB๋ก ์ฝ 80% ๊ฐ์์์ผฐ์ต๋๋ค.
๊ณ ํ์ง ์ด๋ฏธ์ง๋ฅผ ์๋ฒ์์ ๋ถ๋ฌ์ฌ ๋ LCP(load time) ์ฑ๋ฅ ์ด์๋ฅผ ํ์ธํ ํ, ์ด๋ฏธ์ง ์ ๋ก๋ ์ ์ webP ํฌ๋งท์ผ๋ก ๋ณํํ๋ ์ต์ ํ ๋ก์ง์ ์ ์ฉํ์ฌ LCP load time์ 30% ๋จ์ถํ๊ณ S3 ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋์ 30% ์ ๊ฐํ์ต๋๋ค.
๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ๋ก์ง๊ณผ 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๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ๋ฆฌํฉํ ๋ง ํ์์ต๋๋ค.
์ด๋ฅผ ํตํด ํค์ ์๊ณ๋ฅผ ํ ๋์ ํ์ ํ ์ ์์ด ํค์ ์ธ๋ถํ์ ๋ํ ๋ณ๊ฒฝ์๋ ์ฝ๊ฒ ๋์ฒํ ์ ์๊ฒ ๋์๊ณ ๋ ์ฉ์ดํ ์๋ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋์์ต๋๋ค.
</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
ํ์์๊ฐ์ ์ก์ ๋์ ๋น์ฉ์ ์ค์ด๊ณ ๋ถํธํจ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ชจ๋ฐ์ผ ์น ์๋น์ค
<aside> [ ์ผ์์ํ์ ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ์ฌ ๋์ ์ฌ์ฉ์ 400๋ช ์ ์น ] ํํ๋ก์ ํธ์ ํ์ ์์ ํ ๊ตฌ์ฑ์๋ค์ ํ์์๊ฐ์ ์ ์ ํ๋๋ฐ์ ๋ถํธํจ์ ๋๊ปด ํด๋น ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๋์ญ์ ๊ฐ์ง๊ณ ์งํํ ํ๋ก์ ํธ์ด๋ฉฐ ์ง์์ ์ผ๋ก ์ ์ ํผ๋๋ฐฑ์ ๋ฐ์ UX๋ฅผ ๊ฐ์ ํ์ฌ ์ง๊ธ๊น์ง ์ฝ 400๋ช ์ ๋์ ์ฌ์ฉ์๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
</aside>
<aside> [ ์๋ ๋ฐฐํฌ ํ๋ก์ฐ ์๋ํ ] github actions์ workflow๋ฅผ ํตํด CI๋จ๊ณ์์ Lint์ ๋น๋ํ ์คํธ๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐํฌ์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ์๊ณ ๊ธฐ์กด์ vercel ๋ฐฐํฌ์ ๋ํ ๊ณผ๊ธ์ ํผํ๊ธฐ ์ํด ์๋์ผ๋ก ์งํํ๋ ๋ฐฐํฌ๊ณผ์ ์ ์๋ํํด์ฃผ๋ workflow๋ฅผ ๊ตฌ์ถํ์ฌ ๊ธฐ์กด์ ๋ฒ๊ฑฐ๋ก์ ๋ ์๋ ๋ฐฐํฌ ํ๋ก์ฐ๋ฅผ ๊ฐ์ ํ์์ต๋๋ค.
</aside>
<aside> [ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ํ๊ฒฝ ๋์ ] html2canvas, web share api๋ฅผ ํ์ฉํ๋ฉฐ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ ๋ํ ์ ์ ํ ๋์์ ํตํด ์ ์ ์๊ฒ ๋ถํธํจ์์ด ์๋น์ค๋ฅผ ์ ๊ณตํ์์ต๋๋ค.
</aside>
๐งโ๐ซย 2024 ์นด์นด์ค ํ ํฌ ์บ ํผ์ค WEB ์ค์ต์ฝ์น (2024.06~ 2024.08)
๐ณย IT ๋ฒค์ฒ ์ฐฝ์ ๋์๋ฆฌ SOPT 34๊ธฐ ์นํํธ์ฅ (2024.01 ~ 2024.08)