Background

안녕하세요,
도전을 즐기는 엔지니어 김수경입니다.

1. 기술적 깊이를 파고드는 챌린저

  • Python 내장 라이브러리를 커스텀한 SSE 기능 구현을 통해 사용자 경험을 4배 개선하였습니다.
  • VM의 유저 영역과 커널 영역을 직접 관리해보며 운영체제의 동작원리를 파악하였습니다.

2. 컴퓨터 디자인 원리를 서비스 개발에 적용하는 챌린저

  • Lazy Loading의 컨셉을 애플리케이션 개발에 적용하여, 서버 성능을 10배 개선하였습니다.
  • RR 알고리즘을 적용하여 인터널 플랫폼 배치 작업을 구상하였습니다.

3. 성장하는 팀 문화를 주도하는 챌린저

  • AWS 대학생 모임 AUSG의 8기 Co-Organizer로 행사 기획과 커뮤니티 문화를 주도해가고 있습니다.
  • 사내 세미나, 컨퍼런스 발표, 프로젝트 회고등을 통해 동료 개발자들과 트러블 슈팅 경험을 함께 나눕니다.

Career.

중고나라

중고나라

MAU 200만, 웹/앱/카페 기반 국내 최대 중고거래 IT 플랫폼2023. 9. - 2023. 12. (4개월)

솔루션개발팀 인턴 채팅 및 FDS 서비스 개발, SEO 관리 툴 개발

TypeScriptGoNodeJSServerless FrameworkDynamoDBOpenSearchSQSSNSCloud FormationAPI GatewayLambdaS3

주요 성과

  1. 인터널 플랫폼으로 팀 내 업무 자동화를 통한 생산성 향상에 기여

  2. 신뢰 확인 및 취소 방지를 위한 채팅 유도 프로세스 도입으로 거래 취소 빈도 7배 감소

  3. 기술 공유를 통한 팀 성장 주도

    • 'AWS 서버리스 사용자 소모임', 'AWS Building Block' 참여 후 팀 세미나 진행

    • 기술 콘퍼런스 참여 사내 소모임 주최

업무 및 해결 과정

  1. 이벤트 알림 메시지 템플릿 ⇢ 노코드 플랫폼으로 이관

    • 코드 내에 혼재하던 채팅 템플릿 코드 DynamoDB 로 마이그레이션
    • 템플릿 수정 발생 시, 담당자 확인 후 개발 환경에서 배포 환경으로 자동 배포 환경 구성
  2. SEO 관리를 위한 인터널 플랫폼 개발

    • Go 기반 Serverless Framework 로 상품 게시물 정보를 추출 서비스 개발

    • 일일 사용량에 따라 삭제할 인덱스 스케줄링 후 배치 작업 설계

  3. 디바이스 확인 및 웹 채팅 확인 프로세스 개발

    • 채팅 참여자의 디바이스 정보 추출 후 데이터 분석용 AWS OpenSearch 에 적재하는 로직 개발
  4. 신뢰 확인 및 취소 방지를 위한 채팅 유도 프로세스 개발

    • 타 유관 부서(앱 개발 팀/결제 서비스 팀)와 API 스펙 관련 논의를 진행 후 인터널 API 개발

    • 웹 소켓 서버에서 요청의 유효성을 판단 후, 채팅 후처리 서버에서 최종 채팅 시기 파악

  5. 웹 결제 기능 런칭에 따른 API 이상 요청 분석

    • 채팅 관련 API 요청 시, 다수 요청이 들어오는 IP에 대해 API 요청 제한 설정

    • DynamoDB 로 로깅용 테이블 설계 후, API 요청에 따라 해당 정보 기록

관련 링크

🔗 [Blog] 중고나라 솔루션 개발팀 인턴 회고

피아스페이스

피아스페이스

멀티 모달 AI 영상 검색 기반 B2B, B2C 서비스2023. 7. - 2023. 8. (2개월)

