안녕하세요! 저는 워털루 대학 컴퓨터과학 전공 학생 조셉입니다. 2025년 9월부터 12월까지 Slash에서 소프트웨어 엔지니어링 인턴십을 마쳤습니다. 간단히 말하자면, 정말 즐거운 경험이었고 여러분도 참여하시길 추천합니다. 읽어주셔서 감사합니다.
자, 이번엔 진짜로 말할게. 전에도 음악 관련 초창기 스타트업부터 대형 테크 기업까지 다양한 회사에서 인턴을 해봤지만, Slash는 다른 곳에선 경험하지 못한 강렬함과 주인의식이 독특하게 어우러진 곳이었어. 팀원들은 똑똑하고 끈끈했으며, 쿠버네티스 유지보수부터 DB 성능에 이르기까지 복잡한 주제들을 깊이 있게 배울 수 있었습니다. 무엇보다도 정말 흥미로운 과제들을 직접 해결해볼 기회가 있었기에, 제 경험을 블로그에 기록하기로 결심했죠!
슬래시의 주요 서비스를 간략히 요약하자면, 창업자나 스니커즈 리셀러 같은 사람들을 위한 금융 플랫폼으로 시작했으나, 현재는 법인카드, 국제 송금, 암호화폐 계좌 등을 제공하는 일반적인 은행형 핀테크 기업으로 성장했습니다. 처음 슬래시를 접했을 때 저는 이 사실을 잘 알지 못했습니다. 결국 저는 스니커헤드도 아니고 핀테크에 깊이 빠져 있지도 않았기에, 이 기회가 과연 가치 있는지 오랜 시간 고민했습니다. 하지만 이 블로그 글에서 알 수 있듯, 결국 합류하기로 한 선택은 제 초기 경력에 있어 내릴 수 있었던 최고의 결정 중 하나였습니다.
제가 결국 다른 회사들보다 Slash를 선택한 주된 이유는 다음과 같습니다:
- 시리즈 B 기업이었다 – 저는 이 정도 규모의 스타트업에서 일해 본 적이 없어서, 그런 환경을 경험해보고 싶었습니다.
- 연간 매출액이 1억 5천만 달러에 달했는데, 이는 시리즈 B 단계 기업으로서는 믿기 힘들 정도로 높은 수치다. – 그들은 단순히 버티거나 견디는 수준이 아니라 적극적으로 확장하고 있었습니다. 추가적인 장점으로, 이는 많은 소규모 스타트업이 갖추지 못한 우수한 DX(디지털 경험)와 엔지니어링 역량을 보유하고 있음을 의미했습니다.
- 그들은 활발히 성장하고 있었다 – 그들은 1년 만에 매출을 6배로 늘렸고 최근 시리즈 B 투자를 유치했습니다. 이 회사는 성장의 황금기를 누리고 있었고, 저는 그런 성장세를 경험하는 회사에서 일하고 싶었습니다.
- 젊고 활기 넘치는 팀입니다 – 인터뷰를 통해 이곳 사람들은 편안하고 대화하기 즐거운 사람들이라는 걸 알 수 있었습니다. 공감할 수 있는 동료들과 함께 일할 생각에 기대가 컸습니다.
- 소규모의 날렵한 회사입니다. – 제가 이 1억 5천만 달러 ARR이 약 12명의 엔지니어 팀에 의해 달성되었다고 말씀드렸나요? 이는 1,250만 달러 ARR에 해당합니다. 퍼 엔지니어라니, 정말 대단하네요. 분명히 Slash의 직원들은 최고 수준의 인재들이며, 저는 높은 수준의 소유권과 훌륭한 멘토링을 모두 누릴 수 있을 것입니다.
- 인턴십 기준으로는 보상과 소규모 기업 특전이 최고 수준이야… 🤫
요약하자면환경과 재능 있는 인재들, 그리고 스타트업의 활력이 성장하기에 놀라운 장소가 될 거라 생각했습니다. 인프라 구축부터 확장성 계획, 시스템 설계 등 프로젝트를 처음부터 끝까지 책임질 기회가 주어질 거라 판단했고, 그래서 기회를 잡았습니다!
프로젝트: 알림 V2
슬래시에서 제가 바로 알게 된 특별한 점 하나는, 중요한 프로젝트를 인턴에게 맡기고 그들이 완수할 수 있다고 믿는다는 것입니다. 두 번째 주에 저는 카드 거래 거절 알림 시스템을 개선하는 임무를 맡았습니다. 그렇게 어렵게 느껴지지 않죠? 하지만 기존 알림 시스템에는 몇 가지 문제가 있었습니다:
- 내부 이벤트 시스템과의 긴밀한 연동, 서비스 핵심에 비즈니스 로직이 내재화됨
- 사용한 이메일 서비스 제공업체로 인해 이메일 지표가 저조하고 이메일 전달률이 더 나쁘다
- 개발자 경험이 어려워 엔지니어들이 시스템을 완전히 우회하고 공급자 API를 직접 호출하게 됨
그래서 교묘한 과제가 찾아왔습니다. 더 나은 구독 해지 이메일을 만들기 위해서는 임시방편 이상의 것이 필요했습니다. 완전히 재설계된 알림 시스템이 필요했고, 저는 이 프로젝트 전체의 디자인, 개발, 출시, 확장 업무를 총괄하는 DRI(Design, Development, Rollout, Scaling)가 되었습니다. 정말 부담스러운 일이었지만… 결국 수백만 건의 알림을 처리하게 될 시스템을 설계할 수 있는 놀라운 기회이기도 했습니다. 저는 기쁜 마음으로 뛰어들었습니다.
기존 알림 시스템을 연구하고 엔지니어들과 논의한 결과, 이 새로운 시스템이 준수해야 할 몇 가지 원칙을 발견했습니다:
- 이벤트에 구애받지 않는 설계 – 해당 서비스는 일회성 스크립트나 이벤트 핸들러 등 어디에서든 작동할 수 있어야 합니다.
- 공급자 중립적 설계 – 최소한의 노력으로 기존 공급자를 쉽게 제거하고 새로운 공급자를 도입할 수 있는 기회는 그 가치가 헤아릴 수 없을 것입니다.
- 개발자 중심 설계 – 좌절감으로 인한 무리한 개입은 이제 그만. 개발 경험은 가능한 한 직관적이고 쉬워야 합니다.
- 관측 가능하고 확장 가능한 - 알림은 전체 수명 주기 추적이 가능해야 하며, 궁극적으로 월 300만 통의 이메일을 지원할 수 있어야 합니다!
이를 바탕으로 알림 V2의 핸들러 기반 설계가 탄생했습니다. 이 시스템은 알림 핸들러를 중심으로 구성되며, 특정 외부 채널 제공자(예: 이메일용 Resend, SMS용 Twilio)를 위해 알림 전송이나 웹훅 처리 같은 공통 핸들러 기능을 노출합니다.

