회사를 다니면서 쌓아온 경험과
개인적으로 Side-Project를 하면서 쌓아온 경험들을 기록하는 페이지 입니다.

의미있었던 경력 위주로 기록하며 회사에서의 경험은 문제가 되지 않을 정도의 범위에서 기록합니다.

바로가기

Career

회사에서의 현재 역할

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

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

Side-Project에서의 역할

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

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

추구하는 방향

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

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

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

150명 가량의 업무개발자가 투입 규모의 차세대 프로제트입니다. 설계 말에 투입되어 Application Architec 역할을 수행으며 주로 프레임워크를 담당했습니다.
업무개발자가 쉽게 개발하고 추후 유지보수도 쉽게 할 수 있도록하는데 초점을 잡고 프레임워크를 설계, 구성했습니다.

  • Controller에서 반복적으로 일어나는 케이스(CRUD, Paging)별 작업(Parameter, Exception, Message)을 AOP에서 처리
  • 기존에는 cache를 사용하는 과정에서 업무로직을 변경해야했지만 annotation을 이용하는 방법으로 변경
  • 권한별 개인정보 마스킹 처리 작업을 업무개발자가 처리 않도록 AOP를 통해 처리
  • Decorator 패턴으로 유연한 DAO 구성 : Multi DataSource, 개인정보 마스킹, 암호화 등 Source 수정없이 처리
  • 그 외 보안, 인증, 권한, 로깅, 파일업로드&다운로드 관련 기본적인 프레임워크 작업 진행

통신사 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

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

Side Projects

개인적으로 진행한 프로젝트들을 기록합니다.
일단, 나름 출시(?)를 하고 사용자를 만들어본 프로젝트에 대해서만 기록합니다.
열심히 만들기는 했지만 보여줄 방법이 없는 몇몇 예전 사이드 프로젝트들이 생각나서 마음이 아프네요 ㅎ

