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

보유기술역량

Language

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

Middleware

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

Framework

  • Spring, Spring Boot
  • Spring Cloud : Gateway, Resilience4j, Feign
  • Spring Batch & Quartz
  • Netty

Repository

  • Oracle, MariaDB, MySQL
  • Redis

CI/CD

  • Git, SVN
  • Jenkins, GitLab, Gitlab Runner
  • Maven, Ant

AWS

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

GCP

  • GKE (Google Kubernetes Engine)
  • Google Cloud Storage
  • GCP Firestore
  • GCP Memorystore
  • GCP Pub/Sub

자격증

  • Google Cloud Certified - Professional Cloud Architect (2020.06.18~2022.06.18)
  • AWS Soulution Architect - Professional Certification (2019.04.02~2022.04.01)

경력

그룹사 홈 상품 E-Commerce 구축 프로젝트 (2020.08~2021.10)

  * MSA(Micro Service Architecture)
  * Framework : Spring Boot, Spring Cloud (Gateway, Feign, Ressiience4j), Spring Batch & Quartz
  * Language : Java
  * Cache : Redis
  * GCP
    - GKE (Google Kubernetes Engine)
    - Google Cloud Storage
    - GCP Firestorage
    - GCP Memorystore
    - GCP Pub/Sub
    - GCP KMS
  * Repository : MySQL
  * CI/CD : GitLab, GitLab Runner, Nexus

홈 관련 제품, 서비스 상품들을 판매하는 e-commerce 시스템 신규 구축 프로젝트였습니다.
Front-office, back-office, partner-office로 총 3종류의 시스템을 각각 MSA(Micro Service Architecture)로 구성했습니다.

Application Architect 역할을 수행으며 MSA, Cloud, Kubernetes 등이 익숙하지 않은 업무 전문 개발자분들도 개발할 수 있도록 구성하는데 많은 노력을 기울였습니다. 특히, 고객사의 클라우드 선정이 AWS->GCP 로 변경되는 큰 사건이 있었지만 이를 예상하여 Kubernetes를 이용했고 CSP(Cloud Service Provider)에 종속되는 SDK, API 호출은 모두 래핑하여 제공하여 개발자들은 CSP 변경에도 영향을 받지 않도록 진행했습니다.

  • CI/CD 설계&구축
  • Back-end framework 설계&가이드
  • Service mesh 설계&구축
  • 인증, 인가 설계
  • Inbound Gateway 설계&구축
    • JWT 인증 체크, API 권한 관리
    • API 라우팅
    • Circuit breaker
  • Outbound Gateway 설계
    • 외부연계 라우팅, 인증 처리
    • Circuit breaker
  • 파일 메타정보 관리 서비스 설계&구축
    • 공개, 비공개, 임시 파일 스토리지 관리 : GCS(Google Cloud Storage) 활용
    • 파일 메타 정보 API 제공
    • 파일 후속 작업 처리 : 이미지 파일 썸네일 처리, HTML 파일 XSS 제거
  • 보안 : SQL Injectin, XSS, CSRF 등 웹취약성 점검 대응
  • HA & 성능 테스트 및 대응
    • Pod 리소스(cpu/memory) request, limit 설정
    • HPA(Horizontal Pod Autoscaler) 설정
    • JVM 옵션 설정

통신사 BSS(비지니스지원시스템) 차세대 구축 (2020.04~2020.07)

  * MSA(Micro Service Architecture)
  * Framework : Spring Boot
  * Language : Java
  * Cache : Redis
  * 그 외 : Gitlab, Jenkins, JWT

Strangler 패턴으로 진행되는 프로젝트로 그에 필요한 proxy 개발을 진행했습니다.

  • URL context path 기준으로 여러 Kubernetes cluster, Legacy 시스템에 대한 라우팅 처리
  • Legacy시스템(JSession)과 신규 MSA 시스템(JWT)의 동시 로그인 유지 관리 처리
  • JWT 존재여부, 변조여부, 유효기간 체크
  • URI 기준 권한 체크
  • 서비스 합성(Composition)에 대한 개발표준 수립

