황지영증명사진.jpeg

📞  +82 10-2394-4952 ✉️  [email protected] 깃허브 https://github.com/hjy080530

<aside> <img src="/icons/hammer_blue.svg" alt="/icons/hammer_blue.svg" width="40px" />

전체의 흐름을 읽는

코드베이스를 파악하고, 영향범위를 먼저 확인한 뒤 안정적으로 설계합니다.

</aside>

<aside> <img src="/icons/ruler_blue.svg" alt="/icons/ruler_blue.svg" width="40px" />

사소한 디테일까지

배포 당일 계산식 불일치를 즉시 발견하고 수정할 만큼, 사소한 케이스도 놓치지 않습니다.

</aside>

<aside> <img src="/icons/water_blue.svg" alt="/icons/water_blue.svg" width="40px" />

배포를 끝이 아닌 운영의 시작으로 여기는

연속 장애를 직접 대응하며 서비스 운영이 개발 이후까지 이어진다는 걸 경험으로 배웠습니다.

</aside>

⚒️ Skills

주력

Next.js

React

TypeScript

Recoil

Tanstack Query

Zustand

Emotion CSS

Styled-components

Figma

사용 경험

Docker

FastAPI

Supabase

Flutter

Dart

Main project

:maru: 마루

Design - 1명 Backend - 2명 Frontend - 3명

트래픽: 25,000,000+

:commit: 100+ :pr:60+

부산SW마이스터 고등학교 입학 전형 시스템 V2 2025.05. ~ 2026.01.

Github

https://github.com/Bamdoliro/marubase

https://github.com/Bamdoliro/maruruuu

Link

https://maru.bamdoliro.com

Stack

Next.js recoil axios react-query emotion TypeScript

Introduce

<aside>

마루는 부산SW마이스터고등학교의 입학전형 지원을 위해 개발된 서비스입니다.기존에 파편화되어 접근이 어려웠던 전형 과정을 하나로 통합하여, 학생과 교사 모두가 보다 효율적으로 이용할 수 있는 환경을 제공합니다.입학 원서 작성 및 관리 기능을 비롯해 입학설명회 운영, 지원자 데이터 조회, 단체 문자 발송 등 전형 운영 전반에 필요한 다양한 기능을 지원합니다.해당 서비스는 2024년 입학전형부터 실제 운영에 적용되었으며, 이후에도 지속적인 유지보수와 기능 개선을 통해 안정적으로 운영 중입니다.

</aside>

Preview

<aside>

메인 페이지

메인 페이지

입학설명회 페이지

입학설명회 페이지

원서 관리 페이지

원서 관리 페이지

학생 통계 페이지

학생 통계 페이지

</aside>

Troubleshooting

<aside>

[performance 개선]

개발 중 빌드 속도가 느려 Lighthouse로 측정해보니 Performance 점수가 60점대로 낮게 측정됐다. 빌드 시간도 약 3.45s로 느린 상태였습니다.

🔨 해결

  1. 메인 배경 이미지가 PNG(1.23MB) 포맷으로 제공되고 있었고 LCP 대상 이미지임에도 preload가 없어, 브라우저가 HTML → CSS 파싱 → 레이아웃 계산을 모두 마친 뒤에야 이미지 로드를 시작했습니다.
  2. Pretendard 폰트를 CSS @import로 로드하고 있어 외부 CDN 응답이 완료될 때까지 렌더링 자체가 블로킹됐습니다.
  3. 실제로 사용하지 않는 @suspensive/react, react-cookie, react-toastify 등의 패키지가 번들에 그대로 포함하고 있었습니다.

배경 이미지를 WebP(70.1KB)로 교체해 용량을 약 94% 줄이고, <head>에 fetchPriority="high" preload와 CDN preconnect를 추가해 브라우저가 HTML 파싱 초기에 이미지를 선점 로드하도록 처리했습니다. 폰트는 @import를 제거하고 strategy="afterInteractive" Script로 렌더링 이후 비동기 삽입하도록 전환해 렌더링 블로킹을 완전히 제거했습니다. 미사용 패키지 4종을 제거해 번들 사이즈도 줄였습니다. 그 결과 Lighthouse Performance 점수가 60 → 100으로, 빌드 시간이 3.45s → 1.02s로 개선됐습니다.

[ 배포 당일 연속 장애 대응]

  1. 계산식 불일치 원서 접수 시작 2시간 후, 원서 출력 시 프론트엔드 계산 결과와 백엔드 Thymeleaf 문서의 수치가 다르다는 문제가 보고됐습니다. 급하게 추가된 성적 타입 중 '-' 문자열을 계산 로직에서 제거하지 않은 것이 원인이었습니다. 백엔드와 계산식을 대조 검증하며 로직을 수정했고, 이후 프론트와 백엔드의 계산 결과가 일치함을 확인했습니다.
  2. 문자 발송 중단 4시간 후, 회원가입 절차 중 문자 메시지가 전송되지 않는 문제가 보고됐습니다. 문자 발송 계정의 잔액이 소진된 것이 원인이었습니다. 선배와 즉시 연락해 계정 정보를 확인한 후 잔액을 충전했고, 이후 문자 발송이 정상화됐습니다.
  3. AWS 서버 장애 5시간 후, AWS 장애로 인해 마루, Vercel, AWS 자체 접근이 불가한 상황이 발생했습니다. 외부 인프라 장애로 직접 해결할 수 없었고, 시간이 지나며 자연 복구됐습니다. 이를 통해 외부 서버에 의존하는 서비스 구조의 리스크를 체감하고, 장애 대응 매뉴얼의 필요성을 느꼈습니다.
  4. 정부 정책 변경 반영 배포 당일 정부 정책 변경 사항을 선생님들과의 빠른 소통을 통해 공지 모달로 즉시 반영했습니다.

[ DNS 오류 해결]

Vercel 도메인 소유권 인증 실패 오류 발생했습니다.maru.bamdoliro.com 서브도메인이 ANAME으로 설정되어 있어 Vercel 정책에 맞지 않는 것을 확인 하고, ANAME → CNAME으로 변경하고 TXT 레코드를 추가해 인증 성공했습니다. 하지만 이후 동일한 오류가 재발생했습니다.

🔨 해결 DNS 쿼리를 직접 확인하던 중 네임서버가 가비아가 아닌 AWS Route 53으로 변경되어 있음을 발견했습니다. 팀원이 네임서버를 변경한 것으로, 가비아에 추가한 TXT 레코드가 실제 DNS 권한이 있는 Route 53에는 반영되지 않아 인증이 다시 실패했습니다. Route 53TXT레코드와 CNAME을 추가해 소유권 재인증을 하여 도메인을 정상 연결했습니다. DNS 문제 발생 시 레코드보다 네임서버 권한 위치를 먼저 확인하는 습관이 생겼습니다.

</aside>

Contribution

<aside>

</aside>

Experience