Dveamer`s Android Apps에서 현재 운영 중인 제가 만든 안드로이드 앱들을 보실 수 있습니다.

고양이 방울 ( Belling The Cat )

Belling The Chat

동일한 주제를 등록한 사람들끼리 글과 이미지를 공유하는 앱입니다.
그 주제에 대해서 정말 알고 있는 사람만 접근 가능할 수 있도록 만들었습니다.
앱을 만든 목적과 사상을 설명하려면 좀 길기 때문에 Google Play에 올려둔 설명을 읽어봐주시기 바랍니다.

이 앱을 통해서 Android, AWS S3, AWS Lambda를 가지고 이미지를 다뤄봤습니다.
이미지 업로딩은 시간이 오래 걸리기 때문에 AWS Lambda를 거치도록 설계하면 비용문제가 생길 수있습니다.
Android가 AWS S3로 이미지를 직접 올리려면 인증, 권한 문제를 해결해야하는데
AWS S3에서 제공하는 pre-signed URL을 이용해서 진행했습니다.
기존의 client -> server -> repositories 형태를 벗어나
client -> repositories 구조이면서 인증, 권한을 해결하니
이제서야 serverless 아키텍처를 제대로 활용했다는 생각이 들더군요.

이미지 리사이징(re-sizing) 같은 처리도 했는데
기존에 이미지를 다뤄본 경험이 많지 않아서 흥미로웠습니다.
AWS를 사용하면서부터는 자주 사용해오던 Event-Driven 패턴으로 설계했는데
이미지 리사이징에서는 다른 때보다 사용자 체감 측면에서 큰 효과를 얻을 수 있었습니다.

제공하는 기능

  • Topic List : 상점, 사람과 같은 주제를 등록합니다
  • Messages About Topics : 주제에 대한 글을 쓰고 다른 사람들의 글을 읽을 수 있습니다
  • Alarm : 등록해둔 주제에 다른 사람들이 글을 쓰면 알람을 줍니다

사용된 기술

  • Front-End : Android Java
  • Back-End : Python, AWS Lambda, AWS S3, AWS DynamoDB, AWS APIGateway, AWS Route53, AWS CloudFront

BG Log

BG Log

배틀그라운드(PUBG / Battle Grounds) 게임 점수 갱신시 알림을 주는 앱입니다.
배틀그라운드를 하지는 않지만 회사 동료 중 한명이 한다길래 그 동료를 위해(?) 만들었습니다.
지인의 게임 점수가 변동되면 알림을 주고 그 내용을 그래프로 기록해줍니다.

제공하는 기능

  • Score Board : 지인들의 게임점수를 한눈에 보여줍니다
  • Score History : 지인의 게임점수 히스토리를 그래프로 보여줍니다
  • Alarm : 지인의 게임점수가 변동되면 알람을 줍니다
  • Search History : 배틀그라운드 게임계정으로 지인을 검색합니다
  • Chat : 등록한 계정별로 대화방이 존재하며 해당 계정을 지인으로 등록한 사람들과 대화를 나눌 수 있습니다

사용된 기술

  • Front-End : Android Java
  • Back-End : Python3, AWS Lambda, AWS DynamoDB, AWS APIGateway, AWS Route53, AWS CloudFront, Google Firebase

OW Friends

OwFriends

오버워치(Over Watch) 게임 점수 갱신시 알림을 주는 앱입니다.
원래는 회사 동료들이 게임에 접속하면 같이 접속하기 위해 만들기 시작했는데..
원천적으로 불가능한 문제가 있어서 목적이 변경 된 앱이 탄생했습니다.
지인의 게임 점수가 변동되면 알림을 주고 그 내용을 그래프로 기록해줍니다.
회사 동료가 점심시간에 PC방을 갔는지, 지각을 했는데 어제 밤에 게임을 했는지 감시하고 놀려먹는 앱으로 변질됐습니다.
나중에 회사 동료의 부주의로 상사에게 앱이 노출되어 피곤하다고 말도 못 꺼냈다는 슬픈 사연이 있습니다.

제공하는 기능

  • Score Board : 지인들의 게임점수를 한눈에 보여줍니다
  • Score History : 지인의 게임점수 히스토리를 그래프로 보여줍니다
  • Alarm : 지인의 게임점수가 변동되면 알람을 줍니다
  • Search History : 배틀그라운드 게임계정으로 지인을 검색합니다
  • Chat : 등록한 계정별로 대화방이 존재하며 해당 계정을 지인으로 등록한 사람들과 대화를 나눌 수 있습니다

사용된 기술

  • Front-End : Android Java
  • Back-End : Python3, AWS Lambda, AWS DynamoDB, AWS APIGateway, AWS Route53, AWS CloudFront, Google Firebase

Perfect Trainer

Perfect Trainer

등록해둔 포켓몬고(Pokemon Go) 몬스터가 주변에 나타나면 알람을 주는 앱입니다.
망나뇽이 나타났다는 소식에 일하다 말고 회사동료들과 사무실 주변을 열심히 뛴적이 있었습니다.
‘망나뇽이 뭐라고 우리가 이렇게 뛰고 있지?’
라는 의문이 들었지만, 그 순간 느꼈던 짜릿함은 잊을 수 없었습니다.
회사에서 놀려고 만든건 아니고.. 그 짜릿함을 더 느껴보기 위해 만들었다는 핑계를 적어봅니다.
의외로 자녀분들을 위해 희귀 몬스터를 찾아 떠나시는 과장님들이 선호했었습니다.

제공하는 기능

  • Wanted List : 알람받고 싶은 몬스터들을 등록합니다
  • Found List : 설정해둔 거리 이내에서 나타난 몬스터들을 보여줍니다
  • Alarm : 설정해둔 거리 이내에서 몬스터들이 나타나면 알람을 줍니다
  • Showing Map : 찾은 몬스터의 위치를 지도에서 보여줍니다

사용된 기술

  • Front-End : Android Java
  • Back-End : Python3, AWS Lambda, AWS DynamoDB, AWS APIGateway, AWS Route53, AWS CloudFront

Blind Date

BlindDate

사용자가 주선자가 되어 지인과 지인을 연결시켜주는 소개팅 앱 입니다.
실제 오프라인 소개팅을 온라인으로 옮겨두었다고 보면 되지만 소개받은 지인들은 주선자가 누군지 알 수 없다는 것이 앱의 특징입니다.
친구에게 소개팅을 시켜줬다가 결과가 좋지 않았던 것을 잊지 못하는 소심한 개발자는
자신의 존재를 노출하지 않고 서로 잘 어울릴 것 같은 두 사람에게 대화의 기회를 만들어 주기 위해 앱을 만들었지만
아무도 앱을 깔지 않아서 소개팅을 시켜주지 못했다는 슬픈사연이 있습니다.

사용된 기술

  • 환경 : AWS VPC, EC2, Ubuntu
  • Front-End : Android Java
  • Back-End : Java, Socket, HTTP, Spring Boot Framework, Netty Framework, MariaDB, AWS APIGateway, AWS Route53
  • 구성 : Manager Server, Chatting Server, Push Server