From 3f8fc13131750ec007cc9e6cdf56350515463731 Mon Sep 17 00:00:00 2001 From: persi Date: Mon, 16 Dec 2024 23:16:25 +0900 Subject: [PATCH 01/10] =?UTF-8?q?chore:=20=EC=B9=B8=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=ED=95=9C=20=EC=9C=A0=EC=A0=80=EC=9D=98=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=EC=9C=BC=EB=A1=9C=20=EB=B8=8C=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=EC=BA=90=EC=8A=A4=ED=8C=85=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/pachinko/handler/PachinkoWebSocketHandler.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/LuckyVicky/backend/pachinko/handler/PachinkoWebSocketHandler.java b/src/main/java/LuckyVicky/backend/pachinko/handler/PachinkoWebSocketHandler.java index 6443d24..35945d6 100644 --- a/src/main/java/LuckyVicky/backend/pachinko/handler/PachinkoWebSocketHandler.java +++ b/src/main/java/LuckyVicky/backend/pachinko/handler/PachinkoWebSocketHandler.java @@ -89,15 +89,14 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status) sessions.remove(session); } - private void processSquareSelection(WebSocketSession session, User user, long currentRound, int selectedSquare) - throws IOException { + private void processSquareSelection(WebSocketSession session, User user, long currentRound, int selectedSquare) { System.out.println(pachinkoService.viewSelectedSquares() + "핸들러에서 processSquareSelection 시작지점"); String result = pachinkoService.selectSquare(user, currentRound, selectedSquare); System.out.println(pachinkoService.viewSelectedSquares() + "핸들러에서 processSquareSelection 시작지점"); if (Objects.equals(result, "정상적으로 선택 완료되었습니다.")) { - broadcastMessage(user.getUsername() + "가 " + selectedSquare + "을 선택했습니다."); + broadcastMessage(user.getNickname() + "가 " + selectedSquare + "을 선택했습니다."); checkGameStatusAndCloseSessionsIfNeeded(); } else if (Objects.equals(result, "다른 사용자가 이전에 선택한 칸입니다.")) { sendMessage(session, selectedSquare + "번째 칸은 이미 다른 사용자에 의해 선택되었습니다."); From e0e98f52dd567f14a221948d879cc8504ab1efc7 Mon Sep 17 00:00:00 2001 From: persi Date: Mon, 16 Dec 2024 23:55:20 +0900 Subject: [PATCH 02/10] =?UTF-8?q?chore:=20uuid=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20util=EB=A1=9C=20=EB=B9=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/util/UuidGenerator.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java diff --git a/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java b/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java new file mode 100644 index 0000000..9d67399 --- /dev/null +++ b/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java @@ -0,0 +1,15 @@ +package LuckyVicky.backend.global.util; + +import com.aventrix.jnanoid.jnanoid.NanoIdUtils; +import java.util.UUID; + +public class UuidGenerator { + + public static String generateNanoUuid() { + return NanoIdUtils.randomNanoId(NanoIdUtils.DEFAULT_NUMBER_GENERATOR, NanoIdUtils.DEFAULT_ALPHABET, 12); + } + + public static String generateUuid() { + return UUID.randomUUID().toString(); + } +} \ No newline at end of file From 81eac9eab310931387a06d73b7c30b55021fb8c8 Mon Sep 17 00:00:00 2001 From: persi Date: Mon, 16 Dec 2024 23:55:44 +0900 Subject: [PATCH 03/10] =?UTF-8?q?chore:=20uuid=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=97=90=EC=84=9C=20'-'=20=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java b/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java index 9d67399..4a1c7f4 100644 --- a/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java +++ b/src/main/java/LuckyVicky/backend/global/util/UuidGenerator.java @@ -10,6 +10,6 @@ public static String generateNanoUuid() { } public static String generateUuid() { - return UUID.randomUUID().toString(); + return UUID.randomUUID().toString().replace("-", ""); } } \ No newline at end of file From daff838cd99ad4df93e83de60e9a970da2ff333d Mon Sep 17 00:00:00 2001 From: persi Date: Mon, 16 Dec 2024 23:57:02 +0900 Subject: [PATCH 04/10] =?UTF-8?q?refactor:=20uuid=EB=A5=BC=20=EB=94=B0?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=80=EC=9E=A5=ED=95=A0=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EA=B0=80=20=EC=97=86=EC=96=B4=20repository=EC=99=80=20entity?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/global/entity/Uuid.java | 28 ------------------- .../global/repository/UuidRepository.java | 8 ------ 2 files changed, 36 deletions(-) delete mode 100644 src/main/java/LuckyVicky/backend/global/entity/Uuid.java delete mode 100644 src/main/java/LuckyVicky/backend/global/repository/UuidRepository.java diff --git a/src/main/java/LuckyVicky/backend/global/entity/Uuid.java b/src/main/java/LuckyVicky/backend/global/entity/Uuid.java deleted file mode 100644 index 076e2cd..0000000 --- a/src/main/java/LuckyVicky/backend/global/entity/Uuid.java +++ /dev/null @@ -1,28 +0,0 @@ -package LuckyVicky.backend.global.entity; - -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import java.util.UUID; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Uuid extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(unique = true) - private String uuid; - - private Uuid(String uuid) { - this.uuid = uuid; - } - - public static Uuid generateUuid() { - return new Uuid(UUID.randomUUID().toString()); - } -} \ No newline at end of file diff --git a/src/main/java/LuckyVicky/backend/global/repository/UuidRepository.java b/src/main/java/LuckyVicky/backend/global/repository/UuidRepository.java deleted file mode 100644 index cd9bee6..0000000 --- a/src/main/java/LuckyVicky/backend/global/repository/UuidRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package LuckyVicky.backend.global.repository; - -import LuckyVicky.backend.global.entity.Uuid; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UuidRepository extends JpaRepository { - -} From ec6720a362146e365faa7291c3485cc1744aa330 Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:01:14 +0900 Subject: [PATCH 05/10] =?UTF-8?q?refactor:=20nickname=EA=B3=BC=20invitecod?= =?UTF-8?q?e=20=EC=83=9D=EC=84=B1=20=ED=9B=84=20user=20entity=EC=97=90=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuckyVicky/backend/user/service/UserService.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/LuckyVicky/backend/user/service/UserService.java b/src/main/java/LuckyVicky/backend/user/service/UserService.java index 0286097..3f18d23 100644 --- a/src/main/java/LuckyVicky/backend/user/service/UserService.java +++ b/src/main/java/LuckyVicky/backend/user/service/UserService.java @@ -6,19 +6,17 @@ import LuckyVicky.backend.aes.service.AesEncryptService; import LuckyVicky.backend.enhance.domain.JewelType; import LuckyVicky.backend.global.api_payload.ErrorCode; -import LuckyVicky.backend.global.entity.Uuid; import LuckyVicky.backend.global.exception.GeneralException; import LuckyVicky.backend.global.fcm.domain.UserDeviceToken; import LuckyVicky.backend.global.fcm.repository.UserDeviceTokenRepository; -import LuckyVicky.backend.global.repository.UuidRepository; import LuckyVicky.backend.global.s3.AmazonS3Manager; +import LuckyVicky.backend.global.util.UuidGenerator; import LuckyVicky.backend.user.converter.UserConverter; import LuckyVicky.backend.user.domain.RefreshToken; import LuckyVicky.backend.user.domain.User; import LuckyVicky.backend.user.domain.UserJewel; import LuckyVicky.backend.user.dto.JwtDto; import LuckyVicky.backend.user.dto.UserRequestDto; -import LuckyVicky.backend.user.dto.UserRequestDto.UserReqDto; import LuckyVicky.backend.user.jwt.JwtTokenUtils; import LuckyVicky.backend.user.repository.RefreshTokenRepository; import LuckyVicky.backend.user.repository.UserJewelRepository; @@ -54,7 +52,6 @@ public class UserService { private final JpaUserDetailsManager manager; private final JwtTokenUtils jwtTokenUtils; private final AmazonS3Manager amazonS3Manager; - private final UuidRepository uuidRepository; private final UserJewelRepository userJewelRepository; private final AesEncryptService aesEncryptService; @@ -86,10 +83,9 @@ public Boolean checkMemberByEmail(String email) { @Transactional public User createUser(UserRequestDto.UserReqDto userReqDto) { - Uuid uuid = Uuid.generateUuid(); - String nick = "user" + uuid.getUuid(); - uuidRepository.save(uuid); - User newUser = userRepository.save(UserConverter.saveUser(userReqDto, nick)); + String nick = "user" + UuidGenerator.generateNanoUuid(); + String code = UuidGenerator.generateUuid(); + User newUser = userRepository.save(UserConverter.saveUser(userReqDto, nick, code)); // 새로운 사용자 정보를 반환하기 전에 저장된 UserDetails를 다시 로드하여 동기화 시도 manager.loadUserByUsername(userReqDto.getUsername()); From 45fe2d9c3c3c2459c8d1ced8deead2e97ad7a341 Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:15:50 +0900 Subject: [PATCH 06/10] =?UTF-8?q?refactor:=20=EB=82=9C=EC=88=98=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=EC=B6=A9=EB=8F=8C=EB=82=98?= =?UTF-8?q?=EB=8A=94=20=EC=83=81=ED=99=A9=20=EB=8C=80=EB=B9=84=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EB=8F=84=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/user/service/UserService.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/LuckyVicky/backend/user/service/UserService.java b/src/main/java/LuckyVicky/backend/user/service/UserService.java index 3f18d23..89b0776 100644 --- a/src/main/java/LuckyVicky/backend/user/service/UserService.java +++ b/src/main/java/LuckyVicky/backend/user/service/UserService.java @@ -23,6 +23,7 @@ import LuckyVicky.backend.user.repository.UserRepository; import jakarta.servlet.http.HttpServletRequest; import jakarta.transaction.Transactional; +import jakarta.validation.ConstraintViolationException; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; @@ -83,12 +84,28 @@ public Boolean checkMemberByEmail(String email) { @Transactional public User createUser(UserRequestDto.UserReqDto userReqDto) { - String nick = "user" + UuidGenerator.generateNanoUuid(); - String code = UuidGenerator.generateUuid(); - User newUser = userRepository.save(UserConverter.saveUser(userReqDto, nick, code)); + int retryCount = 3; // 최대 재시도 횟수 + User newUser = null; + + for (int i = 0; i < retryCount; i++) { + try { + String nick = "user" + UuidGenerator.generateNanoUuid(); + String code = UuidGenerator.generateUuid(); + newUser = UserConverter.saveUser(userReqDto, nick, code); + + userRepository.save(newUser); // 저장 시도 + break; + } catch (ConstraintViolationException e) { + log.warn("UUID 충돌 발생, 재시도 ({}/{})", i + 1, retryCount); + } + } + if (newUser == null) { + log.error("최대 재시도 횟수를 초과하여 UUID를 생성하지 못했습니다."); + throw new RuntimeException("최대 재시도 횟수를 초과하여 UUID를 생성하지 못했습니다."); + } + + manager.loadUserByUsername(userReqDto.getUsername()); // 저장된 사용자 정보를 다시 로드하여 동기화 시도 - // 새로운 사용자 정보를 반환하기 전에 저장된 UserDetails를 다시 로드하여 동기화 시도 - manager.loadUserByUsername(userReqDto.getUsername()); return newUser; } From a0cbe1c3236d6bd44746bab3ad67a5efd0e50830 Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:16:21 +0900 Subject: [PATCH 07/10] =?UTF-8?q?refactor:=20=EC=BB=A8=EB=B2=84=ED=84=B0?= =?UTF-8?q?=EC=97=90=EC=84=9C=20invitecode=EA=B9=8C=EC=A7=80=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=84=9C=20User=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LuckyVicky/backend/user/converter/UserConverter.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/LuckyVicky/backend/user/converter/UserConverter.java b/src/main/java/LuckyVicky/backend/user/converter/UserConverter.java index 13f489d..f08574a 100644 --- a/src/main/java/LuckyVicky/backend/user/converter/UserConverter.java +++ b/src/main/java/LuckyVicky/backend/user/converter/UserConverter.java @@ -1,6 +1,5 @@ package LuckyVicky.backend.user.converter; -import LuckyVicky.backend.global.entity.Uuid; import LuckyVicky.backend.global.fcm.domain.UserDeviceToken; import LuckyVicky.backend.user.domain.User; import LuckyVicky.backend.user.dto.JwtDto; @@ -12,7 +11,7 @@ @NoArgsConstructor public class UserConverter { - public static User saveUser(UserRequestDto.UserReqDto userReqDto, String nick) { + public static User saveUser(UserRequestDto.UserReqDto userReqDto, String nick, String code) { LocalDateTime today = LocalDateTime.now(); DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); @@ -25,7 +24,7 @@ public static User saveUser(UserRequestDto.UserReqDto userReqDto, String nick) { .provider(userReqDto.getProvider()) .signInDate(todayDate) .lastAttendanceCheckedDay(0) - .inviteCode(Uuid.generateUuid().getUuid()) + .inviteCode(code) .previousPachinkoRound(-1L) .rouletteAvailableTime(today) .advertiseTodayLeftNum(10) From a05e9d9f579525b9273e74d3711befe223428a50 Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:17:03 +0900 Subject: [PATCH 08/10] =?UTF-8?q?chore:=20=EC=A7=A7=EC=9D=80=20uuid=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9D=84=20=EC=9C=84=ED=95=B4=20nano=20id=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index eb7a98d..5dad337 100644 --- a/build.gradle +++ b/build.gradle @@ -44,6 +44,9 @@ dependencies { // coolsms sdk implementation 'net.nurigo:sdk:4.2.0' + // nano id + implementation 'com.aventrix.jnanoid:jnanoid:2.0.0' + // database runtimeOnly 'com.mysql:mysql-connector-j' From 1f1f048ef9b3d20a69129f1b5af1763e3e595dbd Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:24:01 +0900 Subject: [PATCH 09/10] =?UTF-8?q?chore:=20gitignore=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=97=90=20.idea=EB=A5=BC=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=B6=94=EC=A0=81=EB=90=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5275376..3a33dd1 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ bin/ ### IntelliJ IDEA ### .idea +.idea/ *.iws *.iml *.ipr From 48e1f3a2787e683d3c4b7323174e457ac7dfef12 Mon Sep 17 00:00:00 2001 From: persi Date: Tue, 17 Dec 2024 00:24:31 +0900 Subject: [PATCH 10/10] Remove .idea directory from version control --- .idea/.gitignore | 8 ------- .idea/.name | 1 - .idea/compiler.xml | 16 -------------- .idea/dataSources.xml | 44 --------------------------------------- .idea/gradle.xml | 19 ----------------- .idea/jarRepositories.xml | 20 ------------------ .idea/misc.xml | 7 ------- .idea/vcs.xml | 7 ------- 8 files changed, 122 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/.name delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/dataSources.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 98cd9e7..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -backend \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 1bcd671..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index 19dd4a8..0000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - mysql.8 - true - com.mysql.cj.jdbc.Driver - jdbc:mysql://persi-public.czy08w68qx69.ap-northeast-2.rds.amazonaws.com:3306/wish_persi - - - - - - - $ProjectFileDir$ - - - mysql.8 - true - com.mysql.cj.jdbc.Driver - jdbc:mysql://persi-public.czy08w68qx69.ap-northeast-2.rds.amazonaws.com:3306/luckyvicky_dev - - - - - - - $ProjectFileDir$ - - - mysql.8 - true - com.mysql.cj.jdbc.Driver - jdbc:mysql://persi-public.czy08w68qx69.ap-northeast-2.rds.amazonaws.com:3306/luckyvicky_ldh - - - - - - - $ProjectFileDir$ - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index a0b2cd2..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index fdc392f..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 4dfdffa..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index c0788f1..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -