트랜잭션 처리 수정 및 공통정보

This commit is contained in:
2025-03-26 15:24:34 +09:00
parent 51100ecb31
commit 927ef6c514
8 changed files with 44 additions and 6 deletions

View File

@@ -4,23 +4,29 @@ import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.exception.RestApiException;
import com.caliverse.admin.global.component.transaction.DynamoDBTransactionContext;
import com.caliverse.admin.global.component.transaction.TransactionIdManager;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
@Aspect
@Component
@Slf4j
public class DynamoDBTransactionAspect {
private final DynamoDbEnhancedClient enhancedClient;
private final TransactionIdManager transactionIdManager;
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient) {
public DynamoDBTransactionAspect(DynamoDbEnhancedClient enhancedClient, TransactionIdManager transactionIdManager) {
this.enhancedClient = enhancedClient;
this.transactionIdManager = transactionIdManager;
}
@Around("@annotation(com.caliverse.admin.global.common.annotation.DynamoDBTransaction)")
@@ -28,6 +34,12 @@ public class DynamoDBTransactionAspect {
TransactWriteItemsEnhancedRequest.Builder transactionBuilder =
TransactWriteItemsEnhancedRequest.builder();
boolean hasExistingTransaction = TransactionSynchronizationManager.hasResource(TRANSACTION_ID_KEY);
if (!hasExistingTransaction) {
transactionIdManager.getCurrentTransactionId();
}
try {
// 메서드 실행 전 트랜잭션 컨텍스트 설정
DynamoDBTransactionContext.setTransactionBuilder(transactionBuilder);
@@ -38,7 +50,7 @@ public class DynamoDBTransactionAspect {
// 트랜잭션 커밋
TransactWriteItemsEnhancedRequest transactionRequest =
DynamoDBTransactionContext.getTransactionBuilder().build();
if (!transactionRequest.transactWriteItems().isEmpty()) {
if (transactionRequest.transactWriteItems() != null && !transactionRequest.transactWriteItems().isEmpty()) {
enhancedClient.transactWriteItems(transactionRequest);
}
@@ -54,6 +66,10 @@ public class DynamoDBTransactionAspect {
} finally {
// 트랜잭션 컨텍스트 정리
DynamoDBTransactionContext.clear();
if (!hasExistingTransaction && TransactionSynchronizationManager.hasResource(TRANSACTION_ID_KEY)) {
TransactionSynchronizationManager.unbindResource(TRANSACTION_ID_KEY);
}
}
}
}

View File

@@ -8,12 +8,13 @@ import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
@Aspect
@Component
@RequiredArgsConstructor
public class TransactionIdAspect {
private final TransactionIdManager transactionIdManager;
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
@Around("@annotation(org.springframework.transaction.annotation.Transactional)")
public Object setTransactionId(ProceedingJoinPoint joinPoint) throws Throwable {

View File

@@ -30,6 +30,7 @@ public enum ErrorCode {
PASSWORD_ERROR("입력된 현재 비밀번호가 틀립니다."),
NOT_FOUNT_TEAM("입력한 팀을 찾지 못했습니다."),
NOT_FOUNT_API("요청한 API를 찾지 못했습니다."),
NOT_FOUNT_POSITION( "입력한 직급을 찾지 못했습니다."),
NOT_MATCH_USER("이메일 또는 비밀번호가 일치하지않습니다."),
DUPLICATED_EMAIL("동일한 이메일이 존재합니다."),
@@ -49,6 +50,8 @@ public enum ErrorCode {
ERROR_API_CALL("API 호출에 실패하였습니다."),
ERROR_HISTORY_SAVE("히스토리로그 저장 실패"),
//calium
ERROR_CALIUM_FINISH("충전 완료된 칼리움입니다."),
@@ -72,6 +75,9 @@ public enum ErrorCode {
ERROR_LOG_MEMORY_LIMIT("데이터가 많아 메모리 초과"),
ERROR_MONGODB_QUERY("디비 조회 에러"),
//Initialize
ERROR_DATA_INIT("데이터 초기화 에러 발생"),
//------------------------------------------------------------------------------------------------------------------------------
// DyanamoDB
//------------------------------------------------------------------------------------------------------------------------------

View File

@@ -13,14 +13,18 @@ public class AdminConstants {
public static final String MONGO_DB_COLLECTION_UGQ_CREATE = "ugqcreate";
public static final String MONGO_DB_COLLECTION_METAVER_SERVER = "metaverseserver";
public static final String MONGO_DB_COLLECTION_LOG = "Log";
public static final String MONGO_DB_COLLECTION_DATA_INIT_HISTORY = "dataInitHistory";
public static final String MONGO_DB_COLLECTION_HISTORY_LOG = "historyLog";
public static final String MONGO_DB_KEY_LOGTIME = "logTime";
public static final String MONGO_DB_KEY_LOGMONTH = "logMonth";
public static final String MONGO_DB_KEY_LOGDAY = "logDay";
public static final String MONGO_DB_KEY_LOGHOUR = "logHour";
public static final String MONGO_DB_KEY_LOGMINUTE = "logMinute";
public static final String MONGO_DB_KEY_TIMESTAMP = "timestamp";
public static final String MONGO_DB_KEY_MESSAGE = "message";
public static final String MONGO_DB_KEY_DB_TYPE = "dbType";
public static final String MONGO_DB_KEY_USER_GUID = "userGuid";
public static final String MONGO_DB_KEY_USER_NICKNAME = "userNickname";

View File

@@ -21,4 +21,6 @@ public class CommonConstants {
public static final String FORMAT_DATE_DATETIME = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_DATE_ISO_DATETIME = "yyyy-MM-dd'T'HH:mm:ss";
public static final String FORMAT_DATE_MAIL_DATETIME = "yyyy/MM/dd/HH:mm:ss:SS";
public static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
}

View File

@@ -8,10 +8,11 @@ public class DynamoDBConstants {
//PK
public static final String PK_KEY_CALIUM = "calium#storage";
public static final String PK_KEY_SYSTEM_MAIL = "management_system_meta_mail#global";
public static final String PK_KEY_LAND_AUCTION = "land_auction_registry#global";
public static final String PK_KEY_LAND_AUCTION_REGISTRY = "land_auction_registry#global";
public static final String PK_KEY_LAND_AUCTION_ACTIVE = "land_auction_activity#global";
public static final String PK_KEY_LAND_AUCTION_HIGHEST_USER = "land_auction_highest_bid_user#global";
public static final String PK_KEY_LAND_AUCTION_RECORD = "land_auction_record#global";
public static final String PK_KEY_LAND_AUCTION_REFUND_BID_PRICE = "land_auction_refund_bid_price#";
public static final String PK_KEY_USER_NICKNAME_REGISTRY = "user_nickname_registry#global";
public static final String PK_KEY_MONEY = "money#";
public static final String PK_KEY_LAND = "land#";

View File

@@ -8,4 +8,5 @@ public class MysqlConstants {
public static String TABLE_NAME_MAIL = "mail";
public static String TABLE_NAME_NOTICE = "notice";
public static String TABLE_NAME_BATTLE_EVENT = "battle_event";
public static String TABLE_NAME_MESSAGE = "message";
}

View File

@@ -4,9 +4,10 @@ import com.caliverse.admin.global.common.utils.CommonUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import static com.caliverse.admin.global.common.constants.CommonConstants.TRANSACTION_ID_KEY;
@Component
public class TransactionIdManager {
private static final String TRANSACTION_ID_KEY = "TRANSACTION_ID";
public String getCurrentTransactionId() {
String currentId = (String) TransactionSynchronizationManager.getResource(TRANSACTION_ID_KEY);
@@ -17,4 +18,10 @@ public class TransactionIdManager {
return currentId;
}
public String getNewTransactionId() {
String newId = CommonUtils.getCreateGuId();
TransactionSynchronizationManager.bindResource(TRANSACTION_ID_KEY, newId);
return newId;
}
}