Backend/Full-stack Developer Youngwon
Portfolio url: http://youngwon.me
Youngwon's server configuration: https://github.com/yw7148/server
Welcome to my Backend developer portfolio repository! This project showcases my skills and projects as a backend developer, including various technologies and tools I've mastered.
- REST API: Project listing, project program listing, and contact submission APIs.
- Contract-first API: OpenAPI YAML drives generated Kotlin/Spring interfaces and request/response models.
- Oracle persistence: Oracle Database integration with Flyway-managed schema migrations.
- Modular backend: Spring Modulith separates contact and project modules.
- Testing: Unit, web MVC, architecture, and Oracle Testcontainers integration tests.
- Deployment packaging: GitHub Actions and Docker build the deployable application image.
- JWT-based authentication and authorization.
- Login, registration, and OAuth integration.
- Additional portfolio runtime features beyond the current REST API surface.
for DevOps information, please refer Server Repository
- Backend: Spring Boot 4.0.3 (Java 17, Kotlin, package namespace
me.youngwon.portfolio) - Database: Oracle Database Free (Local/Test), Oracle Database (Production)
- Testing: Spring Test (JUnit)
- Containerization: Docker
- CI/CD: GitHub Actions
- Others: OpenAPI Generator, Spring Modulith, Flyway
.
├── src
| ├── main
│ | ├── kotlin
│ | ├── openapi
│ | └── resources
│ └── test
├── Dockerfile
├── build.gradle
├── .github/workflows
│ ├── ci.yml
│ └── release.yml
├── docs
│ └── refactoring-to-kotlin.md
├── LICENSE
└── README.md
- Docker
docker compose up -dDefault local connection:
- URL:
jdbc:oracle:thin:@localhost:1521/FREEPDB1 - Username:
portfolio - Password:
portfolio
In my case, --platform linux/amd64,linux/arm64 is added to support multi-platform (my production environment is linux/arm64)
to build multi-platform image, docker buildx builder is required in docker build environment:
docker buildx create --name mybuilder --bootstrap --use
for more information: Multi-Platform Images | Docker Docs
DOCKER_BUILDKIT=1 docker buildx build \
--platform linux/amd64,linux/arm64 \
-t yw7148/portfolio:latest \
.For a single-platform local image:
docker build -t yw7148/portfolio:latest .GitHub Actions workflows now handle the repository CI/CD flow.
- Push to
main: runsclean test bootJar - Push a Git tag: runs build/test, creates a GitHub Release, then publishes Docker images to Docker Hub
DOCKERHUB_USERNAMEDOCKERHUB_TOKEN
yw7148/portfolio:<git-tag>yw7148/portfolio:latest
.env
DB_URL=
DB_USER=
DB_PW=
JWT_SECRET=The prod profile activates prod-db and prod-server, so the application listens on port 9001.
docker run --pull always -d --name portfolio -p 9001:9001 \
-e PROFILE=prod \
--env-file ${path_to_envfile} \
yw7148/portfolio:latestThe backend contract now starts from OpenAPI YAML.
- Spec location:
src/main/openapi/portfolio-api.yaml - Validate spec:
./gradlew openApiValidate - Generate Kotlin/Spring stubs:
./gradlew openApiGenerate - Generated server stubs:
build/generated/openapi/src/main/kotlin - Current REST endpoints in progress:
/api/v1/projects,/api/v1/projects/{projectId}/programs,/api/v1/contacts
The backend now targets REST APIs only.
- Legacy Thymeleaf page routes are no longer part of the active runtime path
- Static resource mappings are disabled in application configuration
- Integration tests use Oracle Testcontainers, so build/test does not need an external DB connection
- Flyway migrations use
m.n.iversion names such asV0.0.1__baseline_schema.sql - Logical relations are managed with indexed columns instead of physical foreign key constraints
The repository currently passes this verification baseline:
./gradlew clean test openApiValidate openApiGenerate bootJarCurrent state:
- Spring Boot
4.0.3 - REST-only backend runtime
- Kotlin package namespace
me.youngwon.portfolio - OpenAPI-first contract in
src/main/openapi/portfolio-api.yaml - Spring Modulith-based
contact/projectmodules - Flyway-managed Oracle schema
- GitHub Actions-based CI/CD and Docker packaging
- Email: youngwon@youngwon.me
- Portfolio: Home, CV Page
Distributed under the MIT License. See LICENSE for more information.
