Frontend Engineer

권오승

PM처럼 제품의 목적을 끝까지 파고들고,
디자이너처럼 작은 차이를 놓치지 않는 프론트엔드 개발자 권오승입니다.

주문·결제와 웹뷰 등 핵심 비즈니스 제품 개발부터 공통 라이브러리, 디자인 시스템, AI 개발 환경 구축까지 제품과 개발 기반을 함께 다져왔습니다.

기획서를 받으면 구현할 기능부터 확인하기보다, 사용자가 어떤 흐름을 거쳐 이 기능을 이용하게 될지 먼저 살펴봅니다. 사용자 흐름 속에서 개선할 만한 부분이 보이면 개선안을 제안하고, 디자이너와 소통하며 화면에 담긴 의도와 맥락까지 이해한 뒤 설계에 들어갑니다.

프로젝트의 전 과정에 참여하면서 요구사항은 언제든 달라질 수 있다는 점을 경험했고, 변화에 유연하게 대응할 수 있는 개발 구조가 필요하다고 느꼈습니다. 기획이나 디자인이 바뀔 때마다 코드 곳곳을 수정하는 문제를 줄이기 위해, 도메인 규칙은 순수 함수로 분리하고 클린 아키텍처와 FSD의 책임 분리 원칙을 적용해 UI 변화가 비즈니스 로직까지 번지지 않는 구조를 제안했습니다. 실제 프로젝트에 적용한 뒤 현재는 전사 웹 프로젝트의 공통 개발 방식으로 사용하고 있습니다.

경험이 쌓이면서 제가 작성하는 코드뿐 아니라 팀이 반복해서 겪는 불편에도 관심을 갖게 됐습니다. 프로젝트마다 다시 만들던 UI를 디자인 시스템으로 정리하고, 화면 곳곳에 흩어져 있던 이벤트 로직은 사내 공통 선언형 트래킹 라이브러리로 통합했습니다. 최근에는 n8n을 사용해 업무를 자동화하고, 프로젝트에서 정한 개발 방식과 품질 기준을 따르도록 AI 워크플로우를 구축해 작업 시간과 시행착오를 줄였습니다.

현재는 Next.js 기반 서비스 개발을 중심으로, 모니터링 시스템 구축부터 CI/CD 최적화, 웹 서버 운영에 이르는 서비스 전체 라이프사이클을 담당하고 있습니다.

회사
패스오더
경력
Frontend Engineer · 4년
주요 기술
React · Next.js · TypeScript
주요 영역
주문·결제 · 웹뷰·딥링크 · 디자인 시스템 · 공통 라이브러리 · AI 개발 환경

패스오더 주요 프로젝트

2026

3개 프로젝트

웹 주문·결제 시스템 구축

앱 설치 없이 메뉴 탐색부터 결제까지 완료하는 웹 주문 서비스

성과
웹 주문 객단가 앱 사용자 대비 약 3배 · 장바구니→결제 전환 33% · 결제자 앱 설치 32%
기술
  • React
  • TypeScript
  • FSD
  • Kakao Sync
before 웹에서 메뉴를 봐도 주문하려면 앱을 설치해야 해 결제까지 흐름이 끊김
after 앱 없이 웹에서 결제를 마치도록 하고, 인증 시점을 결제 직전으로 미뤄 이탈 지점을 줄임

앱 설치 없이 주문·결제까지 연결

SEO로 유입되는 오가닉 사용자를 대상으로, 앱 설치 없이 웹에서 주문과 결제를 마칠 수 있는 서비스를 기획·개발했습니다. 결제를 마친 사용자가 앱 설치로 이어지는 흐름까지 함께 설계했으며, 프로젝트 전체 기획과 일정 관리, 웹 개발 전반을 총괄했습니다.

정책 변경에 대응하는 도메인 로직 분리

핵심 도메인 로직을 순수 함수로 분리하고, 장바구니에는 파생값 대신 상품 및 옵션 참조만 보관하도록 구조를 설계했습니다. 서버 데이터는 엔티티 매퍼로 변환하여 UI 및 상태 코드와의 의존성을 격리했습니다.

