회사에서 프로젝트를 수행하면서 쌓아온 경력을 기록해봤습니다.
의미있었던 경력 위주로 기록하며 회사에서의 경험은 문제가 되지 않을 정도의 범위에서 기록합니다.

Skill Set

Language

  • Java, Python3
  • HTML/CSS, Javascript, JQuery
  • Android

Middleware

  • HAProxy, Keepalived
  • Nginx, Apache HTTPD
  • Apache Tomcat

Framework

  • Spring, Spring Boot
  • Netty

Database

  • Oracle, MariaDB
  • Redis

AWS

  • Cloud-Front
  • Route53
  • API Gateway
  • Lambda
  • DynamoDB
  • S3
  • VPC, EC2, ELB

Projects

통신사 네트워크관리 시스템 차세대 구축 (2018.07~현재)

  * Middleware : Oracle HTTPD Server, Oracle Weblogic
  * Framework : Spring
  * Language : Java
  * DB : Oracle
  * 그 외 : Gitlab

200명 이상의 개발자 투입 규모의 차세대 프로제트입니다. 설계 말에 투입되어 Application Architect 역할을 수행으며 주로 프레임워크를 담당했습니다.

아래와 같은 사항들을 프레임워크 레벨에서 처리해서 업무 프로그래머들은 annotation 추가 정도의 작업을 통해 공통적인 기능을 제공 받게하여 실제 업무로직에 더 집중 할 수 있도록하고 중간에 요구사항이 변경되더라도 업무 로직 소스코드는 수정이 불필요하도록 진행했습니다.

  • Authentication & Authorization
    • 일반적인 로그인, 권한 처리
    • 외부망과 내부망 접근에 따른 별도 제어
    • API Gateway를 통한 유입에 대한 별도 제어
    • SSO 접근에 대한 별도 제어
    • 화면 버튼별, 사용자별 권한처리
  • Controller
    • 성공 혹은 업무에러, 시스템 에러에 대한 메시지 처리
    • 권한별 개인정보 마스킹처리
  • DAO
    • Multi datasource
    • 개인정보 암/복호화
    • 필수 입력값 (입력/수정) : 작성자ID, 작성일시, 접근화면ID
  • Log 개인정보 암/복호화

  • Cache

  • RestTemplate
    • API Gateway와 인증 처리

그 외에도 socket, file 과 같이 OS 자원을 사용하고 반환하는 내용은 시스템 전체에 큰 영향을 미치기 때문에 업무 프로그래머가 작성하지 않도록 공통 기능을 제공해서 처리했습니다.

  • 대용량 CSV 업로드 / 다운로드
    • 대용량 자료를 한번에 메모리에 올려놓고 작업하지 않도록 공통모듈 제공
    • file과 DB 사이를 일정량 반복적으로 전송
  • File 업로드 / 다운로드
    • 업무 프로그래머는 file ID만으로 처리 가능하도록 공통모듈을 제공 (path 제공안함)
    • File path가 통일된 명명규칙으로 관리되고 불필요해진 파일에 대해서 추적 가능

통신사 PaaS PoC (2018.04~2018.05)

  * Kubernetes 기반 PaaS PoC(Proof Of Concept) 진행
  * 대상 솔루션 : Redhat OCP(Open Cloud Platform), IBM ICP(IBM Cloud Private)

PaaS 사용자 관점에서 필요한 몇가지 테스트를 준비하고 진행했습니다.

  • 샘플 소스코드, pom.xml 등 준비
  • POD 배포 속도 측정
  • 부하 테스트를 준비하여 scale in/out 기능 확인
  • blud-grean 배포, Canary 배포 기능 확인

통신사 AI 플랫폼 구축 (2017.09~2018.03)

  * MSA(Micro Service Architecture)
  * AWS(Amazon Web Service)
  * Middleware : Apache HTTPD, Apache Tomcat, HAProxy
  * Framework : Spring
  * Language : Java
  * DB : AWS RDS(AuroraDB), AWS Dynamo DB, Redis
  * 그 외 : ELB(CLB, ALB, NLB), EC2(AWS Linux), S3, SVN, Jenkins 

구축 단계에 투입되어 50명 가량의 업무개발자와 함께 Application Architect 역할을 수행했으며 주로 미들웨어를 담당했습니다.

  • 개발, 검수, 운영 환경을 합쳐서 200대에 달하는 EC2 & 미들웨어 관리
  • 성능 테스트 및 최적화 작업 : Thread 덤프 분석, GC 로그 분석 등
  • Apache HTTPD와 ELB(CLB, ALB) 사이에서 생긴 트러블 분석, 해결
  • AWS AuroraDB fail-over 테스트 : 3초 이상 걸리는 take-over에 대한 원인 분석
  • AuroraDB storage 이슈가 발생하여, key-value로만 사용되는 트래픽 로그 데이터를 DynamoDB로 전환토록 가이드
  • 디바이스 펌웨어 배포방안에 대해서 S3의 presigned-URL 방식으로 진행하도록 가이드
  • Redis를 이용해서 세션 서버 구축

