JUNYI.

SOFTWARE ENGINEER

박준이PAK JUN YI

사용자가 누르는 화면부터
데이터를 지키는 서버까지.

웹·모바일 앱과 AI 서비스를 개발합니다. 화면의 응답, 비동기 작업의 수명, 데이터의 정합성을 함께 다룹니다.

01 / PROJECTS

만든 제품과 해결한 문제

전체 10개 프로젝트

01 / Urimohanyang

웹 운영 · iOS 공개

우리모하냥

AI 링크 보관함 · 공간 채팅

2026.08 — 현재

개인 후속 개발 · 웹·네이티브 연동·AI 분석·배포

공유한 링크를 AI가 제목·요약·태그로 정리하고, 1–50명이 같은 보관함에서 다시 찾고 대화하는 앱입니다. 팀 커플 앱에서 출발해 개인 프로젝트로 제품과 구현을 확장했습니다.

Next.jsTypeScriptKotlinSwiftUISpring BootMySQLOpenAI APIAWS Lightsail

설계와 해결 과정
01

외부 AI를 기다리는 동안에도 링크는 먼저 저장

문제
저장 요청이 AI 분석을 기다리면 외부 서비스의 지연·실패가 링크 보관까지 막습니다. 분석 중 사용자가 내용을 보완하면 이전 결과가 뒤늦게 도착할 수도 있습니다.
구현
링크와 분석 대기 상태를 DB에 저장한 뒤 작업자가 선점합니다. 외부 API는 DB 트랜잭션 밖에서 호출하고, 완료 시 선점 토큰과 내용 버전이 모두 현재 값과 일치할 때만 결과를 반영합니다. 재시도 횟수와 다음 실행 시각도 DB에 남깁니다.
결과
링크 저장과 분석 완료를 분리했습니다. 사용자가 내용을 고친 뒤 도착한 오래된 결과는 반영하지 않고, 재시작 뒤에도 저장된 작업 상태에서 처리를 이어갑니다.
02

응답 형식과 원문 근거를 따로 검사

문제
제목·요약이 JSON 형식에 맞더라도 다른 게시물의 검색 결과를 원문으로 받아들이면 잘못된 링크를 설명하게 됩니다.
구현
모델이 써 낸 URL 대신 실제 API 인용과 검색 출처를 모읍니다. 원문과 같은 게시물·영상·장소인지 식별하고, 내용을 확인하지 못하면 NEEDS_CONTENT로 남겨 사용자에게 본문 보완을 받습니다.
결과
읽지 못한 링크를 성공한 요약처럼 표시하지 않습니다. 출처의 동일성 검사이며, 생성된 요약의 모든 사실을 보증하는 것은 아닙니다.
03

웹뷰 응답의 수명을 요청 단위로 관리

문제
카메라 등 네이티브 기능은 웹 요청과 응답 시점이 다르고 Android·iOS의 전송 방식도 다릅니다.
구현
공통 브리지에서 요청 ID별 Promise와 타이머를 보관합니다. 응답 스키마를 검사해 해당 요청에 전달하고, 완료·시간 초과·전송 실패 때 대기 항목을 정리합니다. 이미 종료된 요청의 응답은 무시합니다.
결과
플랫폼별 전송 차이를 공통 API 안으로 모았습니다. 호스트 부재·표준 오류·여러 클라이언트 공존을 계약 테스트로 확인했습니다.

웹·API·MySQL·Redis를 서울 Lightsail에 배포하고, Mac mini에 DB 암호화 백업을 구성했습니다.

02 / TriPick

졸업과제 분과 동상

TriPick

취향 사진 기반 AI 여행 플래너

2026.05 — 현재

졸업과제 팀 프로젝트 · AI·풀스택

취향 사진에서 얻은 태그·벡터로 장소를 찾고, 영업시간과 이동시간을 검증해 여행 일정을 만듭니다. 검색·생성·저장과 화면의 진행 상태를 함께 구현했습니다.

