-

[스프링부트 및 JPA] - Http 요청 재분배하기 (Redircetion) 본문

백엔드 기술 정리/스프링 부트

[스프링부트 및 JPA] - Http 요청 재분배하기 (Redircetion)

흣차 2022. 1. 28. 21:26
728x90
반응형

자 컨트롤러가 있다고 가정해봅시다.

@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의 핵심입니다.

감사합니다.

 

728x90
반응형
Comments