Seokmin
Hong

Software Engineer, Frontend Developer, Gameplay Programmer

Work Experience

Flex

-

Frontend Engineer

Momenti

-

Frontend Engineer

  • Infrastructures
    • Jira 파이프라인 자동화 구축 및 배포 연동
    • GitHub Actions, Terraform, Slack 연동
  • Frontend Overalls
    • pnpm workspace 및 Turborepo를 사용한 모노레포 구축
    • Turborepo Cache 서버 (turbo-cache-worker) 구현하여 평균 CI 시간 50% 개선
  • Admin Page
    • Material UI를 사용하여 디자인 시스템 구현
    • Suspense API 도입하여 로직 단순화
    • Storybook 도입 및 배포하여 디자인 리뷰 환경 구축
  • Player
    • JavaScript 기반의 플레이어를 WebAssembly로 포팅
    • Webpack을 Vite로 마이그레이션 하여 개발 환경 개선
    • CommonJS에서 ES Module로 전환하여 번들 사이즈 약 37% 감소
    • SPA 형태의 애플리케이션을 라이브러리 및 Next.js 애플리케이션으로 분리하여 재사용성 및 성능 향상
    • Next.js 13 애플리케이션으로 마이그레이션 하여 서버 사이드 렌더링 도입
    • Datadog과 Next.js의 OpenTelemetry를 연동하여 e2e 로그 트레이싱 구현
    • 브라우저 벤더별 이슈 대응
  • Backend (Elixir)
    • Rust 엔진을 Elixir 인터페이스에 바인딩 하여 서버에서 컨텐츠 생성 및 재생이 가능하도록 함
    • Rust 엔진 배포 시, 플랫폼 별 환경(Alpine, aarch 등)에 맞는 바이너리를 생성하여 배포하는 자동화 구현
    • Rust 엔진의 사전 빌드 바이너리를 Elixir 빌드 시에 사용할 수 있는 브릿지 라이브러리 구현
  • Engine (Rust)
    • 컨텐츠 제작 코어 엔진 구현 및 리팩토링
    • Elixir 및 WebAssembly 바인딩을 위한 헬퍼 라이브러리 구현
    • FFI 직렬화/역직렬화 시 Protocol Buffers를 자동으로 해석하도록 매크로 구현

Nexon Games

-

Game Client Programmer

  • Veiled Experts
    • 애니메이션 성능 최적화
    • 패키지 용량 최적화 시스템 개발
    • 인하우스 애셋 관리 시스템과 Unreal Engine 4의 애셋 관리 시스템 통합
-

Game Client Programmer

  • Veiled Experts
    • 액션 및 파쿠르 시스템 개발
    • 애니메이션 블렌딩 시스템 개발
    • IK 시스템 구현
  • 비공개 프로젝트 (PC, UE4)
    • 캐릭터 액션 시스템 구현
    • 무기 및 상호작용 시스템 구현
    • IK 시스템 구현 및 IK 에디터 제작
    • 3ds MAX 본 일괄 편집 플러그인 개발
-

Game Client Programmer (Intern)

  • 비공개 프로젝트 (Mobile, UE4)
    • O(NlogN) 복잡도의 line of sight 알고리즘 구현
    • 초기 기획 단계의 프로토타입 게임 구현

Personal Projects

edge-yacht

보드게임 Yacht을 웹에서 실시간 멀티플레이어 게임으로 즐길 수 있는 프로젝트입니다. 2021년 Cloudflare Summer Challenge에서 수상한 프로젝트입니다. Cloudflare Pages, Cloudflare Workers, Cloudflare KV, Durable Objects와 같은 Cloudflare의 다양한 서비스들을 사용하여 웹 페이지 호스팅, WebSocket 세션, 로그인, 승패 정보 등을 구현하였습니다.

또한, Three.js를 JSX 문법으로 기술할 수 있게 해 주는 react-three-fiber 라이브러리를 사용하여 주사위 그래픽을 3D로 구현하였습니다. 주사위 시뮬레이션은 모두 동일한 화면을 보여주기 위해 실시간 시뮬레이션이 아닌, 사전에 베이킹한 시뮬레이션을 사용했는데, 이는 Unreal Engine 4의 물리 엔진을 사용하였습니다. (link)

edge-yacht

pages-action

Cloudflare Pages를 사용하여 호스팅된 웹 페이지를 GitHub Actions를 사용하여 배포할 수 있도록 해 주는 GitHub Action입니다. Cloudflare Pages의 CD는 레포지토리에 변경사항이 있으면 무조건 실행되기 때문에 모노레포 환경에서는 불편한 점이 있습니다. 따라서 이를 GitHub Actions을 통해 조작 할 수 있도록 Cloudflare API를 사용하여 구현하였습니다.

turbo-cache-worker

Turborepo의 빌드 캐시 서버는 기본적으로 Vercel의 제품을 사용해야 합니다. 따라서 API를 모킹하여 최소한의 캐시 저장 및 가져오기 기능만을 Cloudflare Workers를 사용하여 구현했습니다. 저장소는 Cloudflare R2 혹은 Google Cloud Storage를 사용할 수 있도록 구현했습니다.

이미 ducktors/turborepo-remote-cache 라는 오픈 소스가 존재하지만, 이는 Docker 이미지 형태로 배포해야 하기 때문에 관리하기 더 쉬운 function 형태의 서비스로 직접 구현하였습니다.

builder-pattern

Rust의 derivable macro를 사용하여 builder pattern 형식의 구조체 초기화 함수를 쉽게 선언할 수 있는 crate입니다. 이미 유사한 crate가 많지만, 타입 안전하기 때문에 unwrap이 필요 없고, lazy-evaluation 및 비동기로 값을 초기화 할 수 있는 기능들을 제공합니다.

rustler-github

Elixir에서 Rust 라이브러리를 사용할 때, 일반적으로 Rustler 라이브러리를 사용합니다. 이 때, Rust 라이브러리는 Elixir의 컴파일 타임에 동적 라이브러리 형태로 빌드됩니다. 이 라이브러리는 해당 동적 라이브러리를 사전에 빌드하여 GitHub Releases에 배포할 경우, 적절한 버전을 Elixir의 컴파일 타임에 다운로드하여 빌드 시간을 단축하는 기능을 제공합니다.

reather-lite

Elixir에서 reader 및 either 모나드를 같이 사용하는 패턴을 쉽게 구현할 수 있는 매크로 라이브러리입니다. Momenti에서 기존 개발자분들이 사용하던 jechol/reather 라이브러리에서 Witchcraft라는 모나드 라이브러리를 의존성에서 제거하고, 엘릭서의 기본 문법만으로 모나드 패턴을 구현하였습니다.

mure (private project)

회사에서 동시에 여러 언어를 사용하여 라이브러리를 개발하고 배포할 때, 언어별로 패키지 레지스트리를 사용하고자 하는 수요가 있었습니다. GitHub Packages에는 많은 언어가 있지만, Elixir 및 Rust는 지원하지 않기 때문에 이를 지원하고자 개발한 프로젝트입니다.

Elixir의 백엔드 프레임워크인 Phoenix를 사용하였고, 서버를 실행하면 동시에 여러 포트가 열려 각 언어의 패키지 레지스트리 API를 유사하게 제공합니다. 현재 구현되어 있는 레지스트리는 NPM과 Elixir의 Hex.pm입니다.

compile-time-format-string

C++에서 C의 스트링 포맷 IO 함수들(e.g. printf, scanf 등)과 유사한 인터페이스로 IO 함수를 호출하되, %d와 같은 포맷 스트링의 타입을 컴파일 타임에 검증할 수 있도록 해 주는 라이브러리입니다.

korsubset

Google Fonts + 한국어 프로젝트가 한국어 폰트를 120개의 서브셋으로 나누어 호스팅하는 것에서 모티브를 얻은 프로젝트입니다. Python의 fonttools을 활용해 한글 폰트의 서브셋 및 CSS 파일을 생성합니다.

Talks

Community Contributions

Education

추천사

김경열

[email protected]

https://github.com/chitacan

  • 재현이 어려운 까다로운 문제가 발생하더라도 끝까지 파고들어서 유저가 만족할만한 해결책을 제시할 수 있습니다.
  • 3~4명으로 이루어진 작은 팀이 각자 맡은 제품을 개발하는 타이트한 상황에서도 효율적인 모노레포 운영을 위해서 의존성, CI / CD 이슈들을 도맡아서 해결해 주었습니다.
  • 자바스크립트 & 타입스크립트 뿐만 아니라 러스트와 엘릭서 언어에 대해서도 프로젝트에 필요한 기능을 직접 구현하고 배포할 수 있는 수준을 갖추고 있습니다.
  • 원활한 커뮤니케이션 능력과 폭넓은 개발지식을 바탕으로 다양한 직군의 동료들과 원활한 협업이 가능합니다. 프로젝트가 해결하고자 하는 문제를 명확하게 정의하고, 최선의 결과를 이끌어내기 위헤 언제나 적극적으로 의견을 개진하는 믿을 수 있는 동료입니다.