김선규
Frontend Developer
Introduction
프론트엔드 개발자 김선규입니다. React와 NextJS를 활용해 사용자 경험을 고려한 UI를 구축합니다. LLVM 기반의 저수준 프로그램 개발 경험을 통해 컴파일러 지식을 쌓았으며, 이를 바탕으로 프론트엔드 코어 로직 개발을 하고 있습니다. 안정적인 UI 서비스 제공을 목표로 하고 있습니다.
Open Source
facebook/lexical
PR List→TypeScript, Markdown
- 웹 텍스트 에디터 프레임워크로 9개 이상의 PR을 기여했습니다.
- Issue: Markdown을 텍스트로 변환 시 중첩된 강조 구문들이 올바르게 변환되지 않음
- 정규표현식을 기반으로 강조 구문을 변환하여 Spec에 명시된 복잡한 조건을 만족하지 못 했습니다.
- Stack 기반의 구분자 알고리즘으로 강조 구문의 열고 닫음을 판단하며 Spec을 준수하도록 했습니다.
- 0.40.0 릴리즈의 주목해야 할 변화로 선정되었습니다.
- Issue: 크로스 브라우저 환경에서 IME 입력 시 첫 번째 문자가 사라짐
- macOS의 Chrome 브라우저에서 조합형 문자 입력 시 삽입되는 특수문자로 인해 입력이 드래그되어 이후 입력으로 인해 첫 번째 입력이 사라졌습니다.
- 조합형 문자 입력 후 특수 문자를 제거하는 로직을 추가하고 undo history에 제거 기록을 병합하여 문제를 해결했습니다.
facebook/stylex
PR List→TypeScript, CSS, Babel, ESLint
- Zero-runtime의 특징을 가진 CSS-in-JS 라이브러리로 2개 이상의 PR을 기여했습니다.
- Issue: 트랜스파일링 과정에서 CSS 변수 단위 누락
- TypeScript 코드를 CSS로 변환하는 과정에서 0인 값들의 단위를 제거하면서, CSS 변수를 사용하는 함수에서 단위가 존재하지 않아 잘못된 연산 결과를 생성했습니다.
- Babel-plugin의 AST 최적화 과정에서 값이 0인 CSS 변수인 경우 단위를 보존하도록 했습니다.
Projects
AVALON
Repository →TypeScript, Next.js, React, Zustand, Tailwind CSS, Git
프로젝트 소개
요구사항·설계 문서만으로 테스트 대상을 식별하고 시나리오를 작성할 때 생략이나 오류가 발생하기 쉽고 품질 확보에 한계가 있습니다. 개발 문서를 분석하여 테스트 대상 함수를 식별하고 AI를 활용해 테스트 시나리오를 자동 생성하는 도구를 개발해 품질 확보를 이루었습니다.
성과 및 기여
- Next.js 기반 사용자 경험 개선
- AI를 활용하여 시나리오·테스트케이스 생성 시 대기 시간으로 인해 사용자 경험이 저하되었습니다.
- Next.js의 SSR과 CSR을 혼합한 하이브리드 렌더링을 적용해 대기 중에도 UI를 먼저 보여주어 사용자 경험을 개선했습니다.
- Zustand 기반의 전역 상태 관리
- 시나리오·테스트케이스 변경 시 정보가 초기화되어 현재 선택한 페이지의 정보가 다른 컴포넌트와 불일치하는 문제가 있었습니다.
- Zustand를 도입해 전역으로 상태를 관리하고 페이지 전환 시 저장된 값을 사용하도록 해 컴포넌트 간의 데이터가 일치하도록 했습니다.
- Mock 환경 구축을 통한 프론트-백엔드 병렬 개발
- 백엔드 API 완성 전까지 프론트엔드 개발이 지연되고 연동 시점에 인터페이스 불일치가 발견되는 문제가 예상되었습니다.
- API 명세를 기반으로 json-server로 Mock API 서버를 구축하여 프론트엔드가 독립적으로 개발과 테스트를 할 수 있도록 구축했습니다.
BinAIDA
Link →C, C++, LLVM, AI
프로젝트 소개
바이너리 리프터가 바이너리 파일을 고수준 코드로 변환 과정에 AI를 적용하여 정확도를 향상시키는 도구를 개발했습니다. 바이너리 리프터는 휴리스틱 기반의 변환 로직을 사용하여 컴파일 과정에서 발생하는 소스 코드의 정보 손실로 인해 예외 케이스에 잘못 변환하는 문제를 해결했습니다.
성과 및 기여
- 바이너리 리프터 선정 및 분석
- 논문을 탐색하여 바이너리 파일을 LLVM IR로 변환하는 오픈소스 바이너리 리프터 4종을 선정했습니다.
- 210개의 컴파일러 테스트를 기반으로 바이너리 리프터들의 변환 정확도를 평가하고 GDB(Gnu Debugger)를 사용하여 실패 케이스를 분석했습니다.
- 93.6%로 가장 높은 정확도를 가진 McSema를 바이너리 리프터로 선정했습니다.
- BERT 모델 학습용 데이터셋 구축
- POJ-104 알고리즘 데이터셋에 커스텀 LLVM-Pass를 적용하여 52,000 개의 소스 코드-바이너리 쌍을 생성하는 파이프라인을 구축했습니다.
- 학습을 통해 Validation Loss 0.40을 달성하며 안정적인 모델을 구축했습니다.
- 시스템 소프트웨어와 AI를 융합한 독창성을 인정받아 학과 프로젝트 경진대회에서 2위로 우수상을 받았습니다.
Precise Leak Sanitizer
Repository →C, C++, LLVM, Git, GitHub
프로젝트 소개
미국 해외 연수 과정에서 메모리 누수가 발생하면 메모리 영역을 잃어버리는 지점을 정확히 탐지하는 도구를 개발했습니다. 기존의 메모리 누수 탐지 도구는 메모리 누수 발생 시 누수가 발생한 영역의 할당 시점만 출력하여 실제 누수 발생 지점을 특정하기 어려운 문제를 해결했습니다.
성과 및 기여
- 오픈소스 LLVM-Project의 Sanitizer 모듈 기반의 구현
- Reference Counting 기법을 적용한 런타임 라이브러리를 개발하여 메모리 할당 및 해제 시 메모리 주소의 참조 횟수를 추적했습니다.
- 메모리 누수 발생 시 해당 지점을 출력하는 Stack Trace 기능을 구현해 사용자가 정확한 문제 지점을 파악할 수 있게 했습니다.
- 메모리 오버헤드를 기존 도구 대비 27배에서 1.5배, 런타임 오버헤드를 400배 이상에서 16배로 최적화했습니다.
- 메모리 누수 탐지 정확도 테스트
- 메모리 누수 여부를 측정하는 테스트는 존재하지만 누수 발생 위치를 정확히 특정하는 테스트가 없어 정확도 테스트가 어려웠습니다.
- LLVM Integrated Tester를 사용해 기존 테스트를 정제하여 17개의 테스트 케이스를 생성했고 15개를 통과시키며 도구의 높은 정확도를 입증했습니다.
Experience
학부 연구생
2023.03 - 2023.12소프트웨어 분석 및 테스팅 연구실
학부 연구생 과정에서 "바이너리 파일 내 Indirect Jump 주소 연산 도구"를 개발했습니다.
Certificates & Completion
IITP Korean Software Square Winter 2024 Program
2024.01 - 2024.02Purdue University(USA)
미국 해외 연수 과정에서 "소스 코드 내 메모리 누수 발생 지점 탐지 도구"를 개발했습니다.
Awards
2024 CNU SW/AI Project Fair 우수상
2024.06Chungnam National University
학과 프로젝트 경진대회에서 "AI를 활용한 바이너리 리프터 성능 향상"을 주제로 우수상(2위)을 받았습니다.
2024 CNU SW/AI Project Fair DevDay 코딩경진대회 금상
2024.06Chungnam National University
교내 코딩경진대회에서 금상(3위)을 수상했습니다.
Education
Chungnam National University
2019.03 - 2025.02Computer Science and Engineering