Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
c8bb787
feat :post
sitduk143 Jun 19, 2025
5d3cdda
feat : board api
sitduk143 Jun 26, 2025
0354776
feat : board api 재업로드
sitduk143 Jun 26, 2025
e86aa27
[fix] 회원가입/로그인 테스트 완료
sitduk143 Jul 16, 2025
ae27f66
[fix] 회원가입/로그인 테스트 O
sitduk143 Jul 16, 2025
b3e3497
merge
jwj9127 Jul 17, 2025
c246dc1
[fix] 회원가입/로그인 재업
sitduk143 Jul 17, 2025
fd4bcff
merge
sitduk143 Jul 17, 2025
c462cc3
Merge branch 'duk_board_feature' of https://github.com/likeliontravel…
sitduk143 Jul 17, 2025
c56a129
[fix] group css
sitduk143 Jul 17, 2025
4e26c60
[fix] 응답 헤더 토큰
sitduk143 Jul 19, 2025
03e6c01
[fix] 헤더 토큰 응
sitduk143 Jul 23, 2025
09f7512
[fix] 헤더 토큰 응답
sitduk143 Jul 23, 2025
028956a
feat: mypage, group api mapping
jwj9127 Jul 24, 2025
ff64df3
[fix] header token
sitduk143 Jul 24, 2025
0f6a4e5
merge
jwj9127 Jul 24, 2025
23fb63f
feat: add token
jwj9127 Jul 24, 2025
99e91b7
fix: groupId -> groupName derectory change
jwj9127 Jul 29, 2025
3e4f03f
fix: group api modify, add group chat code
jwj9127 Jul 31, 2025
9d316ef
[feat] Header 게시판 및 랜덤 여행지 이동 추가
sitduk143 Aug 5, 2025
8ac6454
[fix] 게시판 글 관련, 댓글 및 대댓글, 버그 수정 및 테스트
sitduk143 Aug 5, 2025
a076cb2
docs: groupId -> groupName으로 변경
jwj9127 Aug 22, 2025
fd4945b
feat: api token 추가
jwj9127 Aug 22, 2025
84f01b6
docs: 데이터 연동중
jwj9127 Aug 22, 2025
c785161
style: classname 네이밍 변경, cursor 추가
jwj9127 Aug 22, 2025
df9181b
docs: 데이터 props로 전달하도록 형식 변경
jwj9127 Aug 22, 2025
19ec728
fix: 더미데이터에서 실제 api 데이터로 연결중
jwj9127 Aug 22, 2025
2bf3323
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
c2b50ed
feat: 채팅더미데이터, css 추가 및 이미지 추가
jwj9127 Sep 4, 2025
2050f19
feat: 초대링크기능 추가
jwj9127 Sep 4, 2025
9dc55f5
fix: 공지 정렬 수정
jwj9127 Sep 4, 2025
8d3c061
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
ff5bcb5
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
ede08b9
docs: 필요없는 코드 정리
jwj9127 Sep 4, 2025
658449b
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
c1f7fdb
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
8dde231
feat: 일정이 없는 경우에 대한 퍼블리싱
jwj9127 Sep 4, 2025
6a50a37
style: 반응형을 위한 css 수정
jwj9127 Sep 4, 2025
8f83dc5
docs: params 형식 변경
jwj9127 Sep 4, 2025
907082d
feat: schedule 추가
jwj9127 Sep 4, 2025
aa7c639
[refactor] pull, 추가 코드(배포test)
sitduk143 Sep 24, 2025
7027232
[refactor] 포트 수정 및 docker 설정 추가
sitduk143 Sep 29, 2025
7c951ef
[fix] randomLoading 타입 수정
sitduk143 Sep 29, 2025
b7c81f4
[fix] (배포시 오류)TourOverlay 타입 수정
sitduk143 Sep 29, 2025
0a6e472
[fix] (배포시 오류)Header 버그 수정
sitduk143 Sep 29, 2025
6bd3e56
[fix] (배포시 오류)group page token 랜더링
sitduk143 Sep 29, 2025
b4e1177
[fix] (배포시 오류)group page token 랜더링
sitduk143 Sep 29, 2025
148c202
[fix] (배포시 오류)mypage token 랜더링
sitduk143 Sep 29, 2025
50bd265
[fix] (배포시 오류)mypage token 랜더링
sitduk143 Sep 29, 2025
73dcec4
[fix] 헤더 로그인 Link
sitduk143 Oct 23, 2025
fb07308
[fix] header 로그인 접근 권한 수정
sitduk143 Oct 23, 2025
c464ea1
[fix] header 로그인 접근 권한 재수정
sitduk143 Oct 23, 2025
4d842b8
[fix] api url, 첫 경로 리다이렉트 수정
sitduk143 Oct 23, 2025
e417232
[feat] 소셜 로그인 리다이렉트 처리
sitduk143 Oct 31, 2025
d7b4097
[refactor] postList css 코드 변경
sitduk143 Oct 31, 2025
4849c79
[refactor] postList css 코드 변경
sitduk143 Oct 31, 2025
41c2b00
[refactor] postList css 코드 변경
sitduk143 Oct 31, 2025
1e6d157
[refactor] postList css 코드 변경
sitduk143 Oct 31, 2025
e537cc1
[refactor] 소셜로그인 컴포넌트분리
sitduk143 Oct 31, 2025
7ada0fe
[refactor] 소셜로그인 URL 변경
sitduk143 Oct 31, 2025
e78901d
[fix] Header 랜더링 수정 및 로그아웃 추가
sitduk143 Nov 4, 2025
11a4fea
[fix] header 로그아웃 css 수정
sitduk143 Nov 4, 2025
3f65638
[fix] header 로그아웃 css 수정
sitduk143 Nov 4, 2025
0329c31
[fix] header 로그아웃 css 수정
sitduk143 Nov 4, 2025
701f87a
[fix] 소셜 로그인 인터셉터 로직 수정
sitduk143 Nov 4, 2025
9c0c802
[fix] 소셜 로그인 JWT 토큰 디코딩
sitduk143 Nov 4, 2025
ee63df7
[fix] redux 초기화 문제 수정
sitduk143 Nov 6, 2025
3eb8a2a
[fix] redux 초기화 문제 수정
sitduk143 Nov 6, 2025
0832df6
[fix] redux 초기화 문제 수정
sitduk143 Nov 6, 2025
4875424
[fix] redux 초기화 문제 수정
sitduk143 Nov 6, 2025
d5795c0
[fix] redirect 추가 및 -> json 방식으로 변경
sitduk143 Nov 10, 2025
b8a4fa3
[fix] redirect 추가 및 -> json 방식으로 변경
sitduk143 Nov 11, 2025
01cd86b
[fix] 소셜 로그인 오류 수정
sitduk143 Nov 14, 2025
6b30f18
[feat] 게시글,댓글 수정 삭제 및 타임스템프 표시
sitduk143 Nov 14, 2025
3eb5751
[fix] Header 호버 및 게시판 입장권한 수정
sitduk143 Nov 14, 2025
24ea767
feat: slice 추가
jwj9127 Nov 20, 2025
a8f0f27
feat: store 추가
jwj9127 Nov 20, 2025
8f5a5a6
fix: dispatch로 axios 변경
jwj9127 Nov 20, 2025
cec6b08
docs: 불필요 코드 제거
jwj9127 Nov 27, 2025
bf41765
fix: slice로 axios 통신 통합
jwj9127 Nov 27, 2025
87d4cd6
docs: 디렉토리 정리
jwj9127 Nov 27, 2025
d255c71
style: group page btn css 수정
jwj9127 Dec 23, 2025
fb126b2
fix: 기존 axios -> silce로 변경
jwj9127 Dec 23, 2025
55aef60
fix: 기존 axios -> silce로 변경
jwj9127 Dec 23, 2025
203537f
feat: schedule silce 추가
jwj9127 Dec 23, 2025
ecec5b3
[feat] 사이드바 기능추가
sitduk143 Jan 8, 2026
5d77449
Merge branches 'duk_board_feature' and 'duk_board_feature' of https:/…
sitduk143 Jan 8, 2026
de157d5
[fix] 이전 코드 버그 수정
sitduk143 Jan 12, 2026
18b03b0
[fix] 게시판 기능 오류 수정
sitduk143 Jan 14, 2026
fa94d14
[feat] 서버 통합으로 인한 엔드포인트 변경
sitduk143 Jan 17, 2026
a41d0bb
[fix] 서버 통합으로 인한 엔드포인트 변경
sitduk143 Jan 19, 2026
2246b81
style: 기본 css 수정
jwj9127 Feb 5, 2026
46b86dc
fix: api url 수정
jwj9127 Feb 11, 2026
4470420
fix: api 통신 로직 slice 통일 및 리듀서 설정
jwj9127 Feb 11, 2026
267455e
feat: API 관련 요청, 응답 통일 처리
jwj9127 Feb 11, 2026
e8aaded
fix: api 통일화로 인한 코드 감소
jwj9127 Feb 11, 2026
dd19c60
feat: 그룹 조회시 리듀서 설정
jwj9127 Feb 11, 2026
c1214a4
feat: chatReducer 추가
jwj9127 Feb 11, 2026
699b175
feat: 채팅 관련 Slice 추가
jwj9127 Feb 11, 2026
db7db02
fix: slice에서 필요없는 코드 제거
jwj9127 Feb 11, 2026
f66ffe0
fix: 채팅 관련 코드 분담 및 수정
jwj9127 Feb 11, 2026
05cad8c
fix: slice 통합
jwj9127 Feb 11, 2026
0f8fda7
fix: 코드 되돌리기
jwj9127 Feb 11, 2026
22e3783
fix: backend api url 변경에 따른 url 변경
jwj9127 Feb 26, 2026
1146481
fix: 채팅에 토큰 값이 부여되지 않아 기능을 상실 -> 채팅 기능에 토큰 값을 부여해 기능 복구
jwj9127 Mar 12, 2026
3b1353a
fix: 기존 하드코딩 된 user 정보 store에서 가져오기 및 mypage 관련 slice 추가
jwj9127 Mar 12, 2026
1028ca8
[fix] 내 글 보기 및 정렬 수정, 보안 강화
sitduk143 Mar 12, 2026
e7af80e
[fix] 내 글 보기 및 정렬 수정, 보안 강화
sitduk143 Mar 12, 2026
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
10 changes: 10 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# .dockerignore