이를 통해 개인컵 할인 정책 변경(별도 차감 → 상품가 차감) 시, 도메인 계산 함수와 단일 테스트를 수정하는 것만으로 3개 화면에 일괄 적용하며 중복 로직 구현 없이 신속하게 대응할 수 있었습니다.

사용자를 고려한 이탈률 개선

사용자 이탈을 줄이기 위해 인증 시점을 결제 직전으로 미루도록 기획했습니다. 메뉴 탐색과 장바구니 담기까지는 인증 없이 진행하고, 결제 단계에서만 카카오싱크로 인증하도록 해 사용자가 직접 입력해야 하는 정보도 줄였습니다.

인증 퍼널 최적화를 위해 A/B 테스트를 도입했습니다. 카카오싱크 버튼을 사전에 노출하는 안과 결제 버튼 클릭 시 카카오싱크를 호출하는 안을 비교하여 결제 전환율 성과를 측정하고 있습니다.

프로젝트 성과

출시 후 웹 주문 사용자의 객단가는 앱 사용자의 약 3배로 관측됐습니다. 메뉴를 장바구니에 담은 사용자 중 33%가 결제를 마쳤고, 결제한 사용자 가운데 32%는 앱을 설치했습니다. 결제 사용자의 절반 이상은 마케팅 수신에도 동의해, 웹 주문이 매출과 앱 유입을 함께 만드는 경로로 자리 잡았습니다.

AI 개발 워크플로우와 품질 검증 자동화

요구사항 확인부터 코드 검증까지 AI 개발 과정을 표준화

성과
AI 도구 실행 −34% · 작업 시간 −21% · Figma 전달 데이터 최대 −70%
기술
  • AI Workflow
  • Linter · Type Checker
  • PostToolUse Hook
  • Harness
before 워크플로우가 있어도 단계마다 읽을 문서가 많아 토큰을 낭비하고, AI가 프로젝트 규칙을 벗어나도 걸러내지 못함
after 단계별로 필요한 문서만 읽도록 절차를 다시 짜고, Linter·PostToolUse Hook으로 규칙 위반을 자동 검증함

AI 개발 절차 표준화

사내 AI 워크플로우를 구축했지만, 작업 전에 읽어야 할 문서가 너무 많아 토큰 소모가 컸습니다. 반복되는 문서를 통합하고 각 단계에서 필요한 문서만 확인하도록 워크플로우를 다시 설계했으며, 설계 문서는 개발자와 대화하며 함께 만들도록 구조를 바꿨습니다.

그 결과 작업 전에 확인하는 문서량을 기존의 약 1/3로 줄이면서 요구사항 확인부터 구현까지의 절차를 표준화했습니다.

개발 규칙 자동 검증

워크플로우로 개발 절차를 표준화했지만, AI가 프로젝트에서 사용하지 않는 패턴을 적용하거나 기존 규칙을 누락하는 문제가 있었습니다.

이를 보완하기 위해 하네스 엔지니어링을 적용했습니다. 자동으로 검증할 수 있는 규칙은 Linter, PostToolUse Hook 등으로 검사하고, 자동 검사하기 어려운 구현 패턴은 코드 레시피로 제공했습니다.

그 결과 동일 작업 기준으로 정확도가 올라갔고, AI 도구 실행 횟수는 34%, 작업 시간은 21% 줄었습니다.

Figma MCP가 놓친 컴포넌트 정보 복원

Figma MCP를 연결해도 AI가 공통 컴포넌트 대신 새 UI를 만들거나 디자인과 다른 결과를 내놓았습니다. 응답 구조를 분석해 보니 MCP가 토큰을 과도하게 소비하면서도 컴포넌트를 제대로 인식하지 못하고 있었습니다.

Figma API와 PostToolUse Hook으로 누락된 컴포넌트 정보를 복원하고, 반복 데이터를 제거해 Figma가 AI에 전달하는 입력 데이터를 최대 70% 줄일 수 있었습니다.

친구 초대 이벤트 · 선언형 트래킹 라이브러리 구축

커피 쿠폰 공유부터 앱 설치·주문까지 이어지는 친구 초대 채널 구축

