Table of Contents
인천국제공항 어느 창문 앞
이제 한국 땅을 벗어나는구나. 어떤 경험을 마주할까. 돌아오면 어떤 마음을 갖게 될까. 달리(고양이)는 괜찮을까. 미국까지 갔는데 프로젝트가 망하면 어떡하지.
2024년 9월 20일. 눈오는 겨울 새벽 밤 계획에 없던 외출을 할 때처럼 두근거리는 마음을 품고 나는 공항으로 향했다. 그 곳에는 함께 출발하는 동료들이 기다리고 있었다.
작은 스타트업처럼 일하기
Concar 400 Dr에 있는 WeWork 오피스
우리 회사는 AI 음성 합성(TTS, Text-to-Speech) 기술을 기반으로 한 콘텐츠 제작 도구를 개발하고 있다. 한국에서는 이미 많은 크리에이터들이 우리 서비스를 사용하고 있지만, 글로벌 시장에서는 아직 걸음마 단계였다.
"이번에는 정말 다르게 해봐야 해요."
처음 출장을 논의할 때 대표가 했던 말이다. 우리 제품은 글로벌 시장에서 경쟁해야 했고, 기존 TTS 에디터는 사용성에 문제가 있었다. 지금까지의 접근 방식으로는 글로벌 시장에서 살아남기 어렵다는 판단이었다.
그래서 우리(개발자 3명과 디자이너 1명)는 미국 캘리포니아 샌 마테오로 향했다. 현지 미국 지사에는 이미 대표와 PM이 상주하고 있었다. 목표는 단순했다. 마치 초기 스타트업처럼 빠르게 움직이며, 실제 영어권 사용자들의 피드백을 바탕으로 제품을 개선하는 것.
"한국에서 수백 번 회의하기보다, 현지에서 직접 사용자를 만나는 30분이 더 가치 있다."
첫날 미팅에서 나온 이 말은 우리의 3주 여정을 관통하는 키워드가 되었다.
데일리 프로토타입과 인터뷰 사이클
우리는 3주 동안 16개의 프로토타입을 개발하고 15번의 사용자 인터뷰를 진행했다. 일정은 대략 이런 흐름이었다:
- 오전: 사용자 인터뷰 진행
- 오후: 인터뷰 결과 분석 및 토론 (평균 2~3시간)
- 저녁~밤: 다음 날 인터뷰를 위한 프로토타입 개발
- 다음 날 아침: 마지막 테스트 및 디버깅 후 다시 인터뷰
마치 기계처럼 돌아가는 이 사이클은 처음에는 버겁게 느껴졌다. 개발자인 나는 코드를 깔끔하게 작성하고 싶었고, 버그 없이 완벽한 프로토타입을 만들고 싶었다. 하지만 현실은 달랐다.
"완벽한 코드보다 사용자의 반응을 빨리 보는 게 중요해요. 지금은 스피드가 생명입니다."
함께 갔던 시니어 개발자의 말에 처음에는 불안했지만, 이내 이 방식의 강력함을 경험하게 되었다. 우리는 2~3일에 한 번씩 실제 사용자의 반응을 볼 수 있었고, 매일매일 제품이 발전하는 모습을 확인할 수 있었다.
프로토타입 중 일부
특히 기억에 남는 건 사용자가 우리 프로토타입을 사용하다가 당혹스러운 표정을 짓는 순간이었다. 개발자인 내가 당연하게 생각했던 UX 패턴이 사용자에겐 전혀 직관적이지 않았다. 이런 순간들이 쌓이면서 "공급자 관점"과 "사용자 관점"이 얼마나 다른지 피부로 느낄 수 있었다.
인사이트: 작은 스타트업이 성공하기 위한 조건
1. 사용자와의 거리를 좁히는 것
미국 출장에서 얻은 가장 큰 인사이트는 "공급자가 생각하는 것"과 "사용자가 이해하는 것"의 간극이 생각보다 훨씬 크다는 사실이었다.
한 가지 예를 들자면, 우리는 TTS 에디터에 다양한 음성 제어 기능을 넣었었다. 공급자 관점에서 "더 많은 기능 = 더 좋은 제품"이라고 생각한 것이다. 그러나 사용자들은 그저 텍스트를 잘 편집할 수 있고 재생 버튼을 눌렀을 때 음성이 잘 흘러나오는 수준으로도 충분히 만족했다.
"왜 이 기능이 필요한가요?"
"제가 원하는 기능을 찾을 수 없어요."
사용자가 던진 이 질문은 마치 우리가 만든 프로덕트가 쓸모없다고 말하는 것 같았다. 하지만 제품의 본질을 다시 생각하게 만들었고, 불필요한 복잡성을 제거하는 데 큰 도움이 되었다.
"왜(Why)"라는 질문은 기획, 디자인, 개발의 모든 단계에서 가장 중요하다.
우리는 매일 밤 회의에서 이 "왜"에 집중했다. 사용자가 왜 그런 행동을 했는지, 왜 그런 표정을 지었는지, 왜 다른 버튼을 찾았는지. 이런 질문들이 제품의 방향을 잡아주는 나침반이 되었다.
2. 의사결정 구조: 대표가 현장에 있어야 하는 이유
출장 전에는 '대표와 함께 있으면 일할 때 좀 어렵지 않을까' 하는 생각이 있었다. 하지만 현장에서 경험해보니 이것이 프로젝트 성공의 핵심 요소임을 깨달았다.
의사결정권자가 현장에 있다는 것은 여러 가지 이점이 있었다:
- 의사결정 속도: "이 기능을 넣을까요?" 라는 질문에 대한 답변이 즉각적으로 이루어진다.
- 컨텍스트 공유: 대표가 직접 사용자 반응을 보면서, 우리 팀과 같은 경험을 공유할 수 있다.
- 방향성 정렬: 매일 밤 회의에서 대표의 비전과 우리의 관찰 결과가 자연스럽게 조율된다.
"이거 정말 좋은데요! 다음 버전에서는 이렇게 해봅시다."
대표가 직접 프로토타입을 테스트하고 즉석에서 피드백을 주는 모습은, 마치 초기 스타트업의 창업자가 제품을 손수 다듬는 것 같았다. 이런 모습을 보며 '소규모 스타트업만이 가질 수 있는 장점’에 대해 다시 생각할 수 있게 되었다.
회사가 커지더라도 의사결정권자는 현장과 멀어지면 안 된다.
이 경험은 회사 규모와 관계없이, 핵심 결정권자가 사용자와 가까이 있어야 한다는 교훈을 주었다. 특히 글로벌과 경쟁하며 빠르게 움직여야 하는 상황에서는 이런 구조가 훨씬 효과적이다.
3. 빠른 검증 사이클: 논의보다 프로토타입
출장 전에는 기획과 디자인을 꼼꼼히 검토한 후 개발을 시작하는 방식이 익숙했다. 하지만 미국에서는 거의 반대로 일했다.
"이게 좋을 것 같아요. 일단 만들어 보고 반응을 지켜봅시다."
이런 접근 방식은 처음에는 무모해 보였지만, 실제로는 놀라울 정도로 효율적이었다. 긴 논의로 모든 상황을 예측하려고 노력하는 대신, 빠르게 프로토타입을 만들고 실제 사용자 반응을 확인하는 방식이었다.
물론 논의가 없었던 것은 아니다. 오히려 더 깊이 있는 논의가 이루어졌다:
- 간략한 아이디어 논의 (30분~1시간)
- 프로토타입 개발 (3~4시간)
- 사용자 테스트
- 결과를 바탕으로 한 심층 논의 (2~3시간)
이 방식의 장점은 논의가 실제 데이터를 기반으로 이루어진다는 점이다. "이 버튼을 여기에 놓으면 어떨까요?"라는 추상적인 질문 대신, "시연을 진행했던 사용자 대부분이 이 버튼을 찾지 못했습니다"라는 구체적인 사실을 바탕으로 대화할 수 있었다.
불확실성이 높을수록 빠른 검증이 중요하다.
특히 새로운 시장이나 새로운 기능을 개발할 때는 아무리 경험 많은 전문가라도 모든 것을 예측할 수 없다. 이런 상황에서는 빠르게 만들고 검증하는 사이클이 훨씬 효과적이다.
기술적 도전과 성과
밤 늦게까지 개발해도 모자랐지만 재밌었다
출장 기간 동안 개발자로서 여러 기술적 도전을 마주했다. 가장 큰 도전은 (휴일을 포함해)매일 새로운 프로토타입을 개발하면서도 코드 품질을 유지하는 것이었다.
문서 정규화(Normalizing) 로직 개발
우리의 핵심 과제는 텍스트 편집과 음성 합성을 매끄럽게 통합하는 에디터를 만드는 것이었다. 이를 위해 Slate.js를 기반으로 에디터를 개발했다.
Slate.js란?
Slate.js는 리액트 기반의 리치 텍스트 에디터 프레임워크다. 일반적인 WYSIWYG 에디터와 달리, Slate는 문서를 중첩된 노드 트리 구조로 관리한다. 이는 마치 워드 프로세서에서 문단, 문장, 단어를 체계적으로 관리하는 것과 비슷하다.
Slate 문서 구조
이러한 구조는 다음과 같은 요소로 구성된다:
- 문서(Document): 전체 에디터 콘텐츠
- 블록 요소(Block Elements): 문단, 제목 등
- 인라인 요소(Inline Elements): 링크, 강조 등
- 텍스트 노드(Text Nodes): 실제 텍스트와 스타일 정보
우리는 이 구조에 음성 관련 메타데이터(성우, 음성 스타일, 속도 등)를 추가로 관리해야 했다.
정규화 로직 구현
정규화 로직은 문서 구조를 일관되게 유지하는 역할을 한다. 예를 들어, 텍스트를 붙여넣거나 음성 스타일을 변경할 때 필요한 속성들이 항상 존재하도록 보장하는 예시를 들어보자면:
const withTTSNormalizing = editor => {
const { normalizeNode } = editor;
editor.normalizeNode = entry => {
const [node, path] = entry;
if (Text.isText(node) && !node.voice) {
Transforms.setNodes(editor, { voice: DEFAULT_VOICE }, { at: path });
return;
}
normalizeNode(entry);
};
return editor;
};
이러한 정규화 로직은 다음과 같은 상황에서 문서 구조를 안정적으로 유지할 수 있게 한다:
- 에디터 외부/내부에서 텍스트를 복사해 붙여넣을 때
- 음성 스타일(피치, 속도 등)을 변경할 때
- AI 성우를 변경할 때
사용자 경험 개선
사용자 경험 측면에서 주요 개선 사항은 다음과 같았다:
- 단어 단위 스타일 편집: 사용자가 텍스트를 선택하고 스타일을 변경하면 자동으로 단어 단위로 선택 영역을 확장한다. 이는 자연스러운 음성 편집을 위해 필수적이다.
function expandSelectionToWord(editor, selection) {
if (!selection) return;
const start = selection.anchor.offset;
const end = selection.focus.offset;
const expandedStart = findWordBoundary(start, 'backward');
const expandedEnd = findWordBoundary(end, 'forward');
return { start: expandedStart, end: expandedEnd };
}
- 현재 재생 중인 텍스트 하이라이트: 오디오가 재생될 때 해당 텍스트 부분을 강조 표시한다. Slate Decorator를 이용했다.
function useHighlightPlayingTextDecorator() {
const { isPlaying, currentTrack } = usePlayer();
const highlightDecorator = useCallback(
([node, path]) => {
if (!isPlaying || !currentTrack) return [];
const trackPath = [
0,
currentTrack.paragraphIndex,
currentTrack.nodeIndex,
];
if (!Path.equals(path, trackPath)) return [];
return [
{
anchor: { path: trackPath, offset: 0 },
focus: { path: trackPath, offset: node.text.length },
playingHighlight: true,
},
];
},
[isPlaying, currentTrack],
);
return highlightDecorator;
}
- 모바일 환경 최적화: 모바일에서 가상 키보드가 불필요하게 표시되는 문제를 해결했다.
function handleMobileInteraction(editor) {
if (!isMobile()) return;
editor.on('select', () => {
if (!editor.selection) {
document.activeElement?.blur();
}
});
}
- 성능 최적화: React Query를 활용해 서버 요청을 최적화하고 사용자 경험을 개선했다.
function useVoiceDataCaching(scriptId, actorId) {
const queryClient = useQueryClient();
const { data, isLoading } = useQuery(
['AUDIO_DATA', scriptId, actorId],
async () => {
return await generateVoice(scriptId, actorId);
},
{
staleTime: 1000 * 60 * 10,
cacheTime: 1000 * 60 * 30,
enabled: Boolean(scriptId && actorId),
},
);
return { audioData: data, isLoading };
}
글로벌 시장의 중요성
Apple Park 뒤로 보이는 해밀턴 산
미국 출장을 통해 확실히 깨달은 것 중 하나는 글로벌 시장의 중요성이다.
"결국 SaaS 기업은 글로벌 시장으로 나가야 한다. 한국은 시장이 제한적이다."
우리 제품은 더 큰 성장을 위해 글로벌 시장 진출이 필수적이었다. 실제로 새로운 프로토타입을 기반으로 한 제품을 릴리스한 후 1주일 만에 놀라운 변화가 있었다:
실제로 우리가 개발한 프로토타입을 기반으로 한 제품을 릴리스한 후 1주일 동안의 글로벌 유저 수 추이는 놀라웠다:
- 총 사용자 수 51.2% 증가 (4,535명 -> 6,859명)
- 신규 참여 사용자 46.3% 증가 (2,508명 -> 3,668명)
- 신규 사용자에 대한 가입 전환율 71.4% 향상 (18.9% -> 32.4%)
- 활성 로그인 사용자 수 136.9% 증가 (549명 -> 1,301명)
- 사용자 활성 비율 57.0% 증가 (12.1% -> 19.0%)
이런 급격한 성장은 우리의 방향이 옳았음을 증명했다. 특히 영어권 사용자들의 높은 참여도는 글로벌 시장에서의 가능성을 보여주었다.
개인적인 성장
3주간의 미국 출장은 개발자로서 내게도 큰 성장의 기회였다. 새로운 기술을 빠르게 학습하고 적용하는 방법, 팀원들과 효율적으로 소통하는 방법, 그리고 무엇보다 사용자 중심으로 생각하는 방법을 배웠다.
기술 학습의 방식
새로운 기술을 접할 때 가장 효과적이었던 방법은 다음과 같다:
- 공식 문서나 신뢰할 수 있는 예제 코드를 먼저 살펴본다
- 핵심 개념이나 패턴을 파악한다
- 실제 필요한 부분에 바로 적용해본다
- 문제가 발생하면 다시 문서로 돌아가 깊이 있게 이해한다
이런 반복적인 과정을 통해 Slate.js와 같은 복잡한 라이브러리도 3일 만에 프로토타입에 적용할 수 있었다.
효율적인 소통 방식
빠른 개발 사이클에서 발견한 효과적인 소통 방식은 다음과 같다:
- 짧고 명확한 미팅 (5~10분)
- 논의 사항을 미리 정리
- 결과와 다음 할 일을 문서화
특히 컨텍스트 스위칭이 많은 상황에서는 짧게 자주 소통하는 것이 더 효과적이었다.
돌아온 후의 변화
3주간의 출장을 마치고 한국으로 돌아온 후, 우리 팀의 일하는 방식에는 많은 변화가 생겼다:
- 프로토타입 중심 개발: 긴 논의보다는 빠른 검증을 우선한다
- 사용자 중심 사고: 모든 기능에 "왜?"라는 질문을 먼저 던진다
특히 출장 중 개발한 프로토타입이 실제 제품 로드맵에 반영되어 개발이 진행되고 있다는 점은 큰 성취감을 주었다.
마치며
떠나는 길 비행기 안에서
3주간의 미국 출장은 개발자로서, 그리고 한 사람으로서 많은 것을 가르쳐주었다. '작은 스타트업처럼 일하기’라는 목표로 시작했지만, 실제로 경험한 것은 그 이상이었다.
무엇보다 이 경험을 통해 깨달은 가장 중요한 교훈은 "사용자와 가까이 있어야 한다"는 것이다. 아무리 뛰어난 개발자라도 사용자와 멀어지면 좋은 제품을 만들 수 없다.
또한 "빠르게 움직이고, 자주 검증하라"는 교훈도 얻었다. 불확실성이 높은 상황에서는 완벽한 계획보다 빠른 실행과 검증이 더 중요하다.
마지막으로, 글로벌 시장의 중요성을 다시 한번 확인했다. 한국 시장만을 바라보는 것이 아니라, 글로벌 사용자의 니즈를 이해하고 그에 맞는 제품을 개발하는 것이 장기적인 성공의 열쇠일 것이다.
앞으로도 이 경험을 바탕으로, 더 나은 제품을 만들기 위한 도전을 계속할 것이다. 그리고 언젠가 또 다른 출장의 기회가 온다면, 이번보다 더 큰 성과를 이룰 수 있을 것이라 확신한다.
"The best way to predict the future is to create it." - Abraham Lincoln
우리가 만드는 제품이 미래를 만들어가는 작은 조각이 되길 바라며, 이 글을 마친다.