학습 목표
- 최소 게시판 의 핵심 개념을 안다
- Create + Read 만 의 동작을 안다
- 동작하는 게시판이 있다. 단 — 누구나 남의 글을 수정할 수 있는 위험한 상태.
1. 문제
게시판을 처음 만들 때 — 모든 기능을 한꺼번에 가지 말고 가장 단순한 두 개부터.
2. 새 도구
Create + Read 만: 글 쓰기와 목록 보기까지만. 의도적으로 인가 없음 — 다음 차시의 동기.
3. 코드
-- DB (MySQL)
CREATE TABLE myboard (
num INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
writer VARCHAR(50) NOT NULL,
content TEXT NOT NULL
);
// com.smhrd.domain.Board — 4 필드만
@Data @AllArgsConstructor @NoArgsConstructor
public class Board {
private int num;
private String title;
private String writer;
private String content;
}
// com.smhrd.mapper.BoardMapper
@Mapper
public interface BoardMapper {
List<Board> selectList();
Board selectOne(int num);
void insert(Board b);
}
// BoardController
@PostMapping("/write")
public String write(Board b, HttpSession session) {
Member u = (Member) session.getAttribute("loginUser");
b.setWriter(u.getId()); // 폼이 아니라 세션에서
service.insert(b);
return "redirect:/board/list";
}
<!-- write.jsp 의 폼 — name 이 데이터 계약 -->
<form action="/board/write" method="post">
<input name="title" required />
<textarea name="content"></textarea>
</form>
<!-- list.jsp -->
<c:forEach var="b" items="${boards}">
<tr>
<td>${b.num}</td>
<td><a href="/board/view?num=${b.num}">${b.title}</a></td>
<td>${b.writer}</td>
</tr>
</c:forEach>
4. 정리
- myboard 4 컬럼 (num, title, writer, content)
- Board 도메인 4 필드
- Mapper namespace = com.smhrd.mapper.BoardMapper
- 인가 없음 = 다음 차시의 동기 (의도된 위험)
5. Before / After
전 차시
게시판을 처음 만들 때 — 모든 기능을 한꺼번에 가지 말고 가장 단순한 두 개부터.
이번 차시
동작하는 게시판이 있다. 단 — 누구나 남의 글을 수정할 수 있는 위험한 상태.
학습 확인 체크리스트
- myboard 4 컬럼 / Board 4 필드
- com.smhrd.* 패키지
- useGeneratedKeys + keyProperty="num"
- 인가 없음 = 다음 차시의 동기