1. DATA 조회 과정
1. 사용자가 Data를 조회해달라고 웹 페이지에 URL 요청
2. 서버의 컨트롤러가 요청을 받아 해당 URL에서 찾으려는 DATA정보를 Repository에 전달
3. Repository는 정보를 가지고 DB에 데이터 조회 요청
4. DB는 해당 데이터를 찾아 이를 Entity로 반환
5. 반환된 Entity는 모델을 통해 뷰 템플릿으로 전달
6. 최종적으로 결과 뷰 페이지가 완성돼 화면에 출력
2. DATA 생성과정
** 여기서는 서비스 로직은 담아내지 않았습니다. **
데이터의 흐름을 코드 하나하나 보면서 이해해보자.
1. html의 submit를 누르면 form 요소에 있는 name 속성들이 데이터로 전송된다.
- name 속성이 Key 역할을 하여 폼에서 데이터를 서버로 전송해준다.
<input type="text" class="form-control" name="title">
<textarea class="form-control" rows="3" name="content"></textarea>
2. 액션으로 연결된 해당 메서드로 메핑된다.
- 왜 작동되냐? form요소의 action 속성과 method가 매핑 되었기 때문이다.
<form class="container" action="/articles/create" method="post">
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
3. 폼데이터가 자동으로 DTO로 매핑된다.
- 위의 함수에서ArticleForm form
은 DTO로 form의 name 속성과 자동으로 연결 된다.
- 왜 연결되냐? Spirng MVC는 폼데이터를 자동으로 DTO에 매핑하는 기능을 제공한다.(바인딩, 매핑)
- DTO에서는 어떤 역할을 하냐 ? 데이터를 받아서, Entity로 변환해주는 역할을 한다.
- 왜 굳이 DTO를 분리해두냐? 보안강화, 유연성강화, 테스트 및 유지보수성의 용이성 때문이다.
- DTO는 데이터를 전송하거나 수신하는데 사용되며, 데이터의 일부만을 포함 가능하다. 주로 Controller와 Server 간 사용한다.
- DTO 에서는 기본 생성자를 안 만들어도 된다.
@AllArgsConstructor
@ToString
public class ArticleForm {
private String title;
private String content;
public Article toEntity() {
return new Article(null,title,content);
}
}
- 왜 null 값을 return 하냐? id 값은 generatedValue로 줄 것이기 때문이다.
4. Controller 에서 DTO 객체를 Entity로 변환해주는 코드를 작성해준다.
Article article = form.toEntity();
- DTO form 객체를 Entity를 바꾸어 주는 코드이다. 이를 Article Entity객체인 article 인스턴스에 저장해둔다.
5. Entity를 작성한다.
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Getter
public class Article{
@Id // 엔티티의 대푯값 지정
@GeneratedValue // 자동 생성 기능
private Long id;
@Column
private String title;
@Column
private String content;
}
- Entity 작성시, 기본생성자와 생성자가 필요하다.
- AllArgsConstructor과 NoArgsConstructor을 추가해준다.
- lombok의 @Getter을 넣어주면 이후에 getId를 사용할 수 있다.
6. Repository 에 save 해둔다.
- 먼저 Repository를 Autowired 어노테이션을 이용하여 스프링부트가 객체를 자동으로 생성하고 연결하게 한다.
@Autowired
private ArticleRepository articleRepository;
// chatgpt가 추천하는 방식
@Autowired
public ArticleService(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;}
- Entity를 DB에 저장한다.
Article saved = articleRepository.save(article);
7. 게시물을 만들었으면, 해당 게시물이 생성됐는지 보여주어야 한다.
- view page 반환 시, 해당 id를 반환해야한다. getId 라는 함수를 이용할 건데, 5번 과정에서 Getter를 추가하여 사용될 것이다.
- 이때 redirect 를 사용할 것인데, 사용자가 다른 URL로 이동하도록 유도하는 방식이다. 특정 동작 후 결과 페이지로 이동할 때 사용된다. 폼을 POST 요청으로 처리한 후, 결과 페이지로 GET 요청을 보내 리다이렉션하는 방식이다.
- redirect를 사용해야하는 이유로는 웹피이지에서 데이터를 갱신하지 않아서 이다.
- 뷰 템플릿이 최신 데이터를 반영하지 않아, 서버에서 다시 렌더링 되지 않고 기존의 데이터를 그대로 보여준다.
return "redirect:/articles/"+saved.getId();
'코딩 공부 > Spirngboot' 카테고리의 다른 글
[Redirect 실습] (0) | 2025.01.12 |
---|---|
[단일, 리스트 데이터 조회] 회원가입 조회 (0) | 2025.01.11 |
[JPA] 개념 (0) | 2025.01.10 |
[DTO 실습] (0) | 2025.01.10 |
[MVC패턴] 기본 개념 (0) | 2025.01.08 |