이민기

이민기
복잡해진 코드베이스를 구조부터 다시 설계해 제품과 팀의 개발 속도를 함께 높이는 4년차 프론트엔드 개발자입니다.
사용자의 흐름과 개발 생산성을 함께 개선하는 코드를 지향합니다.
우측 하단 'Contact' 버튼을 통해 편하게 연락 가능합니다.

Introduce

저는 사용자의 흐름과 개발 생산성을 함께 개선하는 프론트엔드 개발자입니다.
실제 회사 프로젝트에서 FSD(Feature-Sliced Design), Clean Architecture 등 구조적 설계 방식을 적용하며, 확장성과 유지보수성을 고려한 코드 구조 일관된 코드 품질을 중요하게 생각해 왔습니다.
AI를 활용한 개발이 보편화될수록 빠른 개발 속도는 단순한 코드 생산량이 아니라, 문제를 정확히 이해하고 복잡도를 낮추며 신뢰할 수 있게 구현하는 과정에서 나온다고 생각합니다.
React/Next.js 기반 프론트엔드를 중심으로 Node.js 백엔드와 Golang 기반 블록체인 네트워크까지 경험하며, 제품을 더 넓은 관점에서 이해하고 팀과 프로젝트에 실질적인 가치를 더하는 개발자로 성장하고자 합니다.

Work Experience

ThakiCloud Korea

2025.12 ~ 현재9개월
AI PlatformFrontend Engineer

데이터 주권을 지키는 엔터프라이즈 AI 인프라 개발

THAKI AI Platform

AI 도구로 빠르게 구축된 MVP 코드베이스를 프로덕션 제품으로 전환하며, AI 모델 학습·추론과 GPU·클러스터 자원, 데이터셋, 모델 레지스트리를 관리하는 통합 콘솔을 개발2025.12
Frontend Engineer
TypeScript
React
Rspack
Turborepo
Biome
TailwindCSS
ReactQuery
Zustand
ReactHookForm
Zod
i18next
Playwright
Vitest
  • FSD(Feature-Sliced Design) 기반 대규모 리팩토링 및 마이그레이션
  • 합류 시점의 코드베이스는 AI 도구로 빠르게 구축된 MVP 단계로, 도메인 간 책임 경계가 불명확하고 중복·미사용 코드가 누적되어 변경 영향 범위를 예측하기 어려운 상태였습니다.
    프론트엔드 2인 팀에서 구조 전환을 제안하고, 레거시 모듈을 FSD 기반 계층형 아키텍처로 재구성하며 기능 단위의 점진적 마이그레이션과 공통 라이브러리 추상화를 병행했습니다. 그 결과 10만 줄 이상의 레거시 코드를 제거하고 앱 번들 크기 15%(37MB → 32MB), gzip 크기 17%(12.1MB → 10.1MB)를 줄였으며, 변경 영향 범위를 기능 단위로 분리해 구조적 복잡도를 낮췄습니다.
  • 기존 Micro Frontend 플랫폼 편입 및 실행 환경 추상화
  • 단독 실행만 지원하던 제품을 다른 팀이 운영하는 기존 Module Federation 호스트에 Remote App으로 편입했습니다.
    빌드 타임의 번들 구성과 런타임의 라우팅·초기화 방식 차이를 공통 인터페이스로 분리하고, 비즈니스 로직이 실행 환경에 직접 의존하지 않도록 구조를 재설계했습니다.
    호스트와 shared 의존성·번들러를 맞추기 위해 Vite에서 Rspack으로 전환하며 빌드 시간을 75% 단축(22.3초 → 5.6초)했고, 하나의 코드베이스로 단독 실행과 통합 실행을 일관되게 운영할 수 있게 했습니다.
  • 초기 렌더링 성능 최적화
  • 초기 렌더링 지연을 개선하기 위해 29MB 규모의 단일 벤더 파일과 다국어 리소스 로딩 방식을 주요 병목으로 보고, 리소스 로딩 구조를 재설계했습니다. 벤더 파일을 도메인별로 분리하고 i18n 리소스 동적 지연 로딩을 적용해, 초기 렌더링 시간을 약 62% 단축(1.2초 → 0.45초)했습니다.
  • AI 활용 개발 환경의 품질 검증 파이프라인 구축
  • 구조를 정리한 뒤에도 같은 문제가 다시 쌓이지 않도록, AI 도구를 활용한 코드 작성 과정에서 발생할 수 있는 일관성 저하와 잠재적 결함을 구조적으로 차단하는 자동화된 검증 파이프라인을 구축했습니다. 모듈 간 의존성 검사, 정적 분석, 테스트 기반 오류 감지를 커밋 단계에 통합하여 일정 기준을 충족한 코드만 원격 저장소에 반영되도록 제한했습니다. 이를 통해 코드 리뷰에 소모되는 리소스를 줄이고, 빠른 개발 속도를 유지하면서도 프로덕션 수준의 코드 안정성을 확보했습니다.

