안녕하세요,
개발자 나규태입니다 🧑🏻‍💻

7년 차 백엔드 개발자로 최근까지 모빌리티 플랫폼 [타다]에서 인터널 챕터 리더로 근무했습니다. [타다]의 인터널 챕터는 백/프론트/인프라 구분 없이 대고객을 대상으로 하는 제품 외 회사에 필요한 모든 제품을 개발하는 챕터입니다. 주 언어는 Kotlin, Spring Boot, JPA, AWS, Kubernetes, MySQL, NextJS, Angular, TypeScript입니다.

혼자만 잘하는 개발자이기보다 프로젝트 설계, 일정 관리, 이슈 대응에 적극적으로 임해 다 같이 협력해서 시너지를 내는 'ONE TEAM'을 만들어내는 개발자이기를 지향합니다.

  • 경력사항
  • 프로젝트
  • 개발자 나규태

경력사항

  • 요약
  • 상세

2021

2021.11.29 ~ 2023.06.30(1년 8개월)

VCNC Developer_Back

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개월)

노랑풍선 Web Developer_Back/Front

자유여행 / 항공권 / 실시간예약 등 각종 여행 정보를 제공하는 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개월)

혜윰시스템 Web Developer_Back/Front

도면 및 기술 문서 자료를 안전하고 체계적으로 관리하는 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개월)

VCNC Developer_Back

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시간 단위 타임 테이블 템플릿 개발

DRS(Driver Relationship System) 개발

  • 개발 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개월)

노랑풍선 Web Developer_Back/Front

자유여행 / 항공권 / 실시간예약 등 각종 여행 정보를 제공하는 OTA(Online Travel Agency) 플랫폼

항공 스케줄 최저가 제공

  • 기획 20% 개발 70% 기여

  • 기술 스택 : Spring Boot, Spring Webflux, Angular, Oracle

  • 항공사 API를 활용하여 항공 최저가 데이터 조회 API 개발

OTA 시스템 성능 테스트

  • 설계 10% 테스트 70% 기여

  • 테스트 환경 : Windows, Jmeter

  • 시스템 오픈하기 전 API 서버의 주요 기능 성능 테스트 진행

  • 각 기능별 API의 TPS(Transaction per Second)를 확인해 시스템 성능 파악

  • 최대로 수용할 수 있는 사용자 수 파악

  • 트래픽 발생 시 하드웨어 부하 상태 파악

한글 번역 항공 운임 규정 키워드 추출

  • 기획 20% 개발 80% 기여

  • 기술 스택 : Java, Spring Boot, MyBatis, TypeScript, Angular, Kendo UI Framework

  • 외부 API를 통해 영문 항공 운임 규정을 조회하고 한글 번역 데이터로 변환하는 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개월)

혜윰시스템 Web Developer_Back/Front

도면 및 기술 문서 자료를 안전하고 체계적으로 관리하는 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 통신으로 변경하여 기존 시스템을 이용하지 않고 외부에서 기능을 사용할 수 있도록 인터페이스 구현

문서 관리 시스템 메뉴 UI 리뉴얼

  • 기획 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 업로드 템플릿 화면 커스터마이징

KF-X TISS 기술 자료 관리 시스템 도입

  • 기획 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 배포 경험

  • 정규식을 활용하여 자/모음을 제외한 글자 수 세기 기능 구현

  • 정규식을 활용하여 특수문자를 제외한 글자 수 세기 기능 구현

  • 정규식을 활용하여 공백을 제외한 글자 수 세기 기능 구현

  • 원하는 키워드 세기 기능 구현

GitHub

2023.01

Touhenboku Ramen

캐나다 현지 라멘 가게 결제 시스템

  • [협업] 설계 100% 개발 60% / 기여도 60%

  • 기술 스택 : ReactJS, Express, AWS EC2, MySQL

  • 개발 리더 역할 수행

  • 해외 업체와 협업 경험

  • ReactJS / NodeJs + Express 기술 경험

  • 프로젝트 및 인프라 설계

  • 음식, 옵션, 주문, 결제 등 테이블 설계

  • 구매 프로세스 설계 및 구현

  • 장바구니 기능 구현

  • HTTPS 적용

GitHub

2020

2020.09 ~ 2021.04

천하제일 N행시 대회

주어지는 제시어에 맞춰 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을 통한 도메인 등록

GitHub

보유 기술 스택

  • Infra
  • AWS
  • Docker
  • Kubernetes
  • Helm
  • Datadog
  • Back
  • Java
  • Kotlin
  • Spring Boot
  • Gradle
  • MySQL
  • JPA
  • MyBatis
  • Kafka
  • Front
  • NextJS
  • Angular
  • JavaScript
  • TypeScript
  • jQuery
  • Material UI
  • Kendo UI Framework

개발자 나규태