개발팀 인턴 AI 멀티 모달 비디오 검색 시스템 개발

TypeScriptPythonNestJSFastAPIMySQLRedisElasticSearchDockerEC2RDSCDNCode DeployS3ALB

주요 성과

  1. 비디오 처리 RESTful 아키텍처에서 이벤트 기반 아키텍처로 마이그레이션
  2. 비디오 송출 모듈 SSE 구현
  3. 개발 환경 변수 관리 프로세스 Secrets Manager 적용

업무

  1. 비디오 처리 RESTful 아키텍처에서 이벤트 기반 아키텍처로 마이그레이션

    • 서버 비용 절감 및 작업 효율성 향상을 위해 RESTful 아키텍처에서 이벤트 기반 아키텍처로 변경
    • 비디오 하나 당 평균 처리 속도를 52.59it/s → 10.18it/s 로 개선
  2. 비디오 송출 모듈 SSE 구현

    • 메인 API 서버와 비디오 병합 서버 간의 이중 SSE 구현
  3. 개발 환경 변수 관리 프로세스 AWS Secrets Manager 적용

    • 키 관리 써드 파티 모듈 도입으로 Production/Test 환경 분리

관련 링크

🔗 [PDF] 7월 사내 세미나 발표 자료

🔗 [PDF] 8월 사내 세미나 발표 자료

🔗 [Blog] 키 관리 Secrets Manager 로 간단히 하기

🔗 [Blog] 비디오 서버 서버리스로 마이그레이션 하기

Projects.

PosePicker

PosePicker

2023. 7. - 진행중
포토부스 내 포즈추천 서비스
JavaSpring BootSpring JPAQueryDSLSentryMySQLRedisDockerJenkinsEC2RDSS3ALBRoute53LambdaEventBridgeCloudFrontAPI GatewayCloudWatch

성과 및 배운점

  1. 현재 MAU 250, WAU 80 의 웹, iOS 서비스를 배포 진행 중입니다.

  2. 포토 스트리트 오프라인 매장에 지면 홍보를 통한 서비스 마케팅을 진행 중에 있으며 리텐션율 20%를 달성하였습니다.

  3. 매주 스크럼 회의 진행 및 매월 KPT 회고 진행을 통해 프로젝트 리더로서 프로젝트 관리 방법을 익혔습니다.


트러블 슈팅 및 기여

1. 포즈별 태깅 데이터 구성을 위한 Custom Repository 구현

  • 이슈

    • 복잡한 태그 데이터를 포즈 데이터에 함께 표현해야 했었고 multiple joins를 구현해야했습니다.
  • 해결과정

    • 포즈 메타 데이터 구성을 위해 Spring QueryDSL 로 Custom Meta Data를 구성해서 해결했습니다.
    • 태그 데이터를 먼저 생성하고 포즈 데이터를 삽입해야 했는데 해당 과정을 구현하기 위해 JPA 를 이용해 CustomRepository 를 구현하였습니다.
    • 복잡한 태그 데이터를 포즈 데이터에 함께 묶어서 반환시키기 위해 복잡한 데이터들간의 관계를 묶는 모델 구조를 생성했습니다.

2. AWS ALB / Route53으로 배포 서버와 API 서버 분리 작업 수행

  • 이슈

    • 도메인을 구매하고 HTTP 연결을 HTTPS 연결로 자동 리다이렉트를 해야했습니다.
    • AWS Certificate Manager 를 통해 인증서를 연결하여 SSL 연결을 수행해야했습니다.
  • 해결과정

    • HTTP 8080 과 HTTP 443에 대한 리스너를 설정하고 AWS Certificate Manager 에서 인증서를 생성하였습니다.
    • Route53을 통해 호스팅 영역의 레코드를 생성하였고 AWS ALB 와 연결했습니다.
    • 리스너 규칙을 적용하여 8080 연결을 자동으로 443 연결로 리다이렉트 하도록 적용하였고 'api-' 프리픽스를 붙여서 배포 서버와 백엔드 서버를 분리하였습니다.

