$whoami
nameparksevin
rolebackend engineer · AX
stackSpring Boot · Java · Kotlin · MySQL
githubgithub.com/sevineleven
linkedinlinkedin.com/in/sevin-park
사용자 경험만큼 팀의 업무 경험을 생각합니다.
비개발 팀원이 배포 없이 직접 운영하는 백오피스와 팀의 AI 도구를 공유하는 사내 허브를 만들어 왔습니다.
AI 도구로 만들고 검증하는 속도를 높입니다.
반복되는 개발 흐름은 AI 도구로 자동화하고, 그 결과를 검증하는 장치를 함께 둡니다.
Backend Developer
폴라리스오피스 서버개발팀
Jan 2025 - Present

크로스 플랫폼 오피스 솔루션 및 클라우드 기반 문서 협업 서비스 개발

AI-SaaS
  • ▸외부 앱(MCP) 연동 플랫폼
    LangGraph 기반 AI 에이전트 NOVA에서 외부 앱(MCP) 연동 백엔드를 맡았습니다. MCP 서버와 Skill이 운영자 설정 파일 하나에 전역으로 묶여 있어, 사용자가 자기 계정으로 Notion·Atlassian·GitHub 같은 앱을 붙일 수 없었습니다. MCP와 Skill을 사용자별 자산으로 분리하고, 연결할 때 앱 서버가 공개한 정보로 인증 방식을 판별하고, 사용자에게는 그 방식에 필요한 동의나 자격증명만 요청하도록 했습니다. OAuth 메타데이터(RFC 9728, RFC 8414)와 동적 클라이언트 등록(RFC 7591)으로 인증 없음, OAuth, 헤더 토큰, 로컬 실행 방식을 판별하고, 사내 RAG 서버는 토큰 교환(RFC 8693)으로 다시 로그인하지 않고 연결합니다. 사용자는 대화 한 문장이나 설정 화면에서 앱을 연결해 각자 자기 계정 권한으로 쓰고, 연결할 수 없는 앱은 등록 단계에서 이유와 함께 거절됩니다. 외부 전송·수정·삭제를 하는 도구는 도구와 인자의 해시에 묶인 사용자 승인을 거쳐야 실행됩니다.
  • ▸게이트웨이 반복 재시작 해결
    게이트웨이가 약 1시간 동안 7~10분 간격으로 계속 재시작됐습니다. 로그를 따라가 보니 MCP 주소로 등록된 웹 페이지가 초기화 요청에 HTML과 함께 200 OK를 내려주고 있었고, MCP 클라이언트는 이를 실패로 끝내지 않고 무기한 기다렸습니다. Agent 생성 코드가 이벤트 루프에서 그 대기를 붙잡아 헬스체크까지 멈춘 것이었고, 같은 주소를 등록해 재현으로 확인했습니다. 등록 단계에서 MCP 응답이 아니면 거절하고, 도구 조회에 서버별 15초 제한을 두고, 이벤트 루프에서는 기다리지 않고 백그라운드 작업으로 넘기는 세 겹으로 막았습니다. /health 는 무응답에서 0.08초 이하 응답으로 돌아왔고, 같은 주소가 남아 있어도 재시작이 없습니다.
  • ▸문서 변환 파일 브리지
    문서 변환 MCP 는 파일을 저장소 키로만 받아, 모델이 샌드박스에서 직접 업로드하려다 실패를 반복하며 모델 호출을 13~16회 썼습니다. 모델은 샌드박스 경로만 넘기고 업로드·키 치환·결과 다운로드·압축 해제는 서버가 처리하게 바꿨습니다. PDF 3쪽을 JPG 로 바꾸는 작업 기준 3회 평균으로 모델 호출 14.7 → 4회, 소요 시간 179 → 21초, 입력 토큰 41만 → 7만으로 줄었습니다.
  • ▸MCP 허브 라우팅
    에이전트가 쓰는 MCP 서버가 늘어나기 시작했습니다. 서버가 하나일 때는 에이전트가 직접 붙으면 되지만, 여러 개가 되는 순간 어느 서버로 가야 하는지를 누군가 알아야 하고 서버가 늘 때마다 에이전트를 고쳐야 합니다. MCP 서버를 한곳에 모아 쓰는 허브를 구축해, 에이전트는 허브 주소 하나만 알면 되도록 했습니다. 서버를 등록하면 먼저 대기 상태로 두고 MCP 통신으로 툴 목록을 수집합니다. 어떤 툴이 어느 서버에 있는지 매핑해두고, 요청이 오면 그 맵으로 라우팅합니다. 사용자는 올라온 서버 목록에서 필요한 도구를 골라 조합해 쓰며, Streamable HTTP transport로 세션을 유지하면서 세션·사용자별로 노출할 도구를 선별해 접근을 통제합니다.
