포트폴리오

프로젝트 설명

개인 포트폴리오 페이지 개발

기술 스택
참여 인원

1

기간

2025.11. -

상세 내용

github repo

infra: jejinni-infra
client: jeinni-client
server: jejinni-server
admin: jejinni-admin

개발 내용

한 페이지로 단순히 구성해 볼 수도 있지만, cloud·backend·DB를 개발해 보고, 운영 환경을 직접 다루어 보는 것이 목표.
Docker, Github Actions 등을 사용하여 빌드·배포 자동화까지 경험.

infra

Docker compose와 Nginx로 admin, frontend, backend를 한 번에 띄우고, Nginx로 라우팅·API 프록시 까지 구성한 인프라

Architecture

image

Oracle Instance의 Nginx(리버스 프록시)와 Application Server의 Docker Compose(컨테이너 Nginx + 앱)를 이어 2단 Nginx 구조로 운영.

  • 1단계: Oracle Instance Nginx — 외부 트래픽 수신(3000/3001/3002), Application Server로 프록시.
  • 2단계: Application Server 내 Docker Nginx — 수신한 요청을 포트/경로에 따라 client, client-staging, admin, server로 분기 및 API 프록시.

기술 스택

구분 기술
리버스 프록시 (Oracle) Nginx
애플리케이션 서버 Docker Compose
앱 단 리버스 프록시 Nginx (Alpine, 컨테이너)
DB PostgreSQL 16 (Alpine)

구성 요소

  • PostgreSQL
    • healthcheck 후 server service 기동
    • 데이터 볼륨으로 영속화
  • Backend
    • SpringBoot
    • DB 준비 완료 후, 업로드 경로 볼륨 마운트
  • Client
    • Next js
    • 포트 3000 (Nginx 3001과 매핑)
  • Admin
    • React + Vite 빌드 산출물을 Nginx가 정적 파일로 서빙
    • 포트 3002 (Nginx 3002와 매핑)
  • Nginx
    • 3000/3001/3002 수신
    • /api -> server:8080으로 프록시, CORS·OPTIONS 처리

Server

포트폴리오·이력서 사이트용 Spring Boot REST API를 설계·구현. 프로젝트/경력/스킬/학력/자격·수상 도메인 CRUD와 이력서·포트폴리오 파일 업로드/다운로드/최신 조회, 프로젝트 콘텐츠 이미지 업로드·삭제·URL 관리를 구현했고, JPA Auditing, 공통 ApiResponse, prod 환경 Jasypt 설정 암호화를 적용.

기술 스택

구분 기술
언어·프레임워크 Java 17, Spring Boot 3.5.5
빌드 Gradle 8
DB PostgreSQL, Spring Data JPA
보안 Spring Security (CORS 설정), Jasypt(prod 설정 암호화)
기타 Lombok, DevTools

프로젝트 구조

  • Controller - REST API
  • Service - 비즈니스 로직
  • Repository - JPA Repository
  • Entity - JPA 엔티티
  • DTO - 요청/응답
  • Config - Security, CORS, JPA Auditing, Jasypt