신다현 | 백엔드 개발자 포트폴리오
신다현 로고
BACKEND DEVELOPER  ·  PORTFOLIO 2026

SHIN DAHYUN

신다현

Spring Boot·JPA로 도메인과 API를 설계하고,
인증·AI 연동·테스트까지 구현합니다.

Spring Boot · JPA JWT 인증/인가 OpenAI 연동 JUnit · Testcontainers
유아교육 현장 2년 웹개발 950시간 SSAFY 1학기 925시간 이수
신다현 증명사진
01 PROFILE
FILE 01

PROFILE

현장의 경험을,
백엔드 설계와 구현으로 잇습니다.

유아교육을 전공하고 현장에서 근무하며 사용자의 불편을 가까이 관찰했고, 이후 웹개발 풀스택 과정과 SSAFY Java 과정을 거치며 서비스를 직접 설계하고 구현했습니다. 지금은 요구사항을 도메인·데이터 모델과 API로 설계하고, Spring Boot·JPA 기반으로 인증·AI 연동·테스트까지 갖춘 서버를 만드는 백엔드 개발에 집중하고 있습니다.

API DESIGN 요구사항을 도메인 모델과 REST API로 나누어 설계합니다.
AUTH · AI JWT 인증과 OpenAI 구조화 출력 연동 경험이 있습니다.
VERIFY JUnit과 Testcontainers로 핵심 동작을 검증합니다.
AT A GLANCE
HOW I WORK
DOMAIN

요구사항을 도메인·데이터 구조로 모델링합니다.

API

비즈니스 로직을 API로 구현합니다.

VERIFY

테스트로 동작과 안정성을 검증합니다.

1,875 시간 누적 교육 이수
SSAFY 1학기 (SW·AI 이론 및 실습) 925h K-Digital Training 웹 백엔드 950h
2 년 유아교육 현장 근무
ADsP
SQLD
데이터 자격 취득
02 PROJECTS
03 ARCHIVE
FILE 03

ARCHIVE

지금의 저를 만든 배경과
실제로 다룰 수 있는 도구를 기록합니다.

01  EDUCATION 02  EXPERIENCE 03  TRAINING 04  TOOLKIT 05  CREDENTIALS
01 EDUCATION
2023.03 — 2024.02 유아교육 전공 · 학사 학사학위 연계 과정 GPA4.21 / 4.5
2020.03 — 2023.02 유아교육 전공 · 전문학사 3년제 유아교육과 GPA4.34 / 4.5
02 EXPERIENCE
2023.03 — 2025.02 방과후 과정 교사 삼풍유치원 현장에서 반복되는 기록·운영 업무의 불편을 관찰하며 개선 지점을 발견 유아 반응 데이터를 바탕으로 활동 자료와 수업 방식을 반복 개선 학부모 상담·현장 커뮤니케이션으로 사용자 니즈를 파악하고 문서화
03 TRAINING
2026.01 — 현재 1학기 이수 완료
2026.01.07 — 06.26 · 925시간
SSAFY 삼성청년 SW·AI 아카데미 · 1학기 SW·AI 이론 및 실습 과정 · 925시간 Java·Spring 서버 개발과 DB·AI를 학습하고, 관통 프로젝트에서 백엔드 설계·API 연동을 담당했습니다. SERVER Java · Spring Boot · Spring Security · REST API · MyBatis DATA SQL · Join/SubQuery · Index · DB 모델링 CS 자료구조 · 그리디 · 분할 정복 · 그래프 탐색 · DP AI Spring AI · LangChain Agent · 생성형 AI 작동 원리
2025.04 — 2025.10 K-Digital Training KD아카데미 · 업무 자동화(RPA·ChatGPT) 플랫폼 개발 · 950시간 요구사항 분석부터 DB 설계·API 구현·배포까지 학습하고, 팀 프로젝트 보험 업무 통합 시스템에서 보험금 청구 모듈을 담당했습니다. SERVER Java · Spring Boot · Spring Security · REST API · MyBatis DATA Oracle · DDL/DML · PL/SQL · DB 설계 DEPLOY AWS · Team Project
04 TOOLKIT
FROM REQUIREMENT TO API
01  REQUIREMENT Problem · Domain
Feature Spec
02  DESIGN ERD · Data Model
Entity · Relation
03  API Spring Boot · JPA
REST · Business Logic
04  VERIFY Test · Migration
Docker Deploy
BACKEND
JavaBackend Language
Spring BootREST API · MVC
Spring SecurityJWT · 인증/인가
DATABASE
MySQL · OracleSchema · Query · PL/SQL
JPA · MyBatisORM · SQL Mapping
FlywaySchema Migration
AI INTEGRATION
OpenAI APIChat · Structured Output
Python · FastAPIAI 연동 서버
Data Pipeline비식별화 · 검증
COLLABORATION
Git · GitLabVersion Control
JiraIssue Management
DockerContainer · Deploy
05 CREDENTIALS
ADsP 데이터 분석 준전문가 ISSUER한국데이터산업진흥원 ISSUED2026.03
SQLD SQL 개발자 ISSUER한국데이터산업진흥원 ISSUED2025.09
04 CONTACT
FILE 04