B2C 메시징/알림 플랫폼
  • ▸Timezone 기반 캠페인 Push 스케줄링
    GeoIP 기반 Timezone 관리 체계를 구축하고, Timezone 단위 Redis 큐로 작업을 분산 적재/소비하는 구조를 구현했습니다. 사용자 이동에도 발송 시각 정합성을 유지하고, 특정 시간대 집중 발송을 완화했습니다.
  • ▸피크 트래픽 분산을 위한 Queue/Worker 운영
    Scheduler가 각 Timezone Queue에 Push 작업을 분산 적재하고, Worker는 발송 허용 시간(allow-window) 조건을 만족하는 큐만 Pull하여 소비하는 구조를 구현했습니다. 특정 시간대에 캠페인 트래픽이 집중되는 문제를 완화하고, 발송 허용 시간 이외에는 큐가 쌓이기만 하다가 조건 충족 시 순차 소비되도록 제어하여 서버 부하를 평탄화했습니다.
  • ▸대규모 Push 발송 성능 개선(비동기/병렬화)
    레거시 동기 처리 병목을 분석하고 비동기/Batch 병렬 처리로 발송 파이프라인을 재구성했습니다. Retry Queue 및 Idempotency를 적용해 실패/중복 케이스를 제어하고, 천만 건 이상의 대량 캠페인 발송 시간을 24시간 → 3~5분 수준으로 단축했습니다.
  • ▸iOS Dynamic Island 실시간 알림 지원
    iOS 업데이트 스펙 변화에 대응해 실시간 알림 동작을 재정의하고, 서버 발송/페이로드 구성을 정리하여 사용자 노출 품질을 안정화했습니다.
  • ▸FCM Push 레거시 리팩토링
    발송 로직의 책임을 정리하고 라이브러리 업데이트를 수행해 유지보수성과 운영 안정성을 개선했습니다.
실시간 협업/동기화
  • ▸공동편집 커맨드 순서 보장
    클라이언트와 편집 엔진 사이에서 메시지가 오가는 공동편집 구조를 맡았습니다. 요청이 없어도 다른 사람의 편집을 계속 밀어줘야 하고, 문서마다 담당 워커가 정해져 있어 같은 문서의 연산은 늘 같은 워커로 붙습니다. 사용자가 커맨드를 연달아 보내면 서버에 닿는 순서가 보낸 순서와 어긋났습니다. 나중 것이 먼저 처리되면 앞선 상태가 뒤에 덮여, 편집이 되돌아간 것처럼 보입니다. 커맨드마다 엔진에서 처리되는 우선순위가 다릅니다. 도착 시각이 아니라 그 우선순위를 기준으로 서버가 줄을 세워 엔진에 넘기도록 했습니다.
데이터 모델링/성능 최적화
  • ▸NOVA AI 대화 내역 저장/조회 구조 개선(DynamoDB)
    Item Size 초과 및 조회 지연 이슈를 해결하기 위해 대화 데이터를 Chunk 단위로 분리했습니다. 사용자마다 메시지 길이가 제각각이라 개수를 기준으로 삼으면 어떤 청크는 한도를 넘고 어떤 건 한참 남기 때문에, 누적 크기가 한도에 닿기 전에 끊도록 기준을 잡았습니다. 조회는 정렬 키에 청크 순서를 담아 한 번의 범위 조회로 가져오도록 PK/SK 기반 접근 패턴에 맞춰 테이블 구조를 재설계했습니다. Hot Partition을 완화하는 분산 키 전략을 적용해 저장/조회 안정성을 확보했습니다.