Next.jsNestJSPostgreSQLpgvectorRedisBullMQ

설계와 해결 과정
01

생성 요청을 작업으로 바꾸고 새로고침 뒤에도 복원

문제
일정이 완성될 때까지 HTTP 연결에 의존하면 새로고침이나 화면 이동 뒤 진행 중인 여행을 다시 찾기 어렵습니다.
구현
여행을 DB에 먼저 보존하고 BullMQ 작업을 등록한 뒤 202를 반환하도록 바꿨습니다. URL의 generationTripId로 재진입하고, 큐 정보가 만료돼도 DB의 확정 상태를 기준으로 결과를 표시합니다.
결과
화면과 생성 작업의 수명을 분리했습니다. 소유자 재시도와 같은 여행의 작업 ID를 연결하고, 단일 추론 자원에 맞춰 작업자 동시 실행을 1로 제한했습니다.
02

LLM 일정안의 실행 가능성을 서버가 확정

문제
형식이 올바른 일정도 폐점 뒤 방문하거나 이동시간이 부족할 수 있습니다.
구현
후보 검색과 CRAG 평가 뒤 생성한 일정에 실제 날짜·영업시간·활동 시간·이동 ETA를 검사합니다. 실패하면 결정론적 대체안을 생성하고, 대체안도 유효하지 않으면 저장을 차단해 기존 일정을 보존합니다.
결과
자연어 생성 성공과 저장 가능한 일정을 구분했습니다. 검색 카탈로그 확장은 팀 성과이며, 개인 기여는 검색·제약 검증과 비동기 생성 개선입니다.
03

늦게 로딩된 소켓이 이전 로그인으로 연결되지 않게

문제
화면과 소켓을 지연 로딩하는 동안 로그아웃하면 이전 요청이 나중에 소켓을 만들 수 있습니다.
구현
공통 import Promise와 연결 세대 값을 두고, 로딩 완료 후에도 현재 세대인지 검사합니다. 서버에서는 세션 식별자·인증 버전으로 HTTP와 소켓의 유효성을 확인합니다.
결과
PR 측정에서 공개 첫 진입 경로의 Brotli 전송량이 67.5 → 53.3 KiB로 줄었습니다. 인증 화면의 후속 소켓까지 포함한 전체 용량이 같은 비율로 감소한 것은 아닙니다.

2026.10.01 부산대학교 정보컴퓨터공학부 캡스톤디자인 네트워크·통신 분과 동상. 비동기 생성·코드 분할·인증 변경은 본인 PR 149–151을 근거로 설명합니다.

03 / PNU SW-CSS

운영 시스템

역량지원시스템

교육 행정 · Career Agent · 로컬 LLM

2026.03 — 현재

부산대학교 AI융합교육원 · 개발 조교

학생의 활동·전공트랙 신청과 관리자 심사를 연결하는 업무 시스템입니다. 서로 다른 교육 업무를 분리하고, 로컬 LLM 기반 공고 분석·진로 추천과 운영 환경을 개발했습니다.

Spring BootNext.jsPythonvLLMMySQLKafkak3s

설계와 해결 과정
01

업무 데이터 반영과 알림 완료를 따로 기록

문제
공고 복제본은 갱신됐지만 회원 서비스 장애로 학생 알림만 실패하면, 같은 이벤트를 다시 읽어도 버전 검사에 걸려 알림을 복구할 수 없었습니다.
구현
공고 변경과 Outbox를 같은 트랜잭션에 기록하고 Kafka로 전달합니다. 소비자는 버전으로 중복·역순 이벤트를 거릅니다. 알림 미완료는 별도 테이블에 보존해 복제본 반영 여부와 독립적으로 재시도합니다.
결과
이미 반영한 데이터를 되돌리지 않고 알림만 복구할 수 있게 했습니다. 초기 데이터 replay는 복제본만 채우고 새 공고 알림을 만들지 않도록 나눴습니다.
02

모델 출력 계약 뒤에 학생·공고의 실제 조건 검사

