-
[스프링부트 및 JPA] - Http 요청 재분배하기 (Redircetion) 본문
자 컨트롤러가 있다고 가정해봅시다.
@RestController말고 @Controller라고 해보겠습니다.
static void lol(@PathVariable int id ... ) {
User entity = model.attribute(user.getName());
/**
10000줄
**/
}
main이라는 함수에 id를 주소 변수 매핑을 이용하여 파라미터로 가져오고 10000줄에 달하는 코드가 있다고 해봅시다.
그리고 그 밑에
static void lol(@PathVariable int id ... ) {
User entity = model.attribute(user.getName());
rawPassword = entity.getPassword();
String password = encode(rawPassword());
/**
10000줄
**/
}
뭐 이런게 있다고 해보고 밑의 이하 10000줄의 함수는 위의 함수와 동일하다고 해보겠습니다.
그래서 위의 main()함수와 아래의 lol()함수의 차이는 제일 위의 몇 줄만 다른거죠.
그럼 개발자 입장에서 lol()함수를 요청할 때 굳이 10000줄을 입력하기도 번거로울 뿐더러 코드의 재사용성을 위해 굳이 똑같은 코드를 무겁게 2번이나 작성할 이유가 없게 느껴질 수 있습니다.
그래서 코드의 재사용을 할 수 있는 방법이 등장하는데, 그것이 바로 Redirection입니다.
이것의 사용법은 굉장히 간단합니다.
직접 보면서 이해해봅시다.
@Controller를 걸고 2개의 함수를 만듭니다.
하나는 home(), 다른 하나는 away()함수를 만들고 각각의 주소를 /home, /away라고 합시다.
우리가 할 것은 away()함수를 실행할 때 home이라는 코드의 재사용을 위해 home을 부르는 것이 목표입니다.
따라서 return할 때 return "redirect:/home"; 이렇게 입력하면 away를 실행하지 않고 home의 코드를 재사용하여 결과를 수행합니다.
.jsp파일을 이전 포스팅에서 얘기했듯 src/main/webapp/web-inf/에 넣은 뒤 실행합니다.
먼저 home파일을 실행하면
이렇게 당연히 뜨는데요. 이걸 F12를 눌러서 개발자 도구로 들어가면
상태코드가 200이 뜹니다.
이것은 ok라는 뜻이에요.
요청한게 정상적으로 잘 응답했다는 뜻입니다.
그럼 away로 들어가보겠습니다.
away로 요청했는데 home으로 들어가지면서 Status code에는 302번이 떴습니다.
자 302번이 뭐냐면
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
HTTP 상태 코드 - HTTP | MDN
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 응답은 5개의 그룹으로 나누어집니다: 정보를 제공하는 응답, 성공적인 응답, 리다이렉트, 클라이언트 에러, 그리고
developer.mozilla.org
302 Found를 보시면 요청한 리소스의 URI가 일시적으로 변경되었다는 것을 의미한다고 나와있네요
그러니까 away로 요청해도 home의 함수를 부를 수 있다는 것이 이 Redirection의 핵심입니다.
감사합니다.
'백엔드 기술 정리 > 스프링 부트' 카테고리의 다른 글
[스프링부트 및 JPA] - 사용자 모델 만들기 (0) | 2022.01.29 |
---|---|
[스프링부트 및 JPA] - Security Configuration과 CSRF토큰 (0) | 2022.01.28 |
[스프링부트 및 JPA] - 주소변수 매핑, Http 요청을 file로 응답하기 (2) | 2022.01.27 |
[스프링부트 및 JPA] - Controller와 Http 4가지 요청 방식 (0) | 2022.01.27 |
[스프링부트 및 JPA] - yml 파일에 대해 이해하기 (0) | 2022.01.27 |