프로젝트 진행 도중 제대로 코드를 작성했다고 생각했는데 실행 결과 url이 내가 원하는대로 나오지 않는 경우가 있었다. 예를 들어 글 작성 후 redirect로 작성된 게시글의 글 조회 페이지로 이동해야 하는데 내가 원하는 url은
localhost:8080/board/{postNum}
이것인데
localhost:8080/board/board/{postNum}
이렇게 나오는 것이다.
당시 내가 작성했던 redirect 코드는 아래와 같았다.
return "redirect:board/{postNum}";
그리고 클래스 단위로 @RequestMapping이 "/board"로 되어 있었다. 강의를 들으면서 작성한 예제 코드를 참고하며 코드를 작성했는데, 분명 똑같이 한 거 같은데 왜 결과가 다르지? 하는 생각에 당황했다. @RequestMapping 때문인가? 하는 생각에 나는 우선 아래와 같이 코드를 수정해봤다.
return "redirect:{postNum}";
그랬더니 내가 원하는대로 주소가 아래와 같이 나왔다.
localhost:8080/board/{postNum}
그 후 이번엔 글 수정 코드를 작성하는데 이번에도 redirect가 이상하게 됐다. 내가 원하는 url은 아래와 같은데
localhost:8080/board/{postNum}
localhost:8080/board/{postNum}/{postNum}
실행된 url은 위와 같았다. 이상했다. 저번엔 board가 중복이었는데 이젠 {postNum}이 중복이다. 그때 내가 작성한 코드는 다음과 같다.
return "redirect:{postNum}";
위에서 괜찮았다면 여기서도 괜찮아야 하는 거 아닌가? 싶은 맘에 이것저것 시도하다 {postNum} 앞에 / 를 붙여봤다. 그랬더니 이번엔 localhost:8080/{postNum}이 호출됐다.
이때 생각난 것이 절대경로와 상대경로였다. 상대경로에서 /는 최상위를 뜻한다고 배웠다. 그러니까 localhost:8080이 되는 것이다. 그러니 /{postNum} 으로 redirect 하면 localhost:8080/{postNum}이 호출되는 것이었다. 이때 뇌리를 스친 것이, '아 나 원래 작성했던 코드에 / 를 안 붙였었나?' 였다. 위에 적어놨듯이 나는 /를 빼먹은 상태였다. 그러니 @RequestMapping의 /board 뒤에 redirect 주소가 붙어서 나오지... 하는 생각이 들었다. 아니나 다를까 다음과 같이 코드를 작성하니 정상적으로 주소가 호출이 됐다.
return "redirect:/board/{postNum}";
이래서 기초 지식이 중요한가 보다... 절대경로 상대경로를 확실히 공부해둬야겠다.
'ETC' 카테고리의 다른 글
MySQL 워크벤치에서 ERD 생성하기 (0) | 2022.04.14 |
---|---|
Entity, DAO, DTO (0) | 2022.03.15 |
양방향 의존 관계 오류 (0) | 2022.02.28 |
DTO의 위치에 대해 (0) | 2022.02.20 |
인텔리제이 단축키 모음 (0) | 2021.12.16 |