개발 생산성/운영 체계
  • ▸API 문서 자동화 및 MCP 서버 연동
    팀의 API 문서는 프로젝트마다 어떤 곳은 Swagger, 어떤 곳은 Confluence 로 공유 방식이 달라, 스펙이 바뀌면 문서를 따로 갱신하고 받는 쪽은 최신인지 매번 확인해야 했습니다. API 명세를 JSON으로 자동 생성하고, 이를 직접 제공하는 MCP 서버를 구축했습니다. 프론트엔드 개발자가 Cursor·Claude 등 AI 툴에서 MCP 서버를 연결하면 별도 문서 없이 최신 API 스펙을 바로 참조할 수 있어 구현 속도를 높였습니다.
AI 탐구 / Tech Enablement
  • ▸사내 MCP 허브
    구성원마다 자기 편의를 위해 만든 스킬, 커맨드, 훅이 각자의 개인 개발 환경에만 있어 같은 도구를 여러 번 만들고, 비개발 직군은 그런 도구가 있는지조차 알기 어려웠습니다. 구성원이 자기 하네스를 올리고 필요한 것을 골라 내려받는 사내 MCP 허브를 만들어 운영하고 있으며, 디자이너가 만든 디자인 스킬처럼 직군별 노하우도 함께 올라옵니다.
  • ▸사내 바이브코딩 공모전 멘토
    사내 바이브코딩 공모전에서 비개발 직군 11명의 멘토를 맡았습니다. Git 과 VS Code 설치부터 Claude Code 사용법, 에이전트에게 일을 맡기는 방식, 개발 규약과 훅 세팅까지 함께 진행했고, 개발 경험이 없던 참여자 전원이 각자 동작하는 프로그램을 하나씩 완성했습니다.
  • ▸AI 도구 POC 및 사내 세미나
    Claude Code Skills·MCP 등 새로운 AI 개발 도구를 선제적으로 검증하고, 팀 내 도입 가능성을 POC로 확인했습니다. 기술 검증 결과와 활용 사례를 세미나 형태로 공유하며 팀 전반의 AI 활용 역량 향상에 기여했습니다.
서초 AI College × KAIST
AI 전문 교육 과정
May 2026 - Sep 2026

서초구와 KAIST가 기업 수요에 맞춰 운영하는 실무형 AI 인재 양성 과정입니다. KAIST 교수님들의 강의로 AI의 역사와 학계 최전선에서 바라보는 관점을 접하며, 그 연구가 실제 산업으로 이어지는 흐름에 대한 인사이트를 얻었습니다.

Depromeet 18th · IT 연합 동아리
Server Developer
Mar 2026 - Jun 2026

IT 연합 동아리 Depromeet 18기의 서버 개발자로 활동하며, 위시리스트 관리 서비스 PiKi를 개발했습니다.

대상 (1위)Depromeet · Jun 2026
모의투자 최다 유치 1위Depromeet · Jun 2026
삼성 청년 SW 아카데미(SSAFY) 11기 수료
삼성 청년 SW 아카데미
Jan 2024 - Dec 2024

삼성 청년 SW 아카데미(SSAFY) 11기 수료. 체계적인 소프트웨어 개발 교육 과정을 통해 개발 역량을 습득했습니다.

프로젝트 우수상삼성전자 주식회사 · Oct 2024
삼성 SW 알고리즘 역량 테스트 A+ 취득 (Java)삼성전자 주식회사 · May 2024
2026.03 - 서비스 중

여러 쇼핑몰에 흩어진 위시를 한곳에 모아 1:1 토너먼트로 '진짜 사고 싶은 것'을 고르게 돕는 쇼핑 어시스턴트. 위시 수집부터 토너먼트 결정, 결과 영수증까지 하나의 흐름으로 연결한 서비스로, 양대 스토어에 출시했습니다. 두 달마다 돌아오는 AWS 계정 이관을 워크플로 하나로 자동화한 이야기를 확인해보세요.

KotlinSpring BootJavaJPAMySQLRedisAWSTerraformSentryGitHub Actions
4FE 3BE 3Design · Backend Developer· IT 연합 동아리 Depromeet 18기 팀 프로젝트
▸OffWay
2026.07 - 2026.10