문제
개인정보를 외부 LLM에 보내지 않으면서, 모델이 만든 계획에 존재하지 않는 공고나 학생에게 맞지 않는 조건이 들어가지 않게 해야 했습니다.
구현
vLLM 로컬 추론 환경을 구성하고 출력 형식을 제한했습니다. 서버에서는 학생·공고 ID와 업무 조건을 다시 확인하고, 생성 실패에는 규칙 기반 계획기를 사용합니다.
결과
형식 검사와 업무 데이터 검증을 분리했습니다. 앱과 추론은 메인·GPU 2노드 k3s에 나눠 배치하고, 기존 서비스의 운영·복구 절차를 함께 정리했습니다.

마일스톤·부트캠프 등 서로 다른 담당 업무가 한 사이트를 사용한 것이 서비스 분리의 배경입니다. 9개 업무 서비스·서비스별 DB를 구성했으며, 복제 지연과 보상 실패 시 수동 정리의 제한은 남아 있습니다.

04 / Kim Kyungri

팀 프로젝트

김경리

음성 기반 현장 공수 기록

2026.08 — 현재

AI·SW마에스트로 17기 · 팀 MOSS

현장 기록을 말로 입력하고, 되읽기와 수정·저장 확인까지 이어지는 Android·웹 흐름을 구현했습니다.

KotlinReactTypeScriptSpring Boot

설계와 해결 과정
01

취소한 음성 요청의 응답을 버리고 다음 입력으로 전환

문제
음성 인식과 읽어주기 응답은 비동기로 도착합니다. 사용자가 취소하거나 다음 질문으로 넘어간 뒤 이전 결과가 화면을 바꾸면 잘못된 값을 저장할 수 있습니다.
구현
취소 이후 STT 응답은 폐기하고 TTS 종료 뒤 마이크를 전환합니다. 인식 실패에는 텍스트 입력을 제공하고, 브리지 지원 여부로 네이티브와 기존 서버 STT 경로를 나눴습니다.
결과
음성 입력·재생·취소와 수정 확인을 하나의 대화 흐름으로 연결했습니다. 모의 테스트와 빌드로 입력·취소·오류 전환을 검증했습니다.
05 / PNU Blace

운영 종료

PNU Blace

도서관 데이터 분석 · 실시간 좌석 소통

2025.08 — 2026.04

1인 개발·운영

부산대학교 도서관 이용 데이터를 분석하고 좌석 정보를 나누는 서비스를 개발·운영했습니다. 과거 운영 기간 누적 방문 7,203명, 페이지뷰 56,271회를 기록했습니다.

Next.jsNestJSPostgreSQLRedisSocket.IO

설계와 해결 과정
01

실시간 연결의 수명과 화면의 최신 상태를 분리

문제
화면 상태가 바뀔 때마다 소켓 리스너를 다시 등록하면 연결 처리와 화면 갱신이 얽힙니다. 서버 조회 코드도 여러 화면에 반복됐습니다.
구현
연결을 유지하는 수명과 이벤트에서 읽는 최신 React 상태를 나눴습니다. 서버 조회·캐시 전달을 공통화하고 독립적인 통계 조회를 병렬 실행했습니다. 좌석 점유 이력에는 조건부 생존분석을 적용했습니다.
결과
화면별 조회와 실시간 구독의 책임을 정리하고 공석 확률·잔여시간 범위를 계산했습니다. 기관과 협의해 운영을 종료했습니다.
06 / K-Lingo

iOS · Android 출시

K-Lingo

한국어 학습 앱

2024.12 — 2025.07

에버스톤 현장실습 · 기획·디자인·개발 참여

한국어 학습 게임과 시즌 리더보드를 개발하고 양대 스토어 출시에 참여했습니다.

React NativeFirebaseTanStack Query

설계와 해결 과정
01

리더보드의 프로필 묶음 조회와 빈 목록 보호