OpusM

2022.07 ~ 2025.083년 2개월
기술연구소Research Engineer

엔터프라이즈 블록체인 솔루션 개발 및 연구

LedgerMaster 3.0 MetaVisual

LedgerMaster 3.0 Admin 사용자를 위한 블록체인 대시보드를 요구사항 정의와 구조 설계부터 구현까지 개발2024.07 ~ 2024.11
Frontend Developer
TypeScript
Next.Js
ReactHookForm
TailwindCSS
Turborepo
StoryBook
Jest
TestingLibrary
ReactQuery
Yarn
Jira
Bitbucket
  • 블록체인 도메인 정의 및 UX 설계 주도
  • 기획 단계에서 블록체인 도메인 지식이 팀 내에 충분히 축적되지 않은 상태였습니다.
    블록·트랜잭션·스마트 컨트랙트의 데이터 구조와 상호 관계를 정리해 기획자와 공유하고, 화면에 노출할 용어 체계와 정보 위계, 탐색 흐름을 직접 정의했습니다. 요구사항 정의와 구현을 하나의 기준으로 이어, 도메인 개념과 화면 구조가 어긋나지 않도록 했습니다.
  • 프론트엔드 아키텍처 설계
  • 신규 프로젝트의 구조를 처음부터 설계하면서, 인증·블록·트랜잭션 등 여러 도메인을 동시에 진행해야 하는 상황을 전제로 구조를 잡았습니다.
    비즈니스 로직·엔티티·위젯을 기능 단위로 분리하는 Feature-Sliced Design(FSD)을 적용해 도메인 간 의존을 끊고, 순수 UI 컴포넌트에는 Atomic Design Pattern을 적용해 화면 조합 단위를 재사용할 수 있도록 했습니다. 그 결과 도메인별로 독립적으로 작업하고 검증할 수 있어, 기능이 늘어도 기존 코드를 되짚는 범위가 넓어지지 않도록 했습니다.
  • Monorepo 기반 디자인 시스템 및 공통 패키지 구축
  • 솔루션 문서 애플리케이션과 어드민 프론트엔드가 같은 UI를 공유해야 해, TurboRepo 기반 Monorepo로 앱과 공유 패키지를 분리했습니다. 디자인 시스템을 독립 패키지로 떼어내 Storybook으로 문서화하고, TypeScript·ESLint·TailwindCSS 설정까지 공용 패키지로 분리해 앱이 늘어도 동일한 규칙과 UI를 유지할 수 있도록 했습니다. 공용 컴포넌트 패키지에는 Jest와 Testing Library로 테스트를 붙여 80% 이상의 커버리지를 확보했습니다.
  • 블록체인 익스플로러 및 스마트 컨트랙트 관리 화면 구현
  • 블록·트랜잭션·계정 데이터를 목록과 상세로 나누어 탐색하는 익스플로러를 구현했습니다. 스마트 컨트랙트는 파일 업로드, 컴파일 결과 확인, 배포 파라미터 설정을 단계별 화면으로 구성해 Admin에서 컴파일과 배포를 실행할 수 있도록 했습니다.

LedgerMaster 3.0