CONTACT

함께 문제를 발견하고,
더 나은 경험으로 연결하고 싶습니다.

01  EMAIL {{ emailDisplay }} OPEN MAIL
02  GITHUB github.com/dahyunhub VISIT

사용자의 맥락을 세심하게 읽고, 작동하는 기능으로 구현합니다.

SHIN DAHYUN · 2026
PROJECT FILE / {{ caseIndex }} {{ caseTitle }}
PICK UP project logo

YouTube 자막·AI 분석·지도 검증을 연결한
여행 장소 추출 및 코스 생성 서비스

삼성청년SW·AI아카데미 1학기 AI 관통 프로젝트로, 2인 팀에서 Spring Boot API 일부 구현, Vue 화면 연동, AI 분석 결과·지도·사용자 기능 통합을 담당했습니다.

VIEW REPOSITORY
TYPESSAFY 1학기
AI 관통 프로젝트
TEAM2 Members
ROLEBackend
API Integration
Frontend
PERIOD2026
01  CONTEXT / PROBLEM

영상 시청과 여행 계획이 분리되어 있습니다.

여행 영상을 보며 마음에 드는 장소를 발견해도, 사용자는 영상을 멈추고 장소명을 다시 검색하고, 지도에 저장한 뒤, 별도로 여행 코스를 구성해야 합니다. Pick up은 이 끊어진 흐름을 하나의 서비스 경험으로 연결하고자 했습니다.

영상 시청 장소 발견 장소 저장 사용자 간 공유 여행 코스 구성
02  MY ROLE

내가 맡은 범위

BACKEND API JWT 인증/사용자 API
댓글 · 팔로우 API
저장 장소 API
관리자 삭제 권한 흐름
AI / MAP INTEGRATION 분석 상태 화면 연결
AI 장소 후보 결과 매핑
Naver 지도 마커 표시
장소 저장/삭제 흐름 연결
FRONTEND INTEGRATION Vue Router · Pinia 상태 연결
Axios API 모듈 정리
인증 토큰 기반 요청 처리
분석/장소/소셜 화면 통합
VERIFY / INFRA Maven 테스트 흐름 확인
JWT·장소·코스 테스트 포함
Docker Compose 다중 서비스
환경변수 기반 외부 API 설정
03  KEY DECISIONS

어떤 판단을, 왜 내렸는가

DECISION 01

분석 작업을 상태값으로 관리한 이유

CONTEXTYouTube 자막 추출, AI 분석, 장소 검증은 외부 API 상태에 따라 지연·실패 가능성이 컸습니다. CHOICE`PENDING`, `ANALYZING`, `COMPLETED`, `FAILED`, `NO_CAPTION`, `INSUFFICIENT_INFO`로 분석 상태를 분리했습니다. REASON화면은 진행 상태를 안정적으로 표시하고, 실패 영상은 재분석 요청으로 복구할 수 있어야 했습니다. TRADE-OFF상태 전이가 늘어났지만, 오류 원인을 사용자와 개발자가 모두 추적하기 쉬워졌습니다.
DECISION 02