내가 생각하는 좋은 코드

읽기 쉬운 코드가 좋은 코드라고 생각합니다. 읽기 쉬운 코드를 작성하기 위해서는 약속된 코드 컨벤션을 지키고, 누구나 알아보기 쉽게 함수명을 만들고, 코드를 설명하는 주석을 다는 것이 필요합니다.

1. 약속된 코드 컨벤션 지키기
읽기 쉬운 코드를 만들기 위해 가장 기본이지만 필수적인 항목입니다. 약속된 규칙을 지키면서 코드를 작성하면 동료들이 코드를 분석하는 데 필요한 시간을 최소한으로 줄일 수 있습니다. 코드 가독성 및 효율성도 높일 수 있기 때문에 좋은 코드를 만들기 위해서 꼭 필요한 요소입니다.

약속된 코드 컨벤션을 잘 지키려면 코드 컨벤션을 규격화하고 동료들과 리뷰를 통해 위배되는 코드를 수정하는 과정을 거치는 것이 중요합니다. 코드 리뷰를 통해 프로젝트와 맞지 않거나 오래된 컨벤션을 수정하면 전반적인 코드 품질도 향상시킬 수 있습니다.

2. 누구나 알아볼 수 있는 함수명 만들기
코드의 목적과 의도를 제대로 전달하기 위해서 변수명 또는 함수명을 명확하게 정의할 필요가 있습니다. 존재 이유과 역할이 잘 포함되어 있는 이름일수록 코드 관리 및 활용이 용이해집니다. 코드 가독성을 위해서는 단순 단어의 나열이 아닌 앞서 말한 코드 컨벤션 규칙에 따라 문법에 맞춰 목적과 기능을 담고 있는 이름으로 명명하는 것이 중요합니다.

프로젝트와 전혀 상관없는 단어, 일반적으로 사용하지 않는 단어, 뜻이 명확하지 않는 단어, 약어 등이 포함되지 않도록 정의하는 것이 동료들이 코드를 이해하는 데 있어 혼란을 줄일 수 있습니다.

3. 코드를 설명하는 주석 달기
개발 코드에서 주석은 안내 표지판과 같습니다. 결제, 정산 등의 경우 관련된 정책이 어렵기 때문에 제대로 이해하고 개발하지 않으면 오류가 발생할 확률이 높아집니다. 이런 경우 주석을 통해 기능과 관련된 정책 설명, 조건과 결과 등을 작성해두면 초기 개발 이후 코드를 수정하거나 분석할 때 코드 이해에 도움을 줄 수 있고, 새로운 동료가 프로젝트에 투입될 때 코드 온보딩 자료로 활용할 수도 있습니다.

이런 과정을 통해 코드를 간결하고 이해하기 쉽게 개발하면 이미 개발한 코드의 기능이 변경되거나 확장이 필요한 경우 최소한의 노력으로 기능을 수정할 수 있습니다. 읽기 쉬운 코드일수록 코드가 변경될 때 나타날 오류를 예측하기 쉽기 때문에 유지 보수 및 확장이 편리해집니다. 또한 동료들이 코드를 분석하고 리뷰하는 데 사용하는 시간을 단축시켜주기 때문에 각자의 업무 효율, 더 나아가 협업의 효율을 증대시킬 수 있습니다.

  • 가독성
  • 확장성
  • 효율성
기억에 남는 프로젝트

DRS(Driver Relationship System) 시스템 구축 프로젝트를 진행한 적이 있습니다. 저는 DRS Front Repository Owner 역할을 맡아 처음 접해보는 Next.js를 단기간에 습득하여 수행해야 했습니다. 언어 활용도를 높이기 위해 개인적으로 시간을 투자해 학습하고 있었음에도 예상치 못한 곳에서 에러가 발생하거나 해결하는 데 시간이 오래 걸리는 이슈들이 생겨났습니다. 더불어 초반 스프린트에서 Estimation이 제대로 되지 않아 전체적인 일정이 연기됐고 팀 내에서 오픈 일자를 미루자는 의견이 나왔습니다.

프로젝트를 진행하면서 충분히 발생할 수 있는 상황임을 이해했지만, 오픈 일자를 미루게 되면 목표를 제대로 달성하지 못했다고 느낄 것 같아 문제점을 분석하고 실행할 수 있는 최선의 방법을 찾아 팀원들을 다독여 프로젝트를 이어갔습니다.

