[스프링 포트폴리오용]
1) Java (21버전)
2) 스프링 부트
3) MySQL / MariaDB
4) MyBatis + JPA -> QuerySQL
5) Lombok
6) 타임리프(프론트)
1) 게시글 CRUD
2) 회원 기능 (회원가입, 로그인, 로그아웃, 마이페이지, 내가 작성한 게시글 보기)
3) 댓글 기능
4) 검색 기능 (페이지네이션)
이번 프로젝트는 Java 21, Spring Boot, MariaDB, MyBatis, JPA, Thymeleaf를 활용하여 제작한 게시판 웹사이트입니다.
단순 CRUD 구현을 넘어 실제 서비스에서 자주 사용하는 기능들을 포함하여 개발하였으며, 사용자 경험(UX)을 고려한 깔끔한 디자인과 직관적인 인터페이스를 목표로 구현했습니다.
board-project
│
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com.board
│ │ │ ├── config
│ │ │ ├── controller
│ │ │ ├── domain
│ │ │ ├── dto
│ │ │ ├── mapper
│ │ │ ├── repository
│ │ │ └── service
│ │ │
│ │ ├── resources
│ │ │ ├── mapper
│ │ │ ├── templates
│ │ │ ├── static
│ │ │ └── application.yml
│ │ │
│ │ └── schema.sql
│ │
│ └── test
│
└── pom.xml
게시글 검색 시 MyBatis 동적 쿼리를 활용했습니다.
<where>
<if test="keyword != null and keyword != ''">
<choose>
<when test="searchType == 'title'">
title LIKE CONCAT('%', #{keyword}, '%')
</when>
<when test="searchType == 'content'">
content LIKE CONCAT('%', #{keyword}, '%')
</when>
<when test="searchType == 'writer'">
writer LIKE CONCAT('%', #{keyword}, '%')
</when>
</choose>
</if>
</where>
대량 데이터 처리 성능 향상을 위해 페이지네이션 기능을 추가했습니다.
LIMIT #{size}
OFFSET #{offset}
이번 프로젝트에서는 각각의 장점을 활용하기 위해 JPA와 MyBatis를 병행 사용했습니다.
정적 쿼리 처리
findByUsername()
findById()
save()
delete()
동적 검색 처리
게시글 검색
페이지네이션
내 게시글 조회
회원 인증 및 권한 관리를 위해 Spring Security를 적용했습니다.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
사용자가 자주 방문하고 싶어지는 게시판을 목표로 디자인했습니다.
눈누(Noonnu)에서 제공하는 무료 폰트를 적용했습니다.
특징
@font-face {
font-family: 'LotteMartDream';
src: url('...');
}
body {
font-family: 'LotteMartDream';
}
| 컬럼명 | 설명 |
|---|---|
| id | PK |
| username | 아이디 |
| password | 비밀번호 |
| name | 이름 |
| created_at | 가입일 |
| 컬럼명 | 설명 |
|---|---|
| id | PK |
| title | 제목 |
| content | 내용 |
| view_count | 조회수 |
| member_id | 작성자 |
| created_at | 작성일 |
| 컬럼명 | 설명 |
|---|---|
| id | PK |
| content | 댓글 내용 |
| board_id | 게시글 |
| member_id | 작성자 |
| created_at | 작성일 |
이번 프로젝트를 진행하면서 다음과 같은 내용을 학습할 수 있었습니다.
이번 프로젝트는 단순한 CRUD 구현을 넘어 실제 서비스에서 사용하는 회원 기능, 게시판 기능, 댓글 기능, 검색 및 페이지네이션 기능을 포함한 종합적인 웹 애플리케이션 개발 경험을 목표로 진행했습니다.
특히 JPA와 MyBatis를 함께 활용하여 각각의 장점을 경험할 수 있었으며, Spring Security를 통해 인증 및 권한 관리 구조도 학습할 수 있었습니다.
앞으로는 다음 기능들을 추가하여 프로젝트를 확장할 계획입니다.