[TIL] - 실전 프로젝트 - 2

장동희·2023년 4월 3일
0

TIL

목록 보기
15/16

실전 프로젝트 TIL

@NotNull vs @Column(nullable = false)?

프로젝트 시작하여 ENTITY 설계와 DTO 설계를 하면서 의문이 생겼다. DTO에서@NOTNull로 처리하는것과 ENTITY에서 @Column(nullable = false)로 처리하는것의 차이가 뭘까 고민하였고 찾은 해답은 @NotNull과 nullable은 둘 다 persist(영속)되는 시점에 되는 것은 동일하였고 nullable은 쿼리가 생성되는 시점에 예외가 발생하며 @NotNull은 예외는 동일하지만, 쿼리가 생성되지 않는다. 그래서 쿼리가 생성되는 시점에서 예외가 발생하는것보다 쿼리가 생성되지 않는것이 더 효율적이라고 생각하여 @NotNull로 dto에서 처리 하는것으로 선택하였다.

column (unique = true)

서비스단에서 로직을 처리하는데 왜 필요한것인지??라는 의문이 생겼으며 찾은 해답은 예를 들어, 회원 가입 시 이메일 주소를 입력 받는다면, 이메일 주소는 중복되면 안 되기 때문에 중복 체크를 해야 할 것이다. 이때, 데이터베이스에서 이메일 주소 컬럼에 unique 제약 조건을 걸어놓으면, 중복된 이메일 주소가 입력되는 것을 방지할 수 있다. 이것은 서비스의 안정성과 데이터의 일관성을 보장하는 데 도움이 된다. 따라서, 서비스 단에서 로직을 처리할 때 unique 제약 조건을 활용하면, 데이터베이스에서 중복된 값을 방지할 수 있으며, 데이터의 일관성과 안정성을 보장할 수 있다는 해답을 찾아 column (unique = true)을 적용하였다.

@Pattern

회원가입 기능 구현 중 오류가 발생했다.

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Pattern' validating type 'java.lang.Integer'. Check configuration for 'phoneNumber'

이 오류는 phoneNumber 타입을 int로 설정하여 나타난 오류였다.

해결 :

@Pattern 어노테이션은 문자열 타입에 대해서만 유효성 검사를 수행할 수 있다. 즉, 정규식으로 문자열의 형식을 검증할 수 있지만, 정수나 다른 타입의 값에 대해서는 사용할 수 없다. 따라서 PhoneNumber의 타입을 String으로 바꿔 문제를 해결했다.

0개의 댓글