Skip to content

sunwon12/master-slave-batch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

17 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

κ²½λ§€ μ‹œμŠ€ν…œ - λ§ˆμŠ€ν„°-슬레이브 & Spring Batch ν•™μŠ΅ ν”„λ‘œμ νŠΈ

ν”„λ‘œμ νŠΈ κ°œμš”

이 ν”„λ‘œμ νŠΈλŠ” λ§ˆμŠ€ν„°-슬레이브 λ°μ΄ν„°λ² μ΄μŠ€ μ•„ν‚€ν…μ²˜μ™€ Spring Batchλ₯Ό ν™œμš©ν•œ λŒ€μš©λŸ‰ 배치 처리λ₯Ό ν•™μŠ΅ν•˜κΈ° μœ„ν•œ μ‹€μ „ κ²½λ§€ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

읽기 μž‘μ—…μ΄ λ§Žμ€ κ²½λ§€ μ‹œμŠ€ν…œμ˜ νŠΉμ„±μ„ ν™œμš©ν•˜μ—¬ 읽기/μ“°κΈ° 뢄리(Read-Write Splitting)λ₯Ό κ΅¬ν˜„ν•˜κ³ , κ²½λ§€ μ’…λ£Œ μ²˜λ¦¬μ™€ 같은 λŒ€λŸ‰ μ—…λ°μ΄νŠΈ μž‘μ—…μ„ Spring Batch둜 μ•ˆμ •μ μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

핡심 ν•™μŠ΅ λͺ©ν‘œ

λ§ˆμŠ€ν„°-슬레이브 μ•„ν‚€ν…μ²˜

  1. Spring Bootμ—μ„œ λ§ˆμŠ€ν„°-슬레이브 λ°μ΄ν„°λ² μ΄μŠ€ ꡬ성
  2. @Transactional(readOnly = true/false)λ₯Ό ν†΅ν•œ μžλ™ λΌμš°νŒ…
  3. MySQL Replication μ„€μ • 및 관리
  4. 읽기/μ“°κΈ° 뢄리λ₯Ό ν†΅ν•œ μ„±λŠ₯ μ΅œμ ν™”
  5. 볡제 μ§€μ—°(Replication Lag) 이해 및 λŒ€μ‘

Spring Batch

  1. λŒ€μš©λŸ‰ 데이터 배치 처리 (κ²½λ§€ μ’…λ£Œ μžλ™ν™”)
  2. Chunk μ§€ν–₯ 처리 (Reader-Processor-Writer νŒ¨ν„΄)
  3. JdbcPagingItemReaderλ₯Ό μ‚¬μš©ν•œ νŽ˜μ΄μ§• 읽기
  4. Late Binding을 ν†΅ν•œ 동적 νŒŒλΌλ―Έν„° 전달
  5. Spring Scheduler와 Batch 연동

기술 μŠ€νƒ

  • Framework: Spring Boot 3.5.6
  • Language: Java 21
  • Database: MySQL 8.0 (Master-Slave Replication)
  • ORM: Spring Data JPA
  • Batch: Spring Batch
  • Scheduler: Spring Scheduler (@Scheduled)
  • Connection Pool: HikariCP
  • Build Tool: Gradle
  • Containerization: Docker, Docker Compose

μ•„ν‚€ν…μ²˜

λ§ˆμŠ€ν„°-슬레이브 ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Spring Boot App    β”‚
β”‚   (Port: 8081)      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
           β”‚
           β”œβ”€β”€β”€ @Transactional (μ“°κΈ°) ──→ Master DB (Port: 3306)
           β”‚                                  β”‚
           β”‚                            Replication (GTID)
           β”‚                                  ↓
           └─── @Transactional(readOnly=true) ──→ Slave DB (Port: 3307)

배치 처리 μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚            Spring Scheduler (λ§€ λΆ„ μ‹€ν–‰)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
                  β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Spring Batch Job (auctionEndJob)          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Step: auctionEndStep (Chunk Size: 1000)              β”‚