통신사 온라인가입 시스템 차세대 구축 (2019.09~2020.04)

  * Agile, TDD(Test Driven Development)
  * MSA(Micro Service Architecture)
  * GCP(Google Cloud Platform)
  * GKE(Google Kubernetes Engine)
  * Framework : Spring Boot, Spring Cloud (Gateway, Feign, Hystrix)
  * Language : Java
  * Repository : MySQL
  * 그 외 : Gitlab, Jenkins, JWT

Pivotal 인원들과 함께 애자일(Agile) 개발방식으로 차세대 구축을 진행했습니다.
제가 맡았던 영역은 주로 Gateway, 인증 서비스와 사용자&조직 관리 서비스를 맡아서 개발했습니다.

통신사 OSS(운영지원시스템) 차세대 구축 (2018.07~2019.08)

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

설계 말에 투입되어 Application Architect 역할을 수행하며 주로 프레임워크 레벨의 개발을 담당했습니다.

200명 이상의 개발자 투입 규모의 차세대 프로제트입니다. 작은 요구사항 변경이 많은 프로그래머들에게 영향이 가지 않도록 아래 같은 사항들을 프레임워크 레벨에서 처리하도록 노력했습니다. 요구사항이 변경되더라도 프로그래머들은 업무 로직 변경 없이 annotation 변경/추가 정도의 작은 작업을 통해 아래와 같은 기능들을 제공받도록 진행했습니다. 그로 인해 프로그래머들은 실제 업무로직에 더 집중해서 시간을 사용할 수 있었습니다.

  • 인증 & 인가
    • 일반적인 로그인, 권한 그룹별 인가 처리
    • 외부망과 내부망 접근에 따른 별도 제어
    • 접근 수단(SSO, API Gateway, 파일뷰어)에 대한 별도 제어
    • 화면 버튼별 인가 처리
  • 개인정보 마스킹 처리
    • 권한그룹별, 화면별로 개인정보 조회 권한을 제공하고 마스킹 처리
    • 로그에는 개인정보 데이터는 권한과 무관하게 모두 마스킹 처리
    • 엑셀 다운로드시에는 권한과 무관하게 모두 마스킹 처리
  • 데이터 암호화 보관
    • Persistence layer에서 암/복호화 처리
  • 타 시스템과의 연동시 인증 처리
    • 인증처리, 인증토큰 관리기능을 가진 연동모듈 제공
  • DB 입력시 필수 입력값 제어
    • 작성자ID, 작성일시, 접근경로(화면ID) 등에 대해 입력 처리
  • 첨부파일 보호
    • 외부망에서는 첨부파일 다운로드와 엑셀 다운로드 불가 처리
    • 모바일의 경우 다운로드 요청시 파일뷰어를 조회 되도록 처리
  • 보안
    • XSS(Cross-Site Scripting) 방어
    • CSRF(Cross-Site Requset Forgery) 방어
  • Cache
    • Annotation 추가만으로도 캐싱 기능을 추가할 수 있도록 처리

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

  • 대용량 CSV 업로드 / 다운로드
    • 대용량을 처리할 수 있도록 stream/paging 방식으로 처리
  • 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
  * Cache : Redis
  * Repository : AWS RDS(AuroraDB), AWS Dynamo DB
  * 그 외 : ELB(CLB, ALB, NLB), EC2(AWS Linux), S3, SVN, Jenkins 

구축 단계에 투입되어 50명 가량의 업무개발자와 함께 Application Architect 역할과 미들웨어 관리를 담당했습니다.

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

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

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

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

  • AP서버 안정성 확보
  • CS서버 안정성 확보
    • Process 단위로 관리되던 시스템을 thread별로 관리 가능하도록 재설계 & 개발
    • 리스크 적은 고객사들을 분류 후 해당 프로세스들을 통합하여 서버 자원을 확보
  • 비동기 대용량파일 송수신 통신모듈 개발 & 신규기능 추가
    • 금결원의 계좌이동서비스, 출금이체 동의자료 조회 서비스라는 신규 사업에 대응을 위한 시스템 변경
    • 실시간 전송 시스템과, 배치 전송 시스템을 엮어내는 변화가 필요했지만 legacy 시스템에 영향 없도록 진행
    • Netty 프레임워크를 이용하여 대용량 파일 송수신 모듈 개발