성과
프로젝트 전체: 신규 가입자 목표 대비 16배 · 담당 기술 개선: 트래킹 작업 공수 약 60% 감소
기술
  • React
  • Next.js
  • TypeScript
  • GA · AppsFlyer
  • Sentry
before 알림톡 발송으로 트래픽이 몰리는데 데이터 조회가 Node.js 서버를 거치고, 트래킹 코드는 화면마다 반복됨
after 조회를 브라우저에서 백엔드로 직접 호출하도록 바꾸고, 선언형 트래킹 라이브러리를 사내 공통 패키지로 배포함

회원이 친구를 초대해 커피 쿠폰을 선물하고, 초대받은 친구의 회원가입을 유도하는 이벤트를 개발했습니다.

메인 이벤트 페이지 개발과 선언형 트래킹 라이브러리 개발을 담당했으며, 출시 이후 신규 가입자 목표를 16배 초과 달성했습니다.

대규모 트래픽에 대비한 API 호출과 로딩 흐름 개선

대량의 알림톡이 발송되면 순간적으로 웹 트래픽이 몰릴 것으로 예상됐습니다. 웹 서버 증설만으로는 부족하다고 판단해, Node.js 서버의 API 부하 자체를 줄이도록 호출 구조를 개선했습니다.

기존 Node.js 서버를 거치던 데이터 조회 방식을 브라우저에서 백엔드 API를 직접 호출하도록 전환했으며, 응답 대기 시간 동안 스켈레톤 UI를 제공해 체감 대기 시간을 단축했습니다.

그 결과, 평시 대비 9배 이상의 트래픽이 몰렸음에도 서버 과부하 없이 이벤트를 성공적으로 마무리했습니다.

선언형 트래킹 라이브러리 개발

대다수의 이벤트 페이지에서 비즈니스 코드보다 성과 측정용 트래킹 코드가 더 많아 가독성이 떨어졌고, 트래킹 로직도 프로젝트마다 흩어져 있어 유지보수가 어려웠습니다.

이를 개선하기 위해 HTML 마크업에 data-track 속성을 선언하고, 발생 조건과 전송 데이터는 트래킹 맵(Tracking Map) 파일로 일괄 관리하는 선언형 트래킹 라이브러리를 설계했습니다.

채널별 전송 로직은 어댑터 패턴으로 분리해 신규 채널 추가 시에도 이벤트 감지 코드를 수정하지 않도록 구조화했습니다. 또한 프레임워크에 의존하지 않고 사내 여러 서비스에서 재사용할 수 있도록 이벤트 감지 로직은 DOM과 브라우저 표준 API로 구현했습니다.

사용 과정에서 드러난 한계 보완

초기 버전은 파라미터를 유연하게 추가하기 어려워, data-track-params로 동적 데이터를 전달할 수 있도록 보완했습니다. API 요청 성공처럼 HTML 요소와 연결되지 않는 동작에는 track(key, params)를 제공해 이벤트를 직접 전송할 수 있도록 했습니다.

사내 공통 패키지로 확장

라이브러리는 @passorder/tracking-web으로 사내 패키지 저장소에 배포했으며, 현재 대부분의 웹 서비스에서 사용하고 있습니다.

선언형 트래킹 라이브러리 도입 이후 트래킹 코드 작성 공수는 약 60% 감소했습니다.

2025

3개 프로젝트

같이주문 서비스 · 웹뷰 브릿지 구축 · 사다리게임

사다리게임부터 주문·결제까지 이어지는 같이주문과 공통 웹 결제 기반 구축

성과
사다리게임 결과 도달 목표 달성률 130% · 홈 진입 목표 달성률 152%
기술
  • WebView
  • Web Bridge
  • NICE · KICC
  • Token Auth
before PG·결제수단별 구현이 서비스마다 흩어지고, 웹뷰 이벤트가 리스너 준비 전에 도착하면 유실됨
after PG 차이를 감춘 공통 결제 패키지와, 리스너보다 먼저 도착한 이벤트를 큐에 보관했다가 전달하는 웹↔앱 브릿지를 구축함

회원과 비회원을 함께 초대해 사다리게임으로 결제할 사람을 정한 뒤 실제 주문까지 이어지는 같이주문 서비스를 개발했습니다. 웹 결제 로직과 웹뷰 기반 사다리게임 개발을 담당했습니다.

