HWANG JUNHYEOK · PORTFOLIO 2026
사용자가 겪는 문제를 실제 제품에서 작동하는 기능으로 풀고, AI 실행과 검증 조건을 설계합니다.
CONTACT
WEB
GITHUB

안녕하세요
HWANG JUNHYEOK · JUSTN
AI-native Product Engineer
2024.03 - 2027.01
부산소프트웨어마이스터고 소프트웨어개발과 졸업 예정
2025.07 정보처리산업기사
2026.03 SQL 개발자 (SQLD)
2026.04 리눅스마스터 2급
AI-native 제품 개발
사용자 문제를 화면·API·AI 기능으로 구현하고, 실패와 검증 조건까지 제품에 연결합니다. 개발 과정에서도 agent가 반환한 코드와 실행 결과를 다시 확인합니다.
기반 역량 · Frontend
TypeScript·React·Next.js로 사용자 흐름을 구현합니다. 입력과 제출, 편집 상태와 복원이 일치하도록 조건을 정합니다.
입력과 복구에서 AI 실행·검증까지 확장합니다.
01
Maru의 입력 · 제출과 자갈치의 저장 · 복원
02
자갈치플랫폼의 실행 실패 처리와 코드 버전 재검증
03
에이전트가 반환한 결과를 다시 확인하고 사람이 승인하는 과정
04
제품 팀과 공개 프로젝트 조직의 서로 다른 책임
05
React Flow · Gajae Code의 문제 재현과 공개 반영
사용자가 보는 입력과 실제 제출값의 일치
함께 바뀐 편집 상태를 같은 시점으로 복원
부산소프트웨어마이스터고 입학 전형 서비스
입학전형 지원서에서 사진 업로드의 단계 진입 조건과 지원 유형별 제출값을 수정했습니다. 화면에 보이는 입력과 전송 데이터가 어긋나는 두 문제를 다뤘습니다.

#입학 전형 서비스 #Frontend · DX
기간
2025.04 – 2025.11
GitHub
기여
01 사진·URL 동시 검증
02 검정고시 학교 정보 제거
기술
Next.js · React · TypeScript · Recoil · TanStack Query
Maru · 입학전형 지원서
증명사진을 선택한 뒤에도 URL 반영 시점에 따라 다음 단계 검증이 실패할 수 있었습니다.
지원자 정보와 업로드 주소가 서로 다른 시점에 갱신됐습니다. 사진이 보여도 다음 단계 값은 아직 준비되지 않을 수 있었습니다.
다음 단계 버튼을 누른 시점의 이미지와 업로드 주소를 함께 읽어 진입 조건을 판단하도록 바꿨습니다.
사진과 업로드 주소가 준비되면 지원자가 다음 단계의 사진 검증을 통과하도록 했습니다.
다음 단계 검증 기준
2개 상태
보이는 이미지와 업로드 주소를 같은 시점에 확인합니다.
이미지 미리보기
READY
AND
업로드 URL
READY
두 값이 모두 준비되면
다음 단계 진입 조건 충족
구현 조건
image && (downloadUrl || uploadUrl)
Maru · 전형별 입력
검정고시를 선택하면 학교 입력 항목은 화면에서 사라집니다.
표시 조건만 바뀌어 이전 학교 정보가 form과 payload에 남을 수 있었습니다.
제출 직전에 graduationType을 확인하고 학교 관련 7개 필드를 null로 만들었습니다.
검정고시 지원서에서 이전에 입력한 학교 정보가 전송되지 않도록 했습니다.
BEFORE · 화면만 변경
학교 정보는 숨겨졌지만
입력 상태에는 이전 값이 남았습니다.
화면과 실제 전송 값이 서로 다른 상태였습니다.
AFTER · 제출값도 변경
지원 유형을 다시 확인하고
학교 관련 7개 값을 비웠습니다.
검정고시 전형에서는 학교 관련 값을 비웁니다.
결과
보이는 조건과 보내는 조건을 하나의 기준으로 맞췄습니다.

