스프링에서 HttpServletRequest를 사용해 쿼리 처리하기스프링에서 Url의 쿼리를 처리하기 위해서는 HttpServletRequest를 사용할 수 있었다. 예를 들어 다음과 같은 url에서 blogUrl에 해당하는 값인 kotlinworld.com을 처리하는 상황을 생각해 보자. GET http://localhost:8081/blog/info?blogUrl=kotlinworld.com 이런 경우 우리는 HttpServletRequest 객체의 getParameter 함수를 호출함으로써 blogUrl 변수에 blogUrl 쿼리 파라미터에 대응되는 값을 가져올 수 있었다. 다음은 /blog/info 경로의 요청을 처리해 블로그 정보를 반환하는 getBlogInfo 함수가 HttpServletReq..
문제 원인 스프링 애플리케이션은 웹 서버를 내장하기 때문에, 하나의 포트에 하나의 스프링 애플리케이션만 실행할 수 있다. 조금 더 자세히 이야기 하면 하나의 포트에 둘 이상의 스프링 애플리케이션이 실행된다면, 사용자로부터 요청을 받았을 때 어떤 애플리케이션에서 요청을 처리해야 할지 알 수 없기 때문에, 하나의 포트에서는 하나의 스프링 애플리케이션만 실행돼야 한다. 이 때문에 이미 스프링 애플리케이션이 사용하고 있는 포트를 다른 스프링 애플리케이션이 사용하려고 하면 다음과 같은 오류가 뜬다. *보통 스프링 애플리케이션의 기본 포트는 8080번으로 설정되어 있기 때문에 여기서는 8080을 사용 중이라는 오류가 뜨는 상황을 보여준다. Web server failed to start. Port 8080 was ..
ResponseEntity란 무엇인가? ResponseEntity 사용하면, Spring 에서의 HTTP 응답을 더욱 세밀하게 설정할 수 있도록 만들어준다. ResponseEntity가 무엇이길래 응답을 더욱 세밀하게 제어할 수 있도록 만드는 것일까? 이에 대해 알아보기 위해 ResponseEntity가 어떻게 선언돼 있는지 살펴보자. public class ResponseEntity extends HttpEntity { ... } ResponseEntity는 HttpEntity를 상속하는 클래스로, Http 응답과 관련된 설정들을 응답에 추가할 수 있도록 해준다. 즉, 우리가 일반적으로 아는 응답 코드, 헤더, 바디 모두를 설정할 수 있도록 만들어주는 것이다. 이를 통해 API 호출에 대한 응답을 더욱..
@Controller의 문제 Controller에서 유저로부터 요청을 받았을 때 String 값을 반환하면, 스프링 프레임웍은 해당 String에 매핑되는 리소스를 찾아 반환한다. 때문에 우리가 특정한 객체를 반환하게 될 경우 해당 객체를 특정 리소스에 매핑시키지 않으면, 리소스를 찾을 수 없기 때문에 404 Not Found 애러가 뜬다. 예를 들어 다음과 같은 코드를 살펴보자. @Controller class HomePageController { @GetMapping("/blog/info") fun getBlogInfo(): BlogInfo { return BlogInfo("조세영의 Kotlin World", 3) } } data class BlogInfo(val name: String, val ye..
Controller와 정적 리소스 Controller는 요청을 받았을 때 String 값이 반환된다면, 기본적으로 정적 리소스 폴더 resources/static 에서 해당 String 값을 가진 정적 리소스 파일을 찾아 반환한다. 예를 들어 Controller 내부에서 "testpage.html" 값을 String 값으로 반환하면, resources/static/testpage.html 파일을 Response로 반환한다. @Controller class HomePageController { @GetMapping("/testpage") fun getHomePage(): String { return "testpage.html" } } 다만, 이 기능은 html에 한정된 것이 아니다. 이미지, 동영상, 음성..