3. AWS Lambda로 이미지 업로드 자동화 진행

  • 이슈

    • 포즈 데이터 업로드 시 DB에도 데이터를 넣어야 했는데, 해당 과정을 간소화하기 위해 AWS Lambda 로 로직을 분리했습니다.
  • 해결과정

    • AWS Lambda 로 이미지 업로드 발생 시, 이미지 태깅이 자동으로 수행되도록 구현하였습니다.
    • AWS LambdaAWS EventBridge 기반 AWS S3 트리거를 연결하여 S3 에 파일 업로드가 발생하면 파일 이름에서 이미지에 대한 정보를 추출하여 자동으로 S3 로 업로드 되도록 구현했습니다.
CarpeDiem

CarpeDiem

2023. 1. - 2023. 3.
표정을 기반으로 한 자동 녹화 및 앨범 제작 웹 서비스
TypeScriptExpress.jssequelizepassportMySQLDockerGithubActionsEC2RDSS3LambdaEventBridgeCloudFrontCloudWatch

성과 및 배운점

  1. 크래프톤 정글 1기 나만의 무기 만들기 파이널 프로젝트에서 팀 리딩과 최종 발표회에서 발표를 진행하고 협력사들로부터 많은 질문을 받을 수 있었습니다.

  2. 모바일과 데스크탑 환경 간의 영상 해상도차이로 인한 서버 로딩 속도를 코덱 변경을 통해 해결하며 영상 처리에 대해 보다 깊이 있게 이해할 수 있었습니다.

  3. 영상 저장 부분에 대해 서버에서 처리하던 로직을 AWS Lambda 로 전환하여 영상 저장 속도를 10배 개선하였습니다.

  4. 아이디어 수립부터 팀 빌딩까지의 전 과정을 리딩하였고 스크럼 / 인스펙션 / 스프린트 진행을 통해 애자일 프로세스로 프로젝트를 진행하였습니다.


트러블 슈팅 및 기여

1. 데스크탑과 모바일 환경 간 비디오 코덱, 디바이스 사양 차이 해결

  • 이슈

    • iOS 기기에서 비디오 녹화를 진행하고 녹화된 영상에 대한 작업을 처리할 경우, 코덱 불일치 문제가 발생했습니다. 이는 기존 비디오 코덱의 경우, H264로 처리를 했었으나 iOS(Safari)환경에서는 해당 코덱이 지원되지 않아서 발생했습니다.
    • 모바일 환경에서 서비스 접속 시, 기기 사양의 제한으로 인해 AI 모델 로드가 불가능하여 데스크탑과 동일한 서비스 제공이 어려웠습니다.
  • 해결과정

    • FFMPEG 라이브러리에서 H264 코덱을 통한 비디오 변환 작업의 속도가 더 빨랐기에 H264 코덱 지원이 되는 웹 및 안드로이드 녹화 비디오에는 H264 코덱을 통한 비디오 변환을 수행하였고 iOS 비디오에는 VP8 코덱을 이용하여 비디오 변환을 수행하였습니다.
    • 모바일 접속과 데스크탑 접속의 로직을 구분하여 모바일은 WebRTC 로 스트림만 받아오고 감정 인식과 녹화는 기존 웹 기반 서버에서 이루어지도록 구현했습니다.

2. 모델 로드, 비디오 녹화, 감정 정보 갱신의 작업 분할을 통한 동시 작업 처리

  • 이슈

    • 실시간으로 사용자의 감정을 읽고 비디오 녹화를 진행해야했습니다.
    • 모델 로드와 비디오 스트림 초기화를 동시에 진행하면서 과도한 부하가 발생해, 녹화 시작 시간 지연 문제가 발생했습니다.
  • 해결과정

    • Blocking , LazyLoading , TimerTick 개념 도입
    • Blocking
      • 얼굴 인식, 감정 인식 AI 모델을 먼저 로드하고 비디오 스트림은 1차적으로 중단된 상태로 초기 상태를 설정했습니다.
    • LazyLoading
      • 사용자가 비디오를 킨 이후에, 비디오 스트림을 사용자로부터 받아오고 S3에 저장된 사용자 이미지와 매핑하여 사용자의 감정을 인식했습니다.
    • TimerTick
      • 이전 녹화 시점의 감정 수치에서부터 15초 단위로 감정 갱신 여부를 파악하여, 녹화 연장 여부를 파악했습니다.

