[실시간 대용량 서비스] 최종 프로젝트 발제

2026. 1. 30. 21:01·Spring/Spring 실습

📄 프로젝트 개요

본 프로젝트는 자유 주제로 진행된 최종 프로젝트로, 온라인 교육 플랫폼을 목표로 한 백엔드 서버 구현에 초점을 두었습니다.

 

JWT 기반 인증·인가 구조를 중심으로 사용자, 강의, 주문, 관리자 기능을 확장 가능한 아키텍처로 설계하고 구현했으며,

단순 기능 구현보다는 설계 의도와 구조적 일관성을 중요하게 고려했습니다.

 

🎯 프로젝트 목표

  • JWT 기반 stateless 인증/인가 구조 설계 및 구현
  • 역할(Role) 기반 접근 제어 정책 명확화 (STUDENT / LECTURER / ADMIN)
  • 도메인 규칙을 코드로 표현하는 도메인 중심 설계
  • 리뷰 및 확장을 고려한 일관된 아키텍처 구조 유지
  • 기능 추가 시 기존 구졸르 해치지 않는 설계 경험

🧱 아키텍처 개요

본 프로젝트는 4-Layer Architecture를 기반으로 구성되어 있습니다.

  • Presentation Layer
    API 요청 / 응답 처리 및 인증 진입점
  • Application Layer (Service)
    유스케이스 흐름 제어 및 트랜잭션 관리
  • Domain Layer
    엔티티 및 도메인 규칙 관리
  • Infrastructure Layer
    데이터 접근 및 외부 시스템 연동 

🔐 인증 / 인가 설계 개요

  • Access Token
    • JWT 기반
    • Stateless 구조 유지
  • Refresh Token
    • Redis 화이트리스트 방식 관리
    • 로그아웃 및 강제 만료 대응

OAuth2 로그인

  • OAuth2 인증은 서버에서 처리
  • 로그인 성공 후 JWT 발급
  • 서버 세션은 사용하지 않음

설계 원칙

  • 세션 기반 인증 미사용 (STATELESS)
  • 인증/인가 정책은 SecurityCofnig에서 선언적으로 관리
  • API 명세 기준으로 공개 / 보호 엔드포인트 분리

🧩  내가 담당한 구현 범위 (MVP v1 기준)

  • JWT 기반 인증/인가 구조 설계 및 구현
  • AccessToken / RefreshToken 발급 및 검증
  • OAuth2 로그인 이후 JWT 발급 흐름 구현
  • SecurityConfig 기반 역할(Role)별 접근 제어
  • 관리자 API 인증/인가 정책 구성
  • 전역 예외 처리 및 인증 실패 응답 일관화

🛠️ 사용 기술 스택

Backend

  • Java 17
  • Sproing Boot 3.5.9
  • Spring Security
  • JPA

Data & Infra

  • MySQL
  • Redis
    • RefreshToken 화이트리스트 관리
  • Docker / Docker Compose

기술 선택 배경 및 비교 내용은 별도 포스팅으로 정리 예정입니다. 


🔗 설계 & 고민 정리

아래의 항목들은 구현 과정에서 실제로 고민했던 주제들이며 별도 포스팅으로 정리해 연결할 예정입니다.

인증 인가 설계

  • JWT 기반 인증 구조를 선택한 이유
  • Stateless 인증과 서버 세션 미사용에 대한 판단
  • RefreshToken을 Redis 화이트리스트로 관리한 이유

OAuth2 로그인

  • OAuth2 로그인 이후 JWT 발급 흐름 설계
  • OAuth2 + JWT 조합에서 서버의 책임 범위
  • OAuth2 로그인 성공 핸들러의 역할

SecurityConfig & 권한 제어

  • SecurityConfig에서 인증/인가 정책을 선언적으로 관리한 이유
  • @PreAuthorize의 역할 분리 기준
  • 역할 기반 접근 제어 설계

아키텍쳐 & 도메인 설계

  • 4-Layer Architecture를 선택한 이유
  • 도메인 규칙을 어디까지 도메인에 둘 것인가에 대한 기준
  • Service 와 Domain의 책임 분리 고민

⏱️ 앞으로 정리할 예정인 내용

  • 테스트 코드 정리
  • 관리자 기능 확장
  • MVP v2 설정 및 설계 방향 정리
  • 프로젝트 회고 정리

'Spring > Spring 실습' 카테고리의 다른 글

[실시간 대용량 서비스] JWT 인증에서 블랙리스트로도 충분한데, 왜 화이트리스트를 선택했을까?  (0) 2026.02.06
[실시간 대용량 서비스] AccessToken / RefreshToken 분리 설계와 Redis 화이트리스트  (0) 2026.02.02
[과제 회고] K사 서버 개발하기  (0) 2026.01.14
[프로젝트 회고] 실시간 채팅 프로젝트  (0) 2025.12.31
[프로젝트] 실시간 데이터 처리 회고  (0) 2025.12.08
'Spring/Spring 실습' 카테고리의 다른 글
  • [실시간 대용량 서비스] JWT 인증에서 블랙리스트로도 충분한데, 왜 화이트리스트를 선택했을까?
  • [실시간 대용량 서비스] AccessToken / RefreshToken 분리 설계와 Redis 화이트리스트
  • [과제 회고] K사 서버 개발하기
  • [프로젝트 회고] 실시간 채팅 프로젝트
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로세스와 쓰레드
    algorithm
    BEAN
    Github
    for문
    WebSocket
    웹소켓
    thymleaf
    경합조건과 교착상태
    String.format
    SpringSecurity
    jsp
    백엔드 기초
    실시간 데이터 처리
    백엔드 기초다지기
    객체지향
    git
    Til
    HTML&CSS
    Stomp
    네트워크 기초
    객체지향프로그래밍
    Spriingboot
    Spring
    JPA
    java
    다형성
    RestTemplate
    Java 문법기초
    MVC
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[실시간 대용량 서비스] 최종 프로젝트 발제
상단으로

티스토리툴바