Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
e508157
refactor: μŠ€λ”ν‹°λ£Έ κΆŒν•œμ— λŒ€ν•œ 둜직 κ°œμ„ 
loseminho Oct 2, 2025
8b766f3
Merge remote-tracking branch 'origin/dev' into refactor/146
loseminho Oct 2, 2025
ef46ed0
fix: ciμ—μ„œ 톡과 λͺ»ν•œ ν…ŒμŠ€νŠΈμ½”λ“œ μˆ˜μ •
loseminho Oct 3, 2025
23e55ea
fix:rest api와 μ›Ήμ†ŒμΌ“ 쀑간 경둜 톡합
loseminho Oct 4, 2025
2979e6e
fix:rest api와 μ›Ήμ†ŒμΌ“ 쀑간 경둜 톡합
loseminho Oct 4, 2025
2de8631
fix: 병합 좩돌 μ œμ–΄
loseminho Oct 4, 2025
e576231
Merge remote-tracking branch 'origin/dev' into refactor/146
loseminho Oct 5, 2025
98c9e4c
fix: μ—λŸ¬ 확인을 μœ„ν•œ ν†΅ν•©ν…ŒμŠ€νŠΈ μΆ”κ°€, Room.create()λ©”μ„œλ“œ μˆ˜μ •
loseminho Oct 5, 2025
8cb4561
refactor, feat
loseminho Oct 5, 2025
be970fd
Merge remote-tracking branch 'origin/dev' into refactor/146
loseminho Oct 5, 2025
57c38ae
refactor: redis 둜직 μ΅œμ ν™” 및 쀑볡 검증 둜직 제거
loseminho Oct 7, 2025
ad752e7
fix : 병합 좩돌 μ œμ–΄
loseminho Oct 7, 2025
1af4d1e
fix: μ—λŸ¬ 번호 μˆ˜μ •
loseminho Oct 8, 2025
483a0fc
feat: μŠ€ν„°λ””λ£Έ λ°© λΉ„λ°€λ²ˆν˜Έ λ³€κ²½ 및 μ‚­μ œ κΈ°λŠ₯ κ΅¬ν˜„
loseminho Oct 9, 2025
89971f2
Merge remote-tracking branch 'origin/dev' into feat-215
loseminho Oct 9, 2025
77ab976
fix:app-dev 제거
loseminho Oct 9, 2025
7a17167
feat: μ›Ήμ†ŒμΌ“ 기반 μ†Œκ·Ήμ  ν•˜νŠΈλΉ„νŠΈ
loseminho Oct 9, 2025
dd229f2
Merge remote-tracking branch 'origin/dev' into feat/217
loseminho Oct 10, 2025
cf32230
feat: μŠ€ν„°λ””λ£Έ 썸넀일 κΈ°λŠ₯ μΆ”κ°€ 및 webrtc μ„€μ • λ³€κ²½μ—μ„œ μ£Όμ„μ²˜λ¦¬
loseminho Oct 10, 2025
be00c11
Merge branch 'feat/217' of https://github.com/prgrms-web-devcourse-fi…
loseminho Oct 10, 2025
da453f6
fix:μ†Œκ·Ήμ  ν•˜νŠΈλΉ„νŠΈ μ‚¬μš© μ£Όμ„μ²˜λ¦¬
loseminho Oct 10, 2025
70813b6
Merge remote-tracking branch 'origin/dev' into feat/217
loseminho Oct 11, 2025
2de5447
Feat: μŠ€ν„°λ”” λ£Έ 내에 고양이 아바타 μ‹œμŠ€ν…œκ³Ό ν”„λ‘œν•„ 이미지 url 연동
loseminho Oct 11, 2025
2bc4e95
Merge remote-tracking branch 'origin/dev' into feat/217
loseminho Oct 11, 2025
7d4237c
fix: κΈ°μ‘΄ μž‘μ„±λ˜μ–΄μžˆλ˜ test μ½”λ“œ μˆ˜μ •
loseminho Oct 11, 2025
ad988c8
Merge remote-tracking branch 'origin/dev' into feat/217
loseminho Oct 12, 2025
030cbc8
Merge remote-tracking branch 'origin/dev' into feat/217
loseminho Oct 12, 2025
08a976f
test: 아바타 ν…ŒμŠ€νŠΈ μ½”λ“œ μ™„λ£Œ
loseminho Oct 12, 2025
8761b03
refactor: ν”„λ‘ νŠΈμ—”λ“œ μš”μ²­ 사항에 λ”°λ₯Έ μŠ€ν„°λ””λ£Έ 쑰회 λ§ˆμŠ€ν‚Ή 제거
loseminho Oct 13, 2025
4a770d6
Merge remote-tracking branch 'origin/dev' into refactor/257
loseminho Oct 13, 2025
a096d93
Merge remote-tracking branch 'origin/dev' into refactor/257
loseminho Oct 13, 2025
df98fc7
feat: μŠ€ν„°λ””λ£Έ λ°© μ΄ˆλŒ€ μ½”λ“œ μ‹œμŠ€ν…œ
loseminho Oct 13, 2025
4be3aab
Infra: main branch 둜컬 ν™˜κ²½κ³Ό 운영 ν™˜κ²½ 동기화
namgigun Oct 13, 2025
e0a3af3
Infra: docker-compose 파일 μˆ˜μ •
namgigun Oct 1, 2025
3aaebb6
Fix: λ°±μ—”λ“œ CD 파일 μˆ˜μ •
namgigun Oct 2, 2025
cdf13b7
Infra: EC2 ν™˜κ²½λ³€μˆ˜ μˆ˜μ •
namgigun Oct 13, 2025
bc471c4
Chore: CD 파일 μˆ˜μ •
namgigun Oct 2, 2025
eee9529
Chore: λ°±μ—”λ“œ CD 파일 μˆ˜μ •
namgigun Oct 2, 2025
849fbf5
Infra: λ°±μ—”λ“œ CD 파일 μˆ˜μ •
namgigun Oct 2, 2025
670984c
Infra: 도컀 컴포즈 μˆ˜μ •
namgigun Oct 5, 2025
2fc31f0
Infra: μš΄μ˜ν™˜κ²½ μ„€μ •
namgigun Oct 13, 2025
401fa4b
Fix: SecurityConfig μˆ˜μ •
namgigun Oct 13, 2025
f68ff22
test,fix: λ°© μ΄ˆλŒ€μ— λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± 및 μ—λŸ¬ μˆ˜μ •
loseminho Oct 13, 2025
2c49fc6
Merge remote-tracking branch 'origin/dev' into fix/279
loseminho Oct 14, 2025
8cbb11f
fix: μŠ€ν„°λ””λ£Έ 파일 μ—…λ‘œλ“œ λ§΅ν•‘ ν˜•μ‹μœΌλ‘œ λ³€ν™˜
loseminho Oct 14, 2025
6c9e254
Merge remote-tracking branch 'origin' into fix/279
loseminho Oct 14, 2025
0cea892
fix: λ³‘ν•©μΆ©λŒ μ œμ–΄ μˆ˜μ •
loseminho Oct 14, 2025
4563fef
fix: λ³‘ν•©μΆ©λŒ μ œμ–΄
loseminho Oct 14, 2025
6f5596a
fix: μŠ€ν„°λ”” λ£Έ λ‚΄ ν”„λ‘ νŠΈμ—”λ“œ μš”κ΅¬ 사항 및 였λ₯˜μ‚¬ν•­ μˆ˜μ •
loseminho Oct 14, 2025
b23ba21
Merge remote-tracking branch 'origin/dev' into fix/287
loseminho Oct 14, 2025
ab6baa8
feat: λ°© 즐겨찾기, λ°© 곡지사항 κ΅¬ν˜„
loseminho Oct 15, 2025
1c05a8a
Merge remote-tracking branch 'origin/dev' into fix/287
loseminho Oct 15, 2025
b70548c
fix: mockbean μˆ˜μ •
loseminho Oct 15, 2025
03419b6
fix: ν…ŒμŠ€νŠΈμ—μ„œ λΉ μ§„ λΉ„λ‘œκ·ΈμΈ μ‚¬μš©μž μΆ”κ°€
loseminho Oct 15, 2025
f33a5fb
Merge remote-tracking branch 'origin/dev' into fix/287
loseminho Oct 15, 2025
1c7e23d
hotfix: λˆ„λ½λœ μ‚¬μš©μž 좔방에 λŒ€ν•œ 컨트둀러 μΆ”κ°€
loseminho Oct 15, 2025
3eaa5a8
hotfix: VISITOR도 μΆ”λ°© κ°€λŠ₯ν•˜λ„λ‘ μˆ˜μ •
loseminho Oct 15, 2025
e00990d
fix: λˆ„λ½λœ ν…ŒμŠ€νŠΈμ½”λ“œ μΆ”κ°€ 및 ν…ŒμŠ€νŠΈμ½”λ“œ 둜직 μˆ˜μ •
loseminho Oct 15, 2025
5343996
refactor: 아바타 μ‹œμŠ€ν…œ db와 뢄리 및 ν…ŒμŠ€νŠΈ μ½”λ“œ μˆ˜μ •
loseminho Oct 15, 2025
8b6fee4
Merge remote-tracking branch 'origin/dev' into refactor/302
loseminho Oct 15, 2025
723f49c
fix: ν„΄μ„œλ²„ dev에 맞좀
loseminho Oct 15, 2025
d65757a
hotfix: μΆ”λ°© ν›„ μΆ”λ°©λ‹Ήν•œ μœ μ €μ—κ²Œ 개인 λ©”μ‹œμ§€ 전솑 둜직 μΆ”κ°€
loseminho Oct 15, 2025
25e6685
fix: μ›Ήμ†ŒμΌ“ λ©”μ„Έμ§€ 전솑
loseminho Oct 15, 2025
fdefe26
fix: 병합 였λ₯˜ μ œμ–΄
loseminho Oct 15, 2025
4e82263
Merge remote-tracking branch 'origin/dev' into hotfix/302
loseminho Oct 15, 2025
7d4abc5
test: ν…ŒμŠ€νŠΈμ½”λ“œ μˆ˜μ •
loseminho Oct 15, 2025
e20e5f0
refactor: μŠ€ν„°λ””λ£Έ 파일 μ—…λ‘œλ“œ s3 + fileAttachment + Mapping 제거 λ°©μ‹μœΌλ‘œ μˆ˜μ •
loseminho Oct 15, 2025
43336e0
feat: λ°© λ‚΄ λ°©λͺ…둝 κΈ°λŠ₯ μΆ”κ°€
loseminho Oct 15, 2025
f52da19
Merge remote-tracking branch 'origin/dev' into feat/296
loseminho Oct 15, 2025
80ed188
Merge remote-tracking branch 'origin/dev' into feat/296
loseminho Oct 15, 2025
4cb7de7
Merge remote-tracking branch 'origin/dev' into feat/296
loseminho Oct 15, 2025
5b3a429
hotfix:둜젝 λ‚΄ μ›Ήμ†ŒμΌ“ μ„Έμ…˜ 제거
loseminho Oct 15, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,27 @@ public void handleSessionDisconnected(SessionDisconnectedEvent event) {

// μ‚¬μš©μž λ°© μž…μž₯ (아바타 정보 포함)
public void enterRoom(Long userId, Long roomId, Long avatarId) {
// WebSocket μ„Έμ…˜ 검증 제거 - REST API와 WebSocket μˆœμ„œ λ¬΄κ΄€ν•˜κ²Œ λ™μž‘
WebSocketSessionInfo sessionInfo = redisSessionStore.getUserSession(userId);

if (sessionInfo == null) {
log.warn("μ„Έμ…˜ 정보가 μ—†μ–΄ λ°© μž…μž₯ μ‹€νŒ¨ - μ‚¬μš©μž: {}, λ°©: {}", userId, roomId);
throw new CustomException(ErrorCode.WS_SESSION_NOT_FOUND);
}

if (sessionInfo.currentRoomId() != null && !sessionInfo.currentRoomId().equals(roomId)) {
// κΈ°μ‘΄ λ°©μ—μ„œ 퇴μž₯ 처리 (μ„Έμ…˜μ΄ 있고, λ‹€λ₯Έ 방에 μžˆλŠ” 경우만)
if (sessionInfo != null && sessionInfo.currentRoomId() != null
&& !sessionInfo.currentRoomId().equals(roomId)) {
exitRoom(userId, sessionInfo.currentRoomId());
log.debug("κΈ°μ‘΄ λ°©μ—μ„œ 퇴μž₯ 처리 μ™„λ£Œ - μ‚¬μš©μž: {}, 이전 λ°©: {}",
userId, sessionInfo.currentRoomId());
}

WebSocketSessionInfo updatedSession = sessionInfo.withRoomId(roomId);
redisSessionStore.saveUserSession(userId, updatedSession);
// μ„Έμ…˜ 정보 μ—…λ°μ΄νŠΈ (μ„Έμ…˜μ΄ μžˆλŠ” 경우만)
if (sessionInfo != null) {
WebSocketSessionInfo updatedSession = sessionInfo.withRoomId(roomId);
redisSessionStore.saveUserSession(userId, updatedSession);
log.debug("WebSocket μ„Έμ…˜ μ—…λ°μ΄νŠΈ μ™„λ£Œ - μ‚¬μš©μž: {}, λ°©: {}", userId, roomId);
} else {
log.debug("WebSocket μ„Έμ…˜ 없이 Redis 등둝 - μ‚¬μš©μž: {}, λ°©: {} (REST API μš°μ„  호좜)", userId, roomId);
}

// Redis에 λ°© μ°Έκ°€μž 등둝 (μ„Έμ…˜ 없이도 κ°€λŠ₯!)
redisSessionStore.addUserToRoom(roomId, userId);

// 아바타 정보 μ €μž₯
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,18 +156,24 @@ void handleSessionDisconnected_ExitsAllRooms() {
}

@Test
@DisplayName("λ°© μž…μž₯ - μ„Έμ…˜ 정보 μ—†μŒ (μ˜ˆμ™Έ λ°œμƒ)")
void enterRoom_NoSession_ThrowsException() {
@DisplayName("λ°© μž…μž₯ - μ„Έμ…˜ 정보 μ—†μŒ (REST API μš°μ„  호좜, 정상 λ™μž‘)")
void enterRoom_NoSession_SuccessWithoutSession() {
// given
given(redisSessionStore.getUserSession(userId)).willReturn(null);
given(userRepository.findById(userId)).willReturn(Optional.of(testUser));

// when & then
assertThatThrownBy(() -> roomParticipantService.enterRoom(userId, roomId))
.isInstanceOf(CustomException.class)
.hasFieldOrPropertyWithValue("errorCode", ErrorCode.WS_SESSION_NOT_FOUND);
// when
roomParticipantService.enterRoom(userId, roomId);

verify(redisSessionStore, never()).addUserToRoom(anyLong(), anyLong());
verify(messagingTemplate, never()).convertAndSend(anyString(), any(Object.class));
// then
// μ„Έμ…˜ μ—…λ°μ΄νŠΈλŠ” κ±΄λ„ˆλ›°μ§€λ§Œ, Redis 등둝은 싀행됨
verify(redisSessionStore, never()).saveUserSession(eq(userId), any(WebSocketSessionInfo.class));
verify(redisSessionStore).addUserToRoom(roomId, userId);

// λΈŒλ‘œλ“œμΊμŠ€νŠΈλŠ” 정상 μ‹€ν–‰
ArgumentCaptor<UserJoinedEvent> eventCaptor = ArgumentCaptor.forClass(UserJoinedEvent.class);
verify(messagingTemplate).convertAndSend(eq("/topic/room/" + roomId + "/events"), eventCaptor.capture());
assertThat(eventCaptor.getValue().getUserId()).isEqualTo(userId);
}

@Test
Expand Down