시스템의 핵심에는 알림 의도프로바이더, 채널, 페이로드 인자 등 알림에 필요한 모든 데이터를 담는 범용 임시 객체입니다. 각 핸들러는 자체 인텐트의 구조를 정의하며, 이러한 객체들은 강력한 타입 제약을 받기 때문에 정적 타입 검사 및 인트로스펙션을 지원합니다. 이는 개발자가 각 프로바이더의 복잡한 세부 사항을 모두 알 필요 없이 IDE의 자동 완성 기능을 활용하고 타입 검사가 이를 처리해 줄 것이라고 신뢰할 수 있음을 의미합니다.
사용자 선호도 확인과 같은 비즈니스 로직이 낮은 결합도로 구현되도록 보장하기 위해, 개발자가 send 함수를 호출하면 인텐트가 알림 미들웨어 파이프라인을 먼저 정의합니다. 알림 미들웨어는 상위 함수로서, 공유 DB 조회 기능을 위한 전처리 단계와 알림 의도를 허용·변환·삭제할 수 있는 처리 함수를 포함합니다. 이 설계로 이제 하나의 기반 시스템을 활용하여 검증 로직을 정의하고 공유하는 다양한 전송 함수를 정의할 수 있습니다. 예를 들어:
- 기본적인 "알림 전송" 기능을 정의할 수 있으며, 이 기능은 인텐트를 통해 흐름을 전달합니다.
수신자 차단됨수신자 정보(이메일, 전화번호)가 사용자 지정 차단 목록에 있을 경우 인텐트를 삭제하는 미들웨어 - 우리는 동일한 인텐트 흐름을 통해 작동하는 보다 복잡한 "사용자에게 전송" 기능을 정의할 수 있습니다.
수신자 차단됨미들웨어뿐만 아니라사용자 선호도 존중해당 채널에서 사용자가 알림 수신을 거부한 경우 의도를 삭제하는 미들웨어
추가적인 이점으로, 향후 개발자들이 복잡한 함수 구조를 추적할 필요 없이 새로운 전송 기능을 쉽게 추가, 제거 또는 수정할 수 있습니다.

