4번째 필수 강의 part 3. ch 1 요약
입장 인원이 통제되는 상황에서 이용 현황을 공유하는 서비스
- 관리자: 시설 이용 현황이 전산화되지 않은 곳이 많고, 입장 인원을 통제하지만 이용 현황을 공유하는 책임을 가지고 있지 x
--> 서비스 동기 낮음- 사용자: 시설에 직접 방문하거나 시설에 연락하지 않는 한 입장 정원을 알 수 없음
--> 사용 동기 높음
서비스가 도움이 되기 위해서는 관리자와 사용자 모두에게 사용 동기가 필요
뷰는 URL 링크를 타고 들어가 보이는 실제 페이지들을 말하며,
로그인 요청, 시설 조회 및 시설 등록 등의 데이터가 오가는 일들을 위주로 API를 작성할 것이다. 이 때 이러한 설계들은 REST 규약을 따른다.
구현해야 하는 API 엔드포인트는 다음과 같다.
@RestController = @ResponseBody + @Controller
API 명세서를 참고하여 컨트롤러를 작성한다. 도메인이 그렇게 많지 않아서 한 컨트롤러 안에 다 작성할 수 있다고 하지만, 편리성을 위해 나눠서 작성하기로 한다.
@Controller는 뷰를 렌더링하여 반환해준다. BaseController 클래스를 만들어 @Controller를 붙이고 작성한다.
@GetMapping("/")
public String root(){
return "index";
}
index.html을 만들고 resources 밑의 static이나 templates에 넣어주어도 찾지 못하는 것을 볼 수 있다. 이는 톰캣이 자동으로 webapp 디렉토리의 .jsp 파일을 찾아가도록 되어있기 때문이다. 그러나 main, test와 같은 선상에 webapp 폴더를 만든 후 index를 넣어주고, project structure에서 경로를 추가해주어도 .jsp 파일을 찾기 때문에 잡지 못한다. properties 문서에 suffix 설정으로 추가해두면 연결이 된다.
// application.properties
spring.mvc.view.suffix=.html
그러나 번거롭기도 하고, 요새는 jsp 파일을 잘 사용하지 않기 때문에 대신 AutoConfiguration이 되는 템플릿 엔진을 더 많이 사용한다.
하여 Thymeleaf 의존성도 함께 추가해준다. 이 템플릿 엔진을 추가해주면 자동으로 webapp이 아닌 resources로 맵핑되어 편리해진다.
다음으로 error 페이지도 따로 띄울 수 있도록, 기본으로 나오는 whitelabel 에러 페이지 설정을 false로 준 후 맵핑해준다. 이렇게 하더라도 Spring Boot가 기본적으로 error 페이지를 생성하는 과정이 완전히 제거되지 않으므로 이 컨트롤러가 ErrorController 인터페이스를 구현하도록 명시해줄 필요가 있다.
// application.properties
server.error.whitelabel.enabled=false
---
@Controller
public class BaseController implements ErrorController {
...
@RequestMapping("/error")
public String error(){
return "error";
}
다음으로는 Controller 패키지 안에 API 패키지를 생성하여 @RestController를 붙이고, @RequestMapping으로 /api가 앞에 오도록 하여 api 명세서에 적힌 url들을 전부 맵핑해 어노테이션 기반 설계를 마친다.