패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기

비기너반 강의 복습 6 | 백엔드 계층 구조: Controller, Service, DAO | 보안(객체 분리): DTO(프론트)/Entity(DB)

Tech_JINI 2025. 2. 10. 11:39

1. 프론트엔드에서 백엔드, 그리고 데이터베이스까지의 흐름

사용자가 웹사이트에서 정보를 입력하고 저장하기까지 여러 단계를 거칩니다. 이를 간략히 정리하면 다음과 같습니다.

 

프론트엔드(JS) → 객체(JSON) → 백엔드(Java) → 데이터베이스(DB) → 백엔드(Java) → 사용자

 

이 과정에서 JSON(JavaScript Object Notation) 이 중요한 역할을 합니다.

JSON은 프론트엔드에서 생성한 데이터를 Java 객체로 변환하는데 사용되며, key-value 형식으로 저장됩니다.

 

 

2. 회원가입 과정

회원가입을 예로 들어 데이터를 처리하는 단계를 살펴보겠습니다.

1) 프론트엔드에서 데이터 입력

사용자가 이름, 폰번호, 나이, 성별, 비밀번호를 입력하면, 프론트엔드는 이를 JSON 형태로 묶어 백엔드로 전송합니다.

2) 백엔드에서 데이터 처리

백엔드는 받은 데이터를 다음과 같은 과정으로 처리합니다.

  • 데이터 검증 (올바른 형식인지 체크)
  • 비밀번호 암호화
  • 데이터베이스에 저장

이 과정은 여러 클래스로 나누어 구현됩니다.

3. 자바에서의 클래스 모델링

모델링이란? 프로그램의 구조를 설계하는 과정입니다. 회원가입 시스템을 구현할 때, 각 기능을 역할에 따라 클래스로 나누어 설계합니다.

자바 백엔드 계층 구조

  1. Controller
    • 프론트엔드와 소통하는 역할을 담당합니다.
    • 데이터를 받아 Service 계층으로 전달합니다.
  2. Service
    • 비즈니스 로직을 처리하는 곳입니다.
    • 데이터 검증, 암호화, 변환 등을 수행합니다.
  3. DAO (Data Access Object)
    • 데이터베이스와 직접 소통하는 계층입니다.
    • 데이터 저장, 조회, 수정, 삭제와 관련된 기능을 담당합니다.

 

하나의 객체로 '프론트 - 자바 - 테이터베이스'를 이동을 하게 되면 데이터의 신뢰도와 보안이 낮아집니다.

따라서, 객체를 FE용과 DB용을 나눕니다.

 

FE용 객체: DTO

DB용 객체: Entity

 

4. 데이터의 신뢰도와 보안: DTO와 Entity 분리

프론트엔드에서 받은 데이터를 그대로 데이터베이스에 저장하면 보안과 데이터 신뢰도가 낮아질 수 있습니다. 이를 방지하기 위해 DTO(Data Transfer Object)Entity 를 나누어 사용합니다.

DTO와 Entity의 역할

  • DTO: 프론트엔드와 데이터를 주고받는 객체 (예: PersonDto)
  • Entity: 데이터베이스와 연동되는 객체 (예: Person)

예제 코드

// DTO 객체 (프론트엔드에서 받은 데이터)
PersonDto personDto = new PersonDto("jini", "1999");

// Service 계층에서 데이터 변환
int age = 2024 - Integer.parseInt(personDto.getBirthYear());
Person person = new Person(personDto.getName(), age);

// Entity 객체 (DB에 저장되는 데이터)
repository.save(person);

5. 데이터 정규화와 테이블 관계

데이터베이스 설계에서는 정규화(Normalization) 를 통해 테이블을 효율적으로 나눕니다.

예를 들어, 회원과 상품의 관계를 고려해보겠습니다.

회원과 주문의 관계

  • 회원과 주문은 회원번호를 통해 관계를 맺습니다.
  • 한 회원은 0개 이상의 주문을 할 수 있습니다.
  • 따라서, 관계는 1:N (One-to-Many) 입니다.

주문과 상품의 관계

  • 한 번의 주문에는 여러 개의 상품이 포함될 수 있습니다.
  • 하나의 상품은 여러 주문에서 선택될 수 있습니다.
  • 따라서, 주문과 상품의 관계는 N:M (Many-to-Many) 입니다.

이를 해결하기 위해 중간 테이블(연결 테이블) 을 사용합니다.

테이블 관계 예시

회원 (Member) 1 — N 주문 (Order) N — M 상품 (Product)

 

6. 요약

백엔드 개발에서는 데이터를 어떻게 처리하고 저장할지 설계하는 것이 매우 중요합니다.

  • DTO와 Entity를 분리하여 보안과 데이터 신뢰도를 높이고,
  • Controller, Service, DAO 계층을 나누어 유지보수성을 높이며,
  • 정규화를 통해 데이터베이스 구조를 효율적으로 관리하는 것이 중요합니다.