최종 프로젝트 - Backend 전체 구조

박지혜·2025년 5월 6일

IDE : IntelliJ IDEA
Git : GitHub Desktop
프론트 : React (Vite)
백엔드 : Java + Spring Boot + Spring Security
DB : PostgreSQL
인증 : Session + Redis
API 통신 : Axios (withCredentials: true)
CORS 설정 : Spring WebConfig에서 처리

Back-end 디렉토리 구조

com.guardians
├─ config
│   ├─ SecurityConfig.java → Spring Security 설정
│   ├─ CorsConfig.java → CORS, 정적 자원 설정
│   └─ RedisConfig.java → Redis 세션 설정
├─ controller
│   ├─ UserController.java → 로그인, 회원가입 API
│   └─ BoardController.java → 게시판 API
├─ domain
│   ├─ user.entity.User.java → 유저 Entity
│   ├─ user.repository.UserRepository.java → 유저 Repository
│   └─ board.* → 게시판 Entity, Repository
├─ dto
│   ├─ user.req.LoginRequest.java → 로그인 요청 DTO
│   ├─ user.res.UserResponse.java → 유저 응답 DTO
│   └─ board.* → 게시판 DTO
├─ service
│   ├─ auth.AuthService.java → 로그인, 회원가입 로직
│   └─ board.BoardService.java → 게시판 로직

※Spring Security : 스프링에서 제공하는 보안 라이브러리

  • 인증(Authentication) → 로그인, 권한 확인
  • 인가(Authorization) → 특정 사용자만 특정 API 사용 가능하도록 제한
  • 비밀번호 암호화
  • CSRF, CORS, 세션 관리, JWT 처리 등 보안 관련 전반

※CORS : 서로 다른 출처(도메인,프로토콜,포트)에 있는 웹 페이지나 서버가 서로의 자원에 접근할 수 있도록 허용하는 보안 메커니즘

  1. Spring Boot 쓰는 이유 : JAVA로 빠르게 REST API를 만들수 있게 해줌, 복잡한 XML설정을 YAML파일로 제어

  2. Spring Security 쓰는 이유 : 복잡한 보안로직을 직접 구현할필요 X, 최신보안패턴(JWT, Session, 비밀번호 암호화 등)이 들어있음

  3. Redis 쓰는 이유 : DB에 로그인 정보를 직접 넣는것보다 메모리에 저장하는 방식이기 때문에 속도와 확장성을 높일 수 있다. 또한 서버를 여러대 늘리더라도 세션 동기화 가능

  4. JPA 쓰는 이유 : SQL을 직접 쓰지 않고도 JAVA 객체로 DB 접근가능
    (단점 : LAZY loading 이슈)

  5. React 쓰는 이유 : 컴포넌트 기반이라 유지보수, 재사용성이 용이함

  6. Vite 쓰는 이유 : 개발 서버 속도가 굉장히 빠름, 코드 분할, 캐싱이 최적화 되어있음

0개의 댓글