Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Study] 컨트롤러 레이어와 서비스 레이어 관심 분리 #42

Open
wintiger98 opened this issue Apr 7, 2024 · 1 comment
Open
Assignees
Labels

Comments

@wintiger98
Copy link
Contributor

일반적인 애플리케이션 아키텍처에서는 컨트롤러 레이어에서 직접 엔티티(entity)를 사용하기보다는 DTO(Data Transfer Object)를 사용하여 데이터를 주고받는 것이 권장됩니다. 이는 여러 가지 이유로 인해 좋은 설계 방식으로 간주됩니다:

  • 추상화와 은닉화: 엔티티는 데이터베이스의 테이블 구조를 반영하는 객체이므로, 이를 직접 클라이언트에 노출하는 것은 데이터베이스 구조에 대한 내부 정보를 외부로 유출하는 것과 같습니다. DTO를 통해 필요한 데이터만을 선택적으로 전달함으로써, 시스템의 내부 구조에 대한 정보를 은닉할 수 있습니다.

  • 안정성: 엔티티 객체를 직접 사용하면, 클라이언트 측에서 예상치 못한 변경을 요청할 수 있고, 이는 데이터의 일관성을 해칠 수 있습니다. 반면, DTO를 사용하면 클라이언트가 요청할 수 있는 데이터의 범위를 제한할 수 있으므로, 시스템의 안정성을 높일 수 있습니다.

  • 유연성: 엔티티와 API 간의 직접적인 의존성을 제거함으로써, 엔티티의 변경이 API 스펙에 영향을 미치지 않도록 할 수 있습니다. 이는 시스템의 유연성을 향상시키고, 유지보수를 용이하게 합니다.

따라서, 컨트롤러에서는 클라이언트로부터 받은 데이터를 DTO 형태로 서비스 레이어에 전달하고, 서비스 레이어에서는 이 DTO를 엔티티로 변환하여 처리한 후, 다시 결과를 DTO로 변환하여 컨트롤러에 전달하는 방식으로 작업하는 것이 좋습니다. 이런 방식은 각 계층 간의 역할을 명확히 하고, 데이터의 안전한 처리 및 전달을 보장합니다.

제가 이전에 드린 예제에서는 엔티티를 직접 조작하는 방식으로 설명했는데, 이는 설명의 명확성을 위해 간소화한 것이었습니다. 실제로는 DTO를 사용하여 데이터를 전달하는 것이 더 적절합니다. 서비스 레이어에서 엔티티로의 변환 처리를 캡슐화하고, 컨트롤러와 클라이언트 간의 데이터 교환에는 DTO를 사용하는 방식으로 구현하는 것이 바람직합니다.

by wrtn.ai

코드 작성 중 궁금해져서 찾아봤습니다.

@wintiger98 wintiger98 self-assigned this Apr 7, 2024
@kkho9654
Copy link
Contributor

kkho9654 commented Apr 7, 2024

감사합니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: No status
Development

No branches or pull requests

2 participants