node_modules
.next
.env*
npm-debug.log
README.md
.gitignore
Dockerfile
.dockerignore
33 changes: 33 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM node:20-alpine AS builder

WORKDIR /app

# 의존성 설치를 위해 파일 복사
COPY package*.json ./

# 의존성 설치 (버전 충돌 방지를 위해 --legacy-peer-deps 권장)
RUN npm install --legacy-peer-deps

# 소스 코드 복사
COPY . .

# Next.js 프로젝트 빌드
RUN npm run build


# 2. 실행 환경 (실행 환경도 Node 20으로 업그레이드)
FROM node:20-alpine AS runner

WORKDIR /app

# 빌드 결과물만 복사 (이미지 용량 최적화)
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
COPY --from=builder /app/public ./public

# 포트 설정
EXPOSE 3000

# 서버 시작
CMD ["npm", "start"]
108 changes: 108 additions & 0 deletions hooks/useChat.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
import { useEffect, useRef } from "react";
import SockJS from "sockjs-client";
import { Client, IMessage } from "@stomp/stompjs";
import { useDispatch, useSelector } from "react-redux";
import {
addMessage,
setMessages,
ChatMessage,
clearChat,
setConnected,
} from "../util/group/chat/chatSlice";
import { api } from "../util/api";
import { RootState } from "../store/store";

