풀스택 백엔드 2026.06.25

syyu21b·2026년 6월 25일

풀스택 - 백엔드

목록 보기
37/49
post-thumbnail

[스프링 포트폴리오용]

요구사항 (기술 스펙)

1) Java (21버전)
2) 스프링 부트
3) MySQL / MariaDB
4) MyBatis + JPA -> QuerySQL

  • MyBatis : 동적 쿼리를 생성
  • JPA : 정적 쿼리 생성 (CRUD)

5) Lombok
6) 타임리프(프론트)

만들어야 할 것 (게시판)

1) 게시글 CRUD
2) 회원 기능 (회원가입, 로그인, 로그아웃, 마이페이지, 내가 작성한 게시글 보기)
3) 댓글 기능
4) 검색 기능 (페이지네이션)


Spring Boot + MariaDB 게시판 프로젝트 개발

프로젝트 소개

이번 프로젝트는 Java 21, Spring Boot, MariaDB, MyBatis, JPA, Thymeleaf를 활용하여 제작한 게시판 웹사이트입니다.

단순 CRUD 구현을 넘어 실제 서비스에서 자주 사용하는 기능들을 포함하여 개발하였으며, 사용자 경험(UX)을 고려한 깔끔한 디자인과 직관적인 인터페이스를 목표로 구현했습니다.


사용 기술 스택

Backend

  • Java 21
  • Spring Boot 3.x
  • Spring MVC
  • Spring Security
  • Spring Data JPA
  • MyBatis
  • Lombok
  • MariaDB

Frontend

  • Thymeleaf
  • HTML5
  • CSS3
  • JavaScript

Database

  • MariaDB

Build Tool

  • Maven

프로젝트 구조

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

주요 기능

회원 기능

회원가입

  • 아이디 중복 검사
  • 비밀번호 암호화 저장
  • 회원 정보 등록

로그인

  • Spring Security 기반 인증
  • 세션 로그인 처리

로그아웃

  • Security 로그아웃 기능 사용

마이페이지

  • 회원 정보 조회
  • 작성 게시글 확인

내가 작성한 게시글 조회

  • 로그인한 사용자 기준 조회
  • 페이지네이션 적용

게시판 기능

게시글 작성(Create)

  • 제목
  • 내용
  • 작성자 자동 등록

게시글 조회(Read)

  • 게시글 상세 조회
  • 조회수 증가

게시글 수정(Update)

  • 작성자만 수정 가능

게시글 삭제(Delete)

  • 작성자만 삭제 가능

댓글 기능

댓글 작성

  • 로그인 사용자만 가능

댓글 조회

  • 게시글 상세 페이지에서 확인

댓글 삭제

  • 작성자만 삭제 가능

검색 기능

게시글 검색 시 MyBatis 동적 쿼리를 활용했습니다.

검색 조건

  • 제목
  • 내용
  • 작성자
  • 제목 + 내용

MyBatis 동적 SQL 예시

<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>

페이지네이션 구현

대량 데이터 처리 성능 향상을 위해 페이지네이션 기능을 추가했습니다.

적용 기능

  • 이전 페이지
  • 다음 페이지
  • 현재 페이지 강조
  • 페이지 블록 처리

SQL 처리

LIMIT #{size}
OFFSET #{offset}

JPA와 MyBatis를 함께 사용한 이유

이번 프로젝트에서는 각각의 장점을 활용하기 위해 JPA와 MyBatis를 병행 사용했습니다.

JPA 사용 영역

정적 쿼리 처리

findByUsername()
findById()
save()
delete()

장점

  • 생산성 향상
  • 객체 중심 개발
  • 유지보수 용이

MyBatis 사용 영역

동적 검색 처리

게시글 검색
페이지네이션
내 게시글 조회

장점

  • 복잡한 SQL 작성 가능
  • 동적 조건 처리 편리
  • 성능 튜닝 용이

Spring Security 적용

회원 인증 및 권한 관리를 위해 Spring Security를 적용했습니다.

주요 설정

  • 로그인 인증
  • 비밀번호 암호화
  • URL 접근 권한 관리
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

UI/UX 디자인

사용자가 자주 방문하고 싶어지는 게시판을 목표로 디자인했습니다.

디자인 컨셉

  • 깔끔한 레이아웃
  • 높은 가독성
  • 반응형 구조
  • 직관적인 메뉴 구성

사용 폰트

롯데마트 드림체

눈누(Noonnu)에서 제공하는 무료 폰트를 적용했습니다.

특징

  • 깔끔한 글자 형태
  • 높은 가독성
  • 게시판 서비스에 적합
@font-face {
    font-family: 'LotteMartDream';
    src: url('...');
}

body {
    font-family: 'LotteMartDream';
}

데이터베이스 설계

Member

컬럼명설명
idPK
username아이디
password비밀번호
name이름
created_at가입일

Board

컬럼명설명
idPK
title제목
content내용
view_count조회수
member_id작성자
created_at작성일

Comment

컬럼명설명
idPK
content댓글 내용
board_id게시글
member_id작성자
created_at작성일

프로젝트를 통해 배운 점

이번 프로젝트를 진행하면서 다음과 같은 내용을 학습할 수 있었습니다.

  • Spring Boot 기반 웹 서비스 개발
  • Spring Security 인증/인가 처리
  • JPA 활용 방법
  • MyBatis 동적 SQL 작성
  • MariaDB 연동
  • Thymeleaf 템플릿 엔진 사용
  • 페이지네이션 구현
  • 댓글 시스템 구현
  • 계층형 아키텍처 설계

마무리

이번 프로젝트는 단순한 CRUD 구현을 넘어 실제 서비스에서 사용하는 회원 기능, 게시판 기능, 댓글 기능, 검색 및 페이지네이션 기능을 포함한 종합적인 웹 애플리케이션 개발 경험을 목표로 진행했습니다.

특히 JPA와 MyBatis를 함께 활용하여 각각의 장점을 경험할 수 있었으며, Spring Security를 통해 인증 및 권한 관리 구조도 학습할 수 있었습니다.

앞으로는 다음 기능들을 추가하여 프로젝트를 확장할 계획입니다.

  • 좋아요 기능
  • 파일 업로드 기능
  • 관리자 페이지
  • 이메일 인증
  • 소셜 로그인
  • REST API 분리
  • AWS 배포 및 CI/CD 구축

0개의 댓글