[기술 노트 / WingITs] Spring Boot MVC 아키텍처와 백엔드 구조 설계

Rose·2025년 6월 17일

기술 노트

목록 보기
1/1

📌 이 글은 WingITs의 기술 구조 정리입니다. 이 프로젝트가 어떻게 시작되었는지 궁금하시다면
👉 개발일지 WingITs #1~#6

프로젝트 개요

제가 개발한 노트북 관리 시스템 WingITs는 Spring Boot 기반의 MVC 아키텍처로 설계되었습니다.

  • Controller가 사용자 요청을 받고,
  • Service에서 비즈니스 로직을 처리하며,
  • Repository (JPA 기반)를 통해 MySQL과 연동됩니다.

프론트엔드는 Thymeleaf를 사용하여 렌더링되며, 사용자 역할에 따라 학생관리자 기능을 명확하게 분리하였습니다.

인증과 보안은 Spring Security를 기반으로 구현했고, Google/Kakao OAuth2 로그인도 지원합니다. 특히 관리자 계정은 승인 절차를 거쳐야 로그인할 수 있도록 설정하여 보안을 강화했습니다.

운영 환경은 Docker 기반으로 구성되어 있으며, 개발 초기에는 H2 DB를 사용하다가 배포 단계에서 MySQL로 전환하였습니다. 또한 초기 데이터 세팅을 위해 Excel 업로드 기능도 구현했습니다 (Apache POI).


프레임워크 및 라이브러리별 역할 정리

분류사용 기술목적 / 기능
백엔드 프레임워크Spring Boot전체 애플리케이션 구성 (MVC 구조 포함)
템플릿 엔진Thymeleaf서버사이드 렌더링 기반 HTML 화면 구성
인증 / 보안Spring Security로그인, 로그아웃, 권한 제어 (학생 / 관리자)
소셜 로그인Spring Security OAuth2Google/Kakao 계정 연동
비밀번호 암호화BCrypt비밀번호 해시 처리
DB 연동Spring Data JPAEntity 기반 CRUD 처리
ORM 구현체HibernateSQL 없이 객체 지향적으로 DB 처리
운영 DBMySQL실 서비스 운영용 RDBMS
개발용 DBH2개발/테스트용 가벼운 DB
Excel 업로드Apache POI초기 데이터 입력용 .xlsx 처리
배포 환경DockerMySQL 컨테이너 실행, 환경 일관성 확보
글로벌 데이터 처리@ControllerAdvice로그인 사용자 정보 전역 전달 (Thymeleaf)

각 기술을 선택한 이유

Spring Boot

  • spring-boot-starter-web 하나만 추가해도 필요한 웹 기능이 자동 설정됨
  • 복잡한 설정 없이 빠르게 개발 시작 가능
  • 내장 톰캣 서버 덕분에 별도 WAS 설정 없이 실행 가능 → 개발 생산성 ↑

Thymeleaf

  • Spring MVC와의 자연스러운 통합 덕분에 별도 설정 없이 사용 가능
  • 컨트롤러에서 전달한 데이터를 템플릿에서 직관적으로 활용 가능
  • 서버사이드 렌더링에 적합한 직관적 문법

Spring Security

  • Spring 생태계에 최적화된 보안 프레임워크
  • 인증/인가 설정 및 커스터마이징이 유연함
  • 별도 연동 없이도 강력한 보안을 쉽게 구현 가능

OAuth2

  • Google, Kakao 등 외부 서비스와 손쉽게 연동 가능
  • 사용자 비밀번호를 직접 다루지 않아 보안상 유리
  • 정립된 인증 플로우 덕분에 구현이 간편하고 유지보수도 쉬움

BCrypt

  • 솔트 자동 추가, 키 스트레칭 등 보안성이 뛰어난 해시 알고리즘
  • Spring Security와의 연동이 자연스러워 쉽게 적용 가능
  • 널리 사용되는 방식으로 신뢰성과 적용 편의성이 높음

Spring Data JPA + Hibernate

  • 객체지향적으로 DB를 다룰 수 있어 코드가 직관적이고 재사용성 높음
  • SQL을 직접 작성하지 않아도 되므로 반복적인 CRUD 로직이 줄어듦
  • Repository 인터페이스만으로 기본 CRUD 자동 처리 가능

객체지향적으로 DB를 다룰 수 있다?
: 데이터베이스의 테이블을 자바 객체로 매핑해서, 마치 자바 객체를 다루듯 데이터를 조작할 수 있다는 의미. 즉, 개발자는 SQL쿼리를 직접 작성하는 수고를 덜고, 자바의 클래스를 통해 데이터베이스 레코드를 다룰 수 있음.
👉 코드가 직관적, 재사용성 증가

반복적인 CRUD 로직을 줄일 수 있다?
: 기본적인 데이터 조작 작업들(ex. 저장, 조회, 수정, 삭제 등)이 메서드 호출만으로 가능해지기 때문에 반복적인 코드를 줄이고 생산성을 높일 수 있음.


MySQL & H2

  • 개발 초기에는 H2로 빠르게 작업
  • 운영 환경에서는 안정적인 MySQL을 사용해 데이터 영속성과 확장성을 확보

Apache POI

  • .xlsx 엑셀 데이터를 Java에서 쉽게 처리 가능
  • 초기 사용자/노트북 등록 등 관리자 기능 구현에 활용

Docker

  • MySQL을 Docker로 컨테이너화해 개발/운영 환경을 통일
  • 환경 차이로 인한 문제 최소화
  • 배포 자동화 및 협업에도 유리

마무리하며

이처럼 WingITs 프로젝트는 Spring Boot를 중심으로 보안, 인증, 데이터 연동, 배포 등 실제 서비스를 운영하기 위한 필수 요소들을 직접 설계하고 구현한 경험이 집약된 시스템입니다.

이후 포스트에서는 아래 주제들을 다룰 예정입니다:

  • Spring Security + OAuth2 로그인 처리 흐름
  • ControllerAdvice를 활용한 사용자 정보 처리
  • JPA 연관관계 매핑 설계 및 이슈
  • Docker-Compose로 구성한 로컬 개발 환경

아키텍처를 설계할 때 이 글이 도움이 되었으면 좋겠습니다. 🙌

profile
개발자를 꿈꾸며, 하루하루 쌓아가는 로제의 지식 아카이브입니다.

0개의 댓글