Query String 이란?
서버에 필요한 데이터를 전달하기 위해 사용하는 방법 중 하나로 URL 주소에 필요한 데이터를 파라미터로 넘기는 방식이다
ex. https://jonnie99.tistory.com/posts?type=backend
- ?를 사용하여 시작됨을 알리고 key=value 형태로 데이터를 전송한다
- 여러 개의 데이터를 넘길 경우 &를 사용하여 넘길 수 있다
Path Variable(주소 매핑 방식)이란?
Query String과 비슷한 방식으로 경로를 변수처럼 사용하는 방식이다
ex. https://jonnie99.tistory.com/posts/1201
Query String vs Path Variable
Path Variable은 구체적인 리소스를 식별할 때 사용
ex. 10번째 글 정보 가져오기
/posts/10
Query String은 리소스의 정렬, 페이징, 필터링을 할 때 사용
ex. 글을 조회순으로 정렬하기
/posts?sort=views
게시판에 대해 학습하며 영상에서 단순히 Path Variable이 좋다고 해서 API 명세를 작성할 때 다 주소 매핑 방식으로 작성했었는데 우리 게시판 기능 중에는 정렬 및 검색 기능도 있으므로 이 부분은 Query String으로 변경하기로 결정했다!
문제점
http://localhost:8080/movie?type=created_at&page=0
이렇게 넘겼을 때
ERROR 770 --- [nio-8080-exec-3] c.s.g.handler.GlobalExceptionHandler : handleException: No property ''created' found for type 'Board'
WARN 770 --- [nio-8080-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.data.mapping.PropertyReferenceException: No property ''created' found for type 'Board']
이렇게 에러가 나며 언더바(_)를 인식하지 못했다
views와 같이 언더바가 없거나 camel case로 변경했을 때는 잘 작동하는 것을 확인했다
DTO에서 column으로 DB에 들어갈 이름을 snake case로 따로 명시해주고 내부에서는 camel case로 사용하려고 했다
수정 후에 데이터가 전달될 때도 camel case로 전달되는 문제를 해결하기 위해 application.yml 파일에는 따로 출력을 설정해주었다
# json data를 snake_case로 전달하기 위해 설정
jackson:
property-naming-strategy: SNAKE_CASE
+ DB에는 is_notice인데 실행해보면 is는 사라지고 _notice만 남아있다 왜지 → notice로 변경
is는 예약어라서 사용이 안 된 것 같다.. is를 쓰고 싶어서 camel case로 하면 되나 싶어서 변경해보았는데 동일한 증상이 나타나서 결국 칼럼명을 수정했다
포스트맨으로 api를 확인하던 중 raw 데이터로 보내도 성공해야 하는 것이 아닌가 싶어 시도해봤는데 안 돼서 문제가 있나 걱정했는데 @RequestBody를 붙이면 json으로 전달이 가능한데 없으면 form-data 방식만 가능하다고 한다
엇..그러면 나도 body값을 받을 거니까 다 추가해줘야 되나...다시 확인해볼 필요가 생겼다..
→ 추가해줘야겠다. 이것저것 미리 실험을 해봐서 다행이다..ㅎ
포스트맨으로 요청하기 form-data vs raw(JSON) 차이
https://okky.kr/article/786606
3주차 끝난지 꽤 됐지만 아무튼 3주차..
2년을 잘 버티다 결국 코로나에 걸려서 며칠 쌩고생하고 개발에 손도 못댔다
바쁜 시기에 아프면 짜증나고 서럽다
'Logs > Groupin 프로젝트 진행 일지' 카테고리의 다른 글
[Spring/Backend] 프로젝트 개발 5주차. 배포 지옥과 프로젝트 마무리 (0) | 2022.08.15 |
---|---|
[Spring/Backend] 프로젝트 개발 4주차. Group DB 재설계 + 구현하기, @RequestBody 사용하기 (0) | 2022.08.14 |
[Spring/Backend] 프로젝트 개발 2주차. 로그인 에러 해결하기 (loadUserByUsername - null) (0) | 2022.07.27 |
[Spring/Backend] 프로젝트 개발 1주차. API 문서 작성하기 (0) | 2022.07.27 |