오픈 일자를 미뤄야 한다는 의견이 제시된 시점까지 발생했던 이슈들을 분석하고 해결책을 고민하여 이후 스프린트에서 같은 문제가 반복되지 않도록 했습니다. 일정을 세부적으로 설계하여 실천 가능한 목표로 설정하고, 이슈가 생기면 계획했던 스프린트 내에서 해결할 수 있도록 팀원들과 공유했습니다. 필요에 따라 개인 시간도 투자해 프로젝트의 완성도를 높이기 위해 노력했습니다. 프로젝트 관리 방향을 좀 더 체계적으로 바꾸니 일정이 지체되는 일이 줄었고, 처음 수립했던 목표대로 프로젝트를 마무리할 수 있게 됐습니다. 이는 수립한 목표를 단순히 수행하기만 하면 되는 업무로 생각한 것이 아니라 팀의 목표, 개인의 목표로 확장시켜 오너십을 갖고 회사에 보탬이 되고자 책임감 있게 목표를 달성하려는 태도가 있었기에 가능했다고 생각합니다.

개인적으로는 Next.js를 처음 접했지만 언어 이해도가 떨어져 프로젝트를 수행하는 데 걸림돌이 되지 않게 하기 위해 계속해서 학습하고, 실시간으로 에러를 해결하며 개발을 진행했습니다. 프로젝트 목표를 달성하는 것뿐만 아니라 개인의 언어 역량 향상도 목표화시켜 개인의 성장도 이뤄냈습니다. 이는 개발자로서의 성장, 개발에 대한 열망, 목표를 달성하고자 하는 집념을 갖고 끊임없이 몰두하고 몰입하는 자세로 프로젝트를 수행했기 때문에 얻을 수 있는 결과라고 생각합니다.

처음 목표로 했던 최종 오픈 일이 거의 다가왔을 때 남아있던 개발을 마무리하는 것과 동시에 피드백 사항들을 반영해야 했습니다. 오픈 일을 앞에 두니 일정 관리를 잘 하고 있음에도 불구하고 피드백을 처리할 시간은 부족하다고 느껴졌습니다. 하지만 오히려 팀원들과 의기투합해서 요구 사항을 빠르게 적용하고 반복적으로 검토를 받아 시스템의 완성도를 높였습니다. 팀원들과 함께 짧은 시간에 몰입하여 이슈를 해결하니 프로젝트의 완성도만 높아진 것이 아니라 팀워크도 향상됐음을 느낄 수 있었고, 순차적으로 피드백을 적용하는 것보다 프로젝트의 퀄리티가 올라갔다는 것을 체감할 수 있었습니다.

자칫하면 계속해서 연기될 뻔한 프로젝트였는데 책임감을 갖고, 집요하게 몰입해서, 팀원들과 함께 포기하지 않고 최선을 다한 만큼 개인은 물론 팀원 전체가 성장했음을 느낄 수 있던 프로젝트여서 기억에 남습니다.

  • 강점
  • 책임감
  • 몰입
  • 팀워크
목표하는 커리어 로드

메인 서버에 장애가 발생하면 정산 관련 로직이 동작하지 않는 에러를 해결하기 위해 정산 서버를 새로 구축하는 프로젝트를 진행한 적이 있습니다. 프로젝트 목표는 메인 서버에 있는 정산 로직을 신규 정산 서버에 옮겨 정산 로직의 안정성을 확보하는 것이었습니다.

새로 도입하려는 Apache Kafka 적용이 순조롭게 진행되지 않자, 마감기한이 정해져 있지 않은 리팩토링 프로젝트라는 이유로 팀원들의 업무 순위에서 프로젝트가 밀려났습니다. 기술 이해 부재에 의한 동기 저하로 판단되어 대책으로 기술 스터디를 제안하였고, 기술뿐만 아니라 업무 시간 내에 미처 고민해 보지 못했던 내용, 다 함께 논의해서 결정하면 좋을 거 같은 고민들을 공유하는 시간을 가졌습니다.

업무라는 틀에서 벗어나 다 같이 공유하며 기술을 다루니 각자 학습할 때보다 효과가 좋아 다들 열의를 갖고 동기를 다질 수 있었습니다. 스터디 이후 다시 프로젝트에 박차를 가했을 때는 헤매던 Apache Kafka 적용도 막힘없이 진행했고, 좀 더 체계적으로 프로젝트를 진행할 수 있었습니다.

프로젝트가 끝난 뒤 돌이켜 보니 단순히 기술력만 뛰어난 개발자보다, 기술력도 뛰어나지만 문제를 파악하고 적절한 해결책을 제시하여 팀원들과 함께 맡은 일을 잘 마무리하도록 길잡이 역할을 수행할 줄 아는 개발자로 성장하는 것에 더 흥미가 있다는 것을 느꼈습니다. 앞으로는 개인적인 성장뿐만 아니라 팀 생산성 증대를 위한 프로세스 개선, 장애 요소 제거, 시너지 나는 협업을 위한 올바른 판단, 적절한 피드백 방법 등에 대해 고민하고 역량을 향상시켜 테크 리더로서의 커리어를 쌓아가고 싶습니다.

  • 문제해결
  • 협업
  • 리더십