diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0cb68650..e4dfc19f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -37,6 +37,7 @@ jobs: USER_APIKEY=${{ secrets.USER_APIKEY }} SSL_PASSWORD=${{ secrets.SSL_PASSWORD }} EC2_PORT=${{ secrets.EC2_PORT }} + APP_ADMIN_EMAIL=${{ secrets.APP_ADMIN_EMAIL }} ENV_EOF - name: Build with Gradle @@ -107,7 +108,7 @@ jobs: # 5️⃣ Start Spring Boot on HTTPS port echo "=== Launching Spring Boot on port $EC2_PORT ===" - nohup sudo java -jar -Dspring.profiles.active=prod $JAR_PATH > /home/ubuntu/app.log 2>&1 & + nohup sudo -E java -jar -Dspring.profiles.active=prod $JAR_PATH > /dev/null 2>> /home/ubuntu/error.log & sleep 5 diff --git a/src/main/java/oneclass/oneclass/domain/member/entity/Member.java b/src/main/java/oneclass/oneclass/domain/member/entity/Member.java index 536faf4d..1fe0a275 100644 --- a/src/main/java/oneclass/oneclass/domain/member/entity/Member.java +++ b/src/main/java/oneclass/oneclass/domain/member/entity/Member.java @@ -30,8 +30,7 @@ public class Member { @NotBlank private String username; - @Column(nullable = false, length = 100) - @NotBlank + @Column(length = 100) private String email; @JsonIgnore diff --git a/src/main/java/oneclass/oneclass/global/exception/CommonError.java b/src/main/java/oneclass/oneclass/global/exception/CommonError.java index f7fd3888..844361d8 100644 --- a/src/main/java/oneclass/oneclass/global/exception/CommonError.java +++ b/src/main/java/oneclass/oneclass/global/exception/CommonError.java @@ -6,7 +6,7 @@ @Getter @RequiredArgsConstructor public enum CommonError implements CustomError { - INVALID_INPUT_VALUE(400, "유효하지 않은 입력입니다."); + INVALID_INPUT_VALUE(400, "유효하지 않은 입력입니다. %s"); private final int status; private final String message; diff --git a/src/main/java/oneclass/oneclass/global/exception/GlobalExceptionHandler.java b/src/main/java/oneclass/oneclass/global/exception/GlobalExceptionHandler.java index cbdc528d..622d1d7c 100644 --- a/src/main/java/oneclass/oneclass/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/oneclass/oneclass/global/exception/GlobalExceptionHandler.java @@ -1,5 +1,6 @@ package oneclass.oneclass.global.exception; +import lombok.extern.slf4j.Slf4j; import oneclass.oneclass.domain.attendance.entity.AttendanceStatus; import oneclass.oneclass.domain.attendance.error.AttendanceError; import oneclass.oneclass.global.dto.ApiResponse; @@ -13,12 +14,14 @@ import java.util.stream.Collectors; +@Slf4j @RestControllerAdvice public class GlobalExceptionHandler { // CustomException 처리 @ExceptionHandler(CustomException.class) public ResponseEntity> handleCustomException(CustomException e) { + log.warn("CustomException: {} - {}", e.getStatus(), e.getMessage()); return ResponseEntity.status(e.getStatus()) .body(ApiResponse.error(e)); } @@ -32,6 +35,8 @@ public ResponseEntity> handleValidationExceptions(MethodArgume .map(FieldError::getDefaultMessage) .collect(Collectors.joining(", ")); + log.info("Validation Error: {}", errors); // 간단한 정보 로그 + CustomException customException = new CustomException(CommonError.INVALID_INPUT_VALUE, errors); @@ -43,6 +48,7 @@ public ResponseEntity> handleValidationExceptions(MethodArgume // Enum 타입 불일치 등 @RequestParam / @PathVariable 타입 오류 처리 @ExceptionHandler(MethodArgumentTypeMismatchException.class) public ResponseEntity> handleTypeMismatch(MethodArgumentTypeMismatchException ex) { + log.info("Type Mismatch: {}", ex.getValue()); // 정보 로그 if (ex.getRequiredType() == AttendanceStatus.class) { CustomException customException = new CustomException(AttendanceError.INVALID_STATUS, ex.getValue() + "는 올바른 출석 상태가 아닙니다."); @@ -64,6 +70,7 @@ public ResponseEntity> handleTypeMismatch(MethodArgumentTypeMi // 그 외 모든 예외 처리 @ExceptionHandler(Exception.class) public ResponseEntity> handleException(Exception e) { + log.error("🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 Unhandled Exception occurred: ", e); ErrorResponse errorResponse = new ErrorResponse( "INTERNAL_SERVER_ERROR", HttpStatus.INTERNAL_SERVER_ERROR.value(), diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e29924ef..337c8b84 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -31,11 +31,6 @@ spring: starttls.enable: true ssl.trust: smtp.gmail.com - - app: - admin: - email: ${app.admin.email} - server: port: 8080 diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..24b81908 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,20 @@ + + + + + + + ${LOG_PATH}/${LOG_FILE_NAME}.log + + %d{yyyy-MM-dd HH:mm:ss.SSS, Asia/Seoul} [%thread] %-5level %logger{36} - %msg%n + + + ${LOG_PATH}/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.log + 30 + + + + + + + \ No newline at end of file