문제
참여자의 프로필을 한 명씩 조회하면 참가자 수만큼 요청이 늘어납니다. 초기화 중 빈 목록을 받은 상황도 기존 경험치·등급과 구분해야 했습니다.
구현
프로필을 ID 목록으로 묶어 조회하고 Map으로 결합했습니다. 기존 시즌별 캐시의 조회 정책과 화면 focus 콜백을 조정하고, 빈 참여자 목록은 경험치·등급을 보존한 채 조기 반환하도록 했습니다.
결과
프로필의 개별 조회를 줄이고 빈 목록이 기존 상태를 지우지 않게 했습니다. 주간 경험치는 참여자별 병렬 요청을 유지합니다.
07 / Katter

모바일 앱 출시

Katter

예약 편지 · 커플 SNS

2024.03 — 2025.06

1인 기획·디자인·개발·출시

미래의 날짜에 편지를 전달하는 커플 SNS를 기획·디자인하고 iOS·Android 앱으로 출시했습니다.

React NativeExpoFirebase

설계와 해결 과정
01

스크롤과 화면 닫기 제스처의 조건을 분리

문제
긴 편지 안에서 스크롤하는 동작과 화면 자체를 닫는 동작이 충돌할 수 있습니다.
구현
스크롤 위치와 드래그 방향을 기준으로 닫기 제스처의 진입 조건을 나눴습니다. 이미지 크기·메모리·디스크 캐시를 함께 다루고, iOS 로컬 알림 개수 제한에 맞춰 예약을 다시 구성했습니다.
결과
콘텐츠를 읽는 동작과 화면 전환을 함께 설계했습니다. 알림은 기기의 제약 안에서 다시 예약하는 방식으로 처리했습니다.
08 / imarichman

소스 비공개

imarichman

암호자산 실행 · 금융 데이터 연구

개인 프로젝트

데이터·전략 연구·주문·운영 도구 개발

시장 데이터 수집, 신호 계산, 리스크 검증과 주문 실행을 연결하고 백테스트와 실제 거래 기록을 대조하는 도구를 개발했습니다.

PythonFreqtradepandasSQLiteDocker

설계와 해결 과정
01

검증 데이터가 없는 진입을 차단하고 판단을 기록

문제
같은 전략도 데이터의 이용 가능 시점과 계좌의 실제 체결 상태가 다르면 백테스트와 실행 결과가 달라질 수 있습니다.
구현
필수 검증 데이터가 없는 진입을 차단하고 조건과 이유를 JSONL에 남깁니다. 외부 주문·거래 기록과 로컬 상태를 대조하고, 데이터 갱신·컨테이너·API 실패를 확인하는 운영 도구를 구성했습니다.
결과
신호와 실행 상태를 사후 대조할 기록을 남기고, 데이터 갱신·API·주문 실패를 운영 도구에서 확인할 수 있게 했습니다.
09 / imastockman

모의 검증 · 실주문 비활성

imastockman

나스닥 선정 · 주문 상태 · 계좌 복구

개인 프로젝트

자동 운용 코어·데이터·조회·운영 화면 개발

종목 선정과 리밸런싱에 보유량·미체결 예약 자금·집중도 제약을 반영하고, 토스증권 OpenAPI 조회와 운영 화면을 연결했습니다.

PythonFastAPIPolarsDuckDBSQLiteNext.js

설계와 해결 과정
01

응답 유실을 실패로 단정하지 않는 주문 상태

문제
주문 응답이 끊겼다고 다시 주문하면 실제로 접수된 주문을 중복 전송할 수 있습니다.
구현
주문 의도·요청·응답을 SQLite에 기록하고 부분체결·취소·재시도를 상태로 다룹니다. 응답 유실은 미확정으로 보존하고 계좌·체결 내역을 대조한 뒤 복구합니다.
결과
재시작·백업 복원에서 보유량·예약 자금·중지 상태와 중복 주문 방지를 모의 검증했습니다. 실계좌 주문 전송은 비활성 상태입니다.
10 / PNU IBE

