Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions src/backend/chat-server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ repositories {
}

dependencies {
implementation 'io.github.dnovitski:logback-awslogs-appender:1.7.2'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.springframework.kafka:spring-kafka'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package kickzo.stomp_chat.controller;

import java.math.BigDecimal;
import java.math.RoundingMode;

import com.fasterxml.jackson.databind.ObjectMapper;

import kickzo.stomp_chat.enums.EventType;
Expand Down Expand Up @@ -75,5 +78,12 @@ public void playTime(String payload) throws Exception {
public record UserConnectRequest(long userId) {}
public record SendMessageRequest(long roomId, long userId, String nickname, int role, String profileImageUrl, String content, String message) {}

public record PlayTimeRequest(long roomId, long playTime, String playerState) {}
public record PlayTimeRequest(long roomId, BigDecimal playTime, String playerState) {
public PlayTimeRequest(long roomId, BigDecimal playTime, String playerState) {
this.roomId = roomId;
this.playTime = playTime.setScale(2, RoundingMode.HALF_UP); // 소수점 2자리로 변환
this.playerState = playerState;
}
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package kickzo.stomp_chat.dto.playlist;

import java.math.BigDecimal;
import java.math.RoundingMode;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -9,6 +12,6 @@
@NoArgsConstructor
public class PlayTime {
private long roomId;
private long playTime;
private BigDecimal playTime;
private String playerState;
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package kickzo.stomp_chat.dto.room;

public record ChatMessage(long roomId, long userId, String nickname, int role, String profileImageUrl, String content, String message) {}
public record ChatMessage(long roomId, long userId, String nickname, int role, String profileImageUrl, String content, String message, long timestamp) {}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package kickzo.stomp_chat.service;

import java.math.BigDecimal;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -34,7 +36,8 @@ public void leavePage(long userId) {
* 방에 메시지 전송
*/
public void handleMessageSend(long roomId, long userId, String nickname, int role, String profileImageUrl, String content, String message) {
ChatMessage chatMessage = new ChatMessage(roomId, userId, nickname, role, profileImageUrl, content, message);
long timestamp = System.currentTimeMillis(); // 현재 서버 시간
ChatMessage chatMessage = new ChatMessage(roomId, userId, nickname, role, profileImageUrl, content, message, timestamp);
kafkaRepository.sendChatMessage(chatMessage);
}

Expand All @@ -49,7 +52,7 @@ public void sendConnection(long userId, EventType eventType) {
/**
* Kafka에 playlistTime 전송
*/
public void sendPlayTime (long roomId, long playTime, String playerState){
public void sendPlayTime (long roomId, BigDecimal playTime, String playerState){
PlayTime playTimeObject = new PlayTime(roomId, playTime, playerState);

RoomEvent roomEvent = new RoomEvent("play-time", playTimeObject);
Expand Down
38 changes: 38 additions & 0 deletions src/backend/chat-server/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration packagingData="true">
<timestamp key="timestamp" datePattern="yyyy-MM-dd-HH-mm-ssSSS"/>

<appender name="aws_cloud_watch_log" class="ca.pjer.logback.AwsLogsAppender">
<layout>
<pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>
</layout>
<logGroupName>kickzo-logs</logGroupName>
<logStreamUuidPrefix>kickzo-log</logStreamUuidPrefix>
<logRegion>ap-northeast-1</logRegion>
<maxBatchLogEvents>50</maxBatchLogEvents>
<maxFlushTimeMillis>30000</maxFlushTimeMillis>
<maxBlockTimeMillis>5000</maxBlockTimeMillis>
<retentionTimeDays>0</retentionTimeDays>
<accessKeyId>${AWS_ACCESS_KEY}</accessKeyId>
<secretAccessKey>${AWS_SECRET_KEY}</secretAccessKey>
</appender>

<property name="CONSOLE_LOG_PATTERN" value="%highlight(%-5level) %date [%thread] %cyan([%C{0} :: %M :: %L]) - %msg%n"/>
<appender name="console_log" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>

<springProfile name="dev">
<root level="INFO">
<appender-ref ref="console_log"/>
</root>
</springProfile>

<springProfile name="docker">
<root level="WARN">
<appender-ref ref="aws_cloud_watch_log"/>
</root>
</springProfile>
</configuration>
8 changes: 4 additions & 4 deletions src/backend/chat-server/src/main/resources/static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ <h2>Room Chat</h2>
<div id="messages"></div>
<input type="text" id="messageInput" placeholder="Enter your message" />
<button onclick="sendMessage()">Send</button>
<button onclick="sendPlaylistTime(12)">Send Playlist Time (12 sec)</button>
<button onclick="sendplayTime(12.12354)">Send Play Time (12.12354 sec)</button>
</div>

<div id="status">Status: Disconnected</div>
Expand Down Expand Up @@ -161,14 +161,14 @@ <h2>Room Chat</h2>
console.log('Sent message:', payload);
}

function sendPlaylistTime(playlistTime) {
function sendplayTime(playTime) {
if (stompClient && stompClient.connected) {
const payload = JSON.stringify({
roomId: roomId,
playlistTime: playlistTime
playTime: playTime
});
stompClient.send('/app/play-time', {}, payload);
console.log('Sent playlistTime:', payload);
console.log('Sent playTime:', payload);
} else {
console.error('WebSocket not connected.');
}
Expand Down
22 changes: 22 additions & 0 deletions src/backend/elk/cleanup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash

# 모든 컨테이너 중지 및 삭제
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

# 모든 이미지 삭제
docker rmi $(docker images -aq)

# 모든 네트워크 삭제
docker network prune -f

# 모든 볼륨 삭제
docker volume prune -f

# Docker 빌드 캐시 삭제
docker builder prune -a -f

#volume 삭제
docker-compose down -v

echo "Docker cleanup completed!"
39 changes: 39 additions & 0 deletions src/backend/elk/docker-compose-es.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: kickzo

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
container_name: elasticsearch
ports:
- "${ELASTIC_PORT}:${ELASTIC_PORT}"
environment:
- discovery.type=single-node # 단일 노드로 실행
- xpack.security.enabled=true
- bootstrap.memory_lock=true # 메모리 잠금 활성화
- ES_JAVA_OPTS=-Xms512m -Xmx512m # Elasticsearch JVM 메모리 설정
- ELASTIC_USERNAME=elastic
- ELASTIC_PASSWORD=test123
volumes:
- es-data:/usr/share/elasticsearch/data
- ./elasticsearch-init.sh:/usr/share/elasticsearch/init.sh
entrypoint: [ "/bin/sh", "-c", "/usr/share/elasticsearch/init.sh & /usr/local/bin/docker-entrypoint.sh" ]
ulimits:
memlock:
soft: -1
hard: -1
networks:
- kickzo-network
restart: always
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:9200/_cluster/health" ]
interval: 10s
timeout: 5s
retries: 10
start_period: 10s

volumes:
es-data:

networks:
kickzo-network:
driver: bridge
31 changes: 31 additions & 0 deletions src/backend/elk/docker-compose-kibana.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: kickzo

services:
kibana:
image: docker.elastic.co/kibana/kibana:8.5.0
container_name: kibana
ports:
- "${KIBANA_PORT}:${KIBANA_PORT}"
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ELASTICSEARCH_USERNAME: kickzo
ELASTICSEARCH_PASSWORD: test123
depends_on:
elasticsearch:
condition: service_healthy
networks:
- kickzo-network
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:5601/api/status" ]
interval: 10s
timeout: 5s
retries: 10
start_period: 10s


volumes:
es-data:

networks:
kickzo-network:
driver: bridge
45 changes: 4 additions & 41 deletions src/backend/main-server/main/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,50 +18,13 @@ services:
SPRING_ELASTICSEARCH_PASSWORD: test123
SPRING_APPLICATION_NAME: main
depends_on:
- elasticsearch
elasticsearch:
condition: service_healthy
kibana:
condition: service_healthy
networks:
- kickzo-network

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
container_name: elasticsearch
ports:
- "${ELASTIC_PORT}:${ELASTIC_PORT}"
environment:
- discovery.type=single-node # 단일 노드로 실행
- xpack.security.enabled=true
- bootstrap.memory_lock=true # 메모리 잠금 활성화
- ES_JAVA_OPTS=-Xms512m -Xmx512m # Elasticsearch JVM 메모리 설정
- ELASTIC_USERNAME=elastic
- ELASTIC_PASSWORD=test123
volumes:
- es-data:/usr/share/elasticsearch/data
- ./elasticsearch-init.sh:/usr/share/elasticsearch/init.sh
entrypoint: [ "/bin/sh", "-c", "/usr/share/elasticsearch/init.sh & /usr/local/bin/docker-entrypoint.sh" ]
ulimits:
memlock:
soft: -1
hard: -1
networks:
- kickzo-network

kibana:
image: docker.elastic.co/kibana/kibana:8.5.0
container_name: kibana
ports:
- "${KIBANA_PORT}:${KIBANA_PORT}"
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ELASTICSEARCH_USERNAME: kickzo
ELASTICSEARCH_PASSWORD: test123
depends_on:
- elasticsearch
networks:
- kickzo-network

volumes:
es-data:

networks:
kickzo-network:
driver: bridge
8 changes: 0 additions & 8 deletions src/backend/main-server/main/kibana.yml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@EnableScheduling
@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.kickzo.main")
public class MainApplication {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class RoomResponseDto {
private String code;
private String title;
private String description;
private boolean isPublic;
private String creator;
private String profileImageUrl;
private int userCount;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.kickzo.main.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class User {
private final Long userId;
private final String nickname;
private final String stateMessage;
private final String profileImageUrl;

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,7 @@ public interface RoomRepository extends JpaRepository<Room, Long> {

@Query(value = "SELECT EXISTS (SELECT 1 FROM room r WHERE r.id = :roomId AND r.code = :roomCode)", nativeQuery = true)
Integer existsByRoomIdAndRoomCode(@Param("roomId") Long roomId, @Param("roomCode") String roomCode);

List<Room> findByIdIn(List<Long> roomIds);
}

Loading
Loading