본문으로 건너뛰기
← 프로젝트로 돌아가기
예상 PDF 계산 중페이지 넘침 1

포트폴리오 빌더는 데스크톱 전용임. 3분할 편집기와 A4 페이지 프리뷰가 필요하므로 1280px 이상 화면에서 사용할 것.

PORTFOLIO

행이 유지되는 타임라인 패키지부터, 이력서와 포트폴리오를 조립하는 개인 홈페이지까지 — 만들고, 문제를 해결합니다.

React, FastAPI, pandas

  • 3초+ → 0.6초

    연금 앱 메인 화면 로딩

  • 40초+ → 0.1초

    수집 관측 대시보드 첫 화면

  • 4시간 → 30분

    크롤러 전체 행 교체 배치 (MySQL)

노기윤

FullStack Engineer

연락처

mogiyoon@gmail.com

사진

노기윤

mogiyoon@gmail.com

소개

행이 유지되는 타임라인 패키지부터, 이력서와 포트폴리오를 조립하는 개인 홈페이지까지 — 만들고, 문제를 해결합니다.

  • 학습 앱, Chrome 확장 프로그램, NPM 라이브러리를 직접 만들고 배포하며 개인의 불편을 다시 쓰이는 도구로 바꿔온 경험
  • 멀티모달·컴퓨터 비전 기능과 AI 활용 테스트·문서화 워크플로를 실제 제품 개발에 연결해온 경험
  • 구조·데이터 흐름·성능 이슈를 추적해 메인 로딩 3초 이상을 0.6초로, 중복 API 호출을 수십 회에서 3~4회로 줄인 성능 개선 경험
  • 60여 suites·800여 tests·문서 11건의 테스트 체계를 구축하고 번들 크기를 110MB에서 80MB로 줄인 검증·최적화 경험

경력

딥트레이드 테크놀러지스2025.09 ~ 재직중

풀스택 개발자

가마초등학교2023.03 ~ 2025.02

담임교사

기술 스택

프론트엔드React · React Native · Expo · Next.js · TanStack Query · Redux · Zustand · Tailwind CSS
백엔드FastAPI · Node.js · NestJS · MySQL · PostgreSQL · PostGIS · Redis
데이터pandas · Selenium
언어TypeScript · JavaScript · Python · SQL
테스트·환경Jest · AWS (EC2 · S3 · CloudFront) · Docker · Firebase
AIClaude Code · MCP · Multi-Agent Orchestration

학력 & 교육

  • 한국방송통신대학교컴퓨터과학과(4학년) · 학사 (재학) · 2025.03 ~ 2027.02 (졸업 예정)
  • 크래프톤 정글 교육 과정 이수2025.03 ~ 2025.07
  • 제주대학교초등교육학과 · 학사 (졸업) · 2019.03 ~ 2023.02

수상

  • 서울시 AI 해커톤 대상 (서울특별시장상)2025.10
  • 제주지역 대학창의발명대회 은상 (2등)2019.11

자격증

  • 정보처리기사한국산업인력공단 · 2026.09
  • SQLD한국데이터산업진흥원 · 2025.12
  • 교원자격증제주대학교 · 2023.02
2

Recho

프로젝트 개요

2025.06 ~ 2025.07

음악인들이 소통할 수 있는 커뮤니티 플랫폼

Recho
Recho architecture
아키텍처

담당 역할

백엔드, 프론트엔드, ERD 설계, ffmpeg 활용, AWS 서버 구축, WebView 앱 대응(뒤로가기·화면 확대·구글 로그인)

기술 스택

Nest.jsReactReact NativeffmpegAWSPostgreSQL

주요 기능

ffmpeg 필터 체인 합성

검은 화면 위에 클립마다 구간을 잘라 크기를 맞춘 영상을 차례로 겹쳐 합성함. 오디오는 클립별 음량과 이퀄라이저를 적용한 뒤 하나로 섞음.

모집글·파트·지원자 3단 엔티티

악기 파트를 별도 엔티티로 분리해 모집글·파트·지원자의 3단 구조로 관리함. 게시물을 수정해도 지원자와 파트의 연결이 유지됨.

댓글·좋아요 공용 모듈

게시판별로 댓글과 좋아요를 구현하지 않고 각각 단일 모듈로 통합함. contentType 칼럼으로 게시판을 구분하고 게시물 ID 타입에 따라 엔티티를 두 종류로 제한함.

네이티브 오디오 세션 제어

disableAudioSessionManagement 옵션으로 iOS 오디오 세션을 제어해 영상 재생과 카메라 녹화를 동시에 수행함.

3

Recho / 주요 기능·개발 과정

ffmpeg를 활용한 동영상 병합 로직 구현