성장곡선을 그리고 있는 사업이 아니고 이미 굉장히 성숙된 사업 영역이었기 때문에 비용 최소화라는 목표도 함께 갖고 있었습니다. EoS(End of Support)상황이고 유지보수 비용이 많이 드는 Solaris에서 REHL로 다운그레이드했고 물리 L4가 아닌 소프트웨어 L4를 제안했습니다.

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

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

글로벌 결제업체와 상품 판매업체간의 결제업무에 대한 중계시스템을 개선하는 작업을 했습니다.

글로벌 사용자에게 보다 나은 경험을 제공하기 위해 각 지역의 유명한 결제방법을 추가했습니다.
로컬 결제업체 API 연동을 통해 로컬결제가 되도록 처리하고 빌링 시스템을 구축했습니다.

중계해야할 로컬 결제업체, 판매 업체가 계속 늘어날 것을 염두하고 결제 업체의 추가시에도 기존 업체들에 대한 소스는 수정 없이 진행가능하도록 확장가능하고 유연한 시스템을 설계, 구축 했습니다.

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

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

  * Repository : Oracle DB

세종시 교육청이 생기면서 세종시 업무관리 시스템을 구축하고 충북, 충남 교육청의 자료를 마이그레이션하는 프로젝트였습니다.
그 중 제가 진행한 작업은 DB 마이그레이션 작업입니다.
마이그레이션 작업을 추출, 변환, 적재의 세과정으로 분류하면 충북, 충남의 데이터를 변환하고 세종시 시스템으로 적재하는 프로시저를 개발했습니다.
변환 룰과 적재 룰만 최신화 시키고 프로시저를 실행시키면 되도록 수작업을 최소화했습니다. 심지어 실제 마이그레이션 작업은 제가 부재한 상태로 진행되었습니다. 추출된 데이터의 온라인 전송이 생각보다 많은 시간이 소요되어 하드디스크를 물리적으로 이동시키는 작업을 맡게되어 신입사원에게 프로시저 실행법을 인계했습니다.
1회 사용될 프로그램이었지만 자동화해뒀고 수많은 테스트도 해봤기 때문에 가능했습니다.

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

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

재무결산 업무를 전산화 하기 위해 프로그래밍을 했습니다. 재무결산용 통계성 쿼리를 다수 작성하고 튜닝했습니다.

Career Path

회사에서의 역할

AA(Application Architect) 혹은 SWA(SoftWare-Architect) 로 불리는 역할을 수행 중입니다.

MSA 구축을 위해서 이벤트 스토밍을 통해 마이크로 서비스를 도출하고 서비스 간의 동기/비동기 호출 관계를 파악합니다.
이를 기반으로 서비스 간의 동기/비동기 호출을 위한 service mesh를 설계하고 구축합니다.
이때 특정 CSP(Cloud Service Provider)에 종속되지 않기 위해 그리고 쉬운 container ochestration을 위해 Kuberentes를 사용을 선호 합니다.
Cloud, container 환경을 고려한 CI/CD와 on-premise 환경을 위한 CI/CD 설계, 구축을 진행합니다.
Container가 아닌 VM이나 Host OS 위에 바로 올라가는 웹서비스를 위한 미들웨어 구성도 진행합니다.
Application 구조를 설계하고 그 과정에서 framework 설정하고 AOP, 인증인가, 공통모듈, 연계모듈 등을 프로그래밍 합니다.
웹취약점점검 대응, HA 테스트, 성능 테스트 등과 같은 오픈 전 작업들도 주도해서 진행하고 운영하면서 발생하는 이슈사항에 대해서 트러블슈팅도 주도해서 진행합니다.
또한 프로젝트 상황에 따라 인프라 관련 작업도 어느정도 참여하며 서버 생성, 라우팅 설정, 방화벽 오픈 등의 작업요청과 작업 테스트를 진행하기도 합니다.

Toy-Project에서의 역할

개인 프로젝트로 진행해왔기 때문에 A-Z까지 모든 역할을 다 수행해볼 수 있었습니다.
최근에는 S3, DynamoDB, AWS Lambda를 주로 사용하는 serverless 설계와 프로그래밍을 주로 해왔습니다.
Toy-Project는 많은 개인시간의 투자가 필요하지만 개념적으로만 알고 있던 새로운 기술을 사용해볼 수 있고 프로젝트의 시작부터 끝까지 모두 경험하면서 많은 성장을 이룰 수 있습니다.

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