export const useChat = (groupName: string) => {
const dispatch = useDispatch();
const clientRef = useRef<Client | null>(null);
const { user } = useSelector((state: RootState) => state.auth);
const myName = user?.name || "";

useEffect(() => {
if (!groupName || !user) return;

const fetchChatHistory = async () => {
try {
const res = await api.get(`/chat/history/${groupName}`);

if (res.data.success) {
const historyMessages = res.data.data.map((msg: any) => ({
...msg,
isMine: msg.name === myName,
}));
dispatch(setMessages(historyMessages));
}
} catch (err) {
console.error("채팅 내역 불러오기 실패:", err);
}
};

fetchChatHistory();

const queryString = `?groupName=${encodeURIComponent(groupName)}`;

const client = new Client({
webSocketFactory: () =>
new SockJS("https://api.toleave.cloud/ws" + queryString, null, {
transports: ["xhr-streaming", "xhr-polling"],
withCredentials: true,
} as any),
reconnectDelay: 5000,
onConnect: () => {
console.log("WebSocket Connected!");
dispatch(setConnected(true));

client.subscribe(`/sub/chat/${groupName}`, (frame: IMessage) => {
try {
const msg = JSON.parse(frame.body);

const newMsg: ChatMessage = {
...msg,
isMine: msg.name === myName,
};

dispatch(addMessage(newMsg));
} catch (e) {
console.error("메시지 파싱 에러:", e);
}
});
},
onStompError: (frame) => {
console.error(
"Stomp Error Details:",
frame.headers["message"],
frame.body,
);
dispatch(setConnected(false));
},
onWebSocketClose: () => {
console.log("WebSocket Closed");
dispatch(setConnected(false));
},
});

client.activate();
clientRef.current = client;

return () => {
if (client.active) {
client.deactivate();
}
dispatch(clearChat());
};
}, [groupName, dispatch, myName, user]);

const sendMessage = (content: string, type: "TEXT" | "IMAGE" = "TEXT") => {
const client = clientRef.current;
if (client && client.active && content.trim()) {
client.publish({
destination: `/pub/chat/${groupName}`,
body: JSON.stringify({ content, type }),
});
return true;
}
return false;
};

return { sendMessage };
};
Binary file added localhost.p12
Binary file not shown.
4 changes: 2 additions & 2 deletions next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ const nextConfig: NextConfig = {
return [
{
source: '/',
destination: '/login',
destination: '/main',
},
];
},

async headers() {
return [
{
Expand Down
Loading