3. 비디오 변환 작업 AWS Lambda를 기반으로 한 이벤트 처리로 영상 저장 속도 10배 개선

  • 이슈

    • 영상 병합 작업을 서버에서 처리하여 서버의 부하가 커지는 경우가 발생했습니다.
    • 녹화 영상의 크기가 커지면 사용자의 앨범에 저장되기까지 긴 시간이 소요되었습니다.
  • 해결과정

    • AWS S3 에 녹화된 비디오가 저장이 되면 AWS EventBridge 에서 이를 감지하고 자동으로 AWS Lambda 에 지정해둔 핸들러 함수를 작동시켰습니다.
    • 이에 별도로 최고 감정 수치가 기록된 시점을 DB로 부터 읽어오고, 해당 시점과 영상의 싱크를 맞추어서 썸네일 이미지를 추출했습니다.
공개미 : 공부하는 개미들

공개미 : 공부하는 개미들

2022. 3. - 2022. 11.
서로 다른 곳에 있어도 함께 공부하는 느낌을 주는 비대면 스터디 서비스
JavaScriptExpress.jsSocket.iopassportMySQLGitLab PipelinesGitHub ActionsPM2EC2RDSS3Route53

성과 및 배운점

  1. 미디어 송수신 구조를 n2n^2 의 Mesh Network 에서 2n2^n Selective Forwarding Unit 로 개선하여 클라이언트 스트림 연결 속도를 4배 개선 하였습니다.

  2. GitLab Pipelines 로 CI/CD 플로우를 구축했습니다.

  3. 개발 환경과 프로덕션 환경의 분리를 통해 별도 로그 및 DB 관리를 효율적으로 진행하였습니다.

  4. 2022년 ICT멘토링에서 GitLab 우수 사용자로 선정되어 온라인 웨비나에서 ‘우리 팀이 GitLab으로 협업하는 방식’ 에 대해 발표하였습니다.


트러블 슈팅 및 기여

1. 미디어 송수신 구조 Mesh 방식에서 SFU 방식으로 전환

  • 이슈

    • 한 채팅방 내에 3명 이상의 유저가 입장하는 경우, 비디오가 중단되는 현상이 발생했습니다.
  • 해결과정

    • WebRTC 기본 라이브러리를 이용한 P2P 스트리밍 방식에서 Node.jsmediasoup 라이브러리를 이용해 SFU 스트리밍 방식으로 전환하였습니다.
    • 방 별 프라이빗 코드는 socket.io 를 이용해 관리 했으며, 방 코드를 mediasoup 서버로 전달하여 사용자들 간의 미디어 연결을 중개하였습니다.
    • 중앙 Router를 이용해 Producer Worker와 Consumer Worker를 관리하고 Router에서 모든 미디어 리소스를 다시 사용자들에게 스트리밍하는 형태로 구현하였습니다.

