
About me
임철순
서비스 10개를 운영하는 회사에서 프론트엔드를 맡아 비용과 속도를 숫자로 줄여 왔고, 이 사이트에서는 서버와 데이터베이스까지 직접 만들고 쟀어요.
2022.06 블록체인(Solidity) 개발 → 2022.09~ 캠퍼스 B2C 모바일 앱 회사 프론트엔드
왜 백엔드로
회사에서 충전·포인트·티켓 화면을 만들면서도, 버튼 뒤에서 서버가 한꺼번에 몰린 요청을 어떻게 지키는지는 "API 주소" 너머의 일이었어요.
CloudFront 캐시로 요청을 90% 줄여 본 뒤로, 같은 문제를 서버 쪽에서는 어떻게 푸는지 직접 재 보고 싶어졌어요.
그래서 이 사이트에서 API와 데이터베이스를 만들고, AWS에 올려 끊기지 않게 배포하는 일까지 혼자 해 봤어요.
기술 스택
- 프론트엔드
- React
- TypeScript
- Vite
- React Query
- Nuxt.js
- Vue.js
- Next.js
- 빌드 · 모노레포
- PNPM workspace
- Turborepo
- 프론트 배포 (회사)
- AWS Lambda@Edge
- S3
- CloudFront
- 품질 · 협업
- Sentry
- Storybook
- style-dictionary
- Node.js 스크립트
- 백엔드 (이 사이트)
- NestJS 11
- Prisma 6
- MySQL 8
- Redis 7
- 배포 · 운영 (이 사이트)
- Docker
- Caddy
- EC2
- SSM
- IAM OIDC
- GitHub Actions
- GHCR
- S3 백업
- 블록체인
- Solidity
- Ethereum
- Web3.js
- ethers.js
이 프로젝트에서 한 것
NestJS + Prisma + MySQL 8 + Redis 7로 API를 만들었어요. 장마다 방법을 2~4개 실제 데이터베이스로 재서 고른 이유와 포기한 이유를 남겼고, 커밋마다 GitHub Actions가 포맷 → 타입 검사 → 린트 → 테스트 → 빌드를 돌려요.
- 1장선착순 표 100장: 줄 세우기 대신 "남았으면 팔기"를 한 번에"남았으면 1 늘리기"를 데이터베이스 한 문장에 맡겼어요. 500명이 동시에 눌러도 정확히 100장이 나갔고, 줄 세우기보다 약 4배 빨랐어요.
- 2장로그인 유지: 손목밴드는 메모리에, 재발급 영수증은 스크립트가 못 여는 쿠키에금방 만료되는 손목밴드는 메모리에만 두고, 재발급 영수증은 쓸 때마다 새것으로 바꿔요. 그래서 복사본은 처음 쓰이는 순간 들켜요.
- 3장클릭 기록: 바로 저장 대신 모아서 한 번에클릭 기록을 하나씩 보내지 않고 모았다가 한 번에 보내요. 10,000개를 보내는 데 18.7초 걸리던 게 0.29초가 됐어요.
- 4장포인트: 잔액 숫자만 고치지 않고, 통장처럼 내역을 남기기적립·사용 200건이 동시에 몰리자 잔액 숫자만 고치는 방식에선 10,100P가 사라졌어요. 내역을 남기고 잔액과 맞춰 보는 방식은 0P.
- 5장결제: 버튼을 잠그는 대신 결제 시도마다 번호표(Idempotency-Key)버튼 세 번에 앱의 자동 재시도까지 요청 4개가 나가면, 번호표가 없을 땐 4번 결제됐어요. 같은 번호표를 붙이니 1번.
- 6장맛집 메뉴판: 캐시는 빠르게, 바뀐 메뉴는 제때손님 1000명이 같은 메뉴를 물어도 데이터베이스엔 1번만 가요. 대신 메뉴가 바뀌면 최대 5초 늦어서, 고칠 때 메뉴판을 지워요.
- 7장계산대 하나 더: 같은 API를 두 개 켜서 나눠 받기부하 테스트에서 Node 프로세스 하나가 CPU 코어 하나를 꽉 채워 초당 약 620건에서 멈췄어요. 코어가 2개라 API를 2개로 늘리고 Caddy가 나눠 보내게 했어요.
회사 경험이 이 사이트의 장으로
- 포인트·티켓 화면을 만들며 "동시에 몰리면 서버는 어떻게 지키지?"를 직접 쟀어요 1장 티켓팅 →4장 포인트 통장 →
- 충전·결제(문화상품권, 가상계좌) 화면 경험 → 같은 결제가 두 번 되지 않게 5장 결제 버튼 두 번 →
- CloudFront 캐시로 요청을 90% 줄인 경험 → 서버 쪽 캐시(Redis)에서 같은 문제를 6장 맛집 메뉴판 →
- 회사에서 만든 pnpm + Turborepo 모노레포 구조 그대로 이 사이트를 만들었어요 이 사이트의 저장소 →
장마다 고른 것·포기한 것·배운 것은 첫 화면의 7가지 선택과 저장소 POcodingWER/backend-visualized에 있어요.
경력
2022.09 ~ 현재
프론트엔드 개발자 캠퍼스 중심 B2C 모바일 앱 회사
독립 서비스 10개를 운영하며 기술 전환과 최적화를 맡았어요.
- 2025.01~11 Nuxt.js → React 전환 리드 (서비스 10개, 2인 팀, Lambda@Edge + S3 페이지 단위 배포)
- 2025.01~11 CloudFront 캐시 정책 세분화: CloudFront 비용 월 $500 → $120, 요청 월 1,200만 → 100만
- 2025.04~06 세탁기 블루투스 연결 실패 추적: Sentry 도입, 연결 실패율 80% · 고객 문의 90% 감소
- 2023.07~2024.08 언어팩(Excel → JSON) · 약관(노션 → HTML) 자동화: 업데이트 시간 70% · 90% 단축
- PNPM workspace + Turborepo 모노레포: CI 빌드 시간 80% 단축
- AI 에이전트 하네스: PR 리뷰 Critical/Medium/Low 자동 분류
2022.06 ~ 2022.09
블록체인(Solidity) 개발자 NFT 프로젝트
Solidity 스마트 컨트랙트와 NFT 민팅 플랫폼을 만들었어요.
- Delica NFT 민팅 플랫폼: 스마트 컨트랙트 설계 + React 화면
- Bellygom NFT: 이더리움 기반 NFT 발행
- 88%
- AWS 비용 절감
- 월 $1,500+ → $120, 1년에 약 $16,500. SSR → CSR 전환으로 65%, CloudFront 캐시 정책 세분화로 76% 추가 절감
- 10개 · 10개월
- Nuxt.js → React 전환 리드 (2인 팀)
- 충전·포인트·티켓 등 서비스 10개를 Lambda@Edge + S3 페이지 단위 배포로 하나씩 옮겼어요 (2025.01~11)
- 80%
- CI 빌드 시간 단축
- PNPM workspace + Turborepo 모노레포로 바뀐 앱만 빌드. 배포 시간 35%, 번들 25% 감소
- 3초 → 1.2초
- 초기 로딩
- CloudFront 요청 월 1,200만 → 100만, 캐시 적중률 90%
끝까지 파고든 문제
- 세탁기 블루투스 연결 실패(하루 40~50건 이상)를 2개월 추적: Sentry 도입을 제안·구축하고 앱 개발자와 로그 구조를 설계해 특정 기기·OS에서만 나는 걸 찾아 타임아웃·재시도를 넣었어요. 연결 실패율 80%, 고객 문의 90% 감소, 장애 대응 2시간 → 40분.
- AI 코드 리뷰 하네스: PR 리뷰를 Critical/Medium/Low로 자동 분류해, 150개 파일·8,000줄 PR에서 사람이 놓치기 쉬운 Critical 버그를 머지 전에 찾아 고쳤어요.
글 · 활동
MCP · AI 에이전트
공모전
카카오 Agentic Player 10 공모전에 "찾아줘 주차장!" MCP를 냈어요 (PlayMCP 전체 공개 · 예선 접수 완료). PlayMCP에서 보기 →