출시 이후 사다리게임 결과 페이지 도달은 목표 달성률 130%, 홈 진입은 목표 달성률 152%를 기록했습니다.

웹 결제 기반과 공통 결제 패키지 구축

PG사와 결제수단마다 다른 연동 방식을 공통 결제 패키지 안쪽으로 감췄습니다. 같이주문뿐 아니라 다른 웹 서비스에서도 같은 인터페이스로 결제를 붙일 수 있는 기반을 마련했습니다.

웹뷰 기반 같이주문 경험 구축

사다리게임 화면을 웹뷰로 구현해 iOS와 Android에 동일한 경험을 제공했습니다. 이 과정에서 웹↔앱 브릿지 규격을 공통화하고 이벤트 기반으로 상태를 주고받는 구조를 만들어, 플랫폼별 중복 구현을 줄이고 이후 웹뷰 기능에서도 같은 통신 방식을 재사용할 수 있게 했습니다.

간헐적인 멤버 목록 유실을 통신 경계 재설계로 해결

앱이 내려주는 초기 멤버 목록을 웹이 간헐적으로 전달받지 못하는 문제가 있었습니다. 데이터를 전달받는 시점을 조정하고, 리스너가 준비되기 전에 도착한 이벤트는 큐에 쌓아 두었다가 처리하도록 했습니다.

사다리 렌더링 비용 개선

캐릭터가 움직이는 프레임마다 사다리 뼈대와 누적 경로를 다시 그려 렌더링 비용이 커지는 문제가 있었습니다. 사다리 원본을 그리는 정적 캔버스와 진행 중인 경로를 그리는 동적 캔버스로 분리해 렌더링 횟수가 최대 약 3,200회에서 27회로 감소했습니다.

웹 디자인 시스템 구축

여러 웹 서비스에서 재사용하는 컴포넌트와 Figma·AI 연계 기준 구축

성과
UI 개발 공수 10% 이상 절감 · 2,000건 테이블 초기 렌더 2.0s → 0.1s 미만
기술
  • Headless 패턴
  • Compound Component
  • Storybook
  • Design Token
  • Figma MCP
  • Monorepo (pnpm workspace)
  • react-virtual
before 서비스마다 UI를 다시 만들고, Figma와 코드의 컴포넌트·속성 이름이 달라 매번 다시 찾아야 함
after Headless·Compound 구조의 공통 컴포넌트와, Figma·코드·AI가 같은 이름을 쓰는 연결 기준을 구축함

레거시 디자인 시스템의 개선 필요성을 제안하고, 디자이너와 함께 컴포넌트 정책과 공통 설계 원칙을 정리했습니다. 이를 바탕으로 여러 웹 서비스에서 함께 쓰는 공통 컴포넌트를 설계·구현했습니다.

확장 가능한 컴포넌트 구조 설계

같은 컴포넌트라도 서비스마다 필요한 레이아웃과 기능이 달랐기 때문에, 요구사항이 추가될 때마다 props와 조건문을 늘리는 방식으로는 공통 컴포넌트를 유지하기 어렵다고 판단했습니다.

그래서 Headless 구조로 상태와 동작을 UI에서 분리하고, Compound Component 패턴으로 필요한 요소를 조합하도록 설계했습니다. HTML 기본 속성, className, forwardRef 등의 사용 방식도 공통 규칙으로 정리해 서비스별 확장성은 유지하면서 컴포넌트 사용 방식은 일관되게 맞췄습니다.

공통 컴포넌트의 변경은 별도 PR에서 리뷰하도록 규칙을 세웠습니다. 기존 컴포넌트와 신규 디자인 시스템의 영역도 구분해, 기존 서비스에 영향을 주지 않으면서 단계적으로 전환할 수 있는 환경을 만들었습니다.

Figma·AI 개발 워크플로우 연계

Figma와 코드에서 사용하는 컴포넌트명과 속성명이 달라, 디자인 구현 시 개발자가 적절한 컴포넌트를 다시 찾고 속성을 해석해야 했습니다. Figma MCP를 활용한 AI 개발에서도 같은 이유로 기존 공통 컴포넌트 대신 새로운 UI를 생성하는 문제가 있었습니다.

