현재는 링크가 만료되었지만, 최근 카카오페이에서 채용연계형 프론트엔드 개발자 인턴십 모집을 진행했다.
아쉽게도 일찍부터 광탈(..)했지만, 사전질문에서 답했던 내용이 어떤 사고 과정을 통해 도출됐는지, 왜 적절하거나 적절하지 못했는지 회고를 적어볼 예정이다.
1. 카카오페이 채용 연계형 인턴십에 지원한 동기는 무엇이고, 참여를 통해 본인이 이루고 싶은 것은 무엇인가요?
SI 스타트업에서 다양한 프로젝트를 수행하며, 특히 금융 애플리케이션 개발을 경험하는 과정에서 기술적 난제와 보안 규제의 중요성을 실감했습니다. 쿠콘 API 데이터 처리 및 금융보안원 심사 대응을 통해 금융 서비스에서 안정성과 신뢰성이 필수적임을 배웠고, 이를 기반으로 금융 기술(FinTech)의 핵심을 깊이 이해하고 성장하고 싶다는 목표를 가지게 되었습니다.
본격적으로 '카카오페이'라는 앱에 관심을 가지게 되었던 것은 금융 애플리케이션 개발 프로젝트에 참가하게 되면서였다.
해당 프로젝트 이전까지는 토이프로젝트에서 카카오페이 결제가 가상으로 진행했었던 다소 실용적이지 못한 경험뿐만 있었기 때문에, 실제로 서비스될 앱의 안정성이나 결제 과정과는 차이가 많았다.
프로젝트를 진행하면서 금융 서비스에서 어떤 비즈니스 로직이 기반으로 되는지, 이를 통해 어떤 서비스 플로우를 구성하고 결제가 이루어지는지 자세하게 알 수 있게 되었다.
가맹점주와 일반 사용자의 권한 차이에 따른 UI / UX 변동이 있기 때문에 기존보다 더욱 엄격한 사용자 관리와 세밀한 서비스 플로우를 구성하는 것이 얼마나 중요한 지 알게 되었다. 특히 일반 사용자들에게 결제 시 혼동을 줄 수 있는 UI를 구성하지 않는 부분에서 개발자와 일반 사용자를 분리하여 생각하는 것이 UX적으로 얼마나 영향을 미칠 수 있는지 알게 되었다.
또한, 앱 내 포인트 / 쿠폰 시스템을 구현하면서 악용할 수 있는 사례들을 방지하기 위한 서비스 플로우에 대해 많이 고민하게 되었었다. 이때 클라이언트 분들과 굉장히 자주 뵈었었다. 시스템이 악용된다면 회사의 매출에까지도 영향을 끼칠 수 있는 부분이라 더더욱 세세한 검토 과정이 필요했었고, 결제만큼이나 그 안정성이 중요했기 때문이다.
프로젝트가 진행되면서 쿠콘에서 제공하는 API도 처음 사용해 보게 되었는데, 복잡한 외부 API를 사용하기 위해서는 어떤 형식으로 데이터를 요청해야 하는지, 비즈니스 데이터를 받아와 어떤 식으로 처리해야 하는지 알 수 있었다. 지금보다도 미숙했던 시기라 API 요청이 제대로 이루어지고 있는지, 서비스에서 필요한 데이터를 받아오고 있는지 파악하는 능력이 많이 모자랐기 때문에 API 연동에만 꽤 많은 시간을 잡아먹었었다.
가장 어려웠던 부분은 금융보안원 심사를 통과하기 위해 소스 코드를 수정하는 과정이었다. 앱 개발 과정에서 고민하면서 만들었던 서비스 플로우임에도 추가적으로 어떤 문제점들이 발생할 수 있는지 알 수 있었고, 소스 코드나 사용자 개인 정보를 회사 외적으로도 (물리적으로) 어떤 식으로 보안에 신경을 쓰고 조심해야 하는지 알 수 있었다. 금융 앱에서 코드 유출이나 중요 데이터가 외부로 유출되는 것이 어떤 문제점을 야기할 수 있는지, 그리고 이러한 정보들이 얼마나 중요한지 현실적으로 이해하고 체감할 수 있었다.
종합적으로 금융 앱을 개발하면서 느꼈던 것은 사용자 데이터가 얼마나 중요하고 민감한 데이터인지, 즉 서비스의 안정성과 신뢰성이 얼마나 중요한지였다.
해당 내용을 좀 더 함축적으로 담아보고자 '안정성'과 '신뢰성'에 대해 강조했고, 이러한 내용을 비교적 잘 담아서 전달했다고 생각했다. 또한, 경력 상 어떠한 경험을 통해 카카오페이에 지원하게 되었는지, 즉 금융 앱 서비스에 어떻게 관심을 가지게 되었는지가 필요하다고 생각했다.
한 가지 아쉬운 점은 위의 서술했던 부분들을 '기술적 난제'와 '보안 규제의 중요성은' 한 단어로 축약하기보다 내 경험을 좀 더 섞어서 전달하면 좋지 않았나 싶은 생각이 들었다.
카카오페이는 결제, 송금, 투자 등 금융 전반에 걸친 혁신적인 서비스를 제공하며, MSA(Microservices Architecture)와 FDS(Fraud Detection System) 등의 기술을 활용해 확장성과 보안성을 강화하고 있습니다. 이러한 기술이 실제로 어떻게 운영되고 발전하는지 경험하고 배우고 싶습니다.
지원 과정을 준비하면서 이전에 읽었었던 기술 블로그나 내용을 좀 더 다시 되짚어보았다.
대규모 애플리케이션에서 서비스의 안정성과 결제에 대한 신뢰성을 보장하기 위해 카카오페이에서는 어떤 노력을 하고 있는지 알기 위해 카카오페이의 기술블로그 글들을 다시 한번 읽어보았다.
애플리케이션의 서비스 안정성과 신뢰성을 보장하기 위해 가장 중요한 요소들로 카카오페이의 결제시스템을 구성하는 마이크로 서비스 아키텍처(이하MSA)와 (금융) 사기 감지 시스템(이하 FDS)을 떠올렸다. 대규모 애플리케이션인 만큼 매일매일 방대한 양의 트랜잭션을 어떻게 안정적으로 핸들링하는지, 그리고 악용 사례들을 어떻게 감지하고 방지하기 위해 노력하는지 알 필요가 있다고 생각했기 때문이다.
기술 블로그를 통해 카카오페이 개발팀에서 MSA 환경에서 트랜잭션을 보장하기 위해 고민하고 다양한 솔루션을 시도하고 있는지, 쾌적한 UX를 위해 프론트엔드에서 어떤 식으로 UI를 관리하고자 노력하는지, FDS를 발전시키기 위해 어떤 노력을 하고 있는지 등을 알 수 있었다.
블로그를 통해서 카카오페이 개발팀의 사고방식이나 사고 사례 등을 간접적으로 볼 수 있었지만, 결국 소스코드가 궁금해질 수밖에 없었다. 기술 블로그에서 언급했던 주제들이 소스 코드에 어떻게 녹아들어 있는지 알고 싶었고, 이는 카카오페이에 지원하게 된 가장 큰 동기가 되었었다.
아쉬운 점은 MSA, FDS에 대해 불필요하게 영어로 추가 설명한 부분과 "기술을 활용해 확장성과 보안성을 강화"하고 있는 부분을 어떻게 알게 되었는지 제대로 설명하고 설득하지 못했던 것 같다.
또한, 재직 중 사내 깃 컨벤션 설정 및 보일러플레이트 구현을 통해 코드 품질 향상과 개발 생산성 개선을 주도하며 애플리케이션 최적화, 아키텍처 설계, 효율적인 협업의 중요성을 체감했습니다. 이를 바탕으로 기능 구현을 넘어 지속적인 성장과 안정성을 고려하는 개발자로 성장하고 싶습니다.
인턴십 과정을 통해 카카오페이의 '더 나은 금융 생활'이라는 비전을 실현하기 위한 웹 서비스 개발 및 운영 과정에 참여하고, 보다 좋은 사용자 경험을 제공하기 위한 기술적 역량을 강화하고 싶습니다. 특히, 스타트업에서 다양한 기술 스택을 유연하게 활용하며 애자일(Agile) 환경에서 빠르게 적응하고 문제를 해결해 온 경험을 바탕으로 카카오페이의 개발 프로세스에서도 신속하게 적응하고 기여할 자신이 있습니다. 이러한 경험을 쌓고, 더 나아가 카카오페이의 개발자로 성장하여 사용자에게 더 나은 금융 경험을 제공하는 데 기여하고 싶습니다.
SI 회사에 다니면서 프로젝트마다 다른 아키택처와 통일되지 못한 컨벤션에서 큰 스트레스를 받았었다.
새 프로젝트에 투입되면 기존의 업무 프로세스가 완전히 달라지거나, 분명 같은 기술 스택 베이스(React, React Native 등) 임에도 시스템 아키택쳐(모노레포, CBD, 클린 아키택쳐 등)가 달라졌다.
새로운 시도와 다양한 도전을 할 수 있는 것이 SI 기업의 강점은 맞다고 생각하지만, 하나의 뿌리를 기반으로 다양한 시도가 이루어지는 것이 좋다고 생각했다. 다행히 대표님도 이러한 부분에서 동의해 주셨고, 개발 프로세스를 시스템적으로 정리하는데 도움을 주셨다.
이를 통해 신입 개발자가 투입되어도 이해하는데 문제가 없는 수준의 보일러플레이트와 업무 프로세스를 이해하고 따르기 좋은 가이드 문서를 준비하기 위해 노력했다.
이 과정에서 왜 다양한 시스템들을 시도했는지 이해할 수 있었다. 애자일(Agile) 개발 프로세스에 용이하고 애플리케이션 최적화에 도움이 되는 기술스택이 무엇인지 가늠하기 위한 과정이 필요했기 때문이라고 생각한다.
물론 깃 컨벤션 관련된 부분은 교통정리가 필요한 게 맞았다고 생각한다. 한글, 영어가 혼재되어 사용되었기 때문에 깃 히스토리를 볼 때 힘들었고, 타 개발팀과 협업하는 경우 서로가 커밋 과정을 이해하는데 어려움이 있었다. 빠르고 효율적인 개발을 위해서 오히려 시스템적 도입이 필요한 부분들이었다.
개인적으로 이러한 경험들이 앞으로의 업무 과정에서도 고려되어야 한다고 생각했고, 대규모 애플리케이션에서의 시스템에 빠르게 적용할 수 있지 않을까,라는 자신감을 보이고 싶었던 것 같다.
결국 앱 사용에 있어 사용자를 끌어오는 것은 좋은 UI와 UX라고 생각했기 때문에, 이에 대한 내 생각도 조금은 내비치게 됐다.
아쉬운 점은, 역시나 디테일인 것 같다.
어떠한 기술적 역량을 강화하고 싶은 건지, 어떻게 더 나은 금융 경험(보다는 사용자 경험이라고 쓰는 것이 옳았다고 생각한다)을 제공할 수 있는지 설득력 있게 적지 못한 것 같다.
2. 카카오페이 서비스를 사용해 보고 사용자 입장에서 수정이 되었으면 하는 UI/UX 하나만 정하여 어떻게 수정이 되면 더 잘 사용할 수 있을지 이야기해 주세요.
카카오톡에서 더 보기 탭 상단의 카카오페이 버튼 리다이렉트 UX가 일관되게 수정되었으면 좋겠습니다.
현재 카카오페이 앱이 설치되지 않은 경우, 해당 버튼을 누르면 카카오톡 내 바텀 시트를 통해 송금, 자산, 결제 등 모든 기능을 이용할 수 있습니다. 반면, 카카오페이 앱이 설치된 경우, 송금 기능은 바텀 시트에서 실행되지만, 자산과 결제 기능은 카카오페이 앱으로 이동하여 진행됩니다.
이러한 동작 방식은 일관성이 부족해 사용자에게 혼동을 줄 수 있습니다. 따라서, 카카오페이 앱이 설치되어 있다면 해당 버튼을 통한 모든 기능이 카카오페이 앱에서 실행되도록 수정하는 것이 더욱 직관적인 UX라고 생각합니다.
또한, 해당 버튼을 통해 카카오페이 앱을 실행하면, 앱이 백그라운드 상태였을 때에도 홈 화면으로 이동하는 문제가 있습니다. 사용자는 기존 작업이 유지된 상태에서 앱을 다시 열기를 원하므로, 앱이 리셋되지 않고 기존 진행 상황이 그대로 유지되는 것이 더 사용자 친화적인 UX라고 판단됩니다.
React Native 환경에서 이 문제를 해결하는 방법은 다음과 같습니다.
- iOS: SceneDelegate.swift 파일에서 UISceneDelegate의 sceneWillEnterForeground 메서드를 추가하여 앱이 포그라운드로 복귀할 때 기존 상태를 유지하도록 설정합니다.
- Android: AndroidManifest.xml 파일에서 launchMode를 "singleTask"로 설정하여 앱의 상태를 보존하거나, MainActivity.java 파일에서 android.content.Intent 모듈을 활용해 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT을 적용하여 기존 액티비티를 유지합니다.
위 방법을 적용하면 카카오톡 내에서 카카오페이의 주요 기능을 일관되게 제공하고, 앱 이동 시 기존 진행 상태를 유지하여 UX를 개선할 수 있다고 생각합니다.
화면기록으로 해당 내용을 자세하게 보여주고 싶었으나... 개인 정보가 휙휙 보이고 있어서 시나리오만 공유하고자 한다.
사전 질문 답변 시에는 "카카오페이 앱 설치"를 기준으로 말했는데, 좀 더 명확한 시나리오는 카카오페이 설치 후 로그인까지 마쳤을 때의 경우가 좀 더 올바른 설명이라고 생각한다(ios 기준). 카카오페이 앱만 설치되어 있다면 카카오톡 내에서 해당 버튼을 눌러도 다시 카카오톡으로 리다리엑트된다.
만약 카카오페이 앱이 설치되어 있고 로그인까지 되었다면, 질문에 대한 답변과 같이 "송금"버튼만 카카오톡 내부에서 자체적으로 실행되고 나머지는 모두 카카오페이 앱으로 리다리엑트된다.
개인적으로(사용자 입장에서)는 일관성이 떨어지는 다소 불편한 UX라고 생각했고, 카카오페이 앱이 있다면 모두 해당 앱으로 이동된 후 처리되는 방식이 낫다고 생각했다.
해당 답변을 작성할 때, 개발적인 관점에서도 고민을 많이 했다.
송금을 원하는 경우 빠르게 해결하기 위해 송금 기능만은 앱에 일부러 남겨둔 것은 아닌가?라는 생각도 했었다.
실제로 답변을 작성했을 때는 일관성 있는 UX를 위해 카카오페이 앱으로 이동하길 바랐는데, 다시 생각해 보니 그냥 다 카카오톡 안에서 해결하도록 두는 것이 "사용자 입장"에서는 더 편리한 것 같다고 생각된다.
다만 아쉬운 점은 리다리엑트 관련된 부분에 대한 해결책을 소스 코드적으로 접근하지 못한 것 같다.
해당 부분에 대해 다시 답변해 보자면, 먼저 앱 스킴(App Scheme)과 스토어 URL 설정이 필요할 것이다. ios 환경을 예로 들자면, 앱 스킴은 kakaopay:// 로 설정하고, 카카오페이의 URL 링크 (https://apps.apple.com/kr/app/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%8E%98%EC%9D%B4/id1464496236)를 연동할 수 있겠다.
이후에 Linking을 활용하여 외부 앱을 구동시킨다.
코드로 표현해 보자면 다음과 같이 훅으로 구분해 사용할 수 있을 것 같다.
import { Linking, Platform } from 'react-native';
// 카카오페이 App Scheme 및 Store URL 정의
const KAKAOPAY_SCHEME = 'kakaopay://';
const KAKAOPAY_STORE = {
ios: 'https://apps.apple.com/kr/app/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%8E%98%EC%9D%B4/id1464496236',
android: 'https://play.google.com/store/apps/details?id=com.kakaopay.app&hl=ko',
};
// 카카오페이 특정 기능 딥링크
const KAKAOPAY_DEEP_LINKS = {
home: 'kakaopay://home', // 홈 화면
sendMoney: 'kakaopay://send', // 송금
assets: 'kakaopay://assets', // 자산 조회
qrPay: 'kakaopay://qrpay', // QR 결제
};
const handlePressOpenKakaoPayTab = async (tab: keyof typeof KAKAOPAY_DEEP_LINKS) => {
try {
const appScheme = KAKAOPAY_DEEP_LINKS[tab];
// 1. 카카오페이 앱이 설치되어 있는지 확인
const isInstalled = await Linking.canOpenURL(appScheme);
// 2. 앱이 설치되어 있다면 특정 탭으로 이동
if (isInstalled) {
await Linking.openURL(appScheme);
return;
}
// 3. 앱이 설치되지 않았다면 스토어로 이동
const storeURL = Platform.OS === 'ios' ? KAKAOPAY_STORE.ios : KAKAOPAY_STORE.android;
await Linking.openURL(storeURL);
} catch (error) {
console.error('카카오페이 실행 오류:', error);
}
};
카카오톡의 정확한 소스 코드는 알지 못하니 추측하자면 해당 버튼에서는 Linking 기능과 Deep Link가 제대로 연동되지 않았을까 한다. 다만 정확한 내부 사정이나 코드를 알지 못하기 때문에 섣부른 추측을 하기에는 질문에 대한 답변이 신빙성이 떨어지지 않을까 하는 생각도 들었었다. 특히, 보안 정책으로 인해 특정 기능만 지원될 가능성도 있다고 생각했다.
관련된 부분을 어떤 식으로든 답변에 포함했다면 조금 더 낫지 않았을까? 라는 아쉬움이 남는 것 같다.
'개발자 일기 > 기록(회고)' 카테고리의 다른 글
글또 10기 회고 (0) | 2025.03.30 |
---|---|
당근 부동산 직무 인터뷰 회고 (0) | 2025.03.28 |
2024년 회고록 (2) | 2025.01.05 |
[Upstage AI Lab]컴퓨터공학 개론 학습 후기 (2) | 2024.12.11 |
[Upstage AI Lab]확률과 통계 학습 후기 (2) | 2024.12.02 |
댓글