[내일배움캠프] CH 3 일정 관리 앱 Develop 리팩토링
이번 글에서는 Spring Comment Calendar 프로젝트를 통해 RESTful 애플리케이션의 개발 및 리팩토링 과정을 공유하고자 합니다. 이 프로젝트는 Spring Boot와 JWT 기반 인증을 활용하여 사용자별 일정과 댓글을 관리하는 애플리케이션입니다. 특히 JWT 토큰을 쿠키에 저장해 보안성과 접근성을 높였으며, 각 기능을 모듈화하여 유지 보수성을 강화했습니다.
주요 기능
- 회원가입 및 로그인 기능 - 사용자 가입 후 JWT 인증을 통해 로그인 및 일정 관리를 가능하게 합니다.
- JWT 기반 인증 및 권한 관리 - 인증 토큰을 쿠키에 저장하고 사용자의 역할(Role)에 따라 일정 및 댓글 접근 권한을 부여합니다.
- 일정 및 댓글 관리 - 사용자가 직접 일정을 등록하고, 댓글 기능을 통해 커뮤니케이션이 가능합니다.
프로젝트 구조
프로젝트는 주제별 도메인 구조로 설계하여 유지 보수성을 높였습니다. 코드 구성은 Comment
, Member
, Schedule
도메인별로 나누었고, 각각의 도메인에는 Controller
, DTO
, Entity
, Repository
, Service
가 존재합니다. 예를 들어, Comment
도메인은 댓글 기능을 담당하며, 댓글 관련 비즈니스 로직은 comment.service
패키지 내에 정의됩니다.
src
└── main
└── java
└── com
└── sparta
└── springcommentcalendar
├── domain
│ ├── comment
│ ├── member
│ └── schedule
├── exception
└── util
설정 파일 및 보안 설정
application.properties
MySQL과 JWT 설정은 application.properties
파일에서 관리됩니다. 여기에는 데이터베이스 연결 정보와 JWT 비밀 키가 포함됩니다. JWT 설정을 통해 토큰의 유효 기간을 지정하고, 토큰이 만료된 경우의 처리 로직을 구현할 수 있습니다.
# JWT 설정
jwt.secret=your_secret_key
jwt.expiration=3600000
보안 및 권한 관리
Spring Security를 통해 사용자의 권한을 ROLE_USER
와 ROLE_ADMIN
으로 구분했습니다. JWT의 클레임에 역할 정보를 포함시켜 각 API 접근에 대해 권한을 검사합니다. 인증된 사용자의 경우 JWT를 HttpOnly
속성의 쿠키로 저장해, JavaScript 접근을 제한하고 보안성을 높였습니다.
API 문서화
엔드포인트 | 메서드 | 설명 |
---|---|---|
/api/auth/signup |
POST |
사용자 회원가입 |
/api/auth/login |
POST |
로그인 및 JWT 발급 |
/api/schedule |
POST |
일정 생성 (로그인 필요) |
/api/comment |
POST |
댓글 작성 (로그인 필요) |
예를 들어, 회원가입 요청 시 다음 JSON을 사용합니다:
{
"username": "your_username",
"email": "your_email@example.com",
"password": "your_password"
}
성공적으로 요청이 처리되면 "회원가입이 완료되었습니다. 로그인하세요."
라는 응답 메시지를 받습니다.
JWT 인증 및 보안
JWT 토큰은 사용자의 로그인 상태를 유지하는 중요한 수단으로, 클라이언트에서 서버로의 인증 요청 시 JWT가 포함된 쿠키를 전송하여 사용자를 검증합니다. 로그인 후 생성된 JWT는 일정 기간 유효하며, JwtProvider
클래스에서 토큰의 생성 및 검증 로직을 수행합니다.
결론 및 다음 단계
이번 프로젝트는 스프링 보안과 JWT 인증의 통합을 통해 일정 관리 애플리케이션의 보안성을 강화하고, 사용자 경험을 개선하는 데 중점을 두었습니다. 앞으로는 역할별 권한을 더 세분화하거나, 토큰 갱신 로직을 추가하여 인증 시스템의 완성도를 높일 계획입니다.
이 글이 Spring Boot와 JWT를 통한 인증과 권한 관리에 관심 있는 분들께 도움이 되기를 바랍니다.
'TIL > 스파르타 TIL' 카테고리의 다른 글
[내일배움캠프] CH 3 일정 관리 앱 Develop (0) | 2024.10.13 |
---|---|
Spring의 IoC(제어의 역전)와 DI(의존성 주입) 이해하기 (0) | 2024.10.08 |
[내일배움캠프] Spring 1차 숙제 (튜터님께 받은 피드백) (0) | 2024.10.08 |
[내일배움캠프] 본캠프 TIL Spring 입문(3) (0) | 2024.09.28 |
[내일배움캠프] 본캠프 TIL Spring 입문(2) (0) | 2024.09.28 |