블록체인 솔루션 LedgerMaster 3.0의 Admin Server를 도메인 설계부터 API 구현까지 개발2023.06 ~ 2024.11
Backend Developer
TypeScript
Express
MongoDB
Mongoose
Docker
Web3.Js
Solc
Joi
JsonWebTokens
EthereumJs
Quorum
Axios
Jira
Bitbucket
Nats.io
Jest
  • 보안 토큰 관리 도메인의 서비스 구조 설계
  • 블록체인 기반 보안 토큰을 관리하는 시스템으로, 사용자·컨트랙트·트랜잭션 도메인이 MongoDB·NATS·블록체인 등 서로 다른 외부 시스템에 동시에 얽히는 구조였습니다.
    외부 연동 코드가 비즈니스 로직에 섞이지 않도록 api·application·domain·infrastructure 계층을 분리하고 의존성 주입과 인터페이스 추상화를 적용했습니다. 저장 형태와 도메인 개념이 함께 바뀌지 않도록 DB Entity와 Domain Entity를 분리해, MSA 환경에서 NATS로 수신되는 컨트랙트·트랜잭션 이벤트를 도메인 규칙에 맞게 변환해 저장하도록 했습니다.
  • RESTful API와 검증 미들웨어 설계
  • Express와 TypeScript 기반으로 인증·사용자·컨트랙트·트랜잭션·파일 5개 도메인 20여 개의 REST API를 설계·구현했습니다. 요청 검증 로직이 컨트롤러에 흩어지지 않도록 Joi 기반 검증 미들웨어를 도메인별로 구성하고, JWT 인증·인가와 일관된 에러 응답 포맷을 적용해 API 동작을 예측 가능하게 만들었습니다.
  • 스마트 컨트랙트 컴파일·배포·실행 파이프라인 구현
  • 어드민에서 스마트 컨트랙트를 직접 다룰 수 있도록 solc 기반 컴파일 파이프라인을 구현했습니다. OpenZeppelin 등 외부 라이브러리의 import 경로를 해석하는 콜백을 직접 구성하고, 컴파일 산출물인 ABI·bytecode를 저장해 재사용할 수 있게 했습니다. 배포·실행·조회를 각각 독립된 유스케이스로 분리하고, 컴파일 오류는 API 에러 포맷으로 변환해 프론트엔드에서 실패 원인을 그대로 확인할 수 있도록 했습니다.
  • 도메인 로직 테스트와 운영 기반 정비
  • 데이터베이스나 외부 시스템 상태에 의존하면 도메인 로직 검증이 불안정해질 수 있다고 보고, Jest와 Mock 객체로 사용자 등록·인증 등 주요 로직을 인프라와 분리해 독립적으로 검증했습니다. 운영 중 서버 상태를 확인할 수 있도록 Prometheus 메트릭 수집을 연동하고, 빌드 단계에서 API 문서를 자동 생성해 프론트엔드와의 연동 기준을 코드와 일치시켰습니다. 여러 Node.js 서비스가 공통으로 쓰는 코드는 npm·Nexus 사설 저장소로 패키지화해 버전 일관성을 유지하며 재사용할 수 있도록 했습니다.

SKT PASS SIGN

SKT PASS 앱 내 전자계약 웹앱의 프론트엔드를 초기 구축부터 담당2022.07 ~ 2024.07
Frontend Developer
TypeScript
React
Axios
ReactQuery
ReactHookForm
StoryBook
Redux
StyledComponents
MUI
Jest
TestingLibrary
Jira
Bitbucket
  • PASS 앱 웹뷰 실행 환경 대응
  • PASS 앱 안에서 동작해야 했지만 OS마다 웹뷰 엔진이 달라(Android는 Chrome WebView, iOS는 WebKit) 같은 코드가 어떤 환경에서 실행될지 사전에 확정할 수 없었습니다.
    실행 환경을 런타임에 판별하는 훅을 만들어 앱 내부와 일반 브라우저를 구분하고, 계약서 다운로드처럼 환경마다 동작이 다른 기능은 네이티브 브릿지 호출과 웹 표준 방식 두 갈래로 분기해 구현했습니다. 로딩 표시나 웹뷰 종료처럼 앱이 제어해야 하는 동작도 브릿지로 위임해, 하나의 코드베이스로 두 환경을 모두 지원하도록 했습니다.
  • 컴포넌트 구조 정리 및 테스트 기반 품질 확보
  • 촉박한 일정에 맞춰 화면을 먼저 구현하다 보니 컴포넌트가 혼재되어 변경 비용이 커지고, 디자인과 구현물 간 피드백도 늦어졌습니다.
    공통 UI를 Atomic Design Pattern으로 계층화하고 Storybook에 59개 컴포넌트 스토리를 구성해 디자이너와 구현물을 같은 화면에서 확인할 수 있게 했습니다. 또한 Jest와 React Testing Library로 주요 화면 16개에 테스트를 작성해 95% 이상의 테스트 커버리지를 확보했습니다.
  • 해시 기반 전자계약 증명 모델 설계 주도
  • 전자계약의 진위성과 무결성을 어떻게 증명할지 정의하고 서비스 흐름에 반영하는 작업을 주도했습니다.
    원본 문서와 완성 계약서의 해시를 각각 보관하고, 서명자마다 서명 시점의 문서 해시와 서명 이미지 해시를 함께 기록하도록 설계해 서명 순서에 따라 계약 상태를 검증할 수 있는 구조를 만들었습니다. 화면에서는 식별정보를 직접 비교하지 않고 해시로 대조해 본인의 서명 영역을 판별하도록 구현했습니다.
  • 초기 로딩 속도 개선
  • 초기 개발 일정상 여러 외부 라이브러리를 혼용해 초기 렌더링 속도가 저하되어, 컴포넌트 스타일링을 일원화하고 이미지 최적화·레이지 로딩·코드 스플릿팅을 적용했습니다. 이를 통해 초기 로딩 시간을 약 68% 단축(4.1초 → 1.3초)하고 Lighthouse 성능 점수를 65점에서 94점으로 높였습니다.

