🤓 Introduction

안녕하세요😃
문제를 해결하기위해 다양한 시각에서 접근하여 가장 최적화된 방법을 도출하여 적용하기를 즐기는 프론트엔드 개발자 김민석입니다.
Contact & Channel
- Github | https://github.com/shackstack
- Portfolio | https://dev-jeremy.vercel.app/
- Email | minseok1061@gmail.com
- Phone | 010-5258-1305
🛠 Skills
-
HTML/CSS
-
JavaScript
,TypeScript
-
React
,Next.js
-
Tanstack Query
-
Recoil
,Zustand
-
Styled Components
,Tailwind CSS
-
MSW
,Jest
,Storybook
,Cypress
💻 Project

셀럽 추천 맛집 서비스, 셀럽잇
2023.07 - 2024.01
홈페이지 | Github 저장소 | 포트폴리오 | 2분 스피치 기획안
-
인기있는 셀럽들이 다녀간 맛집 정보를 쉽고 편하게 볼 수 있는 서비스
-
프론트엔드 3명, 백엔드 4명으로 구성
-
주간 활성 사용자 수(WAU) 2000 달성
개발 및 기여내용
E2E 테스트를 통해 QA 비용 절감 및 서비스 안정성 개선
[문제 상황: 반복되는 QA 실수]
- 팀원 모두가 배포 전날 함께 모여 QA를 진행하였습니다. 하지만 앱의 복잡도가 커질수록 QA양이 늘어났고 팀원 모두가 참여함에도 불구하고 배포이후 문제가 발견되곤 하였습니다.
[해결 방안: E2E 테스트를 통한 QA 자동화]
- Cypress를 이용하여 E2E 테스트를 통해 QA 비용 50% 절감할 수 있었고 서비스의 안정성을 개선할 수 있었습니다.
- data-set과 aria-label를 통해 dom element를 추적함으로써 코드 변화에 대한 유연성을 확보하였습니다.
- E2E 테스트 자동화를 통해 merge 안정성을 확보하고 업무 효율성을 높일 수 있었습니다.
SPA 환경에서 음식점 상세페이지에 대한 오픈그래프 정보를 노출시키는 공유하기 기능 구현
[문제 상황: 오픈그래프 정보의 부재]
- 링크 공유 시 오픈그래프 정보를 확인하지 못하여 사용자 경험이 좋지 않은 문제가 있었습니다.
- React-helmet을 통해 클라이언트에서 동적으로 메타데이터를 주입하는 방식을 시도해보았지만 동작하지 않았습니다.
- 이를 통해 오픈그래프를 서버에서 pre-rendering되어야 오픈그래프 정보가 보이게 되는 것을 알게되었습니다.
[해결 과정: 부분적 서버 사이드 렌더링 적용]
- 부분적으로 공유하기 기능에만 Next.js를 도입하기로 하였습니다.
- Next.js를 이용하여 메타데이터를 서버에서 pre-rendering하여 사용자가 접속 시 실제 페이지로 리다이렉트하는 방식을 통해 공유하기 기능을 구현했습니다.
- 이를 통해 사용자 경험 향상 뿐만 아니라 검색엔진최적화 효과도 얻을 수 있었습니다.
AWS accessKey 접근 권한이 없는 환경에서 EC2를 활용하여 S3 자동배포 파이프라인 구축
[문제 상황: 비효율적인 수동 배포 프로세스 및 접근 제한]
- 수동으로 S3에 빌드 파일을 드래그 앤 드롭하는 방식은 시간이 많이 소요되었고, 잠재적으로 위험한 작업이었습니다.
- 또한, 교육 기관에서 관리하는 AWS Access Key에 접근하지 못하여, Github-Action을 사용한 자동 배포에 어려움을 겪었습니다.
[해결 과정: EC2를 이용한 자동배포 파이프라인 구축]
- 이 문제를 해결하기 위해, EC2 인스턴스에 AWS CLI를 설치하고, Access Key 없이도 S3에 빌드 파일을 자동으로 배포하는 파이프라인을 구축했습니다.
- 이 방식은 배포 과정을 크게 단순화하며, 배포의 안정성과 생산성을 모두 향상시켰습니다.
웹 성능 최적화
[문제 상황 및 해결 방법]
- 앱의 기능이 확장됨에 따라 번들의 크기도 커져 로딩성능이 좋지 못하는 문제를 마주하였습니다.
- Minify, Tree shaking, Code splitting 등의 웹팩 번들 최적화를 통해 초기로딩속도 개선 (Lighthouse Performance 72점 → 89점)
- 이미지가 서비스의 큰 비중을 차지하는 만큼 이미지의 로딩속도는 사용자 경험에 큰 영향을 미쳤습니다. 하지만 천차만별한 이미지 크기로 인해 각 이미지간 로딩속도 편차가 컸고, 이는 사용자경험에 좋지 못하였습니다.
- S3, CloudFront를 이용한 CDN 구축을 통해 로딩속도 개선 (LCP 14.2s → 2.4s)
- jpeg에서 webp로 이미지 변환 및 gzip 압축을 통해 이미지 크기 120kb 이하로 축소
- Light House로 웹 성능을 측정한 결과 CLS가 0.14로 Layout shift개선이 필요한 수준이었습니다.
- Suspense를 활용하여 Fallback UI로 크기가 동일한 Skeleton UI를 보여줌으로써 Layout shift 개선
- Font preload를 통해 폰트가 뒤늦게 적용되는 문제 및 Layout shift 개선
사용자 경험 개선
- 한번 수신 받은 음식점 리스트를 캐싱하여 재검증 시 fallback UI 대신 캐싱된 데이터 제공
- 지도페이지에서 사용자가 보고있는 음식점의 위치를 파악하기 쉽게 마우스 호버시 상응하는 지도상의 음식점 마커 강조
기술도입
- MSW
- Mock 서버를 구축하여 개발서버 의존성 분리 및 개발 생산성 증진
- 랜덤하게 실패/성공 응답을 내보내는 로직을 구현하여 성공 및 에러케이스 대응
- Zustand, Tanstack Query
- 클라이언트/서버 상태 관리 및 보일러플레이트 개선 (코드 줄 30% 축소)
- StoryBook
- 스토리북 배포링크
- UI 테스트, 엣지 케이스 확인을 통한 정확하고 빠른 개발을 위해 컴포넌트 단위의 Storybook 작성
- 공통 컴포넌트 20개, 조합 컴포넌트 9개를 제작하여 컴포넌트 테스트 및 문서화
💬 Presentation

