CRUD는 Create(생성), Read(조회), Update(수정), Delete(삭제)의 약자로, 데이터의 기본적인 처리 기능을 의미합니다.
예를 들어, 게시판에서 글을 작성(Create)하고, 목록을 조회(Read)하며, 내용을 수정(Update)하고, 삭제(Delete)하는 과정이 CRUD에 해당합니다.
즉, CRUD는 데이터를 저장하고 관리하는 모든 시스템의 기본 원리입니다.
연산 | 의미 | SQL 연산 | 설명 |
---|---|---|---|
Create | 데이터 생성 | INSERT INTO | 새로운 데이터를 추가 |
Read | 데이터 조회 | SELECT | 저장된 데이터를 검색 및 조회 |
Update | 데이터 수정 | UPDATE | 기존 데이터를 변경 |
Delete | 데이터 삭제 | DELETE | 데이터를 삭제 |
CRUD는 데이터 관리를 위한 가장 기본적인 연산이며, 웹 애플리케이션 개발에서 필수적으로 사용됩니다.
위 표는 각 연산이 데이터베이스에서 어떻게 동작하는지 간단히 정리한 내용입니다.
MariaDB와 Spring Boot를 활용하여 메모 CRUD 기능을 구현했습니다.
각 연산이 Controller → Service → Repository를 거치며 데이터베이스와 연결됩니다.
연산 | 기능 | URL | Controller 메서드 | Service 메서드 |
---|---|---|---|---|
Create | 메모 작성 | /memo/write | @PostMapping("/memo/writepro") | write(Memo memo) |
Read | 메모 조회 | /memo/list | @GetMapping("/memo/list") | memoList() |
Update | 메모 수정 | /memo/update/{id} | @PostMapping("/memo/update/{id}") | memoUpdate(Integer id, Memo memo) |
Delete | 메모 삭제 | /memo/delete/{id} | @GetMapping("/memo/delete") | memoDelete(Integer id) |
MemoController.java
java
package com.study.memo.controller;
import com.study.memo.entity.Memo;
import com.study.memo.service.MemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
public class MemoController {
@Autowired
MemoService memoService;
// 📝 메모 작성 페이지
@GetMapping("/memo/write")
public String memoWriteForm() {
return "memowrite";
}
// ✅ (C) 메모 저장
@PostMapping("/memo/writepro")
public String memoWritePro(Memo memo) {
memoService.write(memo);
return "redirect:/memo/list";
}
// ✅ (R) 메모 목록 조회
@GetMapping("/memo/list")
public String memoList(Model model) {
model.addAttribute("list", memoService.memoList());
return "memolist";
}
// ✅ (R) 특정 메모 상세 조회
@GetMapping("/memo/view")
public String memoView(@RequestParam("id") Integer id, Model model) {
model.addAttribute("memo", memoService.memoView(id));
return "memoview";
}
// ✅ (U) 메모 수정
@GetMapping("/memo/update/{id}")
public String memoUpdateForm(@PathVariable("id") Integer id, Model model) {
model.addAttribute("memo", memoService.memoView(id));
return "memoupdate";
}
@PostMapping("/memo/update/{id}")
public String memoUpdate(@PathVariable("id") Integer id, Memo memo) {
memoService.memoUpdate(id, memo);
return "redirect:/memo/list";
}
// ✅ (D) 메모 삭제
@GetMapping("/memo/delete")
public String memoDelete(@RequestParam("id") Integer id) {
memoService.memoDelete(id);
return "redirect:/memo/list";
}
}
MemoService.java
java
package com.study.memo.service;
import com.study.memo.entity.Memo;
import com.study.memo.repository.MemoRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MemoService {
@Autowired
private MemoRepository memoRepository;
// ✅ (C) 메모 저장
public void write(Memo memo) {
memoRepository.save(memo);
}
// ✅ (R) 메모 목록 조회
public List<Memo> memoList() {
return memoRepository.findAll();
}
// ✅ (R) 특정 메모 상세 조회
public Memo memoView(Integer id) {
return memoRepository.findById(id).orElse(null);
}
// ✅ (U) 메모 수정
public void memoUpdate(Integer id, Memo memo) {
Memo existingMemo = memoRepository.findById(id).orElse(null);
if (existingMemo != null) {
existingMemo.setTitle(memo.getTitle());
existingMemo.setContent(memo.getContent());
memoRepository.save(existingMemo);
}
}
// ✅ (D) 메모 삭제
public void memoDelete(Integer id) {
memoRepository.deleteById(id);
}
}
처음 MySQL Workbench에서 MariaDB와 연동할 때 Exception 오류가 발생해서 애를 먹었다.
인터넷을 검색하다가 버전을 낮추면 해결될 수 있다는 글을 보고 시도해봤는데, 실제로 해결이 되었다!
데이터베이스 연동이 처음이라 어떻게 설정하고 연결해야 하는지가 어려웠다. 😭
CRUD 게시판을 만들면서 느낀 점은,
예전에 혼자 공부할 때 했던 로그인, 회원가입 기능과 유사하게 조금씩 변형해서 CRUD를 구현하는 방식이더라.
기본적인 흐름이 이해되니 더 다양한 기능을 추가할 수 있을 것 같았다.
다만, 강의를 보고 따라 하다가도
내가 직접 구현해 보고 싶어서 계속 붙잡고 있었는데, 그게 오히려 시간이 오래 걸렸다.
그래도 끝까지 해결하니 뿌듯했다! ✨
실제 메모장 구현이라는 예시를 통해 CRUD를 설명해주셔서 이해가 잘 되었습니다. 저는 SQL로 설명했는데, 스프링부트와 마리아DB로 예시를 들어주셔서 CRUD개념을 더 잘 알게 되었습니다. 아쉬운점은 실제로 메모장이 어떻게 구현되었는지, 결과 이미지가 있었으면 더 좋았을 것 같습니다. 고생하셨습니다!
스프링과 DB를 연동해서 좋은 게시판을 만든 것 같습니다!! 코드마다 어떠한 기능을 하는지 메모해 주신 부분도 이해를 많이 도와줬던 것 같습니다. 특히나 스프링 코드만 작성해도 충분했을 텐데, DB에 연동까지 하시다니 정말 대단하십니다!! 다만 아쉬운 점은 실제로 데이터를 추가하여 DB에 저장되는 모습까지 올려주셨더라면 더욱 좋았을 것 같습니다!! 수고 많으셨습니다 ㅎㅎ