미들웨어 단계 이후, 서비스는 생성합니다. 알림 Temporal 워크플로를 시작하기 전에 라이프사이클 객체를 처리합니다. Temporal은 워크플로 실패 시 자동 재시도, 내구성 있는 상태 관리, 오케스트레이션 보장을 기본 제공한다는 점에서 탁월합니다. 이는 알림 전달을 보장하는 데 모두 중요합니다. 워크플로는 알림을 대기열에 넣고, 공급자 속도 제한을 준수하며 사용자에게 스팸을 보내지 않도록 전송을 제한한 후, 배치 단위로 공급자 핸들러에 전달합니다. 이후 핸들러가 공급자로 알림을 전송하는 책임을 지며, 서비스는 이에 따라 라이프사이클을 업데이트합니다.
외부 제공자가 웹훅 응답을 보내면 핸들러가 이를 표준화된 데이터 유형으로 변환하고 타입화된 액션을 발생시킵니다. 액션은 알림 수신 시 이벤트에 대응하는 구조화되고 타입 안전적인 방식을 제공하면서 서비스를 최대한 중립적으로 유지합니다. 예를 들어,
- 수신자 업데이트 액션이 제공됩니다. 이를 통해 핸들러는 제공자와 채널이 '차단'으로 판단하는 기준에 따라 수신자를 '영구 차단' 상태로 업데이트하거나 해제할 수 있습니다.
- 알림 재시도 작업을 제공합니다. 예를 들어, 이메일이 일시적으로 반송된 경우 지수적으로 재시도하도록 합니다. 핸들러가 이메일 제공자의 응답이 "반송됨"으로 판단하면 이 작업을 트리거할 수 있습니다.
휴! 이게 대부분의 흐름이야. 그 과정에서 나는 다음과 같은 몇 가지 흥미로운 엔지니어링 과제들을 마주쳤어.
- 지수적 재시도 지원 – 이미 수행된 재시도 횟수에 따라 Temporal 내에서 향후 재시도 작업을 스케줄링합니다
- 우수한 추적성 – 예를 들어, 우리는 추적 ID와 알림 및 해당 재시도 기록을
알림 세트엔티티 - 배치 전송 – 개별 전송과 배치 전송을 통합하면 제공업체의 전송 속도 제한을 초과하는 것을 방지할 수 있으며, 개발자가 알림 전송 방식을 제어할 수 있게 합니다.
신입 엔지니어 후보자들은 입사 후 코드에서 세부 사항을 직접 발견하게 할게요 😉
프로젝트: 페이스리프트
프로젝트 페이스리프트는 저희 팀이 슬래시 웹 경험을 처음부터 끝까지 재설계한 프로젝트입니다(엔지니어링 블로그 참조). 얼버트 티엔, 성형 수술의 아버지). Facelift가 정확히 무엇이었는지에 대해서는 깊이 다루지 않겠습니다(다시 한번 훌륭한 엔지니어링 블로그를 참고하세요). 핵심은 방대한 프론트엔드 전체에 새로운 컴포넌트 라이브러리 + Tailwind를 도입하는 것이었습니다. 이제 출시를 준비하며 엔지니어링 팀은 재미를 좀 보기로 하고 집중적인 해킹 위크를 진행하기로 결정했습니다! 하지만 이번 해킹위크는 사무실에서 진행하는 평범한 형태가 아니었습니다. 우리는 차를 몇 대 타고 요세미티 옆 베이스 레이크의 오두막까지 3시간을 달려, 일주일 동안 함께 구축하고 리팩토링하며 진정으로 즐거운 시간을 보냈습니다.