짧은 영상 기준다운 스케일링영상 A싱크 맞춤영상 B이퀄라이저 조정ffmpeg 필터 체인병합 영상S3 업로드
두 영상이 싱크 맞춤과 이퀄라이저 조정을 거쳐 ffmpeg 필터 체인으로 병합되고, 다운 스케일링 후 S3에 업로드됨.
영상 편집 화면
영상 편집 화면

배경

연주 영상을 둘로 합치는 ‘합주’하기 기능을 구현하기 위해서 입력된 동영상의 싱크를 맞추고 이퀄라이저를 조절하여 영상을 병합하는 과정이 필요함.

구현 방식

검은 화면을 먼저 배치하고, 클립마다 구간을 잘라 크기를 맞춘 뒤 그 위에 차례로 겹치도록 필터를 구성함. 오디오는 클립별 음량과 이퀄라이저를 적용한 뒤 하나로 섞음. S3 업로드와 비디오 컴포넌트 충돌을 막기 위한 다운 스케일링*에도 ffmpeg를 사용함.

4

Recho / 주요 기능·개발 과정

컴포넌트 리팩토링

기존 컴포넌트 조합영상 업로드공통 컴포넌트 분리동시 재생·녹화ffmpeg 네이티브 이식영상 병합·편집하나의 연결된 흐름새 페이지 구성
팀원 4명이 따로 구현한 기능을 공통 컴포넌트로 분리·통합해 하나의 흐름으로 연결하고, 새 페이지는 기존 컴포넌트 조합으로 구성함.
리팩토링된 컴포넌트
리팩토링된 컴포넌트

배경

팀원들이 각자 구현한 기능(영상 업로드, 영상 동시 재생/녹화, ffmpeg 라이브러리 네이티브 이식, 영상 병합 및 편집)을 하나로 연결된 기능으로 리팩토링해야 함.

구현 방식

각 페이지별 공통 컴포넌트를 분리하고 특정 함수들은 리팩토링하고 새로운 페이지를 만들어 관련 컴포넌트 및 기능으로 재구성함.

결과

팀원 4명이 각각 구현한 기능을 공통 컴포넌트로 통합해 하나의 흐름으로 연결함. 이후 새 페이지는 기존 컴포넌트를 조합해 구성함.

5

Recho / 주요 기능·개발 과정

합주 세션 모집 게시판 구현

수정 시 인덱스 밀림1:N1:N모집 인원·현재 인원게시물 컬럼의 배열매핑 깨짐 위험모집글악기 파트 엔티티지원자파트별 인원 집계수정 후에도 파트 연결유지
악기 파트를 배열 컬럼 대신 별도 엔티티로 — 모집글 > 악기 파트 > 지원자의 3단 구조.
합주 모집 게시판 및 합주 모집 등록 화면
합주 모집 게시판 및 합주 모집 등록 화면

배경

합주를 위해 사람을 모집하는 게시판을 구현해야 함. 글 작성자는 악기와 인원 수를 정해 올리고, 지원자가 하나의 세션에 신청하는 구조임. 악기 파트를 배열 칼럼으로 저장하면 지원자의 신청 파트가 배열 인덱스로 기록됨. 글 작성자가 중간 파트를 삭제하면 이후 파트의 인덱스가 한 칸씩 이동함. 이에 따라 기존 지원자가 다른 악기에 연결됨.

구현 방식

따라서 악기 파트를 별도 엔티티로 분리해 모집글 - 파트 - 지원자 3단 구조로 관리함. 파트 엔티티에 악기명과 모집 인원, 현재 인원을 두어 파트별로 인원을 셈. 모집글 수정은 Nest.js 서비스에서 기존 파트와 요청 파트를 ID로 비교해 추가·수정·삭제로 나눈 뒤 한 트랜잭션으로 반영함.

결과

게시물을 수정해도 지원자와 파트의 연결이 유지됨.

6

Seoul Meari

프로젝트 개요

2025.08 ~ 2025.09

시민이 남기는 AR 방명록, AI가 설명하는 도슨트, 과거로 돌아가는 VR 역사 체험 및 이를 바탕으로 한 AI 도시 진단을 결합한 소셜 플랫폼

Seoul Meari

담당 역할

유니티, 프론트엔드, 백엔드, AR/VR 활용, AWS 서버 구축

기술 스택

ReactNest.jsFastAPIUnityC#AR/VRAWSPostgreSQLPostGIS

주요 기능

격자 기반 메시지 스트리밍

GPS 영역을 격자로 분할해 진입 격자와 이탈 격자를 큐로 전달함. 생성된 오브젝트는 해시 테이블로 관리함.