웹서비스

PNU IBE

학생회 물품 대여 · 행사 운영

교내 운영 프로젝트

웹사이트·관련 서버 개발

담당자가 처리하던 물품 대여·반납을 학생이 직접 진행하는 웹 흐름으로 바꾸고, 행사 참가·팀·승부예측 API를 개발했습니다.

Next.jsFirebaseTesseract.jsSpring BootPostgreSQL

설계와 해결 과정
01

물품 대여의 실제 운영 절차를 상태로 옮김

문제
신청만 받는 화면으로는 수령·반납 확인과 미수령 처리, 보관함 변경 이력을 함께 관리하기 어렵습니다.
구현
학생증 OCR과 대여·반납 사진 증빙을 입력 흐름에 넣고, 미수령 처리와 보관함 변경 기록을 관리자 기능으로 구현했습니다.
결과
학생의 직접 신청과 담당자의 확인 절차를 연결했습니다. OCR은 정보 추출·형식 검사이며 공인 신원 인증으로 확대하지 않습니다.

02 / INTERACTIVE EXPLAINER

늦게 도착한 결과는
언제 버려야 할까?

우리모하냥 · 비동기 분석

AI 분석 중 사용자가 내용을 바꾸면, 이전 분석이 나중에 끝날 수 있습니다. 같은 링크라도 현재 작업의 결과만 반영해야 합니다.

FIG. 01 / LINK INSPECTION PRESS처리 원리 모형
CLAIM / REV
파란 종이 = 분석 중인 링크실제 API 호출 없음
상황을 선택하세요
현재 내용v1
작업 내용v1
저장 상태PENDING

STEP 01 / 05

링크 저장

링크와 대기 상태를 DB에 저장합니다. 사용자의 저장 요청은 AI 응답을 기다리지 않습니다.

실제 구현은 DB의 선점 토큰과 내용 버전을 함께 검사합니다. 이 모형은 두 값 중 내용 버전이 바뀌는 경우를 단계별로 보여줍니다. 출처 확인은 요약의 모든 사실을 보증하지 않습니다.

03 / EXPERIENCE

일하고 배운 곳

전체 포트폴리오 PDF ↗

2026.03 — 현재

부산대학교 AI융합교육원

개발 조교 · 계약직

역량지원시스템의 학생·관리자 화면, Spring Boot 업무 API, 로컬 LLM·데이터 처리와 운영 인프라 개발

2026.05 — 현재

AI·SW마에스트로 17기

연수생 · 팀 MOSS

팀 프로젝트 기획·개발, 김경리 음성 입력·읽어주기와 웹–네이티브 연동

2024.12 — 2025.07

에버스톤

부산대학교 단기·장기 현장실습

K-Lingo 기획·디자인·React Native 개발 및 iOS·Android 출시 참여

2021.12 — 2022.07

ABlock

Frontend Engineer · 계약직

React Native·Expo 지도 앱 XROS의 마커 군집화·화면 범위 렌더링·데이터 캐시

2021.03 — 2021.05

ZUDA

Frontend Engineer

웹 퍼블리싱·jQuery·Firebase 실시간 채팅 개발

EDUCATION

부산대학교 정보컴퓨터공학부

2021.03 — 2027.02 졸업 예정

주요 수상 전체 17건 중 7건
  • 캡스톤디자인 네트워크·통신 분과 동상부산대학교 정보컴퓨터공학부 · TriPick
  • BNK 디지털 혁신 챌린지 해커톤 최우수상BNK금융그룹
  • BEST Challenge ESG 해커톤 최우수상한국인터넷진흥원장상
  • 코드코리아 금정구 해커톤 대상제1회 코드코리아 2024
  • 부산 ICT 융합 해카톤 일반부 우수상제7회
  • 부산 ICT 융합 해카톤 일반부 대상제6회
  • 한국 메이커 & 코딩 경진대회 메이커 부문 대상중소벤처기업부장관상