디자이너와 협업해 Figma 속성과 코드의 props·네이밍 기준을 맞추고, Figma 컴포넌트와 코드 컴포넌트를 연결하는 기준을 정리했습니다. 이 기준을 AI 개발 워크플로우에도 적용해 디자인에 맞는 공통 컴포넌트를 선택하도록 했고, UI 개발 공수를 10% 이상 줄였습니다.

대용량 테이블을 통한 확장성·성능 검증

디자인 시스템의 대표 컴포넌트로 백오피스용 대용량 테이블을 구현했습니다. Headless Hook과 Compound Component 구조를 결합해 툴바, 헤더, 그룹핑, 무한 스크롤 등을 화면에 따라 조합하도록 설계했습니다.

또한 react-virtual 기반 가상화와 메모이제이션을 적용해 화면에 필요한 행만 렌더링했습니다. 기존 구현과 비교한 결과 2,000건 이상의 실제 데이터에서 초기 렌더 시간을 약 2.0초에서 0.1초 미만으로 줄였습니다.

전자금융업 등록 대응 시스템 구축

규제 전용 백오피스와 공개 서비스·금융 시스템 분리 구조 구축

성과
전자금융업 등록 요건 충족 · 선불·정산 데이터 분리 운영 기반 마련
기술
  • React
  • TypeScript
  • Vite
  • Zustand
  • iframe
  • postMessage
  • CSP
before 선불수단과 PG 정산 데이터를 공개 서비스에서 함께 다뤄 전자금융거래법 개정 요건을 맞출 수 없음
after 규제 전용 백오피스를 분리하고, iframe·postMessage·CSP로 공개 서비스와 금융 시스템의 통신 경계를 제한함

전자금융거래법 개정으로 패스머니·상품권 같은 선불수단과 PG 정산 데이터를 기존 서비스에서 분리해 관리해야 했습니다. 전자금융업 조건에 맞춘 백오피스 구축과 유지보수를 담당했으며, 사장님 페이지에서 금융 서비스를 별도 시스템으로 분리하는 작업을 진행했습니다.

재사용 가능한 전용 백오피스 구축

빠른 구축을 위해 기존 백오피스를 기반으로 개발하되, 복잡한 webpack 설정은 걷어내 Vite로 전환하고 Recoil에서 Zustand로 전역 상태 관리를 변경했습니다.

작업 공수 절감을 위해 공통 컴포넌트를 조합해 페이지 템플릿을 구성했습니다. 화면별 필터와 데이터 구조에 맞춰 템플릿을 재사용하도록 해, 새 화면의 구현 부담을 줄이면서 운영 화면의 일관성도 유지할 수 있었습니다.

사장님 페이지 금융 기능 보안 분리

공개 인터넷에 노출된 사장님 페이지가 내부 전산망과 직접 통신하지 않도록 iframe을 통해 정산 화면을 제공했습니다. 부모 페이지와 iframe 사이에는 필요한 정보만 postMessage로 주고받고, 허용한 Origin인지 검증한 뒤 CSP를 적용해 통신 대상과 실행 가능한 리소스를 제한했습니다.

iframe 내부 높이는 실시간으로 부모 페이지에 전달해, 내용에 따라 높이가 바뀔 때 발생하던 화면 깨짐을 해결했습니다.

2024

1개 프로젝트

패스링크 · 자체 딥링크 플랫폼 구축

외부 딥링크를 대체해 링크 생성·변경·성과를 내부 운영

성과
외부 딥링크 의존도 축소 · 링크 변경과 유입 성과 확인을 내부 운영
기술
  • React
  • TypeScript
  • Nginx
  • Universal Links · App Links
  • Web API
before MAU 구간에 따라 비용이 늘어나는 외부 딥링크에 의존하고, 목적지가 바뀔 때마다 링크·메시지를 재검수함
after Universal Links·App Links로 앱 연결을 OS에 맡기고, 대체 이동 처리와 링크 운영 백오피스를 직접 구축함

