각 사용자의 권한을 부여하기 위해 Role과 관련된 테이블을 추가해줬습니다. 사용자(User)와 권한(Role) 간에는 다대다 관계가 있습니다. 즉, 한 사용자가 여러 개의 권한을 가질 수 있고, 한 권한도 여러 사용자에게 할당될 수 있습니다. 매핑 테이블을 만들 때는 보통 각각의 주요 테이블의 기본키(primary key)를 외래키(foreign key)로 참조하며, 이 외래키들이 결합하여 복합 기본키를 형성합니다. 여기서는 "user_role"이라는 매핑 테이블을 만들어 사용자와 권한 간의 다대다 관계를 나타낼 것입니다. user_role 테이블은 다음과 같은 구조를 가집니다. user_id: 사용자를 식별하는 외래키 role_id: 권한을 식별하는 외래키 💻 프로젝트 적용 1️⃣ mySql에 테이블..
사용자 인증 방식은 일반적으로 세션 기반 방식과 토큰 기반 방식(JWT)이 있습니다. 각 방식의 장단점이 있어 상황에 맞게 결정하여 사용하는 것이 중요합니다. 지난 팀 프로젝트의 경우에는 서버 사이드 렌더링 방식이기 때문에 세션 방식을 사용해 구현했었는데요. 이번 개인 프로젝트에서는 클라이언트 사이드 렌더링 방식으로 한 웹 페이지이기 때문에 확장성을 고려하여 토큰 기반 방식으로 구현해보려고 합니다. 한참을 공부하고 헤매이면서 구현한 과정이라 추후에 필요한 부분은 수정, 또 수정을 거쳐서 상세히 기록해보려고 합니다. 1️⃣ 라이브러리 설정 Spring Security와 JWT를 사용하기 위해 다음 라이브러리들을 추가해줍니다. build.gradle dependencies { // Spring Securit..
보안성을 위해 회원가입 시 비밀번호와 비밀번호 확인 필드의 값이 일치하는지 확인하는 과정입니다. 처음에는 아무것도 모르고 비밀번호2 라는 컬럼을 DB에 생성했더랬죠... 하지만 그럴 필요없이 DTO와 프론트단에 필드만 만들어주면 됩니다! [React] Register.js password2 필드를 추가해줍니다. {/* 비밀번호 */} 비밀번호 {/* 비밀번호 확인 */} 비밀번호 확인 UserDTO.java private String password2; 를 추가해줍니다. @JsonProperty("password2") @NotBlank(message = "비밀번호는 필수 입력 값입니다.") @Pattern(regexp = "(?=.*[a-z])(?=.*[0-9]).{8,16}$", message = "비..
UserDTO에 @Valid 사용 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validatio import import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; @NotBlank @Pattern @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Builder public class UserDTO { private Long id; @JsonProperty("userId") @NotBlank(message = "아이디는 필수 입력 값입니다.") privat..
아이디 입력 필드 옆에 아이디 중복 확인 버튼을 구현했었는데 회원가입 버튼을 누를 시 다시 한번 확인하고 resoponse 해주는 부분을 구현했습니다. ResDTO 먼저 모든 API의 Response에 대해 공통으로 감싸줄 수 있는 ResDTO를 새롭게 만들어 주었습니다. 🧐 그렇다면 ResDTO를 만드는 이유는 무엇일까요? Response에서 요청된 응답 값만 전달해주는게 아니라 결과에 대한 코드, 내용, 에러메세지 등을 같은 포맷으로 전달해주어 프론트에서 더 효율적으로 사용하게 하기 위한 목적입니다! 또한, 객체 지향적인 설계를 촉진합니다. ResDTO 객체를 사용함으로써 응답 데이터를 하나의 객체로 추상화하고, 응답 생성 및 전달에 관련된 로직을 한 곳에서 관리할 수 있게 됩니다. 서버 사이드 렌더..