# 상세 페이지 보기
## 미션
---
article 목록 페이지 상에서 제목을 클릭하면,
![클라우드스터딩-스프링부트-상세-페이지-링크-클릭](https://i.imgur.com/VBpm13d.png)
해당 article의 상세 페이지가 나오게 하시오.
![클라우드스터딩-스프링부트-상세-페이지-내용-확인](https://i.imgur.com/J1ic6uM.png)
## 개념
---
#### ⭐️ 동작 흐름
![클라우드스터딩-스프링부트-상세-페이지-요청-흐름](https://i.imgur.com/1b7f3Xy.png)
## 튜토리얼
---
#### ⭐️ 생성 파일
![클라우드스터딩-스프링부트-상세페이지-추가](https://i.imgur.com/Fz9Ho9C.png)
#### ⭐️ 뷰 페이지
1) 링크 생성 및 내용 감추기: "articles/index.mustache"
```
{{>layouts/header}}
...
<!-- articles table -->
<table class="table table-hover">
<thead>
<tr>
<th>#</th>
<th>제목</th>
</tr>
</thead>
<tbody>
{{#articles}}
<tr>
<td>{{id}}</td>
<td>
<a href="/articles/{{id}}">{{title}}</a> <!-- 링크 추가 -->
</td>
</tr>
{{/articles}}
</tbody>
</table>
{{>layouts/footer}}
```
2) 상세 페이지 작성: "articles/show.mustache"
```
{{>layouts/header}}
<!-- jumbotron -->
<div class="jumbotron">
<h1>Article 상세보기</h1>
<hr>
<p>articles/show.mustache</p>
</div>
<!-- table -->
<table class="table table-hover">
<tbody>
{{#article}}
<tr>
<th>글번호</th>
<td>{{id}}</td>
</tr>
<tr>
<th>제목</th>
<td>{{title}}</td>
</tr>
<tr>
<th>내용</th>
<td>{{content}}</td>
</tr>
{{/article}}
</tbody>
</table>
<a href="/articles" class="btn btn-success btn-block">목록으로</a>
{{>layouts/footer}}
```
#### ⭐️ 컨트롤러
3) 메소드 추가: "controller/ArticleController"
```
...
public class ArticleController {
...
@GetMapping("/articles/{id}")
public String show(@PathVariable Long id, // url의 {id} 값을 변수화!
Model model) {
// id를 통해 Article을 가져옴!
Article article = articleRepository.findById(id).orElse(null);
// article을 뷰 페이지로 전달
model.addAttribute("article", article);
return "articles/show";
}
}
```
#### ⭐️ 확인하기
4) 제목 클릭
![클라우드스터딩-스프링부트-상세-페이지-링크-클릭](https://i.imgur.com/VBpm13d.png)
5) 상세 페이지 확인
![클라우드스터딩-스프링부트-상세-페이지-내용-확인](https://i.imgur.com/J1ic6uM.png)
## 훈련하기
---
- 위 튜토리얼의 수행 과정을 설명하시오.
## 면접 준비
---
- @PathVariable의 역할은?
- 만약 입력한 id의 데이터가 없다면 어떻게 해야할까?