How soluxboro/31th_1_solux_boro_back works
Purpose and runtime
BORO is a Spring Boot backend for a peer rental/community service: members publish rental posts and empty spots, request and manage rentals, chat, review, maintain assets/points, and authenticate socially. The application starts at src/main/java/com/boro/BoroApplication.java; Gradle build/runtime definition is build.gradle.
API and domain layering
Each business area follows controller → command/query service → repository/entity, with DTO converters separating HTTP contracts from persistence models. Core HTTP entry points include:
• Posts and availability: src/main/java/com/boro/domain/post/controller/PostController.java, src/main/java/com/boro/domain/emptyspot/controller/EmptySpotController.java
• Rentals: src/main/java/com/boro/domain/rentalrequest/controller/RentalRequestController.java, src/main/java/com/boro/domain/rentalrequest/controller/RentalController.java
• Member profiles/assets: src/main/java/com/boro/domain/member/controller/MemberController.java, src/main/java/com/boro/domain/member/controller/AssetController.java
Identity and request security
Authentication supports local token flows plus Google OAuth user loading. JWT security is a cross-cutting boundary: requests pass through Spring Security and JwtFilter, while token storage/query operations are backed by Redis. Relevant paths: src/main/java/com/boro/global/security/SecurityConfig.java, src/main/java/com/boro/domain/auth/service/command/AuthCommandService.java, src/main/java/com/boro/domain/auth/factory/GoogleUserLoader.java.
Rental marketplace lifecycle
Posts model rentable items, images, categories, prices, status, likes, and linked empty spots. Rental requests own request status/decisions and reviews; command/query services indicate separate mutation and read paths. The main business flow is member-authenticated post discovery/creation → rental request → rental decision/status transition → review and associated member history/points. Paths: src/main/java/com/boro/domain/post/entity/Post.java, src/main/java/com/boro/domain/rentalrequest/entity/RentalRequest.java, src/main/java/com/boro/domain/rentalrequest/entity/Review.java.
Realtime chat and eventing
Chat supports REST access and WebSocket/STOMP messaging, persisted as rooms, memberships, messages, and message images. Redis Pub/Sub provides a distribution boundary for chat events, enabling delivery beyond a single application process. Paths: src/main/java/com/boro/domain/chat/controller/ChatWebSocketController.java, src/main/java/com/boro/domain/chat/service/command/RedisPublisher.java, src/main/java/com/boro/global/config/WebSocketConfig.java.
Persistence, media, and shared behavior
Relational persistence is represented by JPA-style entities/repositories across domains, sharing audit/base behavior through BaseEntity. Redis is used for token/session-like storage and chat messaging. File upload is decoupled through AWS S3 presigned URL generation, so clients can transfer media directly to S3. Paths: src/main/java/com/boro/global/common/BaseEntity.java, src/main/java/com/boro/global/s3/service/S3PresignService.java, src/main/java/com/boro/global/config/RedisConfig.java.
Deployment and operations
The service is containerized with Dockerfile and composed via docker-compose.yml; Nginx is configured as an edge proxy in deploy/nginx/boro.conf. Prometheus scrape configuration is present at monitoring/prometheus.yml. CI/CD workflows are defined in .github/workflows/ci.yml and .github/workflows/cd.yml.
Components 21
Edge & Clients
- Members & clients
- Nginx edge proxy
deploy/nginx/boro.conf
Spring Application
- BORO application · Application runtime entry point.
src/main/java/com/boro/BoroApplication.java - Security & JWT filter · Secures requests and applies JWT authentication.
src/main/java/com/boro/global/security/SecurityConfig.java - Auth command service
src/main/java/com/boro/domain/auth/service/command/AuthCommandService.java - Google user loader
src/main/java/com/boro/domain/auth/factory/GoogleUserLoader.java
Marketplace Domain
- Posts & availability API
src/main/java/com/boro/domain/post/controller/PostController.java - Rental lifecycle API
src/main/java/com/boro/domain/rentalrequest/controller/RentalRequestController.java - Member & asset API
src/main/java/com/boro/domain/member/controller/MemberController.java - Posts & empty spots · Rentable listings include availability, media, price, status, and likes.
src/main/java/com/boro/domain/post/entity/Post.java - Requests, rentals & reviews · Owns request decisions, rental status, and reviews.
src/main/java/com/boro/domain/rentalrequest/entity/RentalRequest.java
Realtime Chat
- Chat WebSocket API
src/main/java/com/boro/domain/chat/controller/ChatWebSocketController.java - WebSocket/STOMP config
src/main/java/com/boro/global/config/WebSocketConfig.java - Chat event publisher
src/main/java/com/boro/domain/chat/service/command/RedisPublisher.java
Data & Media
- Relational persistence · Domain persistence shares audit behavior through BaseEntity.
src/main/java/com/boro/global/common/BaseEntity.java - Redis · Backs token operations and distributed chat delivery.
src/main/java/com/boro/global/config/RedisConfig.java - S3 presign service · Generates direct-upload URLs for clients.
src/main/java/com/boro/global/s3/service/S3PresignService.java - AWS S3
Operations
- Container deployment
docker-compose.yml - Prometheus scraping
monitoring/prometheus.yml - CI/CD workflows
.github/workflows/ci.yml
Connections 25
- Members & clients → Nginx edge proxy: HTTPS
- Nginx edge proxy → BORO application: proxies requests
- BORO application → Security & JWT filter: request pipeline
- Security & JWT filter → Auth command service: local token flows
- Security & JWT filter → Google user loader: OAuth login
- Auth command service → Redis: stores/queries tokens
- Security & JWT filter → Posts & availability API: authenticated REST
- Security & JWT filter → Rental lifecycle API: authenticated REST
- Security & JWT filter → Member & asset API: authenticated REST
- Posts & availability API → Posts & empty spots: commands & queries
- Rental lifecycle API → Requests, rentals & reviews: commands & queries
- Posts & empty spots → Requests, rentals & reviews: rental requests for posts
- Posts & empty spots → Relational persistence: persists
- Requests, rentals & reviews → Relational persistence: persists
- Member & asset API → Relational persistence: profiles, assets, points
- Members & clients → S3 presign service: requests upload URL
- S3 presign service → AWS S3: presigned upload
- Members & clients → WebSocket/STOMP config: STOMP connection
- WebSocket/STOMP config → Chat WebSocket API: routes messages
- Chat WebSocket API → Chat event publisher: publishes chat events
- Chat event publisher → Redis: Pub/Sub
- Chat WebSocket API → Relational persistence: persists rooms/messages
- CI/CD workflows → Container deployment: builds and deploys
- Container deployment → BORO application: runs service
- Prometheus scraping → BORO application: scrapes metrics