Opstra

회사 블록체인 솔루션을 검증할 자체 네트워크의 필요성을 제안하고, Cosmos SDK 커스텀 체인과 CometBFT 합의 네트워크를 구축2025.03 ~ 2025.04
Blockchain Engineer
Go
CosmosSDK
CometBFT
ubuntu
  • 커스텀 블록체인 테스트넷 구축 및 모니터링
  • 자체 네트워크 구성을 검증하기 위해 Cosmos SDK v0.50.1 기반으로 체인을 구성하고 chain-id·denom·스테이킹 파라미터를 목적에 맞게 조정한 뒤, 사내 PC 기반 Ubuntu Linux 환경에서 밸리데이터 노드 4대와 RPC 노드 2대를 연결한 P2P 테스트넷 인프라를 구축했습니다. 또한 PingPub 대시보드를 연결해 테스트 네트워크의 노드 상태를 실시간으로 확인할 수 있도록 했습니다.
  • 노드 빌드 및 설치 자동화
  • 다양한 OS 환경에서 노드를 일관되게 실행할 수 있도록 Makefile 기반 바이너리 빌드Shell 스크립트 기반 설치 자동화를 구성했습니다. 이를 통해 반복적인 노드 설치 과정을 표준화하고 테스트넷 구성 시간을 줄였습니다.

Opus DID Wallet

DID(Decentralized Identity) 기반 블록체인 지갑 연구 및 프로토타입 개발 참여2023.02 ~ 2023.06
Researcher
Docker
JavaScript
HyperLedger
  • DID 프로세스 시나리오 연구 및 설계
  • 기존 카드 태깅 방식은 인증 수단이 분실되거나 양도되면 본인 여부를 확인할 수 없다는 한계가 있었습니다.
    이를 신원 증명 문제로 보고, 회사가 Issuer로서 QR 코드를 통해 직원(Holder)에게 VC(Verifiable Credentials)를 발급하고, 직원이 출퇴근 시스템(Verifier)에 VP(Verifiable Presentation)를 제출해 증명하는 출퇴근 인증 프로세스를 설계했습니다. 인증 정보를 중앙 시스템이 아니라 사용자가 보유하는 구조로 두어, 개인정보를 최소한으로 제출하면서 본인을 증명할 수 있도록 했습니다.
  • Hyperledger 기반 DID 인프라 연구 및 프로토타입 개발
  • 설계한 인증 프로세스가 실제로 동작하는지 확인하기 위해 Hyperledger VON·Aries Cloud Agent·Indy Tails Server로 테스트 환경을 구성하는 작업에 참여했습니다. VC 발급과 VP 검증 흐름을 개념 증명(PoC)으로 검증해, 데이터 주권을 사용자에게 두는 신원 인증 구조가 기술적으로 성립한다는 것을 확인했습니다.

Other Experience

OpenSource

