전에 프로젝트는 돌아가기만 하면,, 처리만 제대로 되면 뒤도 안돌아보고 다음꺼 진행시켰는데
이제 슬슬 제대로 된 코드로 공부해야만 한다.
저번 프로젝트때 제일 문제였던 서비스 코드가 생각나서 공부해보려고 한다.
이번 프로젝트에선 회원 관련 기능을 맡아 지금 회원가입 서비스를 작성해야 한다.
그럼 여기서 문제!!
1. void SignUp(User user)
2. User SignUp(SignUpDTO, signUpDTO)
뭐가 더 좋은 코드일까?
사실 전까지 1번으로 작업했다.
그냥 DB에 저장해야하잖아? -> 엔티티에 바로 접근하면 되잖아? 했다.
그렇다. 정답은 2번!!
두 가지 방법을 비교해보겠다.
먼저,
void SignUp(User user)
이 방법은 User 엔티티에 바로 접근하여 필요한 데이터를 처리할 수 있다.
그렇기에 추가적인 변환 과정 없이 User 객체를 그대로 사용할 수 있다.
하지만 유효성 검사가 어렵다.
모든 입력 데이터가 User 엔티티에 직접적으로 매핑되기 때문에, 입력값에 대한 유효성 검사를 하기 어려울 수 있다.
User 엔티티가 DTO 역할까지 수행하게 되어, 엔티티와 DTO의 역할이 혼재될 수 있다.
또 다른 단점으로는 보안!! (시큐리티까지 하는데 이걸로 보안을 망칠 수 없음)
두번째,
User SignUp(SignUpDTO signUpDTO)
이 방법은 DTO를 사용하여 입력 데이터를 전달받고, 필요한 처리를 한 후 User 엔티티로 반환하는 방식이다.
장점은
유효성 검사가 쉽고,
DTO와 엔티티의 역할이 명확하게 분리되고,
데이터를 유연하게 관리할 수 있고(필요에 따라 DTO 필드를 추가하거나 수정),
최소한에 데이터만 포함하게 되어, 불필요한 데이터가 전달되는 것을 방지할 수 있다.
단점은
DTO를 엔티티로 변환하는 작업이 필요하다.
그러나 이 작업은 대부분의 경우 장점이 더 크므로 단점으로 간주하지 않는다.
결론
DTO를 사용하여 입력 데이터를 전달 받고, 필요한 처리를 한 후 엔티티로 반환하는 방식을 사용하자.
'팀프로젝트_PetHarmony' 카테고리의 다른 글
🌈 아이디 찾기_SMS API(coolsms) (0) | 2024.08.12 |
---|---|
Spring Security 기록 (2) (0) | 2024.08.11 |
🌈 CORS -> CSRF -> JWT (0) | 2024.08.09 |
Spring Security 기록 (1) (0) | 2024.08.09 |
🌈 Spring Security - 버전 (0) | 2024.08.09 |