Skip to content

HoBom-s/for-hobom-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

226 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

for-hobom-backend

Backend system for the HoBom project, built with NestJS and TypeScript following Hexagonal Architecture principles.

๐Ÿš€ Features

  • Modular architecture with clear boundaries
  • RESTful API using NestJS
  • MongoDB integration via Mongoose
  • Daily todo management like TODO MATES
  • Comprehensive unit and integration testing with Jest
  • Swagger-based API documentation
  • GitHub Actions for CI/CD

๐Ÿ› ๏ธ Tech Stack

  • Framework: NestJS
  • Language: TypeScript
  • Database: MongoDB
  • ODM: Mongoose
  • Testing: Jest
  • API Docs: Swagger
  • CI/CD: GitHub Actions

๐Ÿ“ฆ Installation

npm install

โ–ถ๏ธ Running App

npm run start:dev

๐Ÿงช Running Tests

npm run test

๐Ÿ“š API Documentation

http://localhost:8080/api-docs

์•„ํ‚คํ…์ฒ˜

Hexagonal Architecture (Ports & Adapters) ํŒจํ„ด์„ ์ ์šฉํ•œ๋‹ค.

๊ฐ ๋„๋ฉ”์ธ ๋ชจ๋“ˆ ๊ตฌ์กฐ:

{domain}/
โ”œโ”€โ”€ domain/
โ”‚   โ”œโ”€โ”€ model/       # Entity, Value Object, Repository ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ””โ”€โ”€ ports/
โ”‚       โ”œโ”€โ”€ in/      # Input Port (Use Case ์ธํ„ฐํŽ˜์ด์Šค)
โ”‚       โ””โ”€โ”€ out/     # Output Port (Command, ์™ธ๋ถ€ ์˜์กด์„ฑ ์ธํ„ฐํŽ˜์ด์Šค)
โ”œโ”€โ”€ application/     # Use Case ๊ตฌํ˜„์ฒด (Service)
โ”œโ”€โ”€ adapters/
โ”‚   โ”œโ”€โ”€ in/          # HTTP Controller, gRPC Controller
โ”‚   โ””โ”€โ”€ out/         # Persistence/Query Adapter
โ””โ”€โ”€ infra/           # Repository ๊ตฌํ˜„์ฒด (Mongoose)

ADR: gRPC ์„ ํƒ ์ด์œ 

๊ฒฐ์ •

์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ(์•ฑ/์›น)๋Š” REST(ํฌํŠธ 8080), ๋‚ด๋ถ€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์€ **gRPC(ํฌํŠธ 50051)**๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐฐ๊ฒฝ

์ด ์„œ๋น„์Šค๋Š” Transactional Outbox ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ชจ๋“  ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋Š” outbox ์ปฌ๋ ‰์…˜์— PENDING ์ƒํƒœ๋กœ ๊ธฐ๋ก๋˜๊ณ , ๋ณ„๋„์˜ consumer ์„œ๋น„์Šค๋“ค์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

[REST Client (์•ฑ/์›น)]
        โ†“ HTTP (8080)
[hobom-backend]
  โ†’ outbox ์ปฌ๋ ‰์…˜์— ์ด๋ฒคํŠธ ์ €์žฅ (PENDING)
        โ†‘ gRPC (50051)
[Consumer Services]
  - FindOutboxByEventTypeAndStatus: pending ์ด๋ฒคํŠธ polling
  - PatchOutboxMarkAsSent: ์ฒ˜๋ฆฌ ์™„๋ฃŒ ํ›„ SENT๋กœ ๊ฐฑ์‹ 

gRPC๋ฅผ ์„ ํƒํ•œ ์ด์œ 

1. ๊ฐ•ํƒ€์ž… ๊ณ„์•ฝ (Contract-First)

Protocol Buffers(.proto ํŒŒ์ผ)๊ฐ€ ๋ช…์‹œ์  ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์•ฝ์„œ ์—ญํ• ์„ ํ•œ๋‹ค. ์„œ๋ฒ„์™€ ๋ชจ๋“  consumer๊ฐ€ ๋™์ผํ•œ hobom-buf-proto git submodule์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ถˆ์ผ์น˜๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

REST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์•ฝ์ด ์•”๋ฌต์ ์ด ๋˜์–ด ๋‚ด๋ถ€ ์„œ๋น„์Šค ๊ฐ„ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค.

2. ์„ฑ๋Šฅ

JSON ๋Œ€๋น„ Protocol Buffers ๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ์ฝ”๋”ฉ์€ payload ํฌ๊ธฐ๊ฐ€ ์ž‘๋‹ค. outbox polling์ฒ˜๋Ÿผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋Œ€๋Ÿ‰์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๋Š” ํŒจํ„ด์—์„œ ํšจ์œจ์ ์ด๋‹ค.

3. ์ฝ”๋“œ ์ƒ์„ฑ

proto ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์ฝ”๋“œ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋˜์–ด ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.

๋Œ€์•ˆ๊ณผ ๊ธฐ๊ฐ ์ด์œ 

๋Œ€์•ˆ ๊ธฐ๊ฐ ์ด์œ 
REST (๋‚ด๋ถ€) ๊ณ„์•ฝ์ด ์•”๋ฌต์ , ๋ฒ„์ „ ๊ด€๋ฆฌ ์–ด๋ ค์›€
Message Queue (Kafka ๋“ฑ) ํ˜„์žฌ ๊ทœ๋ชจ์—์„œ ์ธํ”„๋ผ ๋ณต์žก๋„ ๊ณผ๋‹ค

proto ํŒŒ์ผ ์œ„์น˜

hobom-buf-proto/ (git submodule)์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

Releases

No releases published

Packages

 
 
 

Contributors

Languages