이번 주에는 백엔드 작업에서 완전히 전환하여 거래 및 분쟁 처리 흐름을 개선하는 작업을 지원했습니다. 이는 대부분 프론트엔드 작업이었으며, 이전 업무와는 상쾌한 변화였을 뿐만 아니라 다음과 같은 프론트엔드 디자인 인프라 전반에 걸쳐 작업할 수 있는 기회이기도 했습니다:
- 핵심 기본 요소예를 들어, 사이드 패널, 모달, 팝업을 생성하는 방법
- 재사용 가능한 조합 가능한 컴포넌트예를 들어,
선택 가능한 검색 - 테이블 관리자: 정렬, 필터링, 페이지네이션 및 검색 기능이 쉬운 테이블을 구축하기 위한 맞춤형 컴포넌트
- 강력한 하위 양식 유효성 검사: Arktype, Tanstack 양식 및 자체 모델 생성 시스템을 사용하여
페이스리프트 작업은 복잡한 제품 로직보다도, 팀이 하나의 공동 프로젝트에 집중하고 힘을 모았을 때 얼마나 빠르게 움직일 수 있는지 목격하는 데 더 큰 의미가 있었습니다. 일주일 동안 사이트 전체가 변모하는 모습을 지켜보며, 그 오두막에서 동료들과 함께 일하고 유대감을 쌓은 경험은 인턴십 기간 중 가장 빛나는 순간이었습니다. 하지만 페이스리프트 작업은 그 주에 끝나지 않았습니다. 이후 몇 주 동안 우리는 지원팀과 협력하여 제품 내 사소한 문제점들을 해결하며 출시가 순조롭게 진행되도록 했습니다!