2025.09.25 IBC 트랜잭션 모니터링을 개발하던 중, 비정상적인 packet timeout height를 가진 트랜잭션을 발견하고 ibc-go의 타임아웃 검증 로직을 분석했습니다. RevisionNumber 설정에 따라 패킷 타임아웃이 사실상 우회될 수 있는 문제를 확인했고, v8.x.x 환경에서 Docker 기반 PoC와 CLI 재현 절차를 구성해 이슈로 제보하고, 이후 수정 PR을 제출했습니다.
Go
Docker
  • 개선 필요성
  • SendPacket(), Timeout.Elapsed(), heightElapsed(), Height.Compare() 흐름을 코드 레벨에서 추적했습니다. RevisionNumber가 RevisionHeight보다 우선 비교되는 구조가 체인 업그레이드를 고려한 합리적인 설계임을 이해하는 동시에, 비정상적으로 높은 RevisionNumber가 설정되면 타임아웃 판정이 사실상 미래 시점으로 밀릴 수 있는 원인을 확인했습니다.
  • 재현 및 해결 방향 제안
  • simapp 2개와 Hermes relayer를 Docker Compose로 구성해 v8.x.x 환경에서 문제를 재현하고, 여러 체인의 ibc-go 사용 버전을 확인해 프로덕션 영향 가능성을 검토했습니다. 이후 ibc-go V2에서는 timeout height 대신 timestamp 중심으로 전환되는 방향을 확인하고, V1 환경을 위한 SendPacket()의 RevisionNumber 사전 검증과 heightElapsed() 로직 개선안을 코드와 함께 제안했습니다.
  • 수정 PR 구현 및 제출
  • 제안한 방향을 직접 구현해 수정 PR을 제출했습니다. 패킷 커밋먼트가 기록되기 전 SendPacket()에서 타임아웃 높이의 RevisionNumber가 상대 클라이언트의 현재 리비전을 넘어서면 거부하도록 하고, 리비전 개념이 없는 solomachine 클라이언트는 예외로 분기해 기존 동작이 깨지지 않도록 했습니다.
    상태 머신에 영향을 주는 변경이라 클라이언트 타입별 케이스를 테스트로 추가했으며, 현재 리뷰가 진행 중입니다.
2023.07.23 회사 DID 연구/PoC에서 revocation registry 동작을 검증하려 Indy Tails Server 데모를 실행하던 중 발견한 Docker 빌드 실패의 원인을 찾아 수정 PR로 기여했습니다.
Docker
Python
Hyperledger Indy
  • 개선 필요성
  • VC/VP 검증 흐름을 실험하기 위한 Indy Tails Server 데모 환경을 구성하던 중 Docker 컨테이너의 pip 설치 단계에서 indy_vdr 설치 오류가 발생하는 것을 확인했습니다. requirements 파일과 패키지 버전을 비교하며 원인을 좁히고, 특정 dev 버전에서 정상적으로 빌드되는 조건을 확인했습니다.
  • 해결 및 기여
  • 재현 가능한 해결 방법으로 indy_vdr 버전 명시를 제안하는 PR을 작성했습니다. 해당 변경은 프로젝트에 반영되어 Docker 데모 환경에서 동일한 설치 오류가 발생하지 않도록 개선되었습니다.

Hackathons

2025.12
Lead Engineer
Sui Foundation과 Walrus Foundation이 주최한 Walrus Haulout Hackathon 2025에서 개인정보를 암호화한 상태로 AI 채용 매칭을 수행하는 플랫폼 'Tusk'로 Best Technical Implementation을 수상했습니다.
5인 팀의 리드로 아키텍처 설계부터 프론트엔드 개발, 배포, 문서화까지 프로젝트 전반을 이끌었습니다.
Sui
Move
Seal
Walrus
TypeScript
Next.js
  • 프라이버시 중심 채용 플로우 설계
  • Sui 객체 모델을 활용해 구직자 이력서 등록, 채용 담당자 검색, 접근 권한 요청/승인/거절, 이력서 열람까지의 제품 플로우를 설계했습니다. Seal 기반 암호화 접근 제어와 Walrus 탈중앙화 스토리지 연동을 통해 개인정보 접근 권한과 데이터 주권을 함께 고려한 구조를 구성했습니다.
  • 프론트엔드 구현과 제품 완성도 개선
  • Next.js와 TypeScript 기반으로 프로젝트 초기 세팅을 진행하고, Sui 네트워크 프로바이더지갑 연결 환경을 구성했습니다. 랜딩페이지 개발과 배포를 담당했으며, QA 과정에서 발견된 이슈를 직접 개선하고 README와 아키텍처 다이어그램을 작성해 짧은 기간 안에 제품 이해도와 완성도를 높였습니다.

Activities

Blockchain Valley

2025.09 ~ 2026.06고려대학교 기반 블록체인 학회 블록체인 밸리 8기 코어팀으로 활동했습니다.
  • Cosmos 기반 인터체인 아키텍처 및 앱체인 구조 연구
  • Cosmos SDK와 IBC 프로토콜을 기준으로, 특정 도메인에 특화된 App Chain이 어떻게 설계되고 다른 체인과 연결되는지를 구조 단위로 정리했습니다.
  • 합의 알고리즘과 기존 취약점 사례 분석
  • CometBFT와 Tendermint의 합의 구조를 코드 단위로 따라가며, 과거 보고된 합의 과정의 주요 취약점이 어느 지점에서 발생했는지 분석했습니다.