REST API와 마무리 — 실습
myboard 에 ALTER 두 번으로 view_count·photo 컬럼을 추가. 동적 SQL 로 photo 가 있을 때만 UPDATE. fetch + FormData 로 파일 업로드.
-- ① 조회수 컬럼 (DEFAULT 0)
ALTER TABLE myboard ADD COLUMN view_count INT DEFAULT 0;
-- ② 사진 컬럼 (NULL 허용)
ALTER TABLE myboard ADD COLUMN photo VARCHAR(200) NULL;
// Board.java 에 두 필드 추가 (com.smhrd.domain)
private int viewCount;
private String photo;
<!-- 동적 SQL — photo 가 있을 때만 -->
<update id="update" parameterType="com.smhrd.domain.Board">
UPDATE myboard
SET title = #{title}, content = #{content}
<if test="photo != null">, photo = #{photo}</if>
WHERE num = #{num}
</update>
<update id="incrementViewCount" parameterType="int">
UPDATE myboard SET view_count = view_count + 1 WHERE num = #{num}
</update>
// 조회수 +1 (com.smhrd.controller)
@PostMapping("/api/boards/{num}/view")
public Map<String, Integer> incrementView(@PathVariable int num) {
int newCount = service.incrementViewCount(num);
return Map.of("viewCount", newCount);
}
// 첨부파일 업로드
@PostMapping("/api/boards/upload")
public Map<String, String> upload(@RequestParam("file") MultipartFile file)
throws IOException {
String saved = UUID.randomUUID() + "_" + file.getOriginalFilename();
file.transferTo(new File("/uploads/" + saved));
return Map.of("filename", saved);
}
// 클라이언트 — FormData
const formData = new FormData();
formData.append('file', fileInput.files[0]);
fetch('/api/boards/upload', {method: 'POST', body: formData});
Run on Server 또는 javac+java 로 실행하고 결과를 확인합니다.
<if test="photo != null"> 동작 확인