transtalk-server is the backend server for a real-time chat application, focusing on communication features.
It provides core functionalities such as user authentication and authorization, real-time message transmission, data management, and external service integration, ensuring a stable and scalable service.
java
transtalk-server/
├── src/main/java/com/wootech/transtalk
│ ├── client/ # External API Client
│ ├── config/ # Configuration
│ ├── controller/ # REST API Controller
│ ├── dto/ # Data Transfer Object
│ ├── entity/ # Entity
│ ├── interceptor/ # Interceptor
│ ├── repository/ # Repository
│ ├── exception/ # Exception Handling
│ ├── service/ # Business Logic
│ └── TranstalkApplication # Main Class
├── src/main/resources/
│ ├── application.properties # Configuration File
└── build.gradle- Real-time Chat System: Real-time message sending and receiving using WebSocket and STOMP.
- User Authentication and Authorization: Secure access control using Spring Security and JWT-based token management.
- User Management: Account management functions such as user signup, login, and withdrawal.
- Database Management: Data storage and management via MySQL (initial JPA) and MongoDB (chat data migration).
- DeepL API Integration: Integration with AI-based features (e.g., translation services) (inference).
- Automated Deployment: Efficient deployment using Docker and GitHub Actions.
- Refresh Token Management: Issuance and reissuance of Refresh Tokens using Redis.
For more detailed API information, please refer to the Notion document below:
The relationships between database tables can be viewed through the ERD below:
This section defines the key patterns and purposes for data stored in Redis.
| Key Type | Key Pattern | Description | Value Type | Expiration Policy |
|---|---|---|---|---|
| Refresh Token | refresh:{userId}:{refreshTokenValue}(e.g., refresh:user123:abcDEfGHIjkl...) |
Stores valid Refresh Tokens for Access Token re-issuance. | String | Matches Refresh Token's validity (e.g., 2 weeks) |
| JWT Blacklist (JTI) | bl:jti:{jtiValue}(e.g., bl:jti:a1b2c3d4e5f6...) |
Stores JTI of invalidated Access Tokens to prevent reuse after logout or compromise. | String | Matches Access Token's validity (e.g., 30 mins) |
Notes:
{userId}: Actual user ID.{refreshTokenValue}: The Refresh Token string.{jtiValue}: Thejti(JWT ID) claim value from the JWT.
This project follows the Git Flow branching strategy.
- Main
- Production-ready code.
- Updated only through merging release or hotfix branches.
- No direct commits allowed.
- develop
- Integration branch for ongoing development.
- All completed features are merged here before release preparation.
- feature/
- For implementing individual features or tasks.
- Branched from: develop
- Merged back into: develop via PR
- Naming: feature/
- release/
- For preparing a new production release.
- Branched from: develop
- Merged into: main and develop
- Naming: release/
- hotfix/
- For urgent fixes on the production environment.
- Branched from: develop
- Merged into: develop
- Naming: hotfix/
The main responsibilities for the Transtalk-Server project are as follows:
| Name | Key Responsibilities |
|---|---|
| TaeSeon Yoo | - Chatroom & Participant Domains: Designed and implemented core structures. - WebSockets: Set up real-time communication. - Chat Messaging: Implemented sending and storage using JPA. - Refactoring & Migration: Led chat message refactoring and migrated from JPA to MongoDB. - Translation Integration: Integrated external translation services using DeepL API. - CI/CD: Automated deployment workflows with GitHub Actions. |
| HoSoo Lee | - Authentication & Authorization: Implemented comprehensive authentication and authorization using Spring Security, JWT, Google Social Login, Redis blacklist, and Refresh Token mechanisms. - WebSocket Integration: Configured JWT and Spring Security settings for secure real-time communication via WebSockets. - Chat Messaging (MongoDB): Implemented chat message sending, storage, and retrieval by configuring MongoDB. - Cloud Deployment: Led application deployment utilizing AWS EC2, RDS, and MongoDB Cloud services. |