Skip to content

πŸ‘·πŸ» κ±΄μ„€ν˜„μž₯ 노무관리λ₯Ό μœ„ν•œ AI ν”Œλž«νΌ, Build-UpπŸ‘·πŸ»- μ„œλ²„

Notifications You must be signed in to change notification settings

TEAM-CONCRETE/BU-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Build-Up Platform

Build-Up Platform의 λ°±μ—”λ“œ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

기술 μŠ€νƒ

  • Language: Java 21 (LTS)
  • Framework: Spring Boot 3.5.7
  • Database: MySQL
  • ORM: Spring Data JPA
  • Security: Spring Security
  • Build Tool: Gradle
  • Others: Lombok

μ‹œμž‘ν•˜κΈ°

Prerequisites

  • Java 21 이상
  • MySQL 8.0 이상
  • Gradle 8.x (λ˜λŠ” Gradle Wrapper μ‚¬μš©)

ν™˜κ²½ μ„€μ •

1. ν™˜κ²½ λ³€μˆ˜ 파일 생성

ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .env νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€:

# env.example을 .env둜 볡사
cp env.example .env

.env 파일 μ˜ˆμ‹œ:

# Spring ν”„λ‘œνŒŒμΌ
SPRING_PROFILES_ACTIVE=prod

# JWT 및 μ•”ν˜Έν™”
JWT_SECRET=your-secret-key-min-256-bits-long-for-hs256-algorithm
ENCRYPTION_KEY=your_32_byte_secure_encryption_key

# κ΄€λ¦¬μž 계정
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your_secure_admin_password

# λ°μ΄ν„°λ² μ΄μŠ€
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_DATABASE=buildup
MYSQL_USER=buildup_user
MYSQL_PASSWORD=your_mysql_password
MYSQL_PORT=3306

# AWS S3
AWS_S3_ENABLED=true
AWS_S3_BUCKET=your-s3-bucket-name
AWS_REGION=ap-northeast-2
AWS_ACCESS_KEY_ID=your_aws_access_key_id
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key

# AI Face Similarity API (선택사항)
AI_FACE_SIMILARITY_BASE_URL=http://localhost:8000
AI_FACE_SIMILARITY_API_KEY=your_face_api_key

ν™˜κ²½ λ³€μˆ˜ 생성 도ꡬ:

# JWT Secret 생성 (32λ°”μ΄νŠΈ 이상)
openssl rand -hex 32

# μ•”ν˜Έν™” ν‚€ 생성 (32λ°”μ΄νŠΈ)
openssl rand -hex 32

2. AWS S3 μ„€μ • (선택사항)

파일 μ—…λ‘œλ“œ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λ©΄ AWS S3 섀정이 ν•„μš”ν•©λ‹ˆλ‹€.

πŸ“˜ 상세 κ°€μ΄λ“œ: AWS S3 μ„€μ • κ°€μ΄λ“œ

μ£Όμš” 단계:

  1. AWS S3 버킷 생성
  2. IAM μ‚¬μš©μž 생성 및 κΆŒν•œ μ„€μ •
  3. μ•‘μ„ΈμŠ€ ν‚€ λ°œκΈ‰
  4. .env νŒŒμΌμ— 자격 증λͺ… μž…λ ₯

μ„€μΉ˜ 및 μ‹€ν–‰

1. μ €μž₯μ†Œ 클둠

git clone <repository-url>
cd buildup

2. μ‹€ν–‰ 방법

ν”„λ‘œμ νŠΈ μ‹€ν–‰ 방법은 μ„Έ κ°€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€:

방법 1: Docker Compose μ‚¬μš© (운영 ν™˜κ²½ ꢌμž₯)

Docker Composeλ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  μ„œλΉ„μŠ€(μ• ν”Œλ¦¬μΌ€μ΄μ…˜, MySQL, Nginx)λ₯Ό ν•œ λ²ˆμ— μ‹€ν–‰ν•©λ‹ˆλ‹€.

Prerequisites:

  • Docker Desktop μ‹€ν–‰ 쀑이어야 함
  • .env 파일 μ„€μ • μ™„λ£Œ
# λͺ¨λ“  μ„œλΉ„μŠ€ μ‹œμž‘
docker-compose up -d

