CRUD

김태민·2025년 3월 17일
1

1. CRUD란?

CRUD는 Create(생성), Read(조회), Update(수정), Delete(삭제)의 약자로, 데이터의 기본적인 처리 기능을 의미합니다.
예를 들어, 게시판에서 글을 작성(Create)하고, 목록을 조회(Read)하며, 내용을 수정(Update)하고, 삭제(Delete)하는 과정이 CRUD에 해당합니다.
즉, CRUD는 데이터를 저장하고 관리하는 모든 시스템의 기본 원리입니다.

2. CRUD의 4가지 핵심 기능

연산의미SQL 연산설명
Create데이터 생성INSERT INTO새로운 데이터를 추가
Read데이터 조회SELECT저장된 데이터를 검색 및 조회
Update데이터 수정UPDATE기존 데이터를 변경
Delete데이터 삭제DELETE데이터를 삭제

CRUD는 데이터 관리를 위한 가장 기본적인 연산이며, 웹 애플리케이션 개발에서 필수적으로 사용됩니다.
위 표는 각 연산이 데이터베이스에서 어떻게 동작하는지 간단히 정리한 내용입니다.

3. CRUD를 이용한 메모장 구현 (MariaDB + Spring Boot)

📌 전체 개요

MariaDB와 Spring Boot를 활용하여 메모 CRUD 기능을 구현했습니다.
각 연산이 Controller → Service → Repository를 거치며 데이터베이스와 연결됩니다.


📌 CRUD 기능과 Controller, Service 대응 설명

연산기능URLController 메서드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)

📌 1) Controller

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";
    }
} 

📌2) Service

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);
    }
}

4. 소감

처음 MySQL Workbench에서 MariaDB와 연동할 때 Exception 오류가 발생해서 애를 먹었다.
인터넷을 검색하다가 버전을 낮추면 해결될 수 있다는 글을 보고 시도해봤는데, 실제로 해결이 되었다!
데이터베이스 연동이 처음이라 어떻게 설정하고 연결해야 하는지가 어려웠다. 😭

CRUD 게시판을 만들면서 느낀 점은,
예전에 혼자 공부할 때 했던 로그인, 회원가입 기능과 유사하게 조금씩 변형해서 CRUD를 구현하는 방식이더라.
기본적인 흐름이 이해되니 더 다양한 기능을 추가할 수 있을 것 같았다.

다만, 강의를 보고 따라 하다가도
내가 직접 구현해 보고 싶어서 계속 붙잡고 있었는데, 그게 오히려 시간이 오래 걸렸다.
그래도 끝까지 해결하니 뿌듯했다! ✨

📌참고한 영상

profile
인천대 멋쟁이사자처럼 13기

3개의 댓글

comment-user-thumbnail
2025년 3월 17일

스프링과 DB를 연동해서 좋은 게시판을 만든 것 같습니다!! 코드마다 어떠한 기능을 하는지 메모해 주신 부분도 이해를 많이 도와줬던 것 같습니다. 특히나 스프링 코드만 작성해도 충분했을 텐데, DB에 연동까지 하시다니 정말 대단하십니다!! 다만 아쉬운 점은 실제로 데이터를 추가하여 DB에 저장되는 모습까지 올려주셨더라면 더욱 좋았을 것 같습니다!! 수고 많으셨습니다 ㅎㅎ

답글 달기
comment-user-thumbnail
2025년 3월 18일

실제 메모장 구현이라는 예시를 통해 CRUD를 설명해주셔서 이해가 잘 되었습니다. 저는 SQL로 설명했는데, 스프링부트와 마리아DB로 예시를 들어주셔서 CRUD개념을 더 잘 알게 되었습니다. 아쉬운점은 실제로 메모장이 어떻게 구현되었는지, 결과 이미지가 있었으면 더 좋았을 것 같습니다. 고생하셨습니다!

답글 달기
comment-user-thumbnail
2025년 3월 18일

CRUD 기능과 Controller, Service 대응 설명을 표로 한눈에 보기 쉽게 정리한 점이 좋았습니다
저도 같은 오류를 겪었었는데 해당 오류를 다뤄주셔서 많은 분들이 도움될 것 같습니다 !-!

답글 달기