본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 본과정

Day 16. 제공된 자료를 꼼꼼히 읽어보자 제발료

by DaSsom 2023. 4. 18.

스프링 2차 과제 "나만의 블로그 백엔드 서버 만들기! 숙련편" 완료..!

 

1차에서는 단순히 글의 비밀번호를 받아 일치여부를 판단하고 비밀번호가 맞다면 삭제, 수정이 가능하게 했다면 2차 과제에서는 이제 회원가입과 로그인 기능을 추가하여 토큰의 일치 여부를 판단해야했다.

 

전체적인 로직은 깔끔해보이고 JWT를 사용하여 로그인 인증 토큰도 정상적으로 발급되는 것을 확인했다.

근데, 왜, 포스트맨에서 테스트를 하면 인증 토큰이 안넘어오는거냐고...........

이것때문에 삽질을 한~~~참 하다가 !!!!!

 

??????????

.... 네,,, 포스트맨에서는 토큰을 따로 입력해줘서 테스트를 해야한다고 합니다.... 

 

우리 코드에는 문제가 없었고 걍 포스트맨 사용법을 제대로 알지 못해서 발생한 이슈로, 제공해주는 자료를 꼼꼼히 읽어보라는 큰 교훈을 얻었다고 합니다 ^0^

 

그리고 그 밖에 만났던 오류 몇 가지를 정리해보겠다.

 

1. Thymeleaf TemplateInputException

스프링 부트에서 Controller 호출 시 프로젝트 내에 templates 폴더에서 해당하는 html 파일이 없어서 발생하는 오류라고 한다. 강의를 들으며 진행했던 파일에는 뷰 페이지가 있었기 때문에 오류가 없었지만 과제 프로젝트에는 뷰 페이지가 없어서 해당 오류가 발생했다.

 

해결 : @Controller 대신에 @RestController 어노테이션으로 바꿔줌.

 

2. org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]

아.. 이 오류를 잡는데 한참 삽질을 했다. 우리 프로젝트의 요구사항에서 게시글을 작성할 때, request 요청으로 title과 contents 만 보내야했다. 하지만 게시글 테이블에는 title과 contents 뿐만 아니라 username, 작성날짜, 수정날짜가 모두 not null로 설정되어 들어가있었다. 

필수값인 나머지 컬럼들의 데이터가 들어오지 않으니 해당 오류가 발생하는 것이었다.

 

해결 : 

	Post post = new Post(requestDto);
        post.setUsername(user.getUsername());
        postRepository.saveAndFlush(post);
        return new PostResponseDto(post);

서비스단에서 post 객체를 새로 생성해주고 토큰값을 체크하며 받아온 user객체의 username을 setter를 사용해 지정해준다. 그리고 그 post를 레포지토리에 저장하는 방식을 택했다. 해결.

 

 

 

휴,, 과정이 어찌됐던 레벨 2까지 과제는 수행 완료.. success