2. GitLab Pipelines DinD 방식을 이용한 배포 자동화 플로우 구현

  • 이슈

    • 프로젝트를 AWS EC2에 배포 할 때, 변경 사항이 생길 때마다 리포지토리 pull을 받고 PM2 를 다시 돌리는 작업을 반복했습니다.
    • PM2 의 프로세스가 재시작하는 과정에서 dump 파일이 덮어씌워지며 프로젝트 빌드가 실패했습니다.
  • 해결과정

    • 개발 리포지토리에서 GitHubGitLab Sync를 동시에 관리하며 GitHub Actions 가 무한정으로 돌아가는 문제가 발생해, 배포 리포지토리에서 업데이트 사항 로그 남기고 커밋과 태그로 관리하는 방식으로 변경했습니다.
    • 배포 리포지토리에 변경사항이 발생하면 GitLab Pipelines 가 돌아가도록 구성하였고 build / deploy 스테이지를 구성하여 작업을 분리하였습니다.
    • AWS EC2 인스턴스에 미리 설정해둔 GitLab Runner 내부에서 클라이언트 컨테이너와 서버 컨테이너가 돌아갈 수 있도록 GitLab Pipelines 를 구축하였습니다.

3. 프로젝트 배포를 위한 프로덕션 환경 구성

  • 이슈

    • 프로덕션 배포 후 이슈 발생 시, 시스템 로그를 빠르게 파악하기가 어려웠습니다.
    • 실제 서비스 배포 환경과 동일하게 구현하려면 사용자의 비밀번호를 암호화하여 저장해야 했습니다.
  • 해결과정

    • Node.jswinstonmorgan 라이브러리를 이용하여 배포용 로거와 개발용 로거를 만들었습니다.
    • 개발 로깅 파일은 로컬에 파일로 저장되게끔, 프로덕션 로깅 파일은 AWS S3 에 저장해 이슈를 모니터링하였습니다.
    • Node.jscrypto 라이브러리를 이용해 암호화 / 복호화를 진행해 사용자 인증 로직을 구현하였습니다.
냥냠대

냥냠대

2022. 3. - 2022. 9.
안양대학교 과제 관리 및 맛집 공유 서비스
JavaSprint BootDjangoMybatisSpring Cloud GatewaySpring Cloud EurekaMariaDBRedisElasticSearchDockerJenkinsEC2RDSS3

성과 및 배운점

  1. 학교 포털 시스템과 연동시켜서 회원 정보를 관리하였고 Redis를 이용한 세션 관리 방법을 익혔습니다.

  2. 비대면 학습 기간 동안 교내 학우들을 대상으로 총 사용자 1,200명을 달성하였습니다.

  3. Spring Cloud Eureka로 메인 서버와 이미지 서버를 분리하여 서버 응답 속도를 1.5배 개선하였습니다.


트러블 슈팅 및 기여

1. 리뷰 및 프로필 이미지 업로드를 위한 이미지 전용 서버 구축

  • 이슈

    • 맛집 리뷰 등록 시, 이미지 업로드 단계에서 반복적인 에러가 발생했습니다. 이에 맛집 정보 업로드에서 이슈가 발생하는 건지, 이미지 업로드 시에 문제가 발생하는 건지 이슈 파악이 어려웠습니다.
  • 해결과정

    • Spring Cloud Eureka 를 도입하여 서버 애플리케이션 내에 MSA 로 메인 서버와 이미지 업로드 서버를 분리했습니다.
    • 메인 서버에서 최초 요청을 처리하고 이미지 관련 요청이 들어올 경우 Spring Cloud Eureka 를 통해 내부적으로 이미지 서버로 연결하여 별도로 로깅과 비즈니스 로직을 분리하였습니다.

Activities.

Community.

AWS 대학생 커뮤니티(AUSG)

2023. 7. - 진행중
  • 2024년 8기 Co-Organizer로 행사 기획 및 리크루팅 참여
  • 격주로 지식 공유 발표를 통한 개발 관련 토론 진행
  • 'AWS Community Day 2023' 자원봉사자로 참여

IT 비영리단체(DND)

2023. 7. - 2023. 8.
  • 디자이너, 개발자들과 함께 사이드 프로젝트 진행
  • 프로젝트 리더, 백엔드 개발자, PM으로 참여
  • MAU 500 서비스 '포즈피커' 운영 및 유지 보수 진행중

재미한인여성과학자협회(KWiSE)