테코톡
2023.09.21
웹 성능을 최적화하기 위한 방법으로 번들 사이즈 최적화를 주제로 선정하여 10분 테크토크 발표하였습니다.
📚 Education
우아한테크코스 5기
2023.02 - 2023.11
우아한형제들 주관 개발자 양성 프로그램에서 웹 프론트엔드 교육 수강
- Level 1 : JavaScript 기반 웹 개발 미션을 수행하며 jest, cypress과 같은 테스트 도구 학습
- Level 2 : TypeScript, React 기반 웹 개발 미션을 수행하며 recoil, MSW, Storybook 학습
- Level 3 : 팀 프로젝트를 통해 협업 경험
- Level 4 : 프로젝트 최적화, CDN 구축, CI/CD, Next.js 학습
- 공통 : 페어 프로그래밍, 글쓰기, 코드 리뷰, 스터디를 통해 커뮤니케이션 스킬 증진
이노베이션캠프 in 서울
2022.07 - 2022.10
스파르타코딩클럽 주관 개발자 양성 프로그램에서 웹 프론트엔드 교육 수강
- 2주 단위의 React 기반 웹 개발 미션 수행 및 팀 프로젝트를 경험하며 프론트엔드 입문
- 일주일 2개 이상 블로그 포스팅 진행 및 6주간 1일 1커밋 달성
Sejong Univ.
2016.03 - 2022.02
외식경영학 학사 (3.55 / 4.5)
-
제 3회 교내 주관 SW 알고리즘 경시대회 장려상 (2016.11)
-
제 8회 교내 주관 SW 알고리즘 경시대회 장려상 (2021.11)