β”‚                                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚ Reader: JdbcPagingItemReader                 β”‚    β”‚
β”‚  β”‚ - μ’…λ£Œ μ‹œκ°„μ΄ μ§€λ‚œ ACTIVE κ²½λ§€ 쑰회           β”‚    β”‚
β”‚  β”‚ - SQL 기반으둜 ν•„μš”ν•œ λ°μ΄ν„°λ§Œ 쑰회            β”‚    β”‚
β”‚  β”‚ - Late Binding으둜 ν˜„μž¬ μ‹œκ°„ μ£Όμž…             β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚               β”‚                                        β”‚
β”‚               β–Ό                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚  β”‚ Writer: JdbcBatchItemWriter                  β”‚    β”‚
β”‚  β”‚ - Chunk λ‹¨μœ„λ‘œ ENDED μƒνƒœλ‘œ 일괄 μ—…λ°μ΄νŠΈ      β”‚    β”‚
β”‚  β”‚ - JDBC 배치 μ—…λ°μ΄νŠΈλ‘œ μ„±λŠ₯ μ΅œμ ν™”            β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                  β”‚
                  β–Ό
            Master DB (Port: 3306)

데이터 λͺ¨λΈ

Entity 관계도

User (μ‚¬μš©μž)
  ↓ (1:N)
Auction (κ²½λ§€) ─── (1:N) ──→ Bid (μž…μ°°)
  ↓ (seller_id)              ↓ (bidder_id)
User (판맀자)              User (μž…μ°°μž)

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

μ‚¬μš©μž API

  • POST /api/users - μ‚¬μš©μž 등둝 (μ“°κΈ°)
  • GET /api/users/{id} - μ‚¬μš©μž 쑰회 (읽기)
  • GET /api/users/email/{email} - μ΄λ©”μΌλ‘œ μ‚¬μš©μž 쑰회 (읽기)

κ²½λ§€ API

  • POST /api/auctions - κ²½λ§€ 등둝 (μ“°κΈ°)
  • GET /api/auctions - κ²½λ§€ λͺ©λ‘ 쑰회 (읽기)
  • GET /api/auctions/{id} - κ²½λ§€ 상세 쑰회 (읽기)
  • GET /api/auctions/seller/{sellerId} - νŒλ§€μžλ³„ κ²½λ§€ (읽기)
  • PATCH /api/auctions/{id}/end - κ²½λ§€ μ’…λ£Œ (μ“°κΈ°)
  • POST /api/auctions/update-statuses - κ²½λ§€ μƒνƒœ μžλ™ μ—…λ°μ΄νŠΈ (μ“°κΈ°)

μž…μ°° API

  • POST /api/bids - μž…μ°°ν•˜κΈ° (μ“°κΈ°)
  • GET /api/bids/auctions/{auctionId} - 경맀별 μž…μ°° λ‚΄μ—­ (읽기)
  • GET /api/bids/auctions/{auctionId}/recent - 졜근 μž…μ°° 10개 (읽기)
  • GET /api/bids/users/{userId} - μ‚¬μš©μžλ³„ μž…μ°° λ‚΄μ—­ (읽기)
  • GET /api/bids/auctions/{auctionId}/winning - ν˜„μž¬ μ΅œκ³ κ°€ μž…μ°° (읽기)
  • GET /api/bids/auctions/{auctionId}/statistics - μž…μ°° 톡계 (읽기)

배치 μž‘μ—…

κ²½λ§€ μ’…λ£Œ 배치 (auctionEndJob)

  • μ‹€ν–‰ μ£ΌκΈ°: λ§€ λΆ„ (Cron: 0 * * * * *)
  • 처리 λŒ€μƒ: μ’…λ£Œ μ‹œκ°„μ΄ μ§€λ‚¬μ§€λ§Œ μƒνƒœκ°€ ACTIVE인 κ²½λ§€
  • Chunk Size: 1000건
  • Reader: JdbcPagingItemReader
    • SQL 기반으둜 ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μ‘°νšŒν•˜μ—¬ λ©”λͺ¨λ¦¬ μ΅œμ ν™”
    • Late Binding으둜 μŠ€μΌ€μ€„λŸ¬ μ‹€ν–‰ μ‹œμ μ˜ μ‹œκ°„μ„ λ™μ μœΌλ‘œ μ£Όμž…
    • JDBC νŽ˜μ΄μ§•μœΌλ‘œ 효율적인 데이터 쑰회
  • Writer: JdbcBatchItemWriter
    • JDBC 배치 μ—…λ°μ΄νŠΈλ‘œ μ„±λŠ₯ μ΅œμ ν™”
    • Chunk λ‹¨μœ„λ‘œ μ»€λ°‹ν•˜μ—¬ νŠΈλžœμž­μ…˜ λΆ„μ‚°

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages