남경호
저는 유연함을 좋아합니다. 여기서 제가 말하는 유연함이란 코드의 유연함과 사고의 유연함을 말합니다.
코드의 유연함이란 코드가 굳어지지 않도록 하는 것입니다. 지속적인 리펙터링, 테스트 코드 작성, 새로운 기술에 대한 도전 등은 제가 관습 등에 얽메여 코드가 굳어지지 않고 유연한 코드로 제품을 만들어갈 수 있는 원동력이 된다고 생각합니다.
사고의 유연함이란 하나의 관점이나 태도에 빠져있지 않고 균형을 가진 생각을 하는 것입니다. 지속적인 학습과 좀 더 나은 협업을 위한 노력들로 인해 개발자 외 직군들의 사고방식과 행동들들 이해하기 위해 노력하고 있습니다.
요가, 스트레칭과 같이 유연함을 요하는 자세는 평소에는 하지 않던 자세를 오랜시간 연습한 끝에 취할 수 있게 됩니다. 저는 이 유연함을 가지기 위해 지금도 노력하고 있습니다.
Back-End Developer
Seoul, Korea
veluxer62@gmail.com
https://github.com/veluxer62
https://veluxer62.github.io
linkedin.com/in/경호-남-5947871b8
Work Experience
(주)스포카
Back-End Team Lead
백엔드 개발팀 관리 및 키친보드 서버 개발
주요 업무
- 키친보드 서비스를 위한 서버 개발
- 백엔드 챕터 개발 총괄
- 제품 조직의 업무 프로세스 관리
참여 프로젝트
- 카드 결제 수단 추가 2022.04 ~ 현재
- 청구/수납 서비스 개발 2022.01 ~ 2023.03
- 묶음 품목 관리 기능 개발 2022.12 ~ 2023.01
- 유통사 ECOUNT ERP 연동 2022.11 ~ 2022.12
- 주문/채팅 서비스 기능 개선 2022.06 ~ 2022.11
- 품목 정리 2022.07 ~ 2022.10
- 관리자 이관 2022.05 ~ 2022.06
- 주문/채팅 서비스 개발 2022.04 ~ 2022.06
- 서버 언어 전환 2021.11 ~ 2022.04
- 제휴 거래처 리스트 2021.09 ~ 2021.11
- 도메인 명세화 2021.03 ~ 2021.08
- 명세표 정리 기능 개선 2021.03 ~ 2021.11
- 백엔드 챕터 내 개발 프로세스 수립 및 개선 2021.03 ~ 현재
성취
백엔드 개발자로써 키친보드 서비스의 전반적인 API 설계 및 개발에 참여하고 있습니다. 대부분의 개발은 TDD로 진행합니다. TDD의 장점을 잘 알고 있기에 동료들에게 TDD로 개발하도록 가이드하고 장려합니다. 다만, 모든 개발에 TDD로 개발하는 것이 좋다고 생각하진 않습니다. 상황에 따라서는 테스트 코드가 없이도 개발하며 이는 프로젝트 혹은 환경에 맞게 선택합니다. 테스트에 대한 저에 생각을 엿보고 싶으시다면 블로그(https://veluxer62.github.io/discussions/for-better-test-culture/)를 참고해주세요.
백엔드 챕터 리드로써 백엔드의 프로젝트 관리 및 전반적인 개발 프로세스와 코드 품질 유지를 위해서 노력합니다. 스포카의 제품팀은 하나의 프로젝트가 아닌 여러 프로젝트를 병렬적으로 수행하며 제품을 발전시켜나가고 있습니다. 이에 맞춰 백엔드 개발자들이 원활하게 프로젝트를 수행할 수 있도록 여러 부서와 의사소통을 진행하며 작업의 우선 순위를 조율하여 프로젝트가 원활하게 수행될 수 있도록 노력합니다. 또한 적극적인 설계 논의 및 코드리뷰를 통해서 모든 개발자가 개발에 참여하진 않더라도 도메인에 대한 지식을 공유하고 코드 품질에 참여할 수 있도록하여 백엔드 개발자들이 좀더 나은 개발환경에서 제품을 개발하기 위한 노력을 이어가고 있습니다.
Python으로 개발된 기존 서버를 Kotlin서버로 성공적으로 전환하였습니다. 해당 프로젝트의 발의 및 전체 프로젝트 관리 및 개발을 주도하여 진행하였습니다. 자세한 서버 언어 전환 이야기는 블로그(https://veluxer62.github.io/reference/all-new-server/)를 참고해주세요.
서버 언어 전환 프로젝트 이후 제품의 큰 방향성을 바꾸는 주문/채팅 프로젝트를 진행하였습니다. 해당 기능의 설계부터 개발자들의 업무 분배 및 관리를 총괄하였고 전반적인 개발 및 코드리뷰를 수행하였습니다. 주문/채팅 프로젝트를 진행하면서 고민했던 좀더 자세한 설계나 이슈들은 블로그(https://veluxer62.github.io/reference/order-sheet-development-story/)를 통해 확인해보실 수 있습니다.
주문/채팅 프로젝트 이후 제품에 큰 영향을 미치는 프로젝트로 청구/수납 프로젝트를 진행하였습니다. 해당 프로젝트에서는 전반적인 기능 설계 및 관리를 총괄하였고 대사와 정산기능을 주로 개발하였습니다. 청구/수납 프로젝트를 진행하면서 고민했던 좀 더 자세한 설계나 이슈들은 블로그(https://veluxer62.github.io/reference/bill-payment-development-story/)를 통해 확인해보실 수 있습니다.
사용 기술
- Kotlin
- Spring Boot
- JPA
- JMS
- GraphQL
- PostgreSQL
- AWS
(주)클래스101
Back-End Developer
클래스101 플랫폼 백엔드 서버 개발
주요 업무
- Commerce API 서버 개발
참여 프로젝트
- 주문/결재 대사 서비스 개발 2020.06 ~ 2021.02
- Inventory 서비스 개발 2020.08 ~ 2021.02
- CI/CD 자동화 파이프라인 구축 2020.11 ~ 2020.12
성취
동료 개발자들에게 TDD에 대한 필요성과 중요성을 전파하고 모두가 테스트 코드 작성에 한걸을 다가갈 수 있도록 노력하고 있습니다. 최근 가독성 높은 테스트 코드 작성 방법중 하나인 BDD방식을 도입해서 테스트 코드를 작성해보고 있습니다.
나이스페이 대사 기능 개발시 확장성을 고려한 서비스 구조를 가지기 위해 고민을 많이 하였습니다. 협력다이어그램과 클래스다이어그램을 먼저 그려보고 추후 다른 매체의 대사 기능 개발시에도 동일한 인터페이스를 이용하여 기능을 구현할 수 있는 구조를 가지도록 고민하였습니다.
운영중인 서비스를 개선하기 위해 SKU와 관련한 기능을 MSA로 전환하였습니다. 개발 시 모두 TDD로 개발하였으며 DDD 방식을 도입하여 개발하려고 노력하였습니다. 일관된 코드와 유지보수성을 유지하기 위해 테스트 커버리지 도구와 코드 컨벤션 도구등을 활용하며 누가 작성하더라도 테스트 코드를 작성하고 컨벤션을 지키도록 프로젝트 설정을 도입하였고 풍부한 문서작성을 통해 누구라도 해당 프로젝트에 손쉽게 참여할 수 있도록 노력하였습니다. 재고관리의 일관성을 보장하기 위해 ActiveMQ를 사용하였습니다.
Azure Devops와 Github을 이용하여 Pull Request시 자동화된 빌드 및 테스트 검증과 코드 병합 시 자동으로 CI와 CD가 실행되어 담당자의 승인절차를 거쳐 EKS에 변경사항이 적용되도록 파이프라인을 구성하였습니다.
사용 기술
- Java
- Kotlin
- Spring Boot
- JPA
- MongoDB
- MariaDB
- AWS
(주)엑스트라이버
Back-End Developer
트립스토어 서비스 API 서비스 및 Back-Office 서비스 개발.
주요 업무
- 트립스토어 주요 API 서비스 개발
- Back-Office 서비스 개발
- AWS 운영 관리
참여 프로젝트
- B2B 사이트 기능 개발 2020.02 ~ 2020.06
- 회원 기능 강화 (기기정보 동기화 / 예약목록 동기화) 2020.01 ~ 2020.02
- 예약고객의 관리 시스템화 및 고객(이용자/여행사)컨택채널 통합관리 시스템 연동 2019.11 ~ 2019.12
- 회원 쿠폰 기능 개발 2019.10 ~ 2019.12
- 특가 개편 2019.05 ~ 2019.11
- 광고상품 상위노출 2019.04 ~ 2019.05
- 타임세일 개편 2019.03 ~ 2019.04
- 여행준비 알림톡 2019.03 ~ 2019.04
- 상품정보 고도화 2019.02 ~ 2019.03
- 도시정보 고도화 2019.01 ~ 2019.01
- 타임세일 기능 개발 2018.11 ~ 2018.12
- 상품 특가 기능 개발 2018.10 ~ 2018.12
성취
처음 입사 후 서비스의 빠른 발전을 위한 개발과 기술 습득에 초점을 가지고 개발을 하였지만 최근 유지보수 및 견고한 서비스를 위해 테스트에 많은 관심을 가지고 개발하고 있습니다. 새로운 프로젝트에서 새롭게 개발하는 항목들은 TDD 개발방법으로 개발을 진행하고 있으며, 기존 기능의 변경시에도 테스트 코드가 없는 경우 새롭게 추가하여 좀더 안전하고 견고한 코드를 위한 노력을 하고 있습니다.
당시 제가 속했던 개발실은 애자일 방법론을 도입하여 처음엔 JIRA를 이용한 칸반방식으로 프로젝트 및 이슈를 관리하였고, 현재는 Azure DevOps를 이용하여 스크럼 방식과 칸반 방식을 함께 병행하여 프로젝트 및 이슈를 관리하고 있습니다.
개발 시 새로운 언어 및 개발 방법의 도입을 주저하지 않고 있습니다. 최근에는 SpringMVC로 개발되어 있는 Back-Office 서비스를 새로운 기능에 한해서 React.js로 변경하고 있으며 이러한 결정으로 UI 테스팅 및 유지보수 용이성, 그리고 Live Reload의 큰 장점을 누리고 있습니다. 또한 Pair Programing을 생활화 하여 팀원들간의 지식의 불균형을 줄이고 코드의 질을 높이기 위한 활동을 이어가고 있습니다.
처음 상품 특가 프로젝트를 진행할 때에는 대용량 데이터를 얼마나 빨리 적용하는 지에 대한 고민을 주로 하였고, 상품 특가 개선 프로젝트를 진행하면서 대용량 데이터를 다룰때 동시성 문제를 어떻게 해결하고 적용 속도를 함께 개선하는 방법에 대한 고민을 많이 하였습니다. 시스템이 점점 더 복잡해짐에 따라 코딩하는 시간보다 설계 및 영향성을 고민하는 시간에 좀 더 투자하여야 한다는 것을 느끼고 실천하고 있으며 속력보다는 속도를 빠르게 하기 위한 개발에 집중하고 있습니다.
사용 기술
- Kotlin
- Spring Boot
- JPA
- MariaDB
- AWS
(주)바이오닉스진
Back-End Developer
SOC 플러스(통합 보안관제 시스템) 개발, ADS 플러스(이상징후
탐지 시스템) 개발
주요 업무
- 대시보드, 보고서 등 제품의 사이트별 개인화 개발
- Arcsight, Splunk, Qradar 등 SIEM 장비의 대용량 로그 연동
- 동적 대시보드, UI 개편, 통합 자산관리 기능 등 제품의 주요 기능 개발
- 제품 구축 및 유지보수
참여 프로젝트
- 삼성카드 통합보안로그 수집/분석 시스템 고도화 2018.01 ~ 2018.03
- 대구은행 통합보안 관제 시스템 고도화 2017.11 ~ 2018.05
- LG UPLUS 통합보안관제 시스템 구축 2017.11 ~ 2018.05
- 통합 보안 관제 솔루션 제품 고도화 2017.04 ~ 2017.11
- 경찰청 통합 사이버수사포털 시스템 고도화 2016.11 ~ 2017.01
- SK Broadband 보안과제고도화 통합관제솔루션 구축 2016.08 ~ 2018.01
- NEXON 통합 보안관제 이력시스템 고도화 2016.06 ~ 2016.11
- 하나 금융그룹 통합관제 시스템 고도화 2016.07 ~ 2017.04
- IOT 고객 과금 관리 솔루션 연동 2016.06 ~ 2016.06
- SK Planet 관제 이력 시스템 구축 2016.02 ~ 2016.06
- 한솔넥스지 차세대 관제 시스템 구축 2015.12 ~ 2016.02
- 새마을 금고 통합반출 승인시스템 구축 2015.11 ~ 2015.11
- NEXON 통합 보안관제 이력시스템 구축 2015.07 ~ 2015.10
성취
많은 프로젝트 참가는 개발 신입으로써 현업의 개발 프로세스와 개발 방법, 그리고 동료 및 협력업체 담당자와의 커뮤니케이션 방법에 대해 많은 것을 배울 수 있었습니다.
비록 트래픽이 많지 않은 Back-Office 용 제품이었지만 빅데이터 제품들과의 데이터 연동 경험을 통해 서비스간의 데이터 연동과 다량의 데이터를 시각화하는 등의 기술 경험을 가질 수 있었습니다.
제품의 특성 상 사설 네트워크 구간에 제품을 구축하고 관리하는 등의 작업을 함께 하였습니다. 해당 작업을 하면서 Linux 서버에 대한 이해와 사용 경험을 가지게 되었습니다.
프로젝트 참여 외에도 제품을 개선하기 위한 노력을 멈추지 않았습니다. 테스트 코드가 없어 리펙토링이라고 하긴 어렵지만 가독성과 성능이 떨어지는 코드는 항상 개선하였습니다. 제품의 디자인을 단순 CSS에서 Bootstrap을 이용한 디자인 템플릿으로 모두 변경하고, 동적 대시보드 개발과 연동 시스템의 성능 개선 활동은 이후 제품을 홍보하는데 큰 부분을 차지하였고, 제가 이 곳에 근무하면서 가장 보람있고 의미 있었던 성과였습니다.
사용 기술
- Java
- Spring Framework
- Mybatis
- Freemarker
- PostgreSQL
Skills
Overall
- 개발 경력 중 Kotlin 언어를 가장 많이 사용하였고 익숙하며 잘 다룰 수 있습니다.
- Java는 8과 11을 주로 사용하였고 객체지향과 함수형 프로그래밍 모두 좋아합니다.
- Spring Boot로 API 서버 및 React를 이용한 백오피스를 구축하고 서비스할 수 있습니다.
- TDD를 통한 개발 방법을 주로 사용하고 있으며 자신에게 부끄럽지 않은 코드를 작성하기 위해 노력합니다.
- 아키텍쳐 디자인에 관심이 많으며 더 좋은 설계를 하기 위한 공부를 게을리 하지 않습니다.
- 효율적인 업무 프로세스에 관심이 많으며 이를 구축하고 활용하기 위해 노력합니다.
- 소규모 팀관리를 수년간 수행하고 있으며 좀 더 나은 조직관리를 위해 노력합니다.
Co-Work
- GIT을 이용하여 항상 코드리뷰를 통한 코드 병합을 실천합니다.
- 제가 가진 생각을 숨기지 않으면서 동료들의 감정이 상하지 않도록 단어 또는 말투에 주의를 기울입니다.
- 제가 가진 지식을 적극적으로 공유하기 위해 노력하며 문서화를 항상 실천합니다.
- Jira, Azure DevOps, Confluence, Notion, ClickUp 등을 이용하여 Task관리 및 문서공유를 통해 프로젝트를 수행하고 있습니다.
- 칸반, 스프린트 두 방식 모두 도입하여 프로젝트를 수행하고 있습니다.
- 페어프로그래밍을 적극 권장하며 동료들과 합리적으로 페어프로그래밍을 하기 위해 노력합니다.
Database
- 주로 관계형 데이터베이스를 사용하였고 그외 No-SQL 데이터베이스도 사용해본 경험이 있습니다.
- 관계형 데이터베이스의 더 나은 조회 성능을 위해 쿼리를 개선할 수 있습니다.
- 관계형 데이터베이스의 동시성에 대해서 이해하고 있으며 상황에 맞는 격리수준 선택과 잠금을 사용합니다.
- MongoDB와 Redis, ElasticSearch를 사용해 보았으며 비지니스 요구사항에 맞게 해당 데이터베이스를 선택하여 사용할 수 있습니다.
Front-End
- Javascript, Typescript를 다룰 수 있습니다.
- 관리자 페이지 개발 시 Bootstrap과 Ant-Design라이브러리를 이용하여 페이지를 구성할 수 있습니다.
- React를 사용하여 관리자 페이지를 구성할 수 있습니다.
DevOps
- AWS를 이용하여 복잡하지 않은 서비스를 구축하고 운영할 수 있습니다.
- Git Action, Circle CI, Azure Devops등을 이용하여 간단한 CI/CD를 구축할 수 있습니다.
- Terraform을 다룰 수 있으며 구축된 Terraform 코드를 유지관리 할 수 있습니다.
Others
-
평소 배웠던 내용이나 저의 생활에 대한 내용을 블로그에
작성하며 정리하고 있습니다. 아래 링크를 통해 확인해 보실
수 있습니다.
https://veluxer62.github.io/ -
"사례로 배우는 언어 전환 프로젝트 관리" 책을 집필하였습니다.
http://www.yes24.com/Product/Goods/118474432