SpringBoot+NextJS 프로젝트 문제.fix

나르·2021년 11월 17일
1

트러블슈팅

목록 보기
3/5
post-custom-banner

백/프론트를 분리하고...클라 없이 api만 개발하다보니 막상 연결하고나서는 정말 많은 문제들이 쏟아지게 됐습니다. 평소에는 SSR로 뷰를 구현하거나 로컬에서 서버+클라를 둘 다 돌려서 테스팅해봐서 몰랐던 문제인데ㅠㅠ 낙관코딩하다가 맞닥뜨리게 되니 굉장히 힘들었던 것 같습니다. 지나고 나니 도메인을 붙였으면 좀 나았을까 싶네요.(결국 포트때매 cross domain인건 어쩔 수 없지만)
언젠간 다시 겪을 미래의 나를 위해 오늘도 기록😂

로컬 로그인

로그에 나온대로 allow-credential=true로 설정했을 때는 Access-Control-Allow-Origin를 전부 허용(*)할 수 없다는 에러입니다. 이 경우에는 허용 도메인을 특정해주거나, credential을 허용하지 않으면 해결이 됐습니다.

Oauth2

다음 복병입니다... 클라 개발자분들이 전부 로컬에서 테스팅하는 것을 생각해서 Access-Control-Allow-Origin을 전부 허용하고 credential을 막아뒀는데, OAuth2가 제대로 동작하지 않는 문제가 발생했습니다.
아래는 문제의 일부이고, 실제 원인은 정보 제공 동의 창이 뜬 후에 request url 뒤에 query param으로 붙어야 할 데이터가 없어서였습니다.
OAuth2를 서버사이드에서 처리하다보니 origin에서 헤더에 토큰 형식으로 넘겨주는 데이터가 필요했던게 원인이었습니다. 그런데 crendential을 막아버렸으니...
결국 allowCrenential=true; allowedOrigins("http://localhost:3000")로 변경해 해결했습니다.

추후 상세히 다뤄볼 수 있다면 좋겠지만, 에러를 겪으면서 cors에 대해 몇가지를 배울 수 있었습니다.

  1. 서버는 same origin policy를 관리하지 않으나, origin이나 referer를 확인해서 추가적인 처리를 할수는 있다. (CORS 라이브러리들이 내부적으로 이를 확인한다.)
  2. 브라우저는 cross origin request라면 헤더에 origin과 referer를 자동으로 추가해준다.
  3. 이 정책은 브라우저 단에서 실행하는 것이므로, same origin policy를 무시하는 브라우저라면 서버의 cors여부와 상관없이 잘 작동한다.
  4. 브라우저에서 하는 기능이므로 브라우저를 이용하지 않는다면(tcp, telnet, crwaling bot등)은 당연히 same origin policy는 무시된다.

4번을 통해 왜 Postman으로 보내는 리퀘스트는 정상적으로 처리됐는지 알 수 있었습니다...

Postgres+Redis를 Docker로 수정 후 오류들

1. unsupported config option
이 에러는 networks가 service 안에 정의되어있어서 발생했습니다. 인덴트를 옮겨 같은 서비스와 depth로 바꿔줬습니다.

2. invalid type 에러
이 에러는 postgres의 설정이 아래와 같이 되어있어서 발생했습니다. - key=value 형식은 String, - key: value 형식은 array로 적용됩니다.

3. Could not get lock /var/lib/dpkg/lock-frontend

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

기존 수동으로 설치해뒀던 redis를 삭제하는 과정에서 발생한 리눅스 패키지 관련 에러입니다. 아래 코드로 해결이 가능합니다.

# 실행 중인 프로세스 모두 종료
$ sudo killall apt apt-get

# 관련 파일 제거
$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/cache/apt/archives/lock
$ sudo rm /var/lib/dpkg/lock*

# 패키지 업데이트
$ sudo dpkg --configure -a
$ sudo apt update

Reference

Postman으로 CORS에러 못잡는 이유
브라우저에서 POST요청 전송
credentials와 allow origin
CORS는 왜 이렇게 우리를 힘들게 하는걸까?
Spring security, cors error when enable Oauth2
CORS
https://wonit.tistory.com/572
SpringSecurity cors
https://duooo-story.tistory.com/22
CORS의 원인 및 해결방법
withCredential
리눅스 dpkg 에러

profile
💻 + ☕ = </>
post-custom-banner

0개의 댓글