CRM 메시지와 앱 푸시에 사용하던 외부 딥링크 서비스는 앱 MAU 구간에 따라 비용이 증가했습니다. 목적지가 바뀔 때마다 여러 채널의 링크를 교체하고 메시지 템플릿을 재검수해야 하는 부담도 있어, 외부 서비스 의존도를 줄이기 위해 자체 딥링크 웹 ‘패스링크’와 관리 백오피스를 구축했습니다.

앱 연결과 웹 처리를 분리해 링크 순환 해결

OS가 앱 연결을 처리하도록 Universal Links·App Links 도메인 연결 파일을 배포하고 Nginx 경로를 설정했습니다. 웹으로 진입했을 때는 커스텀 스킴으로 앱 실행을 시도하도록 구조를 바꿔, 같은 링크가 무한히 순환 호출되던 문제를 해결했습니다.

앱 실행을 확인할 수 없는 환경 대응

웹에서는 앱이 실제로 열렸는지 직접 확인할 수 없어, visibilitychange로 페이지가 숨겨지면 대체 경로 이동 타이머를 취소했습니다. 페이지가 표시된 상태여도 타이머가 지연 실행됐다면 곧바로 이동시키지 않도록 해, 앱이 열린 뒤 뒤늦게 웹으로 튕기는 상황을 막았습니다.

링크 운영·성과 측정 백오피스 구축

운영자가 링크 생성부터 사용 여부·운영 기간·대체 주소 변경까지 직접 처리하도록 백오피스를 개발하고, CRM에서 반복 사용하는 링크는 템플릿으로 묶어 관리할 수 있는 환경을 구성했습니다.

그 외 프로젝트

6개

B2C·B2B 상품권·선물하기 서비스 구축

상품권 생성·발행부터 B2B 대량 발송·정산까지 프론트엔드 구축

성과
개인 주문 중심 경험을 선물 기반으로 확장 · 상품권 수신자를 신규 사용자로 연결
기술
  • React
  • Angular
  • TypeScript
  • Dynamic Link · Deep Link
before 상품권을 선물할 경로가 없고, 이용안내·약관이 클라이언트 코드에 있어 정책이 바뀔 때마다 재배포함
after 구매·선물·수신·앱 등록 플로우를 구축하고, 약관·이용안내는 서버에서 관리하도록 전환함

상품권 발행·수신 플로우 구축

사용자가 상품권을 구매해 친구에게 보내면, 수신자가 웹에서 내용을 확인하고 앱에 등록해 쓰는 선물하기 서비스를 개발했습니다. 운영팀의 상품권 생성·발행 백오피스부터 B2C·B2B 수신자 웹과 앱 등록 플로우까지 프론트엔드 전반을 담당했습니다.

출시 이후에도 시즌 상품권과 B2B 대량 발행, 판매 상태·발송 내역 관리, 정산 화면처럼 비즈니스 확장에 필요한 기능을 이어서 개발하고 운영했습니다.

배포에 묶이지 않는 약관·이용안내 관리

이용안내와 약관은 클라이언트 코드에 직접 포함돼 있어, 문구나 정책이 바뀔 때마다 프론트엔드를 다시 배포해야 했습니다. 이를 서버에서 관리하는 구조로 전환해 정책 변경이 배포 일정에 묶이지 않도록 했습니다.

미가맹 매장 획득을 위한 사전등록 시스템 구축

미가맹 매장 노출과 사용자 참여 데이터를 후속 영업으로 연결

성과
미가맹 매장 도입률 5% 이상
기술
  • React
  • TypeScript
  • Firebase Remote Config
  • WebView
before 미가맹 매장을 노출해도 사용자 반응을 영업으로 넘길 수단이 없고, 외부 리뷰 페이지가 바뀌면 앱을 다시 배포해야 함
after 참여 스크립트를 Firebase Remote Config로 원격 관리하고, 참여 데이터를 운영 백오피스에서 영업으로 연결함

공공데이터와 외부 데이터를 기반으로 미가맹 매장을 앱에 노출하고, 해당 매장에 전화 주문을 연결해주는 서비스입니다. 운영 백오피스와 이벤트 참여 스크립트 개발을 담당했습니다.

외부 리뷰 서비스 연동과 원격 스크립트 관리

