스파르타 이노캠/본과정

2023. 06. 30 금 - 회원 가입/로그인 페이지 + 게시판 기능 합치기

haema_ 2023. 6. 30. 22:47
728x90

이번 주 동안은, Spring 강의로 진행했던 게시판(메모) 기능을 가진 프로젝트와, 회원가입/로그인 기능을 jwt토큰을 사용한 프로젝트를 합쳐서 구현해보았다.

 

애초에 두 개가 전혀 다른 프로젝트였고, 합치는 걸 전제하지 않았던 예제 프로젝트였어서 그 둘을 합쳐서 기능을 제대로 작동하도록 하는 데에 시간이 꽤 걸렸다. 당연히 코드의 깔끔함이나 가독성은 고려할 틈이 없었고, 기능이 올바르게 작동하도록 만드는 데에 최선을 다했다.

 하면서 그래도 클라이언트에 데이터를 어떻게 주고 받으며, 원하는 데이터를 주고 받는 방법에 대해서 조금은 더 알게 된 것 같다.

진행 중 가장 헤맸던 부분은 로그인을 했을 때 게시판 html을 렌더링 함과 동시에 해당 유저의 정보를 클라이언트에 보내줘야 했는데, @RestController 애너테이션을 사용하면 템플릿을 렌더링하기가 힘들고, @Controller를 사용하면 유저 정보를 json형식으로 보내기가 힘들었다. 그래서 결국 템플릿을 렌더링해주는 Controller를 따로 쓰고, 데이터 전송부분은 @RestController 를 이용한 기존의 컨트롤러를 사용했다. 근데 또 이렇게 하니 GetMapping이 동일한 url로 두개가 나와서  데이터는 다른api로 추가 호출해주는 형식으로 script단에서 해결했다.

 전체적인 흐름을 알기 위해서 html에 최소한의 기능으로만 동작하게끔 예제html들을 조금씩 수정해가면서 실제로 작동하도록 만들어서 이런 부분까지 신경쓸 수 있었는데, 만약 백엔드에서 데이터만 주고받기만 가능하게 코드를 작성했으면 추후에 실제 서비스처럼 동작하게 만드는 데에 더 많은 문제가 발생했을 것 같다.

 두 번째로 헤맸던 부분이자 제대로 해결하지 못한 부분은 jwt토큰 인증부분이다. jwt토큰을 AuthFilter를 사용해 검증하는 방식으로 구성돼있는데, 필터에서 throw ~~Exception을 던져버리면 Controller에 있는 ExceptionHandler로 잡아줄 수가 없어서 토큰 관련 문제가 발생하면 500번대 에러가 났다. 아직 내 학습범위에서는 이런 부분을 처리할 수 있는 방법이 없어서 그냥 넘어갔다가, 페어로 작업하는 분께서 필터 매개변수 HttpServletResponse에 setStatus를 걸어보는 방법을 소개해주셔서 그렇게 했더니 어느 정도 핸들링 할 수는 있었다.

 추후에 관련 학습을 좀 더 하고, Filter의 exception들을 핸들링하는 방법들을 더 찾아보아야겠다.

반응형