프로젝트: 템플릿
매 학기 말마다 우리 대학은 간단한 질문이 담긴 작은 설문지를 보내곤 합니다. "수업 내용이 업무에 얼마나 적용되었나요?"라고요. 그런데 Slash에서 근무할 당시, 저는 실제로 수업에서 배운 개념들을 직접 적용할 기회가 있었습니다! 저희는 트랜잭션 이메일이 새로운 Facelift 디자인과 일치하기를 원했기 때문에, 알림 시스템이 커스텀 템플릿을 지원하도록 하는 것이 합리적이었습니다. 프론트엔드와 동일한 색상과 간격을 유지하기 위해, 결국 React Email이라는 이메일 템플릿 라이브러리를 사용해 코드로 템플릿을 구축했습니다. 이 라이브러리는 JSX를 템플릿으로 사용할 수 있게 해주었죠. 우리 팀은 React JSX에 매우 익숙했기 때문에, 웹과 이메일 모두에 동일한 Tailwind CSS v4 디자인 시스템을 적용해 브랜드 일관성을 보장할 수 있었습니다.
그러나 한 가지 문제가 있었습니다. TailwindCSS 4의 주요 장점 중 하나는 기존 JS 구성 객체 대신 사용자 정의 CSS 파일을 사용할 수 있다는 점인데, 저희 팀은 이를 활용했습니다. 하지만 React Email의 Tailwind 컴포넌트는 실제로... 필요 JS 구성 객체.
이것은 제가 트랜스파일러를 만들게 되었다는 뜻이었어요!
더 정확히 설명하자면, 빌드 단계에서 디자인 시스템 CSS 파일로부터 추상 구문 트리(AST)를 생성하는 스크립트를 추가했습니다. 이 AST는 CSS 규칙을 구조화된 형태로 표현해 주었으며, 이를 통해 파일을 쉽게 파싱하여 다음과 같은 작업을 수행할 수 있었습니다:
- 지원되지 않는 CSS 클래스를 걸러내다예를 들어, 대부분의 이메일 클라이언트에서는 호버 스타일과 포인터 유틸리티가 작동하지 않습니다.
- 호환 가능한 색상 체계로 변환우리는 색상을 정의하기 위해 OKLCH를 사용했지만, 이메일 클라이언트는 이를 렌더링할 수 없으므로 HEX로 변환되었습니다.
- TS 구성 객체를 생성합니다이것은 자바스크립트로 컴파일되며, 이후 코드베이스의 어디에서나 쉽게 임포트할 수 있습니다.
이 트랜스파일 단계는 디자인 시스템에 단일 진실의 원천을 구현하는 빠른 방법이었습니다. 색상이 조정되면 웹이나 이메일 등 모든 매체에서 일관성을 유지할 수 있었는데, 이는 재빌드 즉시 트랜스파일되기 때문입니다. 또한 모바일 애플리케이션과 같은 다른 클라이언트도 필요에 따라 이 트랜스파일된 객체를 활용할 수 있었습니다. 생성된 구성 객체를 통해 웹 컴포넌트를 반영한 이메일용 공통 React 컴포넌트 세트를 구축할 수 있었는데, 예를 들어 타이포그래피 그리고 버튼 구성 요소와 거의 동일한 속성. 이 모든 것이 개발자 경험을 개선하여 템플릿 작업을 덜 번거롭게 만들었습니다!
마지막으로, 알림 템플릿도 우리가 구축한 맞춤형 데이터 구조인 내부 레지스트리 프레임워크를 활용하도록 했습니다(참조: 이 블로그 글간단히 요약하자면, 레지스트리는 템플릿을 정의하고 데이터베이스에서 직렬화 및 역직렬화하며 비즈니스 로직을 함께 유지하는 타입 안전 방식을 제공합니다. 예를 들어, 카드 승인 알림 템플릿.tsx 카드 승인 이벤트 핸들러 코드 바로 옆에 위치해 있어 어떤 이벤트에 알림이 있는지 빠르게 확인할 수 있어 매우 유용합니다! 이 프로젝트에서 레지스트리를 활용할 수 있었던 점은 정말 훌륭했습니다 – 팀이 양질의 재사용 가능한 코드를 작성하려는 의지를 잘 보여줬습니다.
내가 무엇을 얻었는가?
이곳에 오기 전부터 특별한 경험이 될 거라 생각했는데, 참여하기로 한 결정이 정말 기쁩니다. Slash는 제가 지금까지 맡았던 어떤 역할보다도 소유권, 플랫폼 설계, 엔지니어링 속도에 대해 더 많은 것을 가르쳐 주었습니다. 제가 얻은 주요 교훈은 다음과 같습니다:
- 신뢰는 값을 매길 수 없다 – 슬래시에는 일일 스탠드업 미팅이 없습니다. 슬래시에는 주간 스프린트나 백로그 그루밍도 없습니다. 우리는 일주일에 한 번 회의만 가집니다. 그 회의는 우리가 만든 것을 전체 팀에 데모하기 위한 것입니다. 이 방식이 통하는 이유는 팀 전체가 강력한 소통 능력과 인상적인 책임감을 갖추고 있기 때문입니다. 멘토링이 전혀 없다는 뜻은 아닙니다. 저 역시 주간 1:1 미팅을 통해 제 업무의 장애물을 제거합니다. 다만 슬래시는 여러분이 최선을 다해 일할 수 있도록 신뢰하며, 최대한 집중할 수 있는 환경을 조성합니다.
- 팀이 정말 대단해요 – 다른 협동 프로그램에서는 동료들이 전문적이었지만, 여기서는 동료들이 내 사람들슬래시는 분명히 재미있고, 서로를 지지하며, 함께 일하기 쉬운 사람들로 구성된 훌륭한 문화를 가지고 있습니다. 함께 일하기 싫었던 사람이나 위축되게 했던 사람은 단 한 명도 없었고, 그들은 당신을 정규직 직원처럼 대해줍니다. 게다가 주말에는 그들과 함께 농구도 할 수 있답니다 😃
- 인턴으로서, 다른 어떤 곳보다 여기서 훨씬 더 빠르게 성장할 수 있습니다 – 다른 회사라면 인턴에게 핵심 알림 시스템 전체를 프로젝트로 맡기지 않았을 것이다. 어렵고 성장을 촉진하는 문제들은 이미 해결되었거나 선임 엔지니어가 해결 중이었을 것이다. Slash의 독특함은 소규모 팀, 실제 비즈니스에 중요한 문제들, 그리고 인턴에게도 중요한 업무를 맡길 만큼 신뢰하는 문화가 결합된 데 있다.
이번 인턴십에서 있었던 다른 재미난 추억들입니다:
- 한 주 동안 스테이크만 20파운드(약 9kg)를 먹었어… 해킹 위크 덕분이야!
- 수영장에서 동료 인턴을 완전히 제압했는데, 바로 정사원에게 당했다.
- 드디어 한 판을 벤치 프레스에 올렸다!
- 저는 "사무실 전체의 폭식"에 핵심적인 기여자입니다(그리고 아마도 관련이 있을지도 모르겠네요, 제가 셰이크 샥을 사랑한다는 걸 알게 되었거든요).

이 4개월은 예상보다 훨씬 빠르게 지나갔고, Slash에서 쌓은 경험에 감사드립니다. 곧 졸업하게 되는데, 한 달 후, 일 년 후, 십 년 후의 삶이 어떻게 펼쳐질지 모르지만, Slash에서의 인턴십 경험이 어디로 가든 성공할 수 있는 노하우와 자신감을 주었다는 것을 압니다.
더 이야기하고 싶으시다면, LinkedIn으로 언제든지 연락 주세요! 궁금한 점이 있으면 언제든지 물어보세요.