7년 차 백엔드 개발자로 최근까지 모빌리티 플랫폼 [타다]에서 인터널 챕터 리더로 근무했습니다. [타다]의 인터널 챕터는 백/프론트/인프라 구분 없이 대고객을 대상으로 하는 제품 외 회사에 필요한 모든 제품을 개발하는 챕터입니다. 주 언어는 Kotlin, Spring Boot, JPA, AWS, Kubernetes, MySQL, NextJS, Angular, TypeScript입니다.
혼자만 잘하는 개발자이기보다 프로젝트 설계, 일정 관리, 이슈 대응에 적극적으로 임해 다 같이 협력해서 시너지를 내는 'ONE TEAM'을 만들어내는 개발자이기를 지향합니다.
kyoutae_93@naver.com
010 9109 2682
2021
2021.11.29 ~ 2023.06.30(1년 8개월)
IT 기술을 활용해 이동의 문제를 해결하는 모빌리티 플랫폼
AWS, Docker, Kubernetes, Helm, Datadog
Kotlin, Spring Boot, Gradle, MySQL, JPA, Apache Kafka
NextJS, Angular, TypeScript, Material UI
인터널 개발 챕터 리더 역할 수행
백/프론트/인프라 구분 없이 대고객을 대상으로 하는 제품 외 회사에 필요한 모든 제품 개발
드라이버 온보딩 DRS(Driver Relationship System) 개발
실시간 관제 시스템 개발
비즈니스 포털 온보딩 시스템 개발
비즈니스 계정 어뷰징 방지를 위한 시간 제한 시스템 개발
신규 정산 서버 구축
2019
2019.09.02 ~ 2021.11.20(2년 3개월)
자유여행 / 항공권 / 실시간예약 등 각종 여행 정보를 제공하는 OTA(Online Travel Agency) 플랫폼
Java, Spring Boot, Spring Webflux, Gradle, MyBatis, Oracle
Angular, TypeScript, Kendo UI Framework
코로나 공공데이터 API 조회 로직 개발
대한 항공 조회 서비스 API 개발
Git 배포 전략 수립
Angular 프로젝트 설계 및 Store 구축
2017
2017.02.20 ~ 2019.06.29(2년 5개월)
도면 및 기술 문서 자료를 안전하고 체계적으로 관리하는 IT 솔루션 시스템 제공
Java, Spring Framework, Maven, MyBatis, Tibero, Oracle, MSSQL
JavaScript, jQuery, Kendo UI Framework
업체별 솔루션 마이그레이션 작업 진행
주요 콘텐츠 노출을 위한 메인 레이아웃 v2.0 개발
솔루션 내 부서별 게시판 개발
KF-X TISS(KAI) 기술 자료 관리 시스템 개발
솔루션 내 시스템 위험 이슈 시각화 지표 개발
2021
2021.11.29 ~ 2023.06.30(1년 8개월)
IT 기술을 활용해 이동의 문제를 해결하는 모빌리티 플랫폼
개발 100% 기여
기술 스택 : Angular, TypeScript
회원가입 후 첫 진입 시 카드 및 임직원 등록 퍼널을 활성화시키기 위해 온보딩 템플릿 개발
빠른 퍼널 테스트를 위해 MVP로 개발하여 서버를 사용하지 않고 localStorage 활용
데이터화할 수 없는 온보딩 프로세스 구조 설계
개발 40% 기여
기술 스택 : Kotlin, Spring Boot, AWS RDS, Helm, Docker, AWS EKS, AWS MSK, Datadog
메인 서버 에러 발생 시 정산 로직이 동작하지 않는 문제 해결을 위해 별도 서버 분리 작업
AWS EKS를 이용해 신규 정산 서버 생성
정산 서버 Apache Kafka 세팅
정산 서버 AWS MSK 연동
AWS MSK와 Datadog를 연동하여 Apache Kafka 모니터링 도입
Kafka 데이터 흐름 및 토픽, 브로커 관리를 위해 Docker로 Kafka-UI 설치
개발 100% 기여
기술 스택 : Kotlin, Spring Boot, JPA, Angular, TypeScript
공급/수요 지표를 통해 적절한 배차가 실시간으로 가능하도록 관제할 수 있는 시스템 개발
Naver MAP API를 이용하여 폴리곤(Polygon) 지도 개발
드라이버 공급과 라이더 수요 데이터를 활용해 지역별 폴리곤(Polygon) 지표 개발
드라이버 밀집 지역에서 수요 밀집 지역으로 이동하는 루트의 ETA(Estimated Time of Arrival, 도착 예정 시간)를 확인하는 API 개발
개발 80% 기여
기술 스택 : Kotlin, Spring Boot, JPA, Angular, TypeScript
비즈니스 계정일 경우 사용 가능 시간에만 호출을 할 수 있도록 설정 기능 개발
탑승 목적(외근, 야근 등)에 따라 시간 제한을 달리 할 수 있는 로직 개발
탑승 목적(외근, 야근 등)을 기준으로 위치/시간 제한을 할 수 있도록 데이터 구조 설계
주X시간 단위 타임 테이블 템플릿 개발
개발 60% 기여
기술 스택 : Kotlin, Spring Boot, JPA, NextJS, TypeScript, AWS S3, AWS RDS, Terraform
엑셀로 관리되며 누락되고 활용이 어렵던 지원자 데이터를 시스템화하여 불편사항 개선
프로젝트 개발 리더 역할 수행
개인 드라이버 온보딩 파트(지원, 계약, 보험, 인가 신고 등) 개발
온라인 계약서 작성이 가능하도록 모두싸인 서명 문서 전송 API 개발
드라이버 계약, 신고 등 각종 첨부 문서를 AWS S3에 저장하는 기능 개발
드라이버 계약 일정 관리를 위한 주별 캘린더 템플릿 개발
Terraform을 활용한 AWS RDS 생성
개발 70% 기여
기술 스택 : Angular, TypeScript, Firebase, Kotlin, Spring Boot, JPA
구글폼으로 되어 있던 드라이버 모집 페이지를 데이터 활용 등을 위해 시스템화
최초 MVP는 Firebase를 통해 개발 후 Spring Boot로 전환
개인/법인/직영 드라이버 별 Sticky 탭 탬플릿 개발
카카오 API를 활용한 친구 초대 기능 개발
2019
2019.09.02 ~ 2021.11.20(2년 3개월)
자유여행 / 항공권 / 실시간예약 등 각종 여행 정보를 제공하는 OTA(Online Travel Agency) 플랫폼
기획 20% 개발 70% 기여
기술 스택 : Spring Boot, Spring Webflux, Angular, Oracle
항공사 API를 활용하여 항공 최저가 데이터 조회 API 개발
설계 10% 테스트 70% 기여
테스트 환경 : Windows, Jmeter
시스템 오픈하기 전 API 서버의 주요 기능 성능 테스트 진행
각 기능별 API의 TPS(Transaction per Second)를 확인해 시스템 성능 파악
최대로 수용할 수 있는 사용자 수 파악
트래픽 발생 시 하드웨어 부하 상태 파악
기획 20% 개발 80% 기여
기술 스택 : Java, Spring Boot, MyBatis, TypeScript, Angular, Kendo UI Framework
외부 API를 통해 영문 항공 운임 규정을 조회하고 한글 번역 데이터로 변환하는 API 개발
한글 번역 데이터에서 원하는 키워드(금액 등)를 추출하는 API 개발
추출한 데이터 활용 가능 여부 검토
기획 15% 개발 90% 기여
기술 스택 : Java, Spring Boot, MyBatis, TypeScript, Angular, Kendo UI Framework
국제선 항공사 API를 통해 항공 스케줄 조회하여 가공하는 API 개발
스케줄 데이터 사용 및 신규 API 연동 가능 여부 검토
내부에서 사용 및 검증할 수 있도록 스케줄 확인 가능한 어드민 개발
2017
2017.02.20 ~ 2019.06.29(2년 5개월)
도면 및 기술 문서 자료를 안전하고 체계적으로 관리하는 IT 솔루션 시스템 제공
기획 30% 개발 100% 기여
기술 스택 : Java, Spring Framework, MyBatis, Oracle, JavaScript, jQuery, Ajax, Kendo UI Framework
시스템에서 발생하는 에러 수집 기능 개발
최근 30일간 이슈별 가중치 조회 API 개발
가중치 데이터 가시화를 위해 Kendo UI TreeMap 화면 개발
Kendo UI ToolTip을 이용해 사용자가 데이터를 더 쉽게 확인할 수 있도록 화면 개선
기획 10% 개발 100% 기여
기술 스택 : Java, Spring Framework, MyBatis, Oracle, JavaScript, jQuery, Ajax, Kendo UI Framework
문서 등록, 수정, 삭제 시 발생하는 시스템 이슈 수집 기능 개발
일/주/월 별 발생 이슈 조회 기능 개발
기획 10% 개발 70% 기여
기술 스택 : Java, Spring Framework, MyBatis, Oracle
기존 도면 관리 시스템의 주요 기능(문서 등록, 시스템 기본값 관리 등)을 XML 통신으로 변경하여 기존 시스템을 이용하지 않고 외부에서 기능을 사용할 수 있도록 인터페이스 구현
기획 30% 개발 100% 기여
기술 스택 : Java, Spring Framework, MyBatis, Oracle, JavaScript, jQuery, Ajax, Kendo UI Framework
리뉴얼 메뉴 기획
기존 메뉴 소스 분석 및 리팩토링
좌측 숨김 메뉴 개발 및 애니메이션 구현
기획 15% 개발 80% 기여
기술 스택 : Java, Spring Framework, MyBatis, Oracle, JavaScript, jQuery, Ajax, Kendo UI Framework
게시글 생성, 조회, 수정 기능 화면 및 API 개발
드래그 앤 드롭(Drag-and-drop) 방식의 파일 업로드 기능 구현
Kendo UI의 Editor Image 업로드 템플릿 화면 커스터마이징
기획 20% 개발 80% 기여
기술 스택 : Java, Spring Framework, Tibero, MyBatis, JavaScript, jQuery, Ajax, Kendo UI Framework
도면 관리 솔루션을 KAI 인프라 환경에 배포
도면 관리 시스템 권한 KAI 환경에 맞게 커스터 마이징
문서 등록 및 검수 받는 기능 개발
2023
2023.06
일반적인 글자 수 세기 기능에 블로그 체험단을 타깃으로 공백/특수문자/이모티콘 제외 기능 등이 추가된 프로그램
[협업] 기획 50% 개발 100% 참여 / 기여도 70%
기술 스택 : NextJS, Firebase
Firebase Hosting 배포 경험
정규식을 활용하여 자/모음을 제외한 글자 수 세기 기능 구현
정규식을 활용하여 특수문자를 제외한 글자 수 세기 기능 구현
정규식을 활용하여 공백을 제외한 글자 수 세기 기능 구현
원하는 키워드 세기 기능 구현
2023.01
캐나다 현지 라멘 가게 결제 시스템
[협업] 설계 100% 개발 60% / 기여도 60%
기술 스택 : ReactJS, Express, AWS EC2, MySQL
개발 리더 역할 수행
해외 업체와 협업 경험
ReactJS / NodeJs + Express 기술 경험
프로젝트 및 인프라 설계
음식, 옵션, 주문, 결제 등 테이블 설계
구매 프로세스 설계 및 구현
장바구니 기능 구현
HTTPS 적용
2020
2020.09 ~ 2021.04
주어지는 제시어에 맞춰 N행시에 도전하고 투표를 통해 1위를 가리는 플랫폼
[개인] 기획, UI 설계, 개발 100% 참여 / 기여도 100%
기술 스택 : Java, Spring Boot, AWS EC2, Angular, TypeScript, MySQL, JPA
AWS 인프라 지식 습득
JWT, SNS 로그인, JPA 등 새로운 기술 경험
환경 구성부터 배포까지 서비스 제작에 필요한 전반적인 과정 경험
JWT(JSON Web Token)를 이용한 로그인 기능 구현
카카오 로그인 API를 이용한 로그인 기능 구현
JPA를 이용한 데이터베이스 연동과 CRUD 구현
Spring Quartz를 이용해 도전자 순위를 계산하는 배치 시스템 구현
JavaMailSender를 이용해 인증 및 뉴스레터 구독 시스템 구현
Angular 9 -> 10 버전 업그레이드로 인해 발생하는 라우터 방식 트러블 슈팅
AWS EC2를 이용한 클라우드 서버 구축
AWS Route 53을 통한 도메인 등록
API Server : github.com/NaKyouTae/mercury-server
Batch Server : github.com/NaKyouTae/mercury-batch
읽기 쉬운 코드가 좋은 코드라고 생각합니다. 읽기 쉬운 코드를 작성하기 위해서는 약속된 코드 컨벤션을 지키고, 누구나 알아보기 쉽게 함수명을 만들고, 코드를 설명하는 주석을 다는 것이 필요합니다.
1. 약속된 코드 컨벤션 지키기
읽기 쉬운 코드를 만들기 위해 가장 기본이지만 필수적인 항목입니다. 약속된 규칙을 지키면서 코드를 작성하면 동료들이 코드를 분석하는 데 필요한 시간을 최소한으로 줄일 수 있습니다. 코드 가독성 및 효율성도 높일 수 있기 때문에 좋은 코드를 만들기 위해서 꼭 필요한 요소입니다.
약속된 코드 컨벤션을 잘 지키려면 코드 컨벤션을 규격화하고 동료들과 리뷰를 통해 위배되는 코드를 수정하는 과정을 거치는 것이 중요합니다. 코드 리뷰를 통해 프로젝트와 맞지 않거나 오래된 컨벤션을 수정하면 전반적인 코드 품질도 향상시킬 수 있습니다.
2. 누구나 알아볼 수 있는 함수명 만들기
코드의 목적과 의도를 제대로 전달하기 위해서 변수명 또는 함수명을 명확하게 정의할 필요가 있습니다. 존재 이유과 역할이 잘 포함되어 있는 이름일수록 코드 관리 및 활용이 용이해집니다. 코드 가독성을 위해서는 단순 단어의 나열이 아닌 앞서 말한 코드 컨벤션 규칙에 따라 문법에 맞춰 목적과 기능을 담고 있는 이름으로 명명하는 것이 중요합니다.
프로젝트와 전혀 상관없는 단어, 일반적으로 사용하지 않는 단어, 뜻이 명확하지 않는 단어, 약어 등이 포함되지 않도록 정의하는 것이 동료들이 코드를 이해하는 데 있어 혼란을 줄일 수 있습니다.
3. 코드를 설명하는 주석 달기
개발 코드에서 주석은 안내 표지판과 같습니다. 결제, 정산 등의 경우 관련된 정책이 어렵기 때문에 제대로 이해하고 개발하지 않으면 오류가 발생할 확률이 높아집니다. 이런 경우 주석을 통해 기능과 관련된 정책 설명, 조건과 결과 등을 작성해두면 초기 개발 이후 코드를 수정하거나 분석할 때 코드 이해에 도움을 줄 수 있고, 새로운 동료가 프로젝트에 투입될 때 코드 온보딩 자료로 활용할 수도 있습니다.
이런 과정을 통해 코드를 간결하고 이해하기 쉽게 개발하면 이미 개발한 코드의 기능이 변경되거나 확장이 필요한 경우 최소한의 노력으로 기능을 수정할 수 있습니다. 읽기 쉬운 코드일수록 코드가 변경될 때 나타날 오류를 예측하기 쉽기 때문에 유지 보수 및 확장이 편리해집니다. 또한 동료들이 코드를 분석하고 리뷰하는 데 사용하는 시간을 단축시켜주기 때문에 각자의 업무 효율, 더 나아가 협업의 효율을 증대시킬 수 있습니다.
DRS(Driver Relationship System) 시스템 구축 프로젝트를 진행한 적이 있습니다. 저는 DRS Front Repository Owner 역할을 맡아 처음 접해보는 Next.js를 단기간에 습득하여 수행해야 했습니다. 언어 활용도를 높이기 위해 개인적으로 시간을 투자해 학습하고 있었음에도 예상치 못한 곳에서 에러가 발생하거나 해결하는 데 시간이 오래 걸리는 이슈들이 생겨났습니다. 더불어 초반 스프린트에서 Estimation이 제대로 되지 않아 전체적인 일정이 연기됐고 팀 내에서 오픈 일자를 미루자는 의견이 나왔습니다.
프로젝트를 진행하면서 충분히 발생할 수 있는 상황임을 이해했지만, 오픈 일자를 미루게 되면 목표를 제대로 달성하지 못했다고 느낄 것 같아 문제점을 분석하고 실행할 수 있는 최선의 방법을 찾아 팀원들을 다독여 프로젝트를 이어갔습니다.
오픈 일자를 미뤄야 한다는 의견이 제시된 시점까지 발생했던 이슈들을 분석하고 해결책을 고민하여 이후 스프린트에서 같은 문제가 반복되지 않도록 했습니다. 일정을 세부적으로 설계하여 실천 가능한 목표로 설정하고, 이슈가 생기면 계획했던 스프린트 내에서 해결할 수 있도록 팀원들과 공유했습니다. 필요에 따라 개인 시간도 투자해 프로젝트의 완성도를 높이기 위해 노력했습니다. 프로젝트 관리 방향을 좀 더 체계적으로 바꾸니 일정이 지체되는 일이 줄었고, 처음 수립했던 목표대로 프로젝트를 마무리할 수 있게 됐습니다. 이는 수립한 목표를 단순히 수행하기만 하면 되는 업무로 생각한 것이 아니라 팀의 목표, 개인의 목표로 확장시켜 오너십을 갖고 회사에 보탬이 되고자 책임감 있게 목표를 달성하려는 태도가 있었기에 가능했다고 생각합니다.
개인적으로는 Next.js를 처음 접했지만 언어 이해도가 떨어져 프로젝트를 수행하는 데 걸림돌이 되지 않게 하기 위해 계속해서 학습하고, 실시간으로 에러를 해결하며 개발을 진행했습니다. 프로젝트 목표를 달성하는 것뿐만 아니라 개인의 언어 역량 향상도 목표화시켜 개인의 성장도 이뤄냈습니다. 이는 개발자로서의 성장, 개발에 대한 열망, 목표를 달성하고자 하는 집념을 갖고 끊임없이 몰두하고 몰입하는 자세로 프로젝트를 수행했기 때문에 얻을 수 있는 결과라고 생각합니다.
처음 목표로 했던 최종 오픈 일이 거의 다가왔을 때 남아있던 개발을 마무리하는 것과 동시에 피드백 사항들을 반영해야 했습니다. 오픈 일을 앞에 두니 일정 관리를 잘 하고 있음에도 불구하고 피드백을 처리할 시간은 부족하다고 느껴졌습니다. 하지만 오히려 팀원들과 의기투합해서 요구 사항을 빠르게 적용하고 반복적으로 검토를 받아 시스템의 완성도를 높였습니다. 팀원들과 함께 짧은 시간에 몰입하여 이슈를 해결하니 프로젝트의 완성도만 높아진 것이 아니라 팀워크도 향상됐음을 느낄 수 있었고, 순차적으로 피드백을 적용하는 것보다 프로젝트의 퀄리티가 올라갔다는 것을 체감할 수 있었습니다.
자칫하면 계속해서 연기될 뻔한 프로젝트였는데 책임감을 갖고, 집요하게 몰입해서, 팀원들과 함께 포기하지 않고 최선을 다한 만큼 개인은 물론 팀원 전체가 성장했음을 느낄 수 있던 프로젝트여서 기억에 남습니다.
메인 서버에 장애가 발생하면 정산 관련 로직이 동작하지 않는 에러를 해결하기 위해 정산 서버를 새로 구축하는 프로젝트를 진행한 적이 있습니다. 프로젝트 목표는 메인 서버에 있는 정산 로직을 신규 정산 서버에 옮겨 정산 로직의 안정성을 확보하는 것이었습니다.
새로 도입하려는 Apache Kafka 적용이 순조롭게 진행되지 않자, 마감기한이 정해져 있지 않은 리팩토링 프로젝트라는 이유로 팀원들의 업무 순위에서 프로젝트가 밀려났습니다. 기술 이해 부재에 의한 동기 저하로 판단되어 대책으로 기술 스터디를 제안하였고, 기술뿐만 아니라 업무 시간 내에 미처 고민해 보지 못했던 내용, 다 함께 논의해서 결정하면 좋을 거 같은 고민들을 공유하는 시간을 가졌습니다.
업무라는 틀에서 벗어나 다 같이 공유하며 기술을 다루니 각자 학습할 때보다 효과가 좋아 다들 열의를 갖고 동기를 다질 수 있었습니다. 스터디 이후 다시 프로젝트에 박차를 가했을 때는 헤매던 Apache Kafka 적용도 막힘없이 진행했고, 좀 더 체계적으로 프로젝트를 진행할 수 있었습니다.
프로젝트가 끝난 뒤 돌이켜 보니 단순히 기술력만 뛰어난 개발자보다, 기술력도 뛰어나지만 문제를 파악하고 적절한 해결책을 제시하여 팀원들과 함께 맡은 일을 잘 마무리하도록 길잡이 역할을 수행할 줄 아는 개발자로 성장하는 것에 더 흥미가 있다는 것을 느꼈습니다. 앞으로는 개인적인 성장뿐만 아니라 팀 생산성 증대를 위한 프로세스 개선, 장애 요소 제거, 시너지 나는 협업을 위한 올바른 판단, 적절한 피드백 방법 등에 대해 고민하고 역량을 향상시켜 테크 리더로서의 커리어를 쌓아가고 싶습니다.