2023. 3. - 2023. 11.
  • 글로벌 크로스 멘토링 - 미서부 지역 멘티
  • STEM Career talk concert 참여
  • 멘토링 그룹을 통한 일대일 커리어 코칭

안양대학교 IT 동아리(Goorm)

2022. 4. - 2022. 10.
  • 교내 학사 관리앱 '냥냠대' 백엔드 개발자로 참여
  • Spring Boot, 웹 보안 스터디 참여

Open Source Contribution.

mediasoup

2022. 9. 28.
  • WebRTC SFU Node.js 라이브러리
  • 주석 내 RTCP 프로토콜, consumer 함수 설명 수정

🔗 [GitHub] Merged PR

Presentations.

새싹콘서트 2024

2024. 1. 3.
  • '부트캠프만 3번한 썰 풉니다.'
  • 주니어 개발자들에게 '성장'을 주제로, 부트캠프를 참여하며 느낀점을 중점으로 발표

🔗 [PDF] 발표 자료

AUSG BIG CHAT

2023. 9. 18.
  • '영상 병합 작업 SSE 적용기'
  • NestJS 와 FastAPI 간 이중 SSE 구현 방법을 토대로 발표

🔗 [PDF] 발표 자료

2022년 ICT멘토링 GitLab Meet Up

2022. 9. 20.
  • '우리 팀이 GitLab 으로 협업하는 방식'
  • 2022년 ICT멘토링 참가자들을 대상으로 GitLab 사용법 발표

🔗 [PDF] 발표 자료 | 🔗 [Blog] 첫 웨비나 연사 참여기

Education.

안양대학교

2019. 3. - 2024. 2.
  • 스마트창의융합공학부 소프트웨어학과 졸업
  • 전체 학점 (4.03/4.5) | 전공 학점 (4.04/4.5)

삼성 청년 소프트웨어 아카데미 11기

2024. 1. - 2024. 6.
  • JAVA 기반 알고리즘 문제 풀이 및 스터디 그룹 리딩
  • Spring, Vue.js 기반 부동산 웹 애플리케이션 개발 진행

크래프톤 정글 1기

2022. 10. - 2023. 3.
  • 서울대학교 시흥캠퍼스에서 24시간 프로그래밍 합숙 교육 진행
  • malloc 시스템 함수 및 웹 서버, PintOS 구현을 통해 웹 서버와 운영체제 학습
  • 최종 프로젝트 팀 리더로 참여하여 감정 인식 자동 녹화 서비스 '카르페디엠' 개발 및 협력사 발표

AI 양재 허브 실무 개발자 양성과정

2021. 6. - 2021. 9.
  • CNN, RNN, LSTM 등 모던 CNN 모델 설계 및 하이퍼 파라미터 튜닝
  • 얼굴 식별 모델 'Haar Cascades'을 이용한 감정 분석 리서치 B2B 프로젝트 'Emotion Catcher' 개발

Certificates.

정보처리기사

2022. 9. 2.
한국산업인력공단

Publications.

AI 기반 공공 행정 문서 내 민감 콘텐츠 마스킹 시스템 구현

2023. 6.
2023 한국감성과학회 춘계학술대회

Awards.

2023학년도 1학기 캡스톤 경진대회 우수상

2023. 6. 14.
안양대학교
  • EasyOCR Fine-tuning 을 통한 개인정보 마스킹 프로젝트 진행

🔗 [GitHub] Mosaicec 소스코드

AYU 게임 개발 대회 최우수상

2021. 11. 24.
안양대학교
  • Unity 기반 생존형 아케이드 게임 '두근두근 면담시간' 개발 및 앱스토어 배포

🔗 [App Store] 두근두근 면담시간 - 원스토어

2020 A.R.I. School Camp 최우수상

2021. 1. 14.
안양대학교
  • 동계 창업 아이디어 해커톤에서 언택트 시대를 극복하는 창업 아이템 'PITCH IN' 제안

🔗 [Blog] 해커톤 후기 : 언택트 시대의 창업 아이템