문제 원인 스프링 애플리케이션은 웹 서버를 내장하기 때문에, 하나의 포트에 하나의 스프링 애플리케이션만 실행할 수 있다. 조금 더 자세히 이야기 하면 하나의 포트에 둘 이상의 스프링 애플리케이션이 실행된다면, 사용자로부터 요청을 받았을 때 어떤 애플리케이션에서 요청을 처리해야 할지 알 수 없기 때문에, 하나의 포트에서는 하나의 스프링 애플리케이션만 실행돼야 한다. 이 때문에 이미 스프링 애플리케이션이 사용하고 있는 포트를 다른 스프링 애플리케이션이 사용하려고 하면 다음과 같은 오류가 뜬다. *보통 스프링 애플리케이션의 기본 포트는 8080번으로 설정되어 있기 때문에 여기서는 8080을 사용 중이라는 오류가 뜨는 상황을 보여준다. Web server failed to start. Port 8080 was ..
Spring/MVC
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에 한정된 것이 아니다. 이미지, 동영상, 음성..
Spring MVC란 무엇인가? Spring MVC는 Spring에서 제공하는 웹 모듈로, Model, View, Controller 세가지 구성요소를 사용해 사용자의 다양한 HTTP Request을 처리하고 단순한 텍스트 형식의 응답부터 REST 형식의 응답은 물론 View를 표시하는 html을 return하는 응답까지 다양한 응답을 할 수 있도록 프레임웍이다. Spring MVC는 다양한 요청을 처리하고 응답하기 위해 주요 구성요소들을 만들어놓고 구성요소들을 확장할 수 있게 만들어 놓는데, 이들을 제대로 사용하기 위해서는 MVC가 어떻게 구성되어 있는지를 알아야 한다. 이번 글에서는 MVC가 어떤 구조로 이루어져 있는지, 각 구성요소들이 어떤 역할을 하는지를 알아볼 것이다. Sprint MVC의 구조..