Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/backend/chat_server/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
FROM --platform=linux/amd64 azul/zulu-openjdk:17
ARG JAR_FILE=build/libs/chat_server1.jar
COPY ${JAR_FILE} ./chat_server1.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./chat_server1.jar"]

4 changes: 4 additions & 0 deletions src/backend/chat_server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ java {
}
}

bootJar {
archiveFileName = 'chat_server1.jar'
}

repositories {
mavenCentral()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class KafkaProducer {

public void sendChatMessage(ChatMessageToKafka chatMessageToKafka, Long roomId) {
String jsonChatMessage = gson.toJson(chatMessageToKafka);
kafkaTemplate.send("${topic.chat}", String.valueOf(roomId), jsonChatMessage).whenComplete((result, ex) -> { //키 값 설정으로 순서 보장, 실시간성이 떨어짐, 고민해봐야 할 부분
kafkaTemplate.send("jootalkpia.chat.prd.message", String.valueOf(roomId), jsonChatMessage).whenComplete((result, ex) -> { //키 값 설정으로 순서 보장, 실시간성이 떨어짐, 고민해봐야 할 부분
if (ex == null) {
log.info(result.toString());
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/backend/chat_server/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ group:
chat: chat-message-handle-consumer-group

server:
port: 8081
port: ${CHAT_PORT1}
5 changes: 5 additions & 0 deletions src/backend/history_server/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FROM --platform=linux/amd64 azul/zulu-openjdk:17
ARG JAR_FILE=build/libs/history_server.jar
COPY ${JAR_FILE} ./history_server.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./history_server.jar"]
8 changes: 8 additions & 0 deletions src/backend/history_server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ java {
}
}

bootJar {
archiveFileName = 'history_server.jar'
}

repositories {
mavenCentral()
}
Expand All @@ -31,6 +35,10 @@ dependencies {
// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

//kafka
implementation 'org.springframework.kafka:spring-kafka'
testImplementation 'org.springframework.kafka:spring-kafka-test'
}

tasks.named('test') {
Expand Down
3 changes: 3 additions & 0 deletions src/backend/history_server/dev.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## Atlas 클러스터 주소
MONGO_URI=mongodb+srv://kimboram:[email protected]/JootalkpiaHistoryServer?retryWrites=true&w=majority&appName=Cluster0
KAFKA_SERVER=13.125.13.209:9092

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
package com.jootalkpia.history_server.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Getter
@Document(collation = "chatMessage")
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class ChatMessage extends BaseTimeEntity {

@Id
Expand All @@ -25,12 +18,25 @@ public class ChatMessage extends BaseTimeEntity {

private String message; // 내용

@Builder.Default
private MessageType messageType = MessageType.TEXT; // 메시지 타입

@Builder.Default
private Boolean isAttachment = false; // 파일 첨부 여부

@Builder.Default
private Long threadId = null; // 원본 메시지 ID 최초일경우 null

protected ChatMessage() {
}

private ChatMessage(Long channelId, Long userId, String message, MessageType messageType, Boolean isAttachment, Long threadId) {
this.channelId = channelId;
this.userId = userId;
this.message = message;
this.messageType = messageType;
this.isAttachment = isAttachment;
this.threadId = threadId;
}

public static ChatMessage of(Long channelId, Long userId, String message, MessageType messageType, Boolean isAttachment, Long threadId) {
return new ChatMessage(channelId, userId, message, messageType, isAttachment, threadId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,22 @@
import com.jootalkpia.history_server.domain.ChatMessage;
import com.jootalkpia.history_server.domain.MessageType;

public record ChatMessageSaveRequest (
public record ChatMessageSaveRequest(

Long channelId, // 채널 ID
Long channelId, // 채널 ID

Long userId, // 유저 ID
Long userId, // 유저 ID

String message, // 메시지 내용
String message, // 메시지 내용

MessageType messageType, // 메시지 타입 (TEXT, IMAGE 등)
MessageType messageType, // 메시지 타입 (TEXT, IMAGE 등)

Boolean isAttachment, // 파일 첨부 여부
Boolean isAttachment, // 파일 첨부 여부

Long threadId // 원본 메시지 ID (최초 메시지일 경우 null)
Long threadId // 원본 메시지 ID (최초 메시지일 경우 null)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인부탁드려요


) {
public ChatMessage toEntity() {
return ChatMessage.builder()
.channelId(channelId)
.userId(userId)
.message(message)
.messageType((messageType != null) ? messageType : MessageType.TEXT) // 기본값 설정
.isAttachment((isAttachment != null) ? isAttachment : false) // 기본값 설정
.threadId(threadId)
.build();
) {
public ChatMessage toDocument() {
return ChatMessage.of(channelId, userId, message, messageType, isAttachment, threadId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.jootalkpia.history_server.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jootalkpia.history_server.dto.ChatMessageSaveRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
@Slf4j
public class KafkaConsumer {

private final HistoryCommandService historyCommandService;

@KafkaListener(
topics = "${topic.chat}",
groupId = "${group.history}"
)
public void processChatMessage(String kafkaMessage) {
log.info("message ===> " + kafkaMessage);

ObjectMapper mapper = new ObjectMapper();

try {
ChatMessageSaveRequest chatMessageSaveRequest = mapper.readValue(kafkaMessage, ChatMessageSaveRequest.class); //메시지 DTO 변경, 임시 DTO
historyCommandService.saveChatMessage(chatMessageSaveRequest.toDocument());

log.info("dto ===> " + chatMessageSaveRequest);
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
}
}
}
15 changes: 14 additions & 1 deletion src/backend/history_server/src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,17 @@
spring:
data:
mongodb:
uri: ${MONGO_URI}
uri: ${MONGO_URI}
kafka:
consumer:
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
bootstrap-servers: ${KAFKA_SERVER}

topic:
chat: jootalkpia.chat.prd.message
group:
history: chat-message-save-consumer-group

server:
port: ${HISTORY_PORT}
3 changes: 3 additions & 0 deletions src/backend/push_server/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
37 changes: 37 additions & 0 deletions src/backend/push_server/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/
12 changes: 12 additions & 0 deletions src/backend/push_server/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Azul Zulu JDK 17 기반 이미지 사용
FROM azul/zulu-openjdk:17

# 작업 디렉토리 설정
WORKDIR /app

# 빌드된 JAR 파일 복사
ARG JAR_FILE=build/libs/workspace_server-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} app.jar

# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "app.jar"]
38 changes: 38 additions & 0 deletions src/backend/push_server/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.7'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.jootalkpia'
version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.kafka:spring-kafka'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.kafka:spring-kafka-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading