문제 발생 @RestController class Controller( private val imageService: ImageService ) { @PutMapping("/image") fun addImage(@RequestPart image: MultipartFile) { imageService.upload(image) } } interface ImageService { fun upload(image: MultipartFile) } @Serice class ImageServiceImpl: ImageService { @Async override fun upload(image: MultipartFile) { ... } } 위와 같이 Async 어노테이션을 통해 비동기 함수를 통해 multipartfile..
Async Annotation을 사용하여 여러 multipartfile을 s3에 업로드하는 기능을 포함하고 있는 Company Entity 생성 함수를 비동기로 실행하도록 하였습니다. @Async override fun companySignup(req: CompanySignupRequest, emailCheckCode: String, companyIntroduction: CompanyIntroductionRequest) { if (checkEmail(req.companyContact.email, emailCheckCode)) { ... } 그러나 test하던 중 API 자체는 200이 떴으나, 입력 값이 제대로 들어가지 않음을 확인할 수 있었습니다. (정확히 서술하자면, Company는 User를 상속받..
문제 상황 Async 메서드를 통한 파일 처리(S3 upload)에서 SecurtyContext.getCredentials 작동하지 않음. 원인 @Async 선언으로 비동기 작업을 수행하는 메서드는 쓰레드가 변경되기에 threadHolder에 저장한 값을 조회하여 사용하는 SecurityContext를 활용할 수 없어 이러한 문제가 발생했습니다. 해결 비동기 함수에 진입 전에 조회하여 파라미터로 전달함으로써 사용하도록 수정했습니다.
기본적으로 서버는 WebServer를 앞에 두고, WAS를 통해 db 커넥을 비롯한 작업들을 수행한 뒤 다시 내보내게 되는데, 이때 WebServer에는 Nginx, Apache 등이 있고, WAS에는 Tomcat 등이 있다. 기본적으로 Spring Boot에는 아파치 톰캣이 내장되어있어 사용자가 서버로 요청을 보내게되면, 특정 포트로 오는 요청을 잡아 SpringBoot 어플리케이션으로 연결시켜주는 것이다. 그렇다면 WAS는 어떻게 스프링 어플리케이션 서블릿과 연동하는걸까? ServeltWebServerFactoryCustomize에서 servlet 생성 → DispatcherServletAutoConfiguration에서 DispatcherServlet 생성 ServeltWebServerFactory..