# 둜그 확인
docker-compose logs -f app

# μ„œλΉ„μŠ€ 쀑지
docker-compose down

# λ³Όλ₯¨κΉŒμ§€ μ‚­μ œ (λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”)
docker-compose down -v

μ„œλΉ„μŠ€ 접속:

방법 2: 개발 슀크립트 μ‚¬μš© (둜컬 개발 ꢌμž₯)

Dockerλ₯Ό μ‚¬μš©ν•˜μ—¬ MySQLκ³Ό phpMyAdmin을 μžλ™μœΌλ‘œ μ„€μ •ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

Prerequisites:

  • Docker Desktop μ‹€ν–‰ 쀑이어야 함
  • docker-compose.dev.yml 파일 ν•„μš”
# μŠ€ν¬λ¦½νŠΈμ— μ‹€ν–‰ κΆŒν•œ λΆ€μ—¬
chmod +x ./start-dev.sh

# 개발 ν™˜κ²½ μ‹œμž‘
./start-dev.sh

이 μŠ€ν¬λ¦½νŠΈλŠ” λ‹€μŒμ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  • Docker Compose둜 MySQLκ³Ό phpMyAdmin μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘
  • MySQL μ—°κ²° λŒ€κΈ° 및 확인
  • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ dev ν”„λ‘œνŒŒμΌλ‘œ μ‹€ν–‰
  • μ’…λ£Œ μ‹œ(Ctrl+C) Docker μ»¨ν…Œμ΄λ„ˆ 정리 μ˜΅μ…˜ 제곡

μ„œλΉ„μŠ€ 접속:

방법 3: Gradle 직접 μ‹€ν–‰

둜컬 MySQL을 μ‚¬μš©ν•˜κ±°λ‚˜ Docker 없이 μ‹€ν–‰ν•˜λŠ” 경우:

# λ°μ΄ν„°λ² μ΄μŠ€ 생성 (MySQL이 이미 μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό 함)
mysql -u root -p
CREATE DATABASE buildup CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit;

# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ
./gradlew build

# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰
./gradlew bootRun

λ˜λŠ” λΉŒλ“œλœ JAR 파일 직접 μ‹€ν–‰:

java -jar build/libs/buildup-0.0.1-SNAPSHOT.jar

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄ http://localhost:8080μ—μ„œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. ν…ŒμŠ€νŠΈ μ‹€ν–‰

# λͺ¨λ“  ν…ŒμŠ€νŠΈ μ‹€ν–‰
./gradlew test

# νŠΉμ • ν…ŒμŠ€νŠΈ μ‹€ν–‰
./gradlew test --tests com.concrete.buildup.BuildupApplicationTests

# λΉŒλ“œ 정리
./gradlew clean

ν”„λ‘œμ νŠΈ ꡬ쑰

κΈ°λ³Έ νŒ¨ν‚€μ§€: com.concrete.buildup

Domain 쀑심 ꡬ쑰λ₯Ό μ±„νƒν•˜μ—¬ 각 λ„λ©”μΈλ³„λ‘œ κ΄€λ ¨ λ ˆμ΄μ–΄λ₯Ό κ·Έλ£Ήν™”ν•©λ‹ˆλ‹€.

src/main/java/com/concrete/buildup/
β”œβ”€β”€ domain/                     # 도메인별 κΈ°λŠ₯ λͺ¨λ“ˆ
β”‚   β”œβ”€β”€ auth/                   # 인증/인가 (νšŒμ›κ°€μž…, 둜그인, 토큰)
β”‚   β”‚   β”œβ”€β”€ controller/
β”‚   β”‚   β”œβ”€β”€ service/
β”‚   β”‚   β”œβ”€β”€ repository/
β”‚   β”‚   β”œβ”€β”€ dto/
β”‚   β”‚   └── entity/
β”‚   β”œβ”€β”€ employee/               # 사원 관리
β”‚   β”‚   β”œβ”€β”€ controller/
β”‚   β”‚   β”œβ”€β”€ service/
β”‚   β”‚   β”œβ”€β”€ repository/
β”‚   β”‚   β”œβ”€β”€ dto/
β”‚   β”‚   └── entity/
β”‚   β”œβ”€β”€ site/                   # ν˜„μž₯ 관리
β”‚   β”œβ”€β”€ contract/               # 계약 관리
β”‚   β”œβ”€β”€ payroll/                # κΈ‰μ—¬ 관리
β”‚   β”œβ”€β”€ attendance/             # κ·Όνƒœ 관리
β”‚   β”œβ”€β”€ workreport/             # μž‘μ—…μΌλ³΄
β”‚   └── safetydoc/              # μ•ˆμ „κ΅μœ‘μΌμ§€
β”œβ”€β”€ global/                     # μ „μ—­ μ„€μ • 및 곡톡 κΈ°λŠ₯
β”‚   β”œβ”€β”€ config/                 # μ„€μ • 클래슀 (Security, JPA, Web)
β”‚   β”œβ”€β”€ exception/              # μ˜ˆμ™Έ 처리
β”‚   β”œβ”€β”€ common/                 # 곡톡 μœ ν‹Έλ¦¬ν‹°, μƒμˆ˜
β”‚   └── util/                   # μœ ν‹Έλ¦¬ν‹° 클래슀
└── BuildupApplication.java     # 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜

도메인 λͺ©λ‘

도메인 μ„€λͺ… μ£Όμš” κΈ°λŠ₯
auth 인증/인가 νšŒμ›κ°€μž…, 둜그인, 토큰 관리
employee 사원 관리 사원 λͺ©λ‘, 검색
site ν˜„μž₯ 관리 ν˜„μž₯ 등둝, 쑰회, λŒ€μ‹œλ³΄λ“œ
contract 계약 관리 κ·Όλ‘œκ³„μ•½μ„œ 생성, μ„œλͺ…
payroll κΈ‰μ—¬ 관리 κΈ‰μ—¬ λͺ©λ‘, λͺ…μ„Έμ„œ 생성
attendance κ·Όνƒœ 관리 μΆœν‡΄κ·Ό 기둝
workreport μž‘μ—…μΌλ³΄ μž‘μ—…μΌλ³΄ 생성, PDF
safetydoc μ•ˆμ „κ΅μœ‘μΌμ§€ μ•ˆμ „κ΅μœ‘ 생성, μ„œλͺ…

API μ—”λ“œν¬μΈνŠΈ

μΆ”ν›„ μΆ”κ°€ μ˜ˆμ •

API μ—”λ“œν¬μΈνŠΈλŠ” λ‹€μŒκ³Ό 같은 ν˜•μ‹μœΌλ‘œ λ¬Έμ„œν™”λ  μ˜ˆμ •μž…λ‹ˆλ‹€:

μ˜ˆμ‹œ

Method Endpoint Description Auth Required
GET /api/users μ‚¬μš©μž λͺ©λ‘ 쑰회 Yes
POST /api/users μƒˆ μ‚¬μš©μž 생성 Yes

μ£Όμš” κΈ°λŠ₯

μΆ”ν›„ μΆ”κ°€ μ˜ˆμ •

ν”„λ‘œμ νŠΈμ˜ μ£Όμš” κΈ°λŠ₯듀이 여기에 λ¬Έμ„œν™”λ  μ˜ˆμ •μž…λ‹ˆλ‹€:

  • μ‚¬μš©μž 관리
  • 인증 및 κΆŒν•œ 관리
  • [μΆ”κ°€ κΈ°λŠ₯λ“€]

API 응닡 ν˜•μ‹

λͺ¨λ“  APIλŠ” μΌκ΄€λœ 응닡 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€:

성곡 응닡

{
  "success": true,
  "message": "μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€",
  "data": {
    // 응닡 데이터
  }
}

μ—λŸ¬ 응닡

{
  "success": false,
  "message": "μ—λŸ¬ λ©”μ‹œμ§€",
  "data": null
}

CI/CD

ν”„λ‘œμ νŠΈλŠ” GitHub Actionsλ₯Ό μ‚¬μš©ν•œ μžλ™ν™”λœ CI/CD νŒŒμ΄ν”„λΌμΈμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