개발자 학습 경로를 만드는 노드 편집기
노드와 선으로 학습 경로를 만들고 공유하는 6인 팀 프로젝트입니다. 학습 경로 편집기의 상태·저장·복구 구현을 맡았습니다.

#Team Lead · Frontend Lead · PM
기간
2025.12 – 2026.04
GitHub
기여
01 변경 빈도와 역할에 따른 상태 분리
02 노드·선의 통합 실행 취소와 복원
03 노드 순서 변경도 감지하는 자동 저장
04 손상 항목만 제외하는 부분 복구
05 복사한 노드의 ID와 연결 관계 갱신
기술
Next.js · React · TypeScript · Jotai · React Flow
자갈치 · 노드 편집기
노드와 선을 함께 바꾸고, 실행 취소도 그래프 전체를 한 시점으로 복원해야 했습니다.
노드와 선의 기록을 따로 관리해, 한 번의 실행 취소에서 서로 다른 시점이 선택됐습니다.
독립적으로 바뀌는 상태는 나누고, 실행 취소에서 함께 돌아가야 하는 노드와 선은 하나의 편집 이력으로 묶었습니다.
사용자가 실행 취소하거나 다시 실행할 때, 노드와 연결선이 같은 편집 시점으로 복원되도록 했습니다.
이전 구조
노드
선
t-1
t-2
서로 다른 시점
통합 후
실행 취소
EditorState
{ nodes, edges } snapshot
결과
한 번의 실행 취소가 하나의 그래프를 복원합니다.
AI 호출·작업 실행·제출 코드 상태를 검사와 사람 승인으로 확인합니다.
자갈치플랫폼
개인 주도 제품
AI 호출 경로와 실패·성공 처리 흐름을 구현했습니다. 호출 전 사용량을 예약하고, 실패하면 반환하며 성공하면 확정합니다. closed-alpha에서는 생성 품질이 아닌 실행 경계와 실패 처리를 확인했습니다.

#개인 주도 제품 #AI 실행 검증
기간
2026.08.25 – 진행 중
GitHub
기여
01 INPUT · 학습 목표·문서·질문
02 OUTPUT · 로드맵·설명·추천
03 FINALIZE · 실패 반환·성공 확정
기술
Next.js · NestJS · Django · PostgreSQL · GitHub App · Docker
자갈치플랫폼 · 결과 신뢰
완료 조건, GitHub 증거와 별도 reviewer 승인을 같은 PR head에 묶었습니다.
이전 검증을 코드 변경 뒤에도 유지하면 현재 결과를 믿을 수 없습니다.
PR에 새 커밋이 올라오자 기존 검증과 승인이 무효화됐습니다.
새 코드 버전에서 다시 검증하고 별도 reviewer의 재승인을 확인했습니다.
실행 근거 · closed-alpha 새 head 무효화·재승인 / Jagalchi API ↗
실제로 확인한 코드 버전 변화
A → B
새 커밋 뒤 상태 변화를 확인했습니다.
코드 버전 A
검증·승인 완료
↓
코드 버전 B
A의 검증·승인 무효
↓
같은 버전 B
재검증·재승인 완료
검증과 승인은 같은 코드 버전에만 유효합니다
버전 B 재검증·재승인 완료
자갈치플랫폼 · 운영과 복구
closed-alpha에서 계정 흐름·데이터 복원·이전 API·AI 버전 복귀를 확인했습니다. 수동 smoke check는 통과했지만, 자동 복구와 상시 가용성은 아직 검증하지 않았습니다.
deploy/smoke.sh · closed-alpha recovery check
01 deadline=$((SECONDS + 300)) 02 while ((SECONDS < deadline)); do 03 health_endpoints_ready || continue 04 healthy=$(check_services api ai ai-db minio cloudflared) 05 ((healthy == 0)) && break 06 done 07 ((SECONDS >= deadline)) && exit 1 08 echo "production smoke check passed"
✓ closed-alpha 기록 · production smoke check passed
이 코드는 복구 후 서비스 준비 상태를 확인하는 흐름입니다. 데이터 복원과 이전 버전 복귀는 closed-alpha 기록에서 별도로 확인했습니다.
근거 · Evidence lifecycle issue #13 · Jagalchi Infra ↗
확인한 범위
데이터 복구와 이전 버전 복귀를 각각 확인했습니다.
남은 조건
사람 개입 없는
5분 이내 복구는 검증 중입니다.
수동 재시작 성공을 자동 복구·상시 가용성으로 확대하지 않습니다.
작업 범위와 완료 조건을 먼저 정하고, agent가 반환한 코드·테스트·실제 화면을 다시 확인합니다.
AI 작업 방식 · 하네스 기반 작업 분할과 직접 검증
하네스로 작업을 나누고 실행한 뒤, 완료 보고와 실제 화면을 다시 비교했습니다.
01 작업 설계
작업 범위 정의
수정 범위와 완료 조건을 작업 단위로 나눴습니다.
→
02 분할 실행
작업 실행
승인된 작업을 하네스로 분할하고, 완료 상태를 전달했습니다.
→
03 최종 판단
직접 확인
완료 보고 뒤 실제 화면을 확인해 14페이지 제목 잘림을 발견했습니다.
결과
에이전트의 완료 보고를 참고하되, 최종 완료 여부는 실제 화면을 확인한 뒤 판단했습니다.
제품별 책임을 분리하고 자동화 개입 조건을 명시했습니다.
프로젝트 선정·소개·문서·유지 기준
조직 운영 · stacking-money-forever
자갈치플랫폼 전반과 벙개 프런트엔드·디자인을 맡았습니다.
제품별 책임 · 공개 범위 · 자동화 개입 조건
프로젝트
본인 기여
공개·개발 단계
기획 · 디자인 · 개발
공개 저장소 · alpha
frontend · design
비공개 협업
프로세스 제어 전 대상 재확인
공개 v0.2.0
승인 기반 agent 작업
비공개 MVP
승인 기반 Agent 설계
구현 완료 · 테스트 검증
Hub Organization · Watchdog v0.2.0 ↗

조직 체계 · BSSM-OSS
외부 사람이 프로젝트를 이해하고 실행·기여할 수 있도록 공개 기준을 운영합니다.
대표 목록
대표 프로젝트를 첫 화면에서 바로 찾을 수 있게 정리했습니다.
README
목적·설치·사용법·기여 방법을 한 문서에서 확인하게 했습니다.
기여 경로
Issue·PR 양식과 maintainer 설정을 공통 기준으로 정리했습니다.
유지 기준
초기·방치 저장소는 대표 목록에서 제외했습니다.
조직 전체 공개 저장소 98개 · 2026.09.08

실제 사용에서 찾은 문제를 원 프로젝트로 돌려보냈습니다.
주요 작업 · 오픈소스 · React Flow
중복 좌표 때문에 두 점 사이 거리와 모서리를 둥글게 만드는 값이 0이 되는 조건을 찾았습니다.

PR #5730 제안
근거 · PR #5730 · @xyflow/system 0.0.76 ↗
문제 재현
꺾임 위치 0·1에서 각진 모서리를 재현했습니다.
계산 원인 분석
중복 좌표 → 두 점 사이 거리 0 → 곡률 값 0
검토·재확인
관리자의 수정 후 여러 연결점에서 둥근 모서리가 복원되는지 확인했습니다.
주요 작업 · 오픈소스 · Gajae Code
완료 알림 연결과 Command Code GOAT Plan의 인증·요청 경로를 각각 PR로 제출했습니다.

작업이 끝나면 완료 정보를 외부 명령으로 전달하는 연결 기능을 추가했습니다.

API key 로그인과 해당 모델 제공자로 요청을 보내는 경로를 구현했습니다.
두 변경 모두 원 저장소에 병합됐습니다.
황준혁