김선규
Frontend Developer
Introduction
안녕하세요. 프론트엔드 개발자 김선규입니다.
성능 최적화와 오픈소스 기여를 통해 사용자 경험 향상을 목표로 하고 있습니다. 단순히 기능을 구현하는 것을 넘어, 프레임워크의 내부 동작 원리를 파악하여 최적의 사용자 경험을 설계하는 데 강점이 있습니다. Meta 오픈소스 프로젝트에 기여하며 로직을 개선하고 협업 경험을 쌓고 있습니다.
Open Source
Markdown 포맷 변환 로직 개선을 위한 CommonMark Delimiter Algorithm 도입
PR →facebook/lexical
- Markdown을 텍스트로 변환 시, 정규표현식 기반의 파싱 로직의 한계로 인해 중첩된 강조 구문(Bold/Italic)이 올바르게 변환되지 않는 이슈를 해결했습니다.
- CommonMark Spec을 분석하여, 강조 적용 여부를 결정하는 Delimiter Run 스캔과 스택 기반의 매칭 로직을 구현한 Delimiter Algorithm을 도입하여 해결했습니다.
- 기존 로직을 전면 교체하여 표준 스펙 준수율을 높이고 파싱 정확도를 개선했습니다.
Markdown 직렬화 과정의 포맷팅 버그 수정
PR →facebook/lexical
- Markdown 직렬화 과정에서 최적화 로직으로 인해 Link와 포맷 태그가 충돌하는 버그를 수정했습니다.
- 불필요하게 복잡했던 형제 노드 탐색 로직을 직계 형제 노드까지로 단순화했습니다.
- 엣지 케이스 테스트 통과와 디버깅 결과를 통해 로직 단순화의 타당성을 입증해 PR이 머지되었습니다.
CSS 컴파일 과정의 단위 최적화 버그 수정
PR →facebook/stylex
- 컴파일러 최적화 단계에서 값이 0인 CSS 변수가 단위가 누락되어 calc 연산이 실패하는 문제를 해결했습니다.
- Babel Plugin의 AST 변환 로직을 분석하여, CSS 변수에는 단위 를 보존하도록 예외 처리를 추가했습니다.
- 스타일 연산 오류를 방지하고, 레이아웃 안정성을 확보했습니다.
Projects
AVALON
Repository →TypeScript, Next.js, React, Zustand, Tailwind CSS, Git
프로젝트 소개
요구사항·설계 문서만으로 테스트 대상을 식별하고 시나리오를 작성할 때, 생략이나 오류가 발생하기 쉽고 품질 확보에 한계가 있습니다. 개발 문서를 분석하여 테스트 대상 함수를 식별하고, AI를 활용해 테스트 시나리오를 자동 생성하는 도구를 개발해 품질 확보를 이루었습니다.
성과 및 기여
- Next.js 기반 사용자 경험 개선
- AI 시나리오/테스트케이스 생성 시 대기 시간이 길어 사용자 경험이 저하되는 이슈가 있었습니다.
- Next.js SSR과 CSR을 혼합한 하이브리드 렌더링을 적용해, 대기 중에도 UI를 먼저 보여주어 사용자 경험을 개선했습니다.
- Zustand 기반의 전역 상태 관리 및 데이터 정합성 유지
- 프로젝트·시나리오·테스트케이스 데이터가 페이지별로 분산되어 전환 시 API 재요청과 데이터 불일치가 발생했습니다.
- Zustand로 전역 상태를 관리하고, 페이지 전환 시 캐시된 값을 우선 사용해 데이터 불일치를 방지했습니다.
- Mock 환경 구축을 통한 프론트-백엔드 병렬 개발
- 백엔드 API 완성 전까지 프론트엔드 개발이 지연되고 연동 시점에 인터페이스 불일치가 발견되는 문제가 있었습니다.
- API 명세를 기반으로 json-server로 Mock API 서버를 구축하여, 프론트엔드가 독립적으로 개발·테스트할 수 있도록 했습니다.
3D Fireworks Simulation
Repository →TypeScript, Next.js, React, Three.js, Zustand, Rust/Wasm
프로젝트 소개
웹 브라우저에서 3D 공간에 불꽃놀이를 배치하고, 저장된 불꽃놀이를 발사해 감상할 수 있는 실시간 시뮬레이션입니다. Three.js와 Rust/Wasm을 활용해 수천 개의 3D 불꽃놀이를 웹 브라우저에서 렌더링하도록 구현했습니다.
성과 및 기여
- Three.js 불꽃놀이 구현
- Three.js로 6가지 타입의 불꽃놀이 렌더링을 구현했고, Stats.js로 모니터링 환경을 구축해 성능을 측정했습니다.
- 500개 입자를 InstancedMesh로 통합해 단일 Draw Call로 렌더링함으로써, 3fps에서 58fps로 약 19배 성능을 개선했습니다.
- Rust/Wasm 기반 물리 연산 최적화
- 불꽃놀이 발사와 입자 확산의 행렬 연산을 Rust/Wasm 모듈로 분리해 구현했습니다.
- JS/WASM 전환이 가능한 듀얼 모드를 구성했고, 3000개 동시 발사 환경에서 JS 대비 약 1.8배 성능 향상을 달성했습니다.
BinAIDA
Link →C, C++, LLVM, LLM
프로젝트 소개
바이너리 리프터가 컴파일 과정에서의 정보 손실로 인한 바이너리 파일을 고수준 코드 복원의 한계를, LLM(BERT)으로 보완하여 정밀도를 높이는 분석 도구를 개발했습니다. 이를 통해 개발자가 바이너리를 더 정확히 이해·분석할 수 있는 환경을 구축했습니다.
성과 및 기여
- 바이너리 리프터 분석 및 문제점 탐색
- 210개의 컴파일러 테스트를 기반으로 오픈소스 바이너리 리프터 4종의 정밀도를 평가했습니다.
- 통과율 93.6%로 가장 우수한 McSema를 AI 적용 대상 바이너리 리프터로 선정했습니다.
- BERT 모델 학습용 데이터셋 구축
- POJ-104 데이터셋에 커스텀 LLVM-Pass를 적용하여 52,000 개의 소스-바이너리 쌍을 자동으로 생성하는 파이프라인을 구축했습니다.
- 학습 결과 Validation Loss 0.40 수준의 안정적인 모델을 구축했습니다.
Precise Leak Sanitizer
Repository →C, C++, LLVM, Git
프로젝트 소개
기존 메모리 누수 탐지 도구는 누수 발생 시 할당 시점만 출력해, 실제 누수 발생 지점을 특정하기 어려웠습니다. 이를 개선하기 위해 누수 발생 지점을 정확히 탐지하는 도구를 개발했습니다.
성과 및 기여
- 오픈소스 LLVM-Project의 Sanitizer 모듈 기반의 구현
- Reference Counting 기법을 적용한 런타임 라이브러리를 개발하여 메모리 할당 및 해제 시 메모리 주소의 참조 횟수를 추적했습니다.
- 메모리 누수 발생 시 해당 지점을 출력하는 Stack Trace 기능을 구현해 사용자가 정확한 문제 지점을 파악할 수 있게 했습니다.
- 메모리 오버헤드를 기존 도구 대비 27배에서 1.5배, 런타임 오버헤드를 400배 이상에서 16배로 최적화했습니다.
- 메모리 누수 탐지 정확도 테스트
- 메모리 누수 발생 위치를 정확히 특정하는 테스트 케이스가 없어 검증이 어려웠습니다.
- LLVM Integrated Tester로 기존 테스트를 정제해 17개의 테스트 케이스를 생성하고, 15개를 통과시켜 도구의 높은 정확도를 입증했습니다.
Experience
학부 연구생
2023.03 - 2023.12소프트웨어 분석 및 테스팅 연구실
학부 연구생 프로젝트로 "BinQL: 바이너리 파일 내 Indirect Jump 주소 연산 도구"를 개발했습니다.
Certificates & Completion
IITP Korean Software Square Winter 2024 Program
2024.01 - 2024.02Purdue University(USA)
미국 해외 연수 과정에서 "PLsan: 소스 코드 내 메모리 누수 발생 지점 탐지 도구"를 개발했습니다.
Awards
2024 CNU SW/AI Project Fair 우수상
2024.06Chungnam National University
학과 프로젝트 경진대회에서 "BinAIDA: AI를 활용한 바이너리 리프터 성능 향상"을 주제로 우수상을 받았습니다.
2024 CNU SW/AI Project Fair DevDay 코딩경진대회 금상
2024.06Chungnam National University
교내 코딩경진대회에서 금상(3위)을 수상했습니다.
Education
Chungnam National University
2019.03 - 2025.02Computer Science and Engineering
SKALA: SK AI Leadership Academy
2025.02 - 2025.07SK AX