요구사항
- validation을 고려한 회원가입 (토큰/세션 중 택 1), 로그인
- 회원 수정 및 삭제
- 비밀번호 저장 방법?
피드백
비즈니스 로직 분리
Controller의 비즈니스 로직을 Service로 옮기자
BO 객체나 Service 객체를 만들어서, 역할의 분리를 수행하자
- AuthController의 authenticateUser, registerUser
- MemberController의 updateUser, deleteUser
Service/UserService에 service 메서드 생성
Spring Bean 관리 잘하자
AuthController
CorsOrigin
@RestController
@RequiredArgsConstructor
@CrossOrigin(origins = "*", maxAge = 3600)
public class AuthController { ... }
CORS origin * 설정
- 위험할 수도 있음
- XSS 공격을 방어하는 로직이라서 실제 Origin이 어디인지 판단하고 넣는 것을 추천
- 토이 플젝 수준이면 그냥 아예 이 어노테이션을 빼는게 나을수도 있음.
Model
@ManyToMany는 지양하자
- 실제 데이터베이스에는 N:1 테이블 하나와 1:M 테이블 하나로 분리가 되기는 함
- 실제 테이블과 객체가 매칭이 되지 않으므로 쿼리의 결과를 예측할 수 없다는 단점
솔루션 1
UserRole 엔티티 생성 > 테이블 생성
솔루션 2
User 엔티티 내 boolean 필드로 role 정의
signupRequest 객체를 받아서, User로 변환하는 메서드
만들자
UserMapper를 활용함
@Autowired을 통한 주입은 지양하자
- @RequiredArgsConstructor 사용
doFilterInternal 에서 예외가 발생하면, return; 을 삽입해서 다음 필터로 넘어가지 않도록 하는게 일반적
상수 대신 final static int 사용하자
private final static int = #;
Username 과 email 을 기준으로 DB에 인덱스를 생성하자
public interface UserRepository extends JpaRepository<User, Long>
불변객체의 setter 생성 지양하자
@Data
는 @ToString
& @Getter
로 변경