국내 여행 수요가 주요 도시로 쏠리는 동안, 행정안전부가 지정한 89개 인구감소지역은 생활인구 유입이 절실합니다. 정부와 지자체가 마련한 지원책도 부처마다 흩어져 여행자에게 닿지 못합니다. 남은 연차에 맞춰 89개 지역의 코스를 자동으로 만들고, 그 여정에서 받을 수 있는 혜택을 연결합니다. 일정 하나를 만드는 데 공공데이터 21종이 들어가는데, 각 호출은 초 단위이고 쿼터가 있으며 간헐적으로 실패합니다. 그 불안정을 어떻게 흡수하느냐가 이 프로젝트의 실제 과제였습니다.

JavaSpring BootMySQLRedisFlywayDockerCaddyAWS EC2GitHub ActionsTestcontainers
1BE 1FE 1Designer · Backend Developer· 관광데이터 공모전 출품작
▸Melodiket우수상
2024.08 - 2024.10

스마트 컨트랙트 기반 밴드 공연 티케팅 서비스. 불투명한 수익 분배 문제와 암표 피해를 해결하기 위해 블록체인 기술을 활용한 투명한 티케팅 시스템을 제공합니다. 공연장 관리자, 뮤지션, 관객 모두를 위한 통합 플랫폼입니다.

Spring BootJavaMySQLRedisSolidityNode.jsNext.jsTypeScript
3FE 3BE · Backend Developer· 삼성 청년 SW 아카데미 11기 특화 프로젝트
▸굴 안의 너굴이
2024.07 - 2024.08

실시간 온라인 멀티플레이 숨바꼭질 게임. 플레이어는 찾는 팀과 숨는 팀으로 나뉘어 제한된 공간에서 술래잡기를 즐길 수 있으며, 다양한 아이템을 활용하여 다이나믹한 숨바꼭질을 즐길 수 있습니다.

JavaSpring BootWebSocketMySQLReactPhaser.js
3FE 2BE · Backend Developer· 삼성 청년 SW 아카데미 11기 공통 프로젝트
▸DreamsComeTrue
2024.10 - 2024.11

꿈을 적으면 생성형 AI가 숏폼 영상으로 만들어 주는 서비스. 꿈을 기록해 두고, 다시 떠올리고 싶을 때 영상으로 꺼내 볼 수 있습니다.

Spring BootJavaDockerRabbitMQChatGPTLUMA AIMidjourneyMySQLRedis
3FE 3BE · Backend Developer· 삼성 청년 SW 아카데미 11기 자율 프로젝트
MCP 오케스트레이터 구축기 (1) — Spring AI로 MCP 서버 띄우기2026.05
MCP · Spring AI
MCP를 클라이언트로만 쓰다가, 직접 서버를 만들어야 했던 상황과 설계.
MCP 오케스트레이터 구축기 (2) — 오케스트레이터 설계2026.05
MCP · 오케스트레이션
MCP 서버가 여러 개가 되는 순간, 에이전트는 어디에 요청해야 하는가.
MCP 오케스트레이터 구축기 (3) — 외부 MCP 서버 붙이기2026.05
MCP · 오케스트레이션
직접 만든 오케스트레이터에 Playwright MCP를 연동하기.
좋은 테스트란 무엇일까2026.06
테스트 · 검증
마감 제약 속에서 무엇을 어떻게 검증할지에 대한 테스트 전략.
ADD(Agent-Driven Development)에서의 터미널2026.06
AI 도구 · 생산성
AI 에이전트로 개발할 때 터미널 워크플로를 최적화하기.
디프만 18기 PiKi 회고2026.07
회고
기획부터 출시까지, PiKi를 만들며 배운 것들.
→ blog.sevin.dev 전체 보기
Languages
JavaKotlinJavaScriptTypeScript
Frameworks
Spring BootNode.jsExpressNext.js
Databases
MySQLPostgreSQLRedisDynamoDB
Tools & DevOps
DockerGitLinuxJenkinsTerraform
Cloud Platforms
AWSAzure
$echo $contact
emailpsv980817@naver.com
githubgithub.com/sevineleven
linkedinlinkedin.com/in/sevin-park