자바로 배우는 CRUD 게시판 만들기
"나도 게시판 하나쯤 만들 수 있을까?" 그 질문에 자바로 직접 답해보세요. 간단하지만 핵심이 담긴 게시판 구현!
안녕하세요, 개발자 여러분! 오늘은 제가 처음 자바 웹 프로그래밍에 발을 들였을 때 가장 먼저 만들어봤던 프로젝트 중 하나인 "CRUD 게시판"에 대해 이야기해보려고 합니다. 이게 별거 아닌 것 같아도, 실제로는 자바 웹 개발의 거의 모든 기초가 담겨 있는 엄청 중요한 예제거든요. 지난주 주말에 후배랑 코드 리뷰를 하다가, 예전에 만들었던 게시판 코드가 떠올랐어요. 그래서 이번 기회에 정리도 할 겸, 블로그 글로 공유해봅니다.
목차
자바 CRUD 게시판 프로젝트 준비하기
게시판 구현을 시작하려면 먼저 개발 환경을 제대로 갖춰야겠죠? 저는 Eclipse IDE와 Tomcat 서버, 그리고 MySQL 데이터베이스 조합을 사용했어요. Maven 프로젝트로 세팅하고, Servlet과 JSP 기반으로 구현했답니다. 아직 Spring을 쓰기엔 조금 이른 단계라고 느꼈거든요.
디렉터리 구조는 src/main/java
에 controller, dao, dto 패키지를 나누고, src/main/webapp
엔 JSP 파일들을 배치했어요. 이 구조가 나중에 Spring으로 넘어갈 때도 익숙해서 좋더라고요.
게시판 구조 설계와 엔티티 구성
게시판의 핵심은 데이터 모델이에요. 저는 게시글을 하나의 Board 객체로 보고, 작성자, 제목, 내용, 날짜 등을 필드로 정의했어요. 그리고 실제 MySQL에 테이블을 아래처럼 생성했습니다:
필드명 | 자료형 | 설명 |
---|---|---|
id | INT | 기본키, 자동 증가 |
title | VARCHAR(100) | 게시글 제목 |
content | TEXT | 게시글 내용 |
writer | VARCHAR(50) | 작성자 이름 |
created_at | DATETIME | 작성 일시 |
게시글 작성 기능 구현 (Create)
이제 본격적으로 기능을 구현해볼 시간이에요. 게시글을 작성하는 기능은 사용자가 입력한 데이터를 DB에 insert하는 흐름인데요. 핵심 흐름을 간단히 정리해볼게요.
- 사용자가 form에 제목, 내용, 작성자를 입력
- submit 시
WriteServlet
으로 전송 - Servlet은 입력값을 검증 후 DAO에 전달
- DAO는 insert 쿼리 실행 후 결과 반환
- 정상 처리되면 게시판 목록 페이지로 리다이렉트
게시글 목록/상세보기 & 수정 (Read & Update)
게시판의 꽃은 역시 게시글 목록이죠. 단순히 DB의 데이터를 꺼내 화면에 뿌리는 기능 같지만, 실제로는 다양한 동적 처리가 들어갑니다. 글의 수가 많아지면 페이징 처리도 필요하고요. 저 같은 경우는 초기엔 그냥 List 전체를 보여주다가, 나중에 페이징 로직까지 확장했어요.
상세보기는 ReadServlet
에서 ?id=3
과 같이 게시글 ID를 받아 DAO를 통해 해당 데이터를 가져오고, JSP에 request.setAttribute
로 넘겨주면 됩니다. 수정은 상세보기에서 "수정" 버튼을 누르면 수정 폼으로 이동하고, 그곳에서 입력 후 다시 update 쿼리로 처리하는 구조였죠.
게시글 삭제 기능 구현 (Delete)
삭제 기능은 구현 자체는 간단하지만, 신중하게 다뤄야 해요. 실수로 삭제되면 복구가 어렵거든요. 그래서 저는 두 가지 방법을 모두 고려했어요.
삭제 방식 | 장점 | 단점 |
---|---|---|
실제 삭제 | DB 용량 절약 | 복구 불가 |
논리적 삭제 | 복구 가능 | 쿼리 조건 복잡 |
스프링 부트로 확장하는 팁
기본적인 CRUD 게시판을 완성했다면, 이제 더 나아가고 싶을 거예요. 그럴 때 가장 많이 넘어가는 게 바로 Spring Boot입니다. 구조는 비슷하지만 훨씬 더 강력한 기능을 제공하죠.
- Controller, Service, Repository 구조로 리팩토링
- Spring Data JPA를 활용한 쿼리 생략
- Thymeleaf로 JSP 대체
- Gradle 기반 자동 빌드 시스템 적용
기본적인 자바 문법과 클래스, 메서드, 패키지 사용법을 익힌 다음 웹 개발 기초(Servlet, JSP)를 알고 있다면 CRUD 게시판을 학습하기 좋은 시점입니다.
Thymeleaf는 Spring 기반에서 주로 사용되므로, 기본 JSP를 먼저 익히고 이후 Spring Boot를 접할 때 자연스럽게 전환하는 걸 추천드립니다.
네, 가능합니다. 회원 가입/로그인 기능을 추가하고 세션을 활용하면 작성자 인증, 게시글 권한 분리 등도 구현할 수 있습니다.
DAO(Data Access Object)는 DB 처리 로직을 분리해주는 역할을 하므로 유지보수와 테스트에 유리합니다. 가능하면 구조적으로 분리하는 걸 추천해요.
초기엔 필수는 아니지만, 글 수가 많아질 경우 사용자 경험 향상과 성능 측면에서 필요합니다. MySQL의 LIMIT
과 OFFSET
을 활용해 구현할 수 있어요.
파일 업로드 기능을 Servlet에서 구현하면 가능합니다. MultipartRequest
를 활용하거나, Spring Boot에선 MultipartFile
로 쉽게 처리할 수 있어요.
자바 웹 개발 입문자에게 CRUD 게시판은 단순한 예제를 넘어서 구조적 사고를 키우고, 웹 애플리케이션이 어떻게 작동하는지 몸으로 익힐 수 있는 중요한 발판이 됩니다. 저도 이 프로젝트 덕분에 MVC 개념이 더 명확해졌고, 이후 Spring을 접할 때 훨씬 수월했어요. 여러분도 직접 만들어보면서 기능을 하나씩 확장해보세요. 코드를 손에 익히는 것만큼 강력한 학습은 없답니다. 혹시 구현 중 막히는 부분이 있다면 댓글이나 이메일로 언제든지 질문 주세요!
java, crud, 게시판, 자바 웹, servlet, jsp, mysql, spring boot, dao, mvc
'프로그래밍 > 자바[JAVA]' 카테고리의 다른 글
26장. 텍스트 파일 기반 데이터 저장 (0) | 2025.05.17 |
---|---|
25장. 회원관리 시스템 구현 (2) | 2025.05.17 |
23장. 스트림(Stream) API 기초 - 자바의 선언형 데이터 처리 시작하기 (3) | 2025.05.17 |
22장. 파일 입출력 완전 정복 - File, BufferedReader, BufferedWriter 활용법 (0) | 2025.05.16 |
21장. 날짜와 시간 API 완벽 정리 - LocalDate, LocalTime, LocalDateTime 활용법 (0) | 2025.05.16 |