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 : 스프링에서 제공하는 보안 라이브러리
※CORS : 서로 다른 출처(도메인,프로토콜,포트)에 있는 웹 페이지나 서버가 서로의 자원에 접근할 수 있도록 허용하는 보안 메커니즘
Spring Boot 쓰는 이유 : JAVA로 빠르게 REST API를 만들수 있게 해줌, 복잡한 XML설정을 YAML파일로 제어
Spring Security 쓰는 이유 : 복잡한 보안로직을 직접 구현할필요 X, 최신보안패턴(JWT, Session, 비밀번호 암호화 등)이 들어있음
Redis 쓰는 이유 : DB에 로그인 정보를 직접 넣는것보다 메모리에 저장하는 방식이기 때문에 속도와 확장성을 높일 수 있다. 또한 서버를 여러대 늘리더라도 세션 동기화 가능
JPA 쓰는 이유 : SQL을 직접 쓰지 않고도 JAVA 객체로 DB 접근가능
(단점 : LAZY loading 이슈)
React 쓰는 이유 : 컴포넌트 기반이라 유지보수, 재사용성이 용이함
Vite 쓰는 이유 : 개발 서버 속도가 굉장히 빠름, 코드 분할, 캐싱이 최적화 되어있음