<form> 태그로 브라우저에서 서버로 전송되는 사용자 입력값이다
// AritcleController.java
package com.example.firstproject.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ArticleController {
@GetMapping("/articles/new")
public String newArticleForm() {
return "articles/new";
}
}
//templates/articles/new.mustache
<form class="container" action="/articles/create" method="post">
@PostMapping 만들기
@PostMapping("articles/create")
public String createArticle() {
return "";
}
com.example.firstproject 에서 dto packege 생성
dto 패키지에 ArticleFrom 클래스 생성
package com.example.firstproject.dto;
public class ArticleForm {
private String title;
private String content;
//전송받은 제목과 내용을 필드에 저장하는 생성자 추가
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
//데이터를 잘 받았는지 확인할 toString() 메소드 추가
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
//ArticleController.java
@PostMapping("articles/create")
public String createArticle(ArticleForm form) {
System.out.println(form.toString());
return "";
}
데이터베이스와 JPA
DTO를 엔티티로 변환하기 && 리파지터리로 엔티티를 DB에 저장하기
[브라우저 폼 제출]
│ POST /articles/create
▼
[Spring MVC]
- 요청 파라미터 바인딩 → ArticleForm (DTO) 생성
▼
[Controller]
- form.toEntity() 호출 → Article (Entity)로 변환
▼
[Repository (JPA)]
- articleRepository.save(entity) → DB 저장
▼
[응답]
- redirect 또는 뷰 렌더링
src/main/java/com/example/firstproject
├─ controller/
│ └─ ArticleController.java
├─ dto/
│ └─ ArticleForm.java // DTO: 요청 데이터 운반
├─ entity/
│ └─ Article.java // Entity: JPA 관리 객체
└─ repository/
└─ ArticleRepository.java // CRUD 인터페이스
DB 데이터 조회하기
**Step 1:**
>application.properties
spring.application.name=firstproject
spring.h2.console.enabled=true
**Step 2: `run` tab에서 jdbc 검색**
Database available at 'jdbc:h2:mem:......'
**Step 3: `localhost:8080/h2-console` 접속**
JDBC URL:....

롬복(lombok): 코드 간단하게 만들어 주는 라이브러리
롬복을 활용해 리팩터링하기
dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//생략
}
DTO & Entity 리팩터링하기
@AllArgsConstructor : 모든 필드를 받는 생성자를 자동 생성@ToString : 객체를 보기 좋게 문자열로 출력컨트롤러에 로그 남기기
import lombok.extern.slf4j.Slf4j; + 클래스에 @Slf4j
→ System.out.println 대신 레벨별 로그 관리 가능(info/debug/warn/error), 운영환경에서 필터링 쉬움

데이터 조회 과정

단일 데이터 조회하기
[Client/Browser]
│ (1) GET /articles/{id}
▼
[Controller]
│ (2) 요청 파라미터(id) 해석 → 조회 지시
▼
[Repository]
│ (3) DB에 조회 질의
▼
[DB]
│ (4) 결과를 Entity로 반환
▼
[Model + View(템플릿)]
│ (5) Model에 담아 템플릿 렌더링
▼
[Client/Browser]
(6) 최종 HTML 응답 표시
데이터 목록 조회하기
GET /articles 요청이 오면 DB에서 모든 Article을 조회 → 모델에 articleList로 담음 → articles/index 템플릿으로 목록 렌더링
@GetMapping("/articles")
public String index(Model model) {
// 1. 모든 데이터 가져오기
ArrayList<Article> articleEntityList = articleRepository.findAll();
// 2. 모델에 데이터 등록하기
model.addAttribute("articleList", articleEntityList);
// 3. 뷰 페이지 설정하기
return "articles/index";
}