Portfolio

PersonalLedger

Back-end 기본기 강화를 위해 MyBatis와 Spring Boot로 구축한 자산 관리 시스템

2026.02 ~ 진행 중 · Java 17 / Spring Boot / MyBatis / MariaDB · 개인 프로젝트

한눈에 보기

목표

Spring Boot와 MyBatis의 연동 구조를 깊이 있게 이해하고, SQL 중심의 정교한 데이터 제어 능력을 함양하는 것을 목표로 했습니다.

해결

XML 기반 MyBatis Mapper를 통해 복잡한 통계 쿼리를 관리하고, DB 트리거를 활용해 데이터 무결성을 서버와 DB 양단에서 확보했습니다.

백엔드 핵심

  • MyBatis 동적 SQL을 활용한 다중 조건 필터링
  • Thymeleaf(EL)를 이용한 서버 사이드 데이터 바인딩
  • MVC 패턴 준수 및 계층별(Controller-Service-Mapper) 역할 분리

사용 기술

  • Java 17, Spring Boot, Maven
  • MyBatis, MariaDB
  • Thymeleaf (Standard EL)

프로젝트 개요

실무에서 여전히 높은 비중을 차지하는 MyBatis와 Spring Boot 조합을 선택하여, SQL 가독성을 높이고 복잡한 비즈니스 로직을 안정적으로 처리하는 가계부 서비스입니다.

백엔드 설계 주안점

  • MyBatis XML 방식을 통한 SQL과 Java 코드의 완전 분리
  • Thymeleaf Standard Expression(EL)을 활용한 동적 화면 렌더링
  • Lombok 라이브러리 도입을 통한 보일러플레이트 코드 최소화

데이터베이스 전략

  • MariaDB의 Trigger와 Procedure를 활용한 데이터 정합성 보장
  • 사용자별 고유 키(User No) 기반의 철저한 데이터 격리 및 인덱싱

주요 기술 구현

MyBatis 동적 쿼리

<if>, <choose> 태그를 활용해 날짜, 카테고리, 결제수단 등 다양한 조건의 가변적 검색 로직 구현

Thymeleaf 데이터 바인딩

Controller에서 전달된 Model 데이터를 ${...}, *{...} 등 EL 식을 사용하여 화면에 동적으로 렌더링

DB 트리거 기반 정합성

카테고리 계층 구조 생성 시 BEFORE INSERT 트리거를 통해 부모-자식 간의 고유 키 자동 생성 및 검증

RESTful API 설계

Account, Category 등 도메인별 자원을 명확한 URL 구조와 HTTP Method로 관리

담당 역할 & 기여

프레임워크의 동작 원리를 이해하고, 실제 현업에서 사용하는 배포 및 데이터 관리 방식을 경험하는 데 집중했습니다.

  • Spring Boot & MyBatis 연동: DataSource 설정부터 Mapper 인터페이스-XML 간의 맵핑 구조 직접 구축
  • Service Layer 추상화: 비즈니스 로직의 트랜잭션 단위 관리 및 Controller와의 의존성 주입(DI) 처리
  • 통계 쿼리 최적화: MyBatis resultMap을 활용하여 1:N 관계를 매핑
  • 클라우드 서버 운영: OCI(Oracle Cloud) 환경에서 Linux Shell 스크립트를 작성하여 JAR 파일 배포 및 로그 관리 프로세스 수립
기술적 고민 왜 MyBatis와 XML 방식을 선택했는가?

최근 JPA 사용이 늘고 있으나, 가계부와 같이 복잡한 조인(Join)과 집계(Aggregation)가 빈번한 도메인에서는 직접적인 SQL 제어권이 중요하다고 판단했습니다.

선택의 이유

  • SQL 가시성: XML 파일에 SQL을 모아 관리함으로써 복잡한 통계 쿼리의 튜닝과 수정이 용이합니다.
  • 기본기 강화: 추상화된 프레임워크 뒤에서 일어나는 실제 쿼리의 흐름을 명확히 파악하고자 했습니다.

적용 결과

  • 가계부 내역 필터링 및 대시보드 요약 쿼리에서 발생하는 다중 JOIN 성능을 직접 제어할 수 있었습니다.
  • Thymeleaf의 EL 식과 결합하여 서버에서 가공된 데이터를 가장 직관적인 형태로 뷰에 전달했습니다.

기술 스택

  • Language: Java 17
  • Framework: Spring Boot 3.x
  • Persistence: MyBatis (XML Mapper)
  • Template Engine: Thymeleaf (EL, Layout)
  • Database: MariaDB
  • Infra: Oracle Cloud (OCI), Linux

주요 모듈

Spring MVC MyBatis Dynamic SQL Thymeleaf Expression Language Transaction Management Maven Build Lombok MariaDB Trigger
DB 설계 포인트 MyBatis 활용 극대화를 위한 스케마 설계
  • 계층형 카테고리: parent_category_no 관계를 설정하고, MyBatis의 collection 태그를 사용해 트리 구조의 데이터를 한 번의 쿼리로 매핑할 수 있도록 설계했습니다.
  • 무결성 보장: 트리거를 통해 카테고리명 중복 방지 및 유니크 키 조합 관리를 수행하여 DB 수준의 방어막을 구축했습니다.
  • 확장성: 향후 Spring Security 도입을 고려하여 users 테이블의 비밀번호 필드 및 상태 플래그를 미리 설계에 반영했습니다.