Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Employee Creator Spring API + React App
A production-ready HR management system built with Java Spring Boot and React TypeScript
Live Demo: Employee Creator App | ⚡ API: employeecreator.my
Employee Creator is a full-stack CRUD application for managing employee records and contracts. Built over 4 weeks as a solo project, it demonstrates enterprise-level development practices including comprehensive testing, CI/CD deployment, and scalable architecture.
1. For HR Teams: Streamline employee onboarding, track contract history, maintain compliance recordsREADME 전문 보기 ↗A production-ready, full-stack HR management system built with Java Spring Boot and React TypeScript
Live Demo: Employee Creator App | ⚡ API: Employee Creator API
Employee Creator is a full-stack CRUD application for managing employee records and contracts. Built over 4 weeks as a solo project, it demonstrates enterprise-level development practices including comprehensive testing, CI/CD deployment, and scalable architecture.
For HR Teams: Streamline employee onboarding, track contract history, maintain compliance records
For Developers: Reference implementation showcasing modern full-stack patterns, testing strategies, and deployment practices
For Stakeholders: Production-ready system with scalable architecture and comprehensive audit trails
Note: An employee can have multiple contracts. Contracts are immutable by design: no update.
A deliberately boring, industry-standard enterprise stack: scalable by design, with robust automated testing and safety checks at every layer.
| Layer | Technology | Benefit |
|---|---|---|
| DB | PostgreSQL, JPA | Relational integrity, portable data |
| Backend | Spring Boot, Java, Maven | Industry-standard, scalable APIs |
| Frontend | React, TypeScript, Vite | Fewer runtime bugs, fast builds |
| Testing | JUnit, Mockito, REST Assured, H2, Faker (Data seeding) | Catches regressions before release |
| Styling | Tailwind / SCSS | Consistent UI, faster styling |
| Deployment | Render + Neon (current); AWS EC2, S3 + CloudFront (archived) | Free-tier hosting, zero ops |
| CI/CD | GitHub Actions | Automated checks on every push |
| Monitoring | Log4j2 | Faster debugging in production |
flowchart LR
User --> React["React App"]
React -- "GET / POST / PATCH / DELETE /employees" --> API["Spring Boot API"]
API -- "SELECT / INSERT / UPDATE / DELETE" --> DB[(PostgreSQL)]
DB --> API --> React --> User
Employees (1) → Contracts (Many)
Each employee can have multiple contracts over time. Contracts are immutable legal documents.
| Method | Path | Purpose |
|---|---|---|
| GET | /employees | List employees |
| GET | /employees/{id} | Get one employee |
| POST | /employees | Create employee |
| PATCH | /employees/{id} | Update employee |
| DELETE | /employees/{id} | Delete employee |
| GET / POST | /contracts | List / create contracts |
| GET | /contracts/employee/{id} | List contracts for one employee |
| GET / DELETE | /contracts/{id} | Get / delete a contract |
Live site safety
Hosting on a budget
| Type | Tools Used | Implementation |
|---|---|---|
| Spring Unit Tests | JUnit + Mockito | ✅ Service Layers |
| Spring E2E Tests | REST Assured, H2 | ✅ 40+ employees / contracts |
| React Component Tests | Vitest | ⏳ Basic |
To run tests, use the following commands:
./mvnw test # backend
npm run test # frontend (if added)
cd front-end
npm install
npm run dev
# App available at: http://localhost:5173
cd employee
./mvnw clean install
./mvnw spring-boot:run
# API available at: http://localhost:8080
Install PostgreSQL (macOS: brew install postgresql && brew services start postgresql; Windows: download), then:
CREATE DATABASE your_database_name;
Create employee/.env:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database_name
SPRING_DATASOURCE_USERNAME=your_user
SPRING_DATASOURCE_PASSWORD=your_password
Create front-end/.env:
VITE_API_URL=http://localhost:8080
Other front-end commands: npm run build (production build), npm run preview (test the build).
POST /employees
{
"firstName": "Timmy",
"lastName": "Turner",
"email": "[email protected]",
"phone": "0400000000",
"address": "123 Fairy Lane" //opt
}
PATCH /employees/{id} takes the same fields.
POST /contracts
{
"employeeId": 15,
"department": "SALES",
"contractType": "FULL_TIME",
"salaryAmount": 80000,
"hoursPerWeek": 38,
"startDate": "2023-01-10",
"endDate": null //opt
}
# backend
./mvnw clean package -DskipTests
scp -i <key.pem> target/employee-creator.jar ubuntu@<EC2_IP>:/home/ubuntu/apps/employee-creator-spring/
ssh -i <key.pem> ubuntu@<EC2_IP> "sudo systemctl restart employee-creator"
# front-end
npm run build
aws s3 sync dist/ s3://<bucket-name> --delete
aws cloudfront create-invalidation --distribution-id <DIST_ID> --paths "/*"
Archived AWS details: the backend ran as a systemd service behind Nginx with Let's Encrypt TLS and a local PostgreSQL. The front-end ACM certificate had to be requested in us-east-1 (CloudFront requirement).
Backend API is deployed on AWS EC2. The frontend React app is deployed separately on S3 + CloudFront, and communicates with this backend via HTTPS.
| Layer | Service | Domain |
|---|---|---|
| Frontend (React) | S3 static site behind CloudFront | employeecreator.site |
| Backend (Spring Boot) | EC2 (Nginx reverse proxy → systemd service) | api.employeecreator.site |
| Database | PostgreSQL, local to the EC2 instance | — |
Note: Due to AWS costs, the long-term demo deployment has migrated to Render + Neon Postgres (free tier). Config: render.yaml. The AWS details above are kept for reference and the AWS workflows in
.github/workflows/are archived (not in use).
I built this employee management app on my own, as a practice run of how real business software gets made. The goal was to work the way a professional team would:
| Area | Challenge | What I Did |
|---|---|---|
| Connecting the pieces | Frontend and backend wouldn't talk once hosted on AWS | Fixed access rules so only the website could reach the backend |
| Testing | Writing tests first slowed me down | Tried the app by hand first, then wrote tests. Better balance for a solo project |
| Going live | Automated releases were fiddly | Changed one small thing at a time and re-tested |
| Working like a team | Simulating team practice solo | Stable main plus dev, one branch per feature, tidied history before merging |
| Keeping it organised | Documenting a two-part project | Split front and back end by purpose; kept the change log updated |
NEW_HIRE instead of INACTIVE (#55)Full plan: docs/roadmap.md.
MIT License.