본문 바로가기

TIL(Today I Learned)

TIL-230704(회원가입 기능 구현하기)

📝오늘 공부한 것

  • 스프링 부트로 블로그에 회원가입 기능 구현하기

 

⛔문제점 & 시도해 본 것들💦 그리고.. 💯해결

어제까지만 해도 잘 되던 프로젝트가 오늘 Fostman으로 확인하려했더니 갑자기 런타임에러...

 

[에러 메시지]

전에도 dispatcherServlet에러가 떴었던 적이 있는데 server.port로 포트번호를 바꿨더니 잘 잘동했었다. 그래서 이번에도 포트를 사용중이어서 그런가,,하고 8082로 바꿔보았다. 그래도 여전히 해결되지 않은 에러ㅠ

 

구글링을 해서보니 다들 DB문제, 초기화. 주입문제였다.

혹시나 해서 다 확인해봤더니

DB생성도 잘 되어 있고,

final잘 붙어있고, 빈 잘 주입되고 있고...뭐가 문제야ㅠㅠㅠㅠ

했더니 나는 바보였어,,,

Fostman에 api주소를 잘못입력했던 것이었다...........

드디어 로그인 성공.....!

이런 사소한 실수로 2시간을 삽질했다.....또륵.....

이렇게 삽질하면서 배우는 거지!!

아마 저 dispatcherServlet에러를 가장 많이 본것 같다...

1. 일단 DB가 run 확인

2. bean주입 잘 되는지 확인

3. port 사용중인지 확인

4. api주소 확인!!!

 

기존 과제였던 '스프링 부트로 로그인 기능이 없는 나만의 항해 블로그 백엔드 서버 만들기'에 회원

가입 기능을 추가하는 코드를 작성한 뒤 Fostman으로 값을 넣고 확인하였는데 또 다시 발생한 dispatcherServlet에러....

 

[에러 메시지]

ERROR 28252 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: rawPassword cannot be null] with root cause

java.lang.IllegalArgumentException: rawPassword cannot be null

rawPassword cannot be null를 구글링 해보니 다들 비밀번호 암호화시에 생긴 에러였다...

하지만 역시 내 암호화코드는 잘 작성되어 있었다!!

그래서 사소한 실수일까봐 fostman에 틀린게 없는지 확인을 해봤더니 없었다,,

찾고 찾다가 결국 뭐가 문제인지 못찾아서 팀원분께 질문을 했더니 팀원분이 겪었던 같은 에러였었다!!!

    @PostMapping("/user/signup")
    public String signup(SignupRequestDto requestDto){
        userService.signup(requestDto);
        return "redirect:/api/user/login-page";
    }

signup메서드의 매개변수를 @ModelAttribute 대신 @RequestBody를 사용하셨다고 했다.

그래서 찾아보니까 나는 Fostman에 JSON형식으로 데이터를 입력했는데 매개변수로는 model 객체를 받는다고 하였던 것이었다.

TIL에 작성했었던 내용이었는데 또 까먹었다,,한번 외워도 안쓰면 자꾸 까먹는것 같다..ㅠ

@ModelAttribute는 form 데이터를 바인딩하기 위해 주로 사용!!

@RequestBody는 JSON 형식의 데이터를 처리할 때 사용!!

https://tecoble.techcourse.co.kr/post/2021-05-11-requestbody-modelattribute/

 

@RequestBody vs @ModelAttribute

1. @RequestBody와 @ModelAttribute Controller.java @RequestBody와 @ModelAttribute는 클라이언트 측에서 보낸 데이터를 Java…

tecoble.techcourse.co.kr

 

annotation을 바꾸고 성공적으로 실행이 될 줄 알았으나 또 에러가...!

[에러 메시지]

intelliJ에서 확인을 해보니 중복된 사용자가 존재한다고 나왔다.

이 데이터를 입력한 적이 없었는데!!

DB를 확인해 보니 진짜 들어가 있었다. 아마 fostman에서 에러가 났는데도 계속 send를 눌러서 중복된 사용자가 들어간것 같다.

그말은 에러는 났지만 DB에는 데이터가 잘 들어간다는 건가??

하고 새로운 데이터를 입력해서 에러 메시지를 확인했더니 

[에러 메시지]

org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-8080-exec-5] Exception processing template "login": Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

에러 메시지에 친절히 login template이 존재하지 않는다고 나왔다.

에러 메시지가 항상 이렇게 친절하게 나오면 좋을텐데,,

강의에서는 login.html이 있었지만 나는 server만 만들어서 html templates은 만들지 않았다. 근데 그냥 @Controller를 사용하여 templates를 찾지 못해서 에러가 난 것이었다. 그래서 나는 화면없이 server만 구현할 것이고 @ResponseBody를 사용하는 대신 모든 api가 String을 반환할 수 있게 @RestController로 바꿨다.

 

그랬더니 성공!!!!!드디어 회원가입 기능 구현을 완성하였다!!!

 

느낀 점🤔

사실 오늘 로그인 기능까지 구현할 수 있을 줄 알았다...

그런데 회원가입 기능만 하루가 걸렸다ㅠㅠ

강의에서 한번 했었는데도 하루가 걸리다니....

그래도 역시 직접 코드를 짜봐야 강의에서 봤던 내용이 이해가 되는 것 같다. 하루종일 에러 해결했더니 너무...힘들다......

앞으로 얼마나 많은 에러를 만날지,,그래도 에러를 해결할 때마다 뿌듯하다ㅎㅎ

겪은 에러는 까먹지 말고 꼭 정리하자!!

내일은 로그인 기능을 구현하고 과제 요구사항에 맞게 API, API 명세서도 수정하고 ERD도 만들어야겠다.