Project gallendar - Trouble Shooting
오류 내용
SMTP ERROR
Failed message 1: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue
gardle의 yml 파일 setting의 오류로써 gradle을 사용하시는 분들은 아래 부분을 참고하여 yml setting을 해주셔야 오류가 나지 않습니다.
mail:
properties:
mail:
smtp:
starttls:
enable: true
auth: true
host:
username:
password:
port: 587
redis:
host: 127.0.0.1
port: 6379
젠킨스 build error
echo "Done" FATAL: Unable to produce a script file java.nio.charset.UnmappableCharacterException: Input length = 1 at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:275) at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:306) at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281) at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:208) at java.base/java.io.BufferedWriter.flushBuffer(BufferedWriter.java:120) at java.base/java.io.BufferedWriter.close(BufferedWriter.java:268) at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1652) at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1622) at hudson.FilePath.act(FilePath.java:1192) at hudson.FilePath.act(FilePath.java:1175) at hudson.FilePath.createTextTempFile(FilePath.java:1616) Caused: java.io.IOException: Failed to create a temp file on /var/lib/jenkins/workspace/gallendar at hudson.FilePath.createTextTempFile(FilePath.java:1618) at hudson.tasks.CommandInterpreter.createScriptFile(CommandInterpreter.java:202) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:120) at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:92) at hudson.plugins.postbuildtask.PostbuildTask.perform(PostbuildTask.java:123) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:816) at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:765) at hudson.model.Build$BuildExecution.post2(Build.java:179) at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:709) at hudson.model.Run.execute(Run.java:1924) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44) at hudson.model.ResourceController.execute(ResourceController.java:107) at hudson.model.Executor.run(Executor.java:449) POST BUILD TASK : FAILURE END OF POST BUILD TASK : 0 Finished: SUCCESS
yml 및 setting 파일의 주석 부분에 UTF-8 한글문자가 있어서 발생한 오류이다. 이는 프로젝트 셋팅을 UTF-8을 명시해줄 수 있는 라인이 필요로 하다.
AWS 배포 에러 로그
SdkClientException: The requested metadata is not found at
` Unable to retrieve the requested metadata (/latest/user-data/)`
yml의 버킷이름과 시크릿 키를 확인해야 한다.
WebSecurityConfigurerAdapter deprecated
[spring security] Error creating bean with name 에러 / 순환 참조 에러
5.7버전부터 WebSecurityConfigurerAdapter 가 deprecated 되었다. 기존에는 WebSecurityConfigurerAdapter를 extends 해서 메소드를 오버라이딩 하여 구현하였다. 최근 공식문서를 참고해보자.
Deprecated.
Use a SecurityFilterChain Bean to configure HttpSecurity or a WebSecurityCustomizer Bean to configure WebSecurity
간단하게 보면 SecurityFilterChain을 Bean으로 등록해서 사용하라는 메시지를 남겨주고 있습니다. 공식문서 에 의하여 @Bean public SecurityFilterChain configure(HttpSecurity http) throws Exception
이런식으로 Bean으로 등록하여 최신 Security에 맞춰 사용하면 오류를 제거할 수 있다.
MethodArgumentNotValidException
모호성
컨트롤러에서 @Valid
를 사용하여 request의 유효성을 검사하는 부분에서의 예외처리를 @RestControllerAdvice
을 사용하여 예외를 처리하려 하였습니다. 하지만 BeanCreationException
예외를 발생시키고 있습니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'handlerExceptionResolver' defined in class path resource
이유는 @ExceptionHandler
에 MethodArgumentNotValidException
이 구현되어 있어서 해당 예외를 따로 GlobalExceptionHandler에서 동일한 예외 처리를 하게 되면, Ambiguous(모호성) 문제가 발생한다고 합니다. 즉 GlobalExceptionHandler에서의 예외를 어떤 식으로 사용해야 할 지 찾아봐야 했습니다.
@ExceptionHandler
를 직접 사용하는 대신 해당 핸들러를 직접 오버라이드해서 사용하는게 핵심입니다.
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
log.error("handleValidException throw Exception : {}", ErrorCode.INVALID_INPUT_VALUE);
ErrorCode errorCode = ErrorCode.INVALID_INPUT_VALUE;
return ResponseEntity.status(errorCode.getHttpStatus())
.body(errorCode);
}