전화 주문 후 영수증 리뷰까지 이어가도록 인앱 웹뷰에 외부 리뷰 서비스를 연동하고, 정해진 플로우를 따라가도록 온보딩·가이드 스크립트를 작성했습니다. 외부 페이지가 바뀌어도 앱을 다시 배포하지 않도록 이 스크립트는 Firebase Remote Config로 관리해, 문제가 생기면 원격에서 수정하거나 비활성화할 수 있게 했습니다.

매장 획득 데이터·운영 백오피스 구축

사전등록 매장의 상태와 이벤트 참여 정보를 운영자가 한눈에 확인하도록 전용 백오피스를 구축했습니다. 목록과 로딩 영역은 공통 컴포넌트로 분리해 기능이 추가돼도 같은 구조를 재사용할 수 있게 했습니다.

이를 통해 운영·영업 조직이 매장 목록을 확인하는 데서 나아가 사용자 반응이 높은 매장을 선별해 후속 영업에 활용하는 구조를 만들었고, 미가맹 매장 도입률 5% 이상을 달성했습니다.

카카오싱크 기반 비회원 이벤트 참여 플로우 개선

카카오싱크와 퍼머링크로 신규 사용자 인증·복귀 흐름 개선

성과
친구 초대 성공률 32% → 38% (+6%p)
기술
  • React
  • Kakao Sync
  • WebView
before 참여 전 휴대폰 번호 인증이 필요하고, iOS는 인증 후 직접 브라우저로 돌아와야 해 이 구간에서 이탈함
after 카카오싱크로 인증 단계를 줄이고, 퍼머링크로 인앱뷰에서 참여를 이어가도록 복귀 단계를 없앰

카카오싱크 기반 이벤트 참여 인증 간소화

기존 이벤트는 참여 전에 휴대폰 번호를 직접 입력하고 인증해야 했습니다.

웹앱과 이벤트 서비스의 인증 흐름을 카카오싱크로 전환해, 카카오 인증으로 참여에 필요한 사용자 정보를 수집하고 신규 사용자의 입력·인증 단계를 줄였습니다.

iOS 인증 후 복귀 경로 개선

iOS에서는 카카오 인증을 마친 뒤 브라우저로 자동 복귀하지 않아 사용자가 직접 돌아와야 했고, 이 구간에서 참여를 중단하는 사용자가 많았습니다.

인증 후 카카오톡 인앱뷰에서 이벤트 참여를 이어가도록 퍼머링크를 이용한 복귀 방식을 제안·적용했습니다. 사용자가 브라우저로 직접 돌아와야 하는 단계를 없앴으며, 적용 이후 친구 초대 이벤트 참여 성공률은 32%에서 38%로 6%p 상승했습니다.

사장님 가입·계약 신청서 구축·개선

사용자 유형별 계약 플로우와 오류 대응 UX를 갖춘 모바일 다단계 신청서 구축

성과
개선 버전 배포 당일 접수 이슈 없이 안정적으로 출시
기술
  • React
  • TypeScript
  • Multi-step Form
  • Web API
before 사용자 유형과 무관하게 신청 절차가 고정돼 있고, 오류 원인을 알 수 없어 전화 문의로 이어짐
after 유형별 단계 노출과 이어쓰기를 넣고, 오류 원인을 안내한 뒤 해당 입력 필드로 이동하도록 개선함

패스오더 도입을 희망하는 사장님이 매장과 사업자, 정산·결제 정보를 입력해 가입과 계약을 완료하는 모바일 신청서를 개발했습니다.

사용자 유형별 계약 플로우 설계

사용자 유형과 신청 상태에 따라 필요한 단계만 노출하고 각 단계의 입력값을 저장해, 중단한 지점부터 이어서 작성하는 다단계 플로우를 설계했습니다. 기존 계정이나 신청 이력이 있으면 접수를 막는 대신 로그인이나 기존 신청서 이어쓰기로 연결했고, 입력 항목은 실제 사업자 서류 기준에 맞춰 접수 과정에서 발생하던 정보 불일치를 줄였습니다.

입력·인증 오류 UX 개선

기존 신청서는 오류가 발생해도 어떤 항목이 문제인지 알기 어려워 전화 문의로 이어졌습니다. 필수·선택 항목을 구분하고, 유효성 검사에 실패하면 오류 원인을 안내한 뒤 해당 입력 필드로 자동 이동하도록 개선했습니다.

인증·API 오류도 상황별 메시지로 나눠, 사용자가 직접 해결하거나 영업 담당자가 전달받은 정보만으로 원인을 파악할 수 있게 했습니다.

같이적립 · 포인트 공유 기반 신규 사용자 획득 채널 구축

매장 포인트를 친구에게 선물하는 같이적립 웹 전반과 사용자 상태별 수신 플로우 구축

성과
포인트 수령에서 앱 유입·가입까지 이어지는 주요 획득 채널로 활용
기술
  • Angular
  • TypeScript
  • Kakao Sync
  • Deep Link
  • GA
  • Web API
before 회원 여부와 앱 설치 상태마다 포인트를 받는 경로가 달라, 분기가 화면 코드에 뒤섞임
after 상태별 인증·앱 이동·적립 수신 플로우를 공통화하고, 채팅형 UI로 다음 행동을 안내함

사용자가 매장에서 적립한 포인트를 친구에게 선물하고, 수신자가 웹에서 포인트를 확인한 뒤 앱 설치와 가입까지 이어지는 같이적립 서비스를 개발했습니다.

사용자 상태별 적립 수신·가입 플로우 설계

회원 여부와 앱 설치 상태, 공유 링크 진입 여부에 따라 필요한 행동이 달랐습니다. 회원은 앱에서 바로 적립을 확인하도록 연결하고, 비회원은 카카오싱크 인증을 거쳐 웹에서 적립 내역을 확인한 뒤 앱 설치와 가입으로 이어질 수 있도록 구성했습니다.

공유 링크로 진입하면 앱 설치 여부를 확인해 설치된 사용자는 앱의 해당 화면으로, 미설치 사용자는 웹 인증과 적립 확인으로 연결했습니다. 회원·비회원·앱 미설치 사용자 모두 자신의 상태에 맞는 경로로 포인트를 받을 수 있도록 구성했습니다.

사용자 상태에 따른 분기가 화면 코드에 뒤섞이지 않도록 로직의 역할을 분리하고 공통 플로우를 재사용해, 이후 인증 정책이나 화면 변경에도 필요한 영역만 수정할 수 있도록 구성했습니다.

공유·수신 경험 개선

포인트를 선물받은 사용자가 같이적립과 다음 행동을 이해할 수 있도록 발신자와 수신자의 상황을 대화 형식으로 보여주는 채팅형 UI를 구현했습니다.

출시 이후 같이적립은 포인트 수령에서 앱 유입·가입까지 이어지는 주요 신규 사용자 획득 채널로 활용됐습니다. 회원·비회원·공유 링크별 예외 상황을 사전에 검증하고 개발자 QA를 진행해 첫 배포 이후 관련 CS는 거의 발생하지 않았습니다.

개발 기반 작업과 사내 기여

에러 관측, 레거시 전환, 사내 시스템 등 서비스 외 개발 기반 작업

기술
  • Sentry
  • Angular
  • React
  • Next.js

개별 서비스 개발과 별개로, 여러 프로젝트가 함께 쓰는 기반과 사내 환경을 맡아 개선해 왔습니다.

에러 관측 환경 구축과 공통화

배포한 뒤 발생하는 오류를 확인할 수 있도록 Sentry를 도입했습니다. 서비스마다 반복되는 코드를 다시 작성하지 않도록 이를 사내 공용 라이브러리로 분리해 배포했고, 이후 운영까지 담당하고 있습니다.

마이그레이션과 백오피스 운영

Angular로 작성돼 있던 서비스를 React·Next.js로 옮기는 마이그레이션을 진행했습니다.

프로젝트별로 백오피스의 신규 화면 개발과 유지보수를 맡아, 운영 조직이 사용하는 화면이 서비스 변경에 맞춰 유지되도록 했습니다.

사내 기여

다수의 웹 개발자가 동시에 수정해도 대응 가능한 Git 정책을 세웠습니다.

사내 회의실 관리 시스템을 개발했습니다.

웹 인프라 스터디에서는 관측(observability) 파트를 맡아 운영했습니다.