EDI(전자문서교환) Vendor 서비스 (2015.01~2017.08)

  * Middleware : N/A
  * Framework : 자체 프레임워크
  * Language : Java
  * DB : Oracle
  * 그 외 : HAProxy, Keepalived, Netty, SVN, ANT

미들웨어와 프레임워크 없이 순수 Java로 진행한 프로젝트 입니다. 유지보수를 하며 안정성 확보, 기능 추가 작업들을 진행했습니다. Client, CS(Communication Server), AP(Application Server)로 구성됐습니다. 각 서버는 queue와 worker thread pool을 이용해서 부하를 견딜 수 있도록 구성되었고 시스템간은 TCP/IP Socket 통신으로 정보를 주고 받았습니다.

저는 이 프로젝트에서 AP서버의 안정성 및 HA확보, CS서버의 안정성 확보를 위한 아키텍처 재구성, 비동기 대용량파일 송수신 통신 모듈 개발 등을 진행했습니다.

AP서버 안정성 확보

  • Server Migration (Solaris 10 -> RHEL5.5)
  • 소프트웨어L4(HAProxy, Keepalived)를 구성하여 AP서버의 HA확보

CS서버 안정성 확보

  • Process 단위로 관리되던 시스템을 thread별로 관리 가능하도록 재설계 & 개발
  • 리스크 적은 고객사들을 분류 후 해당 프로세스들을 통합하여 서버 자원을 확보

비동기 대용량파일 송수신 통신모듈 개발 & 신규기능 추가

  • 금결원의 계좌이동서비스, 출금이체 동의자료 조회 서비스 사업에 대응을 위한 시스템 변경
  • 실시간 전송 시스템과, 배치 전송 시스템을 엮어내는 변화가 필요했지만 legacy 시스템에 영향 없도록 진행
  • Netty 프레임워크를 이용하여 대용량 파일 송수신 모듈 개발

글로벌 결제환경 기능개선 (2014.01~06 , 2013.05~09)

  * Framework : 결제시스템(Java Servlet), 빌링시스템(Spring)
  * Language : Java, JavaScript
  * DB : Oracle
  * 그 외 : SVN, ANT

로컬 사용자에게 편의를 제공하기 위해 기존 Paypal, Golobal Collector 를 통해서만 이뤄지던 결제환경을 개선했습니다. 각 지역에서 유명한 결제방법을 추가했습니다.
각 지역에서 유명한 로컬 결제업체API 연동을 통해 로컬결제가 되도록 처리했고 빌링 시스템을 구축했습니다.

  • 중국향 : Ali-Pay, Ten-Pay, Union-Pay
  • 러시아향 : Yandex, Qiwi
  • 유럽향 : Europe Danal

세종시 교육청 업무관리시스템 (2012.05~12)

  * DB : Oracle

세종시 교육청이 생기면서 세종시 업무관리 시스템을 구축하고 충북, 충남 교육청의 자료를 마이그레이션 했습니다.
제가 주로 진행한 작업은 DB 마이그레이션 작업으로 추출된 충북, 충남의 데이터를 가공, 적재 하는 프로시저를 개발했습니다.

에듀파인 학교회계시스템 고도화 (2011.05~2012.04)

  * Framework : Pro-Framework
  * Language : Java, JavaScript
  * DB : Oracle

재무결산 업무를 전산화 하기 위해 개발을 진행했습니다. 재무결산 용 통계성 쿼리를 다수 작성하고 튜닝했습니다.

Career

회사에서의 현재 역할

SWA(SoftWare-Architect) 로 불리는 역할을 수행 중입니다.
외부에서 AA(Application Architect)로 불리는 역할과 비슷하다고 볼 수 있습니다.

OS 위에 올라가는 middleware를 설계, 구성하고
application의 구조를 설계, 구성하며 그 과정에서 framework 설정하고 AOP, 공통모듈, 연계모듈 등을 프로그래밍 합니다.
CI/CD 구성, 성능테스트, 트러블슈팅 등도 수행합니다.
그리고 프로젝트 상황에 인프라 관련 작업도 어느정도 참여합니다.
업무에 맞춰서 서버 생성요청, 라우팅 설정요청, 방화벽 오픈요청 등을 하고 정상적으로 작업이 이뤄졌는지 테스트를 합니다.

Toy-Project에서의 역할

개인 프로젝트로 진행해왔기 때문에 A-Z까지 모든 역할을 다 수행해볼 수 있었습니다.
최근에는 AWS Lambda를 주로 사용하기 때문에 설계와 프로그래밍에만 전념하고 있습니다.

Toy-Project는 많은 개인시간의 투자가 필요하지만
개념적으로만 알고 있던 새로운 기술을 사용해볼 수 있고
프로젝트의 시작부터 끝까지 모두 경험하면서 많은 성장을 이룰 수 있습니다.

저의 Toy-Project가 궁금하시면 아래의 링크를 따라가시면 됩니다.

추구하는 방향

프로그래머 기반의 Back-End 개발자로 나아가려합니다.

주된 역할은 프로그래머이지만
시스템의 Back-End를 구축하고 성장 시켜나가기 위한
다양한 고민과 작업들을 하고 있고 앞으로도 해나갈 생각입니다.