포스트맨으로 테스트를 했을 땐 잘 들어 가는데, 프론트에서 게시글 조회 하면 조회하는 이미지가 자꾸 엑박이 뜨고 아래와 같은 오류 메세지가 콘솔창에 떴다.
Failed to load: resource: net::ERR_CERT_COMMON_NAME_INVALID
확인해 보니 포스트맨에 나오는 이미지 url는 "https://namoldak.com.s3.ap-northeast-2.amazonaws.com/static/8c0ca99e-c76f-4ec5-90e1-8e6c4211" 라고 나오지만 AWS S3 버켓에서 해당 이미지 파일 주소를 확인했을 때는 "https://s3.ap-northeast-2.amazonaws.com/namoldak.com/static/8c0ca99e-c76f-4ec5-90e1-8e6c4211" 이렇게 다른 주소로 주소가 저장이 되어 있었다.
2. 원인
버킷 이름에 .이 들어가면 Failed to load: resource: net::ERR_CERT_COMMON_NAME_INVALID 오류가 발생한다.
3. 문제해결
"namoldak.com" 인 버켓이름을 "namoldak"으로 바꿔 주었더니 바로 해결이 되었다 !
Front와 협업중에 구매한 도메인을 적용했고 서버에서 데이터를 문제없이 내려주기 위해서 CORS에 해당 도메인을 등록했다. 해당 도메인을 등록하고 나니까 localhost:3000 [즉, 프론트쪽 리액트 local] 에서 spring 서버로 접근이 안되는 현상이 발생했다.
문제 발생했을 때 코드
수정된 코드
allowedOrigins 대신 allowOriginPatterns를 사용
일단 이렇게 해서 해결이 되긴 했는데, 이 글을 쓰면서 관련 에러를 더 찾아보니 새로운 사실을 알게 되었다.
원인 / 해결 방법 (추측임 , 확실하지 x)
(어느블로그에서 본 글이기 때문에 정확한 정보라고 볼 순 없을 것 같다.)
AllowedOrigins()은 중복해서 사용할 수 없다. 중복할 경우 값이 계속해서 덮어씌여지면서 앞에 Setting 값들이 다 날아간다.
즉, 올바른 사용은 다음과 같다.
.setAllowedOrigins("http://localhost:3000", "http://--------.cloudfront.net") 으로 사용하거나
.setAllowedOrigins("*")를 사용해준다.
-----> 수정 !!
.setAllowedOrigins("http://localhost:3000", "http://--------.cloudfront.net") 으로 사용해도 에러가 난다.
A list of origins for which cross-origin requests are allowed where each value may be one of the following:
a specific domain, e.g."https://domain1.com"
comma-delimited list of specific domains, e.g."https://a1.com,https://a2.com"; this is convenient when a value is resolved through a property placeholder, e.g."${origin}"; note that such placeholders must be resolved externally.
the CORS defined special value"*"for all origins
For matched pre-flight and actual requests theAccess-Control-Allow-Originresponse header is set either to the matched domain value or to"*". Keep in mind however that the CORS spec does not allow "*" when allowCredentials is set to true and as of 5.3 that combination is rejected in favor of using allowedOriginPatterns instead.
By default this is not set which means that no origins are allowed. However, an instance of this class is often initialized further, e.g. for@CrossOrigin, viaapplyPermitDefaultValues().
https://*.domain1.com -- domains ending with domain1.com
https://*.domain1.com:[8080,8081] -- domains ending with domain1.com on port 8080 or port 8081
https://*.domain1.com:[*] -- domains ending with domain1.com on any port, including the default port
comma-delimited list of patters, e.g."https://*.a1.com,https://*.a2.com"; this is convenient when a value is resolved through a property placeholder, e.g."${origin}"; note that such placeholders must be resolved externally.
In contrast toallowedOriginswhich only supports "*" and cannot be used withallowCredentials, when an allowedOriginPattern is matched, theAccess-Control-Allow-Originresponse header is set to the matched origin and not to"*"nor to the pattern. Therefore, allowedOriginPatterns can be used in combination withsetAllowCredentials(java.lang.Boolean)set totrue.
By default this is not set.
Since:5.3
정리
스프링부트 5.3부터 allowCredentials가 true일 때 allowedOrigins에 특수 값인 "*" 추가할 수 없게 되었다. 대신 allowOriginPatterns를 사용해야 한다.
근데 이 이유때문에 발생한 오류는 아니었을 것 같다는 느낌 ... 아시는분 댓글 부탁드립니다 !