GPS 좌표 스무딩

보정 좌표를 이전 값과 새 값 사이에서 0.1의 비율로 이동시켜 GPS 좌표 변동을 완화함.

XR·Cesium 카메라 통합

메인 카메라를 제거하고 Dynamic 카메라에 Tracked Pose Driver를 적용함. 이를 통해 XR Origin과 Cesium Georeference 간 카메라 충돌을 해결함.

에셋 번들 CDN 로딩

패키지 메타데이터를 조회한 뒤 CDN 병렬 다운로드와 로컬 캐시를 적용함. 매니페스트·의존성·타겟 번들 순으로 에셋 번들을 로드함.

위치 데이터 저장·조회 (PostGIS)

AR 메시지와 VR 장면 위치를 PostGIS geography(PointZ, 4326) 열에 저장함. 앱이 현재 위치 주변 5×5 격자를 차례로 요청하면, 서버는 격자별 위도·경도 범위(ST_Y·ST_X) 안의 메시지만 반환함.

7

Seoul Meari / 주요 기능·개발 과정

공간 메아리 (AR 방명록)

격자 내 메시지 호출ID 등록언로드사용자 이동현재 GPS 격자 판정생성 큐오브젝트 스폰해시 테이블 관리격자 이탈
격자 단위로 메시지를 호출하고 큐로 스폰해 해시 테이블로 관리함.
앱 기반 AR 카메라에서 남기는 위치 고정 소셜 시스템
앱 기반 AR 카메라에서 남기는 위치 고정 소셜 시스템

구현 내용

GPS 영역을 격자로 나누고, 사용자 이동 시 해당 격자의 메시지를 불러옴. 진입 격자와 이탈 격자를 큐로 전달함. 생성된 오브젝트는 해시 테이블로 관리함.

8

@mogiyoon/react-stable-timeline

프로젝트 개요

2026.05 ~ 2026.08

팬·줌 시에도 사건 카드가 같은 행에 유지되는 React 타임라인 컴포넌트 라이브러리

@mogiyoon/react-stable-timeline

형태

개인 프로젝트

기술 스택

ReactTypeScriptCanvas2Dtsupvitestnpm Package

주요 기능

행 고정 배치

전체 데이터를 기준으로 빈자리가 있는 첫 번째 행에 배치하는 first-fit 방식을 사용해, 팬·줌 시에도 사건 카드가 같은 행에 유지됨

라벨 폭 정밀 측정

Canvas2D measureText로 한글·CJK·혼용 텍스트의 실제 폭을 정확히 측정함

줌·팬 인터랙션

100%(fit) ~ 5000% 범위의 앵커 줌, 두 손가락 스크롤 팬, ⌘/Ctrl + 휠 줌, 터치 핀치 줌이 모두 지원됨

드래그 앤 드롭

카드 이동과 기간 조절을 드래그와 키보드로 지원하며, 원본 데이터를 바꾸지 않고 콜백으로 새 시간 값을 전달함

헤드리스 & 가상화

useTimeline 훅으로 엔진만 따로 쓸 수 있고, 가상화로 사건 2만 개도 약 200개의 DOM 노드로 렌더링함

Controlled / Uncontrolled

viewportStart/End props를 사용해 외부 시간바와 양방향으로 연동하거나, 뷰포트를 컴포넌트 내부에서 관리할 수 있음

9

@mogiyoon/react-stable-timeline / 주요 기능·개발 과정

줌·팬 때마다 행이 바뀌는 문제를 확인하고 직접 구현함

옵션이 아닌 배치 기준의 문제vis-timeline화면 구간 기준 행재계산줌·팬 시 카드 행 이동vis-timeline 제거행 고정 모드 포함직접 구현
행 이동의 원인이 세부 옵션이 아니라 화면 구간 기준 재계산 구조에 있어, vis-timeline을 제거하고 행 고정 모드를 포함해 직접 구현함.

배경

도감의 연표에 사용할 타임라인 컴포넌트를 처음에는 vis-timeline으로 구성함. 같은 시간대의 사건이 겹치지 않도록 여러 행에 나누는 기능은 정상적으로 동작함. 그러나 화면에 보이는 구간만 기준으로 행을 매번 다시 계산하는 구조여서, 줌·팬을 할 때 사건 카드가 다른 행으로 이동했음.

검토 과정

한번 정한 행은 줌·팬 뒤에도 유지되는 편이 사용하기 쉽다고 판단함.

구현 방식

세부 옵션으로 해결할 수 있는 문제가 아니라 행을 정하는 기준 자체의 문제였음. 이에 vis-timeline을 제거하고, 행을 고정하는 모드를 포함한 타임라인을 직접 구현함.

10