📄요구 사항
application.yml
(또는 application.properties
)를 활용해라.WebConig
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/boards")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST", "DELETE", "PATCH")
.allowCredentials(true);
}
}
설정은 간단했지만 CORS에 대해 깊게 이해하는 것이 필요하다.
InternalServerException
public class InternalServerException extends RuntimeException{
static final String MESSAGE = "서버에 예상하지 못한 오류가 발생했습니다.";
public InternalServerException() {
super(MESSAGE);
}
}
PostExControllerAdvice
@RestControllerAdvice
public class PostExControllerAdvice {
@ExceptionHandler(BadRequestException.class)
public ResponseEntity<ErrorResult> badRequestExHandle(BadRequestException e) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(new ErrorResult(e.getMessage(), HttpStatus.BAD_REQUEST.value()));
}
@ExceptionHandler(NotFoundException.class)
public ResponseEntity<ErrorResult> notFoundExHandle(NotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResult(e.getMessage(), HttpStatus.NOT_FOUND.value()));
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResult> methodArgumentExHandle(MethodArgumentNotValidException e){
String errorMessage = e.getFieldError().getDefaultMessage();
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(new ErrorResult(errorMessage, HttpStatus.BAD_REQUEST.value()));
}
@ExceptionHandler(InternalServerException.class)
public ResponseEntity<ErrorResult> unexpectedExHandle(InternalServerException e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body(new ErrorResult(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value()));
}
}
@RestControllerAdvice
를 활용하여 에러를 따로 관리할 수 있는 Controller를 생성한다.@ExceptionHandler(InternalServerException.class)
를 통해서 InternalServerException에 대한 에러를 따로 처리할 수 있다.해당 도메인에 들어가서 정상적으로 게시글이 작성되는지 확인했다.
처음 Elastic Beanstalk를 통해 배포를 하게 될 경우, aws-elasticbeanstalk-ec2-role
가 존재하지 않는다는 메시지를 받는다. 이 문제를 해결하기 위해 IAM에서 규칙들 중AWSElasticBeanstalkWebTier
, AWSElasticBeanstalkWorkerTier
, AWSElasticBeanstalkMulticontainerDocker
정책 추가를 하여 Amazon EC2를 신뢰할 수 있는 엔터티로 지정해야 한다.
📒 나의 생각