2022-08-16 트러블 슈팅

SaGo_MunGcci·2022년 8월 16일
0

스프링

목록 보기
23/31

Definition Access

  1. 크롤링 후 서버db저장후 배포

  2. 회원가입및 로그인 문제.

  3. JWT 토큰 문제.



Mechanism

크롤링 후 서버db저장후 배포

  1. 서버가 먼저 크롤링함.

  2. 크롤링해온 것을 내 db에 저장함.

  3. db에 저장한 것을 클라이언트에 배포

  • rds였으면 서버를 기동시키거나 꺼도 db의 데이터가
    살아 있었겠지만, 서버가 h2를 써서 서버를 재시작 할때마다
    크롤링 api접근해서 크롤링한 것을 db에 저장 시켰어야 함.

  • 나는 클라이언트가 접근해도 내 서버에 접근한 거라서 자동적으로
    내 db에 저장될 줄 알았으나

  • 생각해보면 말이안됨 저렇게 하면 누구나 다 내 db에 저장하는 거임.

  • 즉 배포시 내가 크롤링해와서 내db에 넣고 나서 배포하는 것이다.

--> 결국 RDS사용함

회원가입및 로그인 문제.

  1. 회원가입은 정규식으로 인해서 데이터를 못받아 왔고

  2. 로그인은 api명세서를 nickname을 받는 것이 아니라 email을 받아서 nickname을 response해달라고 해서 responseDTO에 nickname과 email을 교체하던중 isPresentMemberEmail 메서드를 사용해야 되는 것을 isPresentMember를 사용해서 response가 안보내졌다.

  3. 이메일 중복체크/ 닉네임 중복체크는 post이다!!

JWT 토큰 문제.

  1. 증상 : postman에서는 access-token, refresh-token둘다 보내는데 정작 클라이언트단에서는 refresh-token만 받아짐.

  2. 나를 포함한 스프링팀원들이 생각한 원인 : access-token을 못받아 오는건지 아니면 다른 곳에 숨겨져 있는지 확인해봐야 됨.

  3. 스프링쪽에서도 뭘다해봐도 아무것도 모르겠음 증상이 없음. 클라이언트단에서도 문제가 없고 refresh-token만 받아옴.

  4. 클라이언트 코드 다 뜯어봄

  5. 스프링코드 다뜯어봄. 근데 cors가 걸림

    • 결국 cors를 위해서 내가 사용한 WebConfig가 문제가 있다고 보여짐.

원래 WebConfig클래스

public class WebConfig implements WebMvcConfigurer {


 @Override
   public void addCorsMappings(CorsRegistry corsRegistry) {

        corsRegistry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*")
                .exposedHeaders("*")
                .exposedHeaders("Authorization")
                .exposedHeaders("Refresh-Token")
                .maxAge(3000);


}
  • 그냥 cors를 다풀어줌. 그래도 postman에는 이상이 없음

  • 저기 맨 아래쪽이 문제였다. .exposedHeaders("Refresh-Token")이 부분만 읽히고 있었다.

  • 그래도 혹시 몰라서 다른 코드 교체함.

  • 교체한 코드

public class WebConfig implements WebMvcConfigurer {

    @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("http://localhost:3000","http://내 AWS배포한 주소")
                    .exposedHeaders("Authorization","Refresh-Token")
                    // .exposedHeaders("Refresh-Token")
                    .allowCredentials(true)//make client read header("jwt-token")
            ;

        }
        }
  • 이 코드를 사용하니까 클라이언트가 정상적으로 access-token및 refresh-token을 받아옴.

배포시 해야할 것

  • 기존 빌드 파일 삭제한후 새롭게 빌드하기!!!


Retrospection

  • 처음 프런트분들과 서버와 프런트를 붙였는데, 붙이면서 프런트쪽에서 요구하는 사항들을 맞춰주느라 정말 애먹었다.

  • api명세서도 대충써서 내가 만든 api주소를 일일이 보내주고 동시에 여러요구사항을 최대한 빨리 처리해주느라 정말 진땀뺐다.

  • 앞으로 진짜 api명세서는 확실하게 만들고 기능 구현도 중요하지만 프런트쪽에서 화면이 어떻게 나오고 페이지 이동은 어떻게 해야되는지 커뮤니케이션을 엄청 많이 해야 내가 그에 맞는 서버 개발을 할 수있다는 것을 뼈저리게 느꼈다.

  • 그래도 우리 스프링 백앤드 쪽도 그렇고 프런트분들도 그렇고 서로 서로 이해하면서 개발을 해서 참 고마우면서 다행이었다.

  • api명세서 잘쓰기, 프런트 화면어떻게 구동되는지 확실히 이해하기.

  • 데이터 함부러 조건 걸지 말기(회원가입시 정규식 같은거.)



profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글