스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 04장
지정된 템플릿 양식 + 데이터를 합쳐 HTML 문서를 출력하는 소프트웨어
웹 사이트의 화면을 어떤 형태로 만들지 도와주는 양식
파일 위치: src/main/resources/templates
역할: 첫 페이지
간단하게 html 문서 작성
역할: 머스테치에 URL 매핑하는 작업
/src/main/resources/templates
)와 뒤의 파일 확장자(.mustache
)를 자동 지정@GetMapping("/")
public String index() {
return "index";
}
/src/main/resources/templates/index.mustache로 전환되어 View Resolver(URL 요청의 결과를 전달할 타입과 값을 지정하는 관리자)가 처리
지난 주에 PostsApiController로 API 구현하였음
{{>layout/header}}
<h1>스프링 부트로 시작하는 웹 서비스</h1>
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<a href="/posts/save" role="button" class="btn btn-primary">글 등록</a>
</div>
</div>
</div>
{{>layout/footer}}
...
@GetMapping("/posts/save")
public String postsSave() {
return "posts-save";
}
...
✔ src/main/resources/static에 위치한 정적 파일(자바스크립트, CSS, 이미지 등)은 URL에서 /(절대 경로)로 설정됨
데이터베이스에 정상적으로 저장된다.
public interface PostsRepository extends JpaRepository<Posts, Long> {
@Query("SELECT p FROM Posts p ORDER BY p.id DESC")
List<Posts> findAllDesc();
}
@RequiredArgsConstructor
@Service
public class PostsService {
private final PostsRepository postsRepository;
...
@Transactional(readOnly = true)
public List<PostsListResponseDto> findallDesc() {
return postsRepository.findAllDesc().stream()
.map(PostsListResponseDto::new)
.collect(Collectors.toList());
}
}
private final PostsService postsService;
@GetMapping("/")
public String index(Model model) { // 서버 템플릿 엔진에서 사용할 수 있는 객체를 저장
model.addAttribute("posts", postsService.findAllDesc());
return "index";
}