CI (Continuous Integration)

  • μžλ™ μ‹€ν–‰: PR 생성 μ‹œ, main/develop 브랜치 ν‘Έμ‹œ μ‹œ
  • μž‘μ—… λ‚΄μš©: μžλ™ ν…ŒμŠ€νŠΈ, λΉŒλ“œ, Docker 이미지 λΉŒλ“œ
  • ν•„μˆ˜ μ„€μ •: μ—†μŒ (μ¦‰μ‹œ μ‚¬μš© κ°€λŠ₯)

CD (Continuous Deployment)

  • μžλ™ 배포:
    • main 브랜치 β†’ 운영 ν™˜κ²½ (Production) 배포
    • develop 브랜치 β†’ 개발 ν™˜κ²½ (Staging) 배포
  • ν•„μˆ˜ μ„€μ •: GitHub Secrets 등둝 ν•„μš”

πŸ“˜ 상세 κ°€μ΄λ“œ: GitHub Actions μ„€μ • κ°€μ΄λ“œ


개발 κ°€μ΄λ“œ

μ½”λ”© μ»¨λ²€μ…˜

넀이밍

  • 클래슀: PascalCase (예: UserService, OrderController)
  • λ©”μ„œλ“œ/λ³€μˆ˜: camelCase (예: findUserById, userName)
  • μƒμˆ˜: UPPER_SNAKE_CASE (예: MAX_RETRY_COUNT)

λ ˆμ΄μ–΄λ³„ μ—­ν• 

  • Entity: JPA μ—”ν‹°ν‹°, @Entity μ‚¬μš©, Lombok ν™œμš©
  • Repository: JpaRepository 상속, λ©”μ„œλ“œλͺ… 기반 쿼리
  • Service: @Service, @Transactional ν™œμš©, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΅¬ν˜„
  • Controller: @RestController, RESTful API, ResponseEntity μ‚¬μš©

μƒˆ κΈ°λŠ₯ 개발 μˆœμ„œ

Domain 쀑심 κ΅¬μ‘°μ—μ„œμ˜ 개발 μˆœμ„œ:

  1. 도메인 νŒ¨ν‚€μ§€ 생성 (domain/{domain-name}/)
  2. Entity μ •μ˜ (domain/{domain-name}/entity/)
  3. Repository μž‘μ„± (domain/{domain-name}/repository/)
  4. DTO μž‘μ„± (domain/{domain-name}/dto/)
  5. Service μž‘μ„± (domain/{domain-name}/service/)
  6. Controller μž‘μ„± (domain/{domain-name}/controller/)
  7. ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±

μ˜ˆμ‹œ: μƒˆλ‘œμš΄ project 도메인 μΆ”κ°€ μ‹œ

domain/project/
β”œβ”€β”€ controller/
β”‚   └── ProjectController.java
β”œβ”€β”€ service/
β”‚   └── ProjectService.java
β”œβ”€β”€ repository/
β”‚   └── ProjectRepository.java
β”œβ”€β”€ dto/
β”‚   β”œβ”€β”€ ProjectRequestDto.java
β”‚   └── ProjectResponseDto.java
└── entity/
    └── Project.java

μ£Όμ˜μ‚¬ν•­

  1. Spring Security: λͺ¨λ“  μ—”λ“œν¬μΈνŠΈλŠ” 기본적으둜 인증 ν•„μš”
  2. Lombok: @Data, @Builder, @RequiredArgsConstructor λ“± 적극 ν™œμš©
  3. JPA μ΅œμ ν™”: N+1 문제 주의, fetch join/EntityGraph ν™œμš©
  4. νŠΈλžœμž­μ…˜: 읽기 μ „μš©μ€ @Transactional(readOnly = true) μ‚¬μš©

λΌμ΄μ„ μŠ€

λΌμ΄μ„ μŠ€ 정보 μΆ”κ°€ μ˜ˆμ •

κΈ°μ—¬

κΈ°μ—¬ κ°€μ΄λ“œλΌμΈ μΆ”κ°€ μ˜ˆμ •

문의

문의처 정보 μΆ”κ°€ μ˜ˆμ •

About

πŸ‘·πŸ» κ±΄μ„€ν˜„μž₯ 노무관리λ₯Ό μœ„ν•œ AI ν”Œλž«νΌ, Build-UpπŸ‘·πŸ»- μ„œλ²„

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5

Languages