AI 장소 후보를 지도 API로 다시 검증한 이유

CONTEXTLLM이 추출한 장소명은 일반명사, 광역 지명, 중복 후보가 섞일 수 있었습니다. CHOICEAI 후보를 신뢰도·중복 기준으로 걸러낸 뒤 Naver Local Search API로 실제 주소와 좌표를 검증했습니다. REASON저장 장소와 여행 코스는 지도 좌표가 정확해야 사용자 데이터로 계속 재사용할 수 있습니다. TRADE-OFF외부 API 호출 단계가 추가됐지만, 결과 품질과 지도 표시 신뢰도를 높일 수 있었습니다.
DECISION 03

사용자 기준 권한을 먼저 정리한 이유

CONTEXT저장 장소, 코스, 댓글, 팔로우는 모두 로그인 사용자와 소유자 권한을 기준으로 동작합니다. CHOICEJWT 인증 흐름을 프론트 상태와 연결하고, 사용자·소셜·관리자 API의 접근 조건을 화면에서 함께 검증했습니다. REASON개인 저장 데이터와 공개 데이터가 섞이는 서비스에서는 권한 흐름이 곧 데이터 정합성입니다. TRADE-OFF프론트와 백엔드 양쪽 디버깅이 필요했지만, 실제 사용 시나리오 기준으로 오류를 빨리 발견할 수 있었습니다.
DECISION 04

Spring Boot와 FastAPI를 분리한 이유

CONTEXT핵심 도메인 API는 Java/Spring으로, YouTube transcript와 AI 분석은 Python 생태계 의존성이 유리했습니다. CHOICESpring Boot REST API와 FastAPI transcript-service를 Docker Compose에서 별도 서비스로 구성했습니다. REASON각 서비스가 자신에게 맞는 런타임과 라이브러리를 쓰면서도 HTTP 경계로 명확히 통합되도록 했습니다. TRADE-OFF배포 단위가 늘어났지만, 분석 로직 교체와 장애 분리가 쉬운 구조가 됐습니다.
04  SYSTEM FLOW

요청이 처리되는 흐름

01YouTube 여행 영상 URL 등록
02Spring Boot API가 Video ID·메타데이터 저장
03FastAPI transcript-service가 자막 추출 · AI 분석 요청
04Naver Local Search로 장소명·주소·좌표 검증
05사용자별 저장 장소·댓글·팔로우 데이터 관리
06저장 장소를 조합해 공개 범위가 있는 여행 코스 생성
05  IMPLEMENTATION

실제 사용 기술

BACKENDJava 25Spring Boot 4Spring SecurityMyBatisMaven
DBMySQL 8.4schema.sql 초기화
FRONTENDVue 3ViteVue RouterPiniaAxios
AI SERVICEPythonFastAPIyoutube-transcript-apiOpenAI / Gemini
EXTERNALYouTube Data APINaver Local Search APINaver Maps JS SDK
TEST / INFRAJUnit 5Docker ComposeNginx
06  RESULT / REFLECTION

무엇을 배웠는가

Pick Up에서는 여러 외부 API와 서로 다른 런타임을 하나의 서비스 흐름으로 묶는 경험을 했습니다. Spring Boot API는 인증·사용자·장소·코스 데이터를 관리하고, FastAPI 서비스는 자막 추출과 AI 분석을 담당하도록 경계를 나누었습니다.

특히 JWT 기반 인증 상태를 Vue 화면과 연결하고, AI 분석 결과를 지도·저장 장소·코스 생성 흐름으로 이어 붙이면서 API 응답 형태, 실패 상태, 권한 조건을 화면에서 함께 검증했습니다.

이를 통해 기능 구현뿐 아니라 외부 API 실패 가능성, 데이터 정합성, 서비스 간 책임 분리를 고려해 웹 서비스를 구성하는 방법을 배웠습니다.

ONDO project logo

관찰 메모를 AI 하루 일지·개인 관찰평가로
재사용하는 기록관리 서비스

Spring Boot 4와 MySQL/Flyway 기반으로 인증, 반·아이·메모 도메인, AI 구조화 출력, 비식별화, 테스트와 Docker 실행 환경까지 1인 개발로 구현했습니다.

VIEW REPOSITORY
TYPESolo Project
ROLEBackend · Full-stack
PERIOD2026
STACKSpring Boot · JPA
MySQL · OpenAI
01  CONTEXT / PROBLEM

관찰의 순간과 기록의 순간이 분리되어 있습니다.

교사는 하루 종일 아이들을 관찰하지만, 그 순간을 붙잡아 두기 어렵습니다. 일과가 끝나면 흩어진 기억에 의존해, 누리과정 5개 영역에 맞춰 하루 일지를 서술하고, 매월 아이별 관찰평가까지 작성해야 합니다. 아이를 바라보는 일보다 문서 작업에 시간이 쏠립니다.

관찰 기억에 의존 일과 후 회상 누리과정 분류 일지 서술 월말 평가
02  MY ROLE

내가 맡은 범위

DOMAIN / API Auth / JWT · Teacher
Classroom / Child
Memo / Timeline
Journal / Report API
PERSISTENCE Spring Data JPA
Flyway migration
보존형 삭제 · 복원
일지-메모 근거 연결
INTEGRATION OpenAI 구조화 출력 연동
비식별화 파이프라인
누리과정 5영역 분류
프론트 API 연결
VERIFY / INFRA JUnit 5
Testcontainers(MySQL)
Docker Compose
prod nginx 정적 서빙
03  KEY DECISIONS

어떤 판단을, 왜 내렸는가

DECISION 01

수업 중엔 메모만, 분류는 나중에 자동으로

CONTEXT교실 현장은 시간·인지 여유가 없어, 입력 단계가 무거우면 기록 자체가 끊깁니다. CHOICE수업 중 입력은 '아이 고르고 한 줄'로 최소화하고, 누리과정 영역 분류는 이후 자동 처리로 분리했습니다. REASON"10초면 충분"한 입력이 되어야 관찰의 순간에 기록이 남습니다. TRADE-OFF즉시 분류가 안 되는 대신, 자동 분류 결과를 나중에 교사가 수정할 수 있게 했습니다.
DECISION 02

AI 분석 시점을 왜 교사에게 위임했는가

CONTEXT자동 분석은 편하지만, 어떤 기록을 근거로 언제 정리할지는 교사의 맥락에 달려 있습니다. CHOICE분석을 자동이 아니라, 교사가 원하는 시점에 직접 실행하는 명시적 행동으로 두었습니다. REASON기록의 맥락과 검토 책임을 교사가 통제하도록 해 신뢰도를 지킵니다. TRADE-OFF한 번의 클릭이 더 필요해지지만, 진행 상태를 노출해 실행 부담을 낮췄습니다.
DECISION 03

하루 일지와 개인 관찰평가를 왜 분리했는가

CONTEXT'오늘 반 전체'와 '한 아이의 한 달'은 목적도, 근거가 되는 기록의 범위도 다릅니다. CHOICE"오늘 전체 분석(하루 일지)"과 "한 아이 분석(개인 관찰평가)"을 별개의 진입점으로 나눴습니다. REASON교사가 목적에 맞게 선택해 실행하도록 해 결과의 정확도를 높입니다. TRADE-OFF진입점이 늘어나는 대신, 같은 메모 데이터를 두 관점으로 재사용하도록 구조화했습니다.
DECISION 04

아이를 왜 '삭제'가 아니라 '숨김'으로 두었는가

CONTEXT학기 종료·전원 이후에도 관찰 기록은 보존이 필요한 교육 현장의 특성이 있습니다. CHOICE물리 삭제 대신 보존형 삭제(숨김/복원)를 기본으로 삼았습니다. REASON기록의 근거를 잃지 않으면서 목록은 깔끔하게 유지합니다. TRADE-OFF데이터가 계속 쌓이므로, 숨김/복원 상태를 명시적으로 관리하도록 설계했습니다.
DECISION 05

