김준형
Fullstack Web Developer

경력.
- 회사 메인 프로덕트(nocodingAI)개발 담당
- AI 모델 추론 서버 Serverless 아키텍처 구축
- FE, BE CI/CD 파이프 라인 구축
- 인턴 및 신입 개발자 대상으로 개발 관련 스터디 진행(git, docker, JS)
- 기타 사내 프로젝트 및 외주업무 풀스택 개발
프로젝트.
블록 코딩으로 딥러닝 AI 모델을 훈련시키는 웹 플랫폼입니다. 초기 MVP 버전부터 풀스택으로 개발에 참여하였고 프론트엔드는 Vue, Backend는 AWS Lambda를 이용해 Serverless로 구성하였습니다. 프로덕트의 핵심기능인 AI 모델 훈련 기능 및 데이터 전처리 기능의 경우 Tensorflow.js의 기능을 블록코딩 형태의 GUI 모듈로 프론트엔드에 이식하여 구현하였습니다. 딥러닝 모델 훈련 프로세스 중 모델 아키텍처 구성과 데이터 전처리 기능에서는 블록이 일렬구조가 아닌 복잡한 형태의 그래프로 실행되어야 했는데, 각 블록 들의 실행 순서를 보장하기 위해 그래프 탐색 알고리즘을 적용하였습니다. Tensorflow.js의 모델 훈련 기능은 WebGL을 사용하나 브라우저 상에서 GPU 자원 사용이 원활하지 못한 문제가 있어 매 훈련 단계마다 사용하지 않는 GPU 메모리를 해제하고 훈련 데이터를 쪼개어 훈련할 수 있도록 최적화하여 훈련 성능을 크게 개선시켰습니다. 이외에 이미지 전처리 기능 개발 중 이미지 최적화를 위해 AWS 자원(labmda, s3)를 사용하여 On the Fly 이미지 리사이징 기능을 구현하여 성능을 향상시켰습니다.
사용 기술: Javascript, Vue, AWS(Lambda, API Gateway, Amplify, DynamoDB)
블록 코딩으로 AI 모델을 훈련시키고, AI 모델 추론 API를 파이프라인으로 만들 수 있는 웹 기반 AI 플랫폼입니다. 기존 nocodingAI를 기반으로 백엔드 모델 훈련 기능 및 오픈 소스 AI 모델을 파이프라인으로 호출하여 사용할 수 있는 기능을 추가하였습니다. Vue로 구현되어 있었던 프론트엔드를 React로 이전하는 작업을 주도적으로 진행했고, AI 모델 훈련 기능 이전 및 모델 훈련용 백엔드 구축, API 파이프라인에 사용되는 AI 모델 추론 서버 구축을 담당했습니다 프론트엔드 이전 작업 중 기존에 적용했던 이미지 최적화 기능과 더불어 React Suspense를 사용하여 Lazy Loading Component를 구현하여 이미지 로딩 효율을 높였습니다. UI 개발에 사용되는 공통 컴포넌트들을 작성했고, 특히 블록코딩에 사용되는 노드들은 HOC로 구성하여 재사용성을 향상시켰습니다. 추가된 API 파이프라인 기능은 AI 모델을 순차적으로 호출하여 추론하는 방식이기 때문에 실시간으로 추론 모델을 서브할 GPU 인스턴스가 필요했는데, 가동할 수 있는 GPU 인스턴스가 제한된 상황이었습니다. 이를 해결하기 위해 kubernetes를 사용해 대기중인 인스턴스에 AI 모델 추론 서버 이미지가 포함된 docker container를 순환하여 사용하는 serverless 아키텍처를 구축하였고, 제한된 GPU 인스턴스를 보다 효율적으로 사용할 수 있었습니다.
사용 기술: Typescript(react, express), Python, Postgresql, Kubernetes, Docker, AWS(ECS, Lambda, RDS), GCP(GKE)
인공지능 실행 가속기 스타트업인 Soynet의 브랜드 페이지 작업입니다. Vue로 FE를 구축했고 AWS lambda를 이용한 serverless API로 BE를 구성했습니다. 회사 소개 페이지 및 마크다운 기반의 Model market, Blog 기능을 serverless architecture로 구현했습니다. 대부분의 자원을 AWS 서비스를 사용해 구축한 프로젝트입니다. Serveless architecture로 구성되어 서버 관리에 대한 부담을 줄일 수 있었고, AWS 서비스간의 연결 및 권한 설정을 위해 IAM Role 및 Policy 설정을 통해 서비스간의 연결성과 보안을 향상 시켰습니다.
사용 기술: Javascript(Vue), AWS(Lambda, DynamoDB, API Gateway)
MBC 라디오 클라이언트 어플리케이션 리뉴얼 작업에 참여했습니다. 웹 어플리케이션 FE 개발과 크로스 플랫폼(win/mac) 어플리케이션 개발 업무를 담당했습니다. Electron을 이용하여 크로스 플랫폼 앱을 개발하는 도중 OS 시작 시 자동으로 시작, 투명도 관련 설정 등 OS마다 기능이 다른 부분이 있어 구현이 어려운 부분이 있었습니다. 기획측과 논의한 결과 window쪽 기능을 충실히 구현하는데에 더 무게를 두기로 하고 mac 관련 기획을 변경하는 쪽으로 진행하여 잘 마무리할 수 있었습니다. 이외에도 제공받은 API 자료가 outdated 되거나 기능에 필요한 부분이 누락되어 연동에 어려움이 있었지만, 개발팀과도 적극적으로 소통하여 문제를 해결했습니다.
사용 기술: Typescript(React, Electron)
생성형 AI 모델을 사용해QR 코드로 인식가능한 이미지를 생성하는 웹 플랫폼입니다. 이미지 생성 API 서버 구축 및 웹 어플리케이션 BE 개발을 담당했습니다. 이미지 생성의 경우 Stable Diffusion 모델을 컨테이너화 시켜 사용했고 중계 서버를 두어 클라이언트단에 추론 서버가 노출되지 않도록 구성했습니다. 중계 서버는 URL을 요청받아 QR 코드로 생성한 후, 미리 입력된 prompt 및 설정값과 함께 Stable Diffusion 추론 서버로 보내 생성된 이미지를 클라이언트로 반환합니다. 생성된 qr 이미지가 스캔이 되지 않는 경우도 있었기 때문에 생성된 QR 이미지를 중계서버에서 인식해보고 인식이 되지 않으면 Stable Diffusion에 이미지 재생성을 요청하는 방식으로 인식률을 보장했습니다.
사용 기술: Python(fastAPI), Docker
유저가 직접 만든 안드로이드 및 ios 워치 페이스를 NFT로 거래하는 마켓 플레이스입니다. NFT 경매 smart contract 작성 및 FE, BE 개발 전반을 담당했습니다. NFT 마켓을 반응형 웹앱으로 구현하고 앱 개발팀에서 해당 웹앱을 웹뷰를 통해 앱과 연동하는 프로젝트였습니다. 지갑 연동 기능이 브라우저 상에서는 문제없이 동작했지만, 웹뷰에서 스마트폰에 설치된 지갑 어플리케이션을 호출하지 못하는 이슈가 발생했습니다. 브라우저 자체에 내장된 web3 관련 기능이 모바일 웹뷰에서 제대로 동작하지 못하는 문제였고, 지갑 연동 기능 관련 web3 라이브러리를 추가 사용하는 방안을 통해 해결했습니다. 이외에도 1차 기획 시 즉시 구매방식이었던 smart contract가 리뉴얼 이후 경매 방식으로 바뀌는 등의 이슈가 있었지만 solidity smart contract 소스를 전체적으로 재작성하여 기획의도에 맞게 수정할 수 있었습니다.
사용 기술: Typescript(react, nest.js), Solidity, MongoDB
어린이 영어 도서 독서 앱입니다. AI가 생성한 퀴즈를 통해 아동이 책 내용을 얼마나 이해했는지 평가합니다. webview 기반 크로스 플랫폼(Android/ios) 앱입니다. React로 웹어플리케이션을 구축하고 Nest.js로 백엔드를 구축했습니다. 구독 기능 구현 중 React Native in-app 결제 라이브러리가 결제 영수증 검증 기능에 deprecated된 app store API를 사용하고 있는 것을 확인했습니다. 최신 버전에서도 해당 기능이 수정되지 않아, 결제 완료 후 영수증을 DB에 저장해놓고 백엔드에서 현행 API를 사용하여 영수증을 검증하도록 구현하여 해결했습니다.
사용 기술: Typescript(React, nest.js), Postgresql, Docker, react native
NFC에 기록된 Wifi 정보를 스캔하여 Wifi에 자동으로 연결하는 IOS 앱입니다. mime type application/vnd.wfa.wsc 데이터가 기록된 NFC 태그를 Android 기기에서 스캔하면 해당 Wifi 정보를 사용해 자동으로 wifi에 연결되지만 IOS는 해당 기능을 제공하지 않습니다. IOS 기기에서도 wifi 정보가 기록된 NFC를 사용해 wifi에 연결할 수 있도록 만든 토이프로젝트 앱입니다.
사용 기술: Swift(SwiftUI)
기술.
Programming
- 사용하는 언어의 Idiom과 탐구하고 Convention을 준수하는 것을 즐깁니다.
- 함수형과 객체 지향 패러다임을 이해하고 적재적소에 사용합니다.
- Javascript/Typescript에 능숙합니다. Typescript의 타입 조작 키워드를 사용하여 TS가 타입 추론을 잘 할 수 있게 격려합니다.
- Python의 방대한 AI 관련 생태계를 활용하고 환경을 구성하는데에 익숙합니다.
Frontend
- 주로 React를 사용해 Frontend를 개발합니다. 함수형 컴포넌트와 Hooks를 능숙하게 사용하고 로직을 적절히 분리합니다.
- 날 것 그대로의 React를 탐구하는 한 편 생산성을 높이는 React 생태계에도 큰 관심을 기울입니다.
- 컴포넌트의 디자인 패턴에 대해 숙고하고 우아한 컴포넌트 분리를 위해 노력합니다.
- 시맨틱한 마크업과 웹 접근성 향상을 지향합니다.
Backend
- Express, Nest.js, fastAPI 등의 프레임워크를 사용해 웹서버를 구축합니다.
- ORM을 사용하여 영속 데이터를 코드 중심으로 처리하는 것을 선호합니다.
- Testing Library로 테스트 코드를 작성하고 테스트 주도 개발을 실천하려 노력합니다.
- 기능을 구현하는 것 뿐만이 아닌, 보다 효율적인 서비스 구조를 구축하기 위해 고민합니다.
Devops
- Docker image 경량화 및 최적화를 위해 노력합니다.
- Kubernetes를 사용해 제한된 리소스를 보다 효율적으로 관리해 본 경험이 있습니다.
- 클라우드 환경에서 제품을 배포하는데에 익숙하며, 다양한 클라우드 공급자 환경에서 CI/CD를 구축할 수 있습니다.
- 온프레미스와 클라우드 간, 혹은 서로 다른 클라우드 공급자 사이의 리소스를 이전하거나 각기 다른 환경을 통합해 아키텍처를 구축한 경험이 있습니다.
- Git을 사용한 버전 관리에 익숙하며 한 커밋 한 커밋이 일관된 작업 내용을 담도록 하는 데에 많은 노력을 기울입니다. patch 옵션을 애용하고, 필요하다면 공격적인 rebase로 히스토리를 바로잡습니다.
- Jira, Notion 등 협업용 도구 사용에 익숙합니다.
- 문제 해결을 위해 가능한 모든 방법을 탐구하고 필요하다면 낯선 분야라도 적극적으로 탐색합니다.
- 더 많은 기술을 익히기 위해 몰두하는 것을 지양합니다. 익힌 기술로 현실의 문제에 도전하고 이를 해결했을 때 성장을 체감합니다.
- k8s와 i18n을 어떻게 읽는 줄 압니다.
언어/자격.
외국어
- 영어 : 일상 회화 가능
- 일본어 : 고급 및 비지니스 회화 가능(JLPT N1)
자격증
- 정보처리기사