개인정보 비식별화를 왜 파이프라인에 내재화했는가

CONTEXTAI 분석에는 아이 실명·민감정보가 그대로 노출될 위험이 있습니다. CHOICEAI에 보낼 때 실명을 별칭으로 비식별화하고, 분석 후 원래 이름으로 복원하도록 했습니다. REASON원본 기록은 안전하게 보존하면서, 외부 전송 데이터의 민감도를 낮춥니다. TRADE-OFF별칭 매핑·복원 로직이 늘어나지만, 개인정보 보호를 기능이 아닌 기본값으로 만들었습니다.
04  PRODUCT FLOW

하나로 이어지는 흐름

01수업 중 10초 메모 (아이 · 놀이 · 상호작용 · 태도)
02아이별 타임라인에 자동 정리 · 누리과정 5영역 분류
03일과 후, 교사가 AI 분석 실행
04누리과정 기반 하루 일지 초안 생성 → 검토 · 수정 · 확정 · 재분석
05아이별 개인 관찰평가 (수동 + 월말 자동 생성)
05  ARCHITECTURE

요청이 지나가는 경로

클라이언트 요청은 인증 필터를 거쳐 API로 들어오고, 서비스 계층에서 트랜잭션 경계를 잡습니다. 저장은 JPA로 MySQL에, AI 분석은 별도 어댑터에서 비식별화 후 OpenAI로 나갔다가 실명으로 복원되어 돌아옵니다.

CLIENT Vue 3 SPA Authorization: Bearer JWT
API LAYER Spring Security Filter → REST Controller stateless
/api/auth /api/children /api/memos /api/journals /api/reports
SERVICE 도메인 로직 · 트랜잭션 경계 메모 → 일지 · 관찰평가
재사용 규칙
PERSISTENCE Spring Data JPA Flyway 스키마 마이그레이션
보존형 삭제(숨김 · 복원) 상태 관리
↓  MySQL 8.4
AI ADAPTER 비식별화 · 구조화 출력 실명 → 별칭 치환 후 전송
응답 검증 후 실명 복원
↕  OpenAI Structured Outputs
DATA MODEL
Teacher계정 · 인증 주체  —  1 : N Child
Child아이 · 숨김/복원 상태  —  1 : N Memo, 1 : N Report
Memo관찰 기록 원본 · 누리과정 영역 분류  —  일지 · 평가의 근거
Journal하루 일지 (날짜 단위) · 초안 → 확정 · 재분석
ChildReport아이별 관찰평가 (아이 × 기간) · 수동 · 월말 자동 생성
06  IMPLEMENTATION

실제 사용 기술

BACKENDJava 25Spring Boot 4GradleSpring Data JPAFlyway
DBMySQL 8.4
AUTHSpring Security (stateless)JWTBCrypt
AIOpenAI Chat CompletionsStructured Outputs (strict)gpt-5.4-mini
FRONTENDVue 3 (Composition API)Vite반응형 (사이드바 ↔ 하단 탭)
INFRADockerdocker-composenginx 정적 서빙
TESTJUnit 5Testcontainers (130+ 테스트 통과)
07  RESULT / REFLECTION

무엇을 배웠는가

온도에서는 도메인 요구사항을 실제 백엔드 구조로 끝까지 옮기는 데 집중했습니다. 메모가 하루 일지와 개인 관찰평가의 근거로 재사용되도록 데이터 모델을 설계하고, Flyway 마이그레이션을 스키마 정본으로 두었습니다.

AI 기능은 `AiClient` 추상화, OpenAI structured outputs, 비식별화/복원, 응답 검증을 별도 어댑터로 분리해 핵심 도메인 로직과 외부 호출 경계를 명확히 했습니다. JUnit 5와 Testcontainers 기반 130개 테스트로 인증, 메모, 일지, 평가, 이미지, 권한 흐름을 검증했습니다.