성장일기

내가 보려고 정리하는 공부기록

토이프로젝트/1. Ride Together HYU - BE

[프로젝트/BE/SpringBoot] 0. 시작 전 기초 정리 (2) - DTO, DAO, TDD

와나나나 2024. 3. 29. 09:25
728x90

지난 게시글에 이어 오늘도 정리를 해보려고 한다.

 

지난 게시글 - @NoArgsConstructor, @AllArgsConstructor, @Data, @Builder

https://wanna-developer02.tistory.com/98

 

[프로젝트/BE/SpringBoot] 0. 시작 전 기초 정리 (1) - @NoArgsContructor, @Data, @Builder

스프링 공부를 시작한지 얼마 되지 않았지만, 좋은 기회로 토이프로젝트에 서버개발자로 참여하게 되었다! 스프링부트를 완전 조금씩 찍먹해보기만 한 지금의 나는 코드를 보면서 모르는 애노

wanna-developer02.tistory.com

 

오늘의 목차는 아래와 같다

  1. DTO, DAO, VO
  2. TDD
  3. (숙제) 매핑테이블을 사용하는 이유

1. DTO, DAO, VO

원래 DTO와 DAO 만 정리하려 했는데 조사하다보니 VO도 관련있는 거 같아 함께 정리하려고 한다.

이 단어들은 객체가 하는 역할에 따른 구분이라고 생각하면 될 거 같다. 하나씩 정리해보자.

 

 ✅DTO (Data Transfer Object)

DTO는 데이터 전달만을 위한 객체이다. 그래서 별다른 로직 없이 Getter와 Setter 메소드만 포함한다. 특징을 정리하면 아래와 같다.

 

  • 로직을 가지지 않는 순수한 데이터 객체임
  • 주로 View와 Controller 사이에서 활용함
  • getter / setter외 아무런 로직을 가지지 않음
@Getter
@Setter
public class Member {

	private String username;
    private int age;
    private String addr;
    
}

 

 

 ✅DAO (Data Access Object)

DAO는 DB에 접근하는 역할을 하는 객체이다. DB에 접근하기 위한 로직을 분리하기 위해 사용한다고 한다. 특징을 아래와 같다.

 

  • 서비스 모델 부분과 데이터베이스를 연결하는 역할을 함
  • 데이터의 CRUD (CREATE, READ, UPDATEM DELETE) 작업을 시행함

도메인 로직으로부터 비즈니스 로직을 분리해 DB관련 매커니즘을 숨기기 위해 사용한다.

 

📌  CRUD in DB

이름 역할 SQL문
CREATE 생성 INSERT
READ 조회 SELECT
UPDATE 수정 UPDATE
DELETE 삭제 DELETE

 

 

 ✅VO (Value Object)

VO는 값 자체를 표현하는 객체이다. 이는 수정할 수 없고 읽는 것만 가능하다! 두 객체의 필드값이 모두 같으면 같은객체이다.

 

  • getter() 메소드를 포함하며, 다른 비즈니스 로직도 포함 가능함
  • setter()은 가지지 않음!
  • 불변클래스를 만들어 사용함

 


2. TDD

이번 프로젝트를 TDD로 개발한다고 하여 찾아보았다!

TDD는 Test-Driven Development의 약자로 선 테스트 후 개발하는 방식의 프로그래밍 방법이다.

 

즉, 자동화 된 테스트 코드를 작성한 후, 테스트를 통과하기 위한 코드를 작성하는 것이다.

 

 

✅TDD 개발 방법

  1. 테스트 케이스 작성
    • 만들고 싶은 기능을 점검할 테스트 코드 작성
    • 기능코드가 없어 당연히 테스트는 실패로 나옴
  2. 테스트 케이스를 통과하는 코드 작성
    • 테스트 코드를 만족시킬 수 있는 기능 구현
    • 테스트 통과를 최우선으로 생각하며 단위 테스트를 통과할 수 있을 정도의 최소한의 코드만 작성
  3. 작성한 코드 리팩토링
    • 기능의 성능 향상, 재사용성 용이, 가독성이 좋은 코드로 기능 코드를 개선
    • 테스트 코드를 통해 다시 기능 코드를 점검
    • 기능 테스트가 완전해질 때까지 2, 3의 과정을 반복

 

TDD 개발을 하면 객체지향적 코드를 개발하기 좋아지고, 설계 수정 시간이 단축된다고 한다!

 


3. 매핑테이블을 사용하는 이유

이번 프로젝트를 같이 하는 선배와 ERD를 설계하고 있었는데, 그분께서 매핑테이블이라는 것을 별도로 만드셨다. 이유를 공부한 적이 있었던 거 같지만 까먹어서 .. ! 정리하려고 한다.

 

데이터베이스에서 테이블끼리의 관계는 세 가지 종류가 있다.

  • 1 : 1 관계
  • n : 1 관계
  • n : m 관계

1 : 1 과 n : 1 은 굳이 매핑하지 않아도 primary키와 foreign키로 연결해줄 수 있지만, 다대다 관계일 땐 매핑할 수 없다. 

이때 둘 사이에 매핑테이블을 넣어 다대일 관계를 만들어주어 연결하는 것이다.

 

데이터베이스와 관련된 자세한 내용은 따로 업로드 할 예정이다. 아래 링크는 잘 정리되어있는 거 같아 나중에 볼 예정..

https://hsb422.tistory.com/entry/DB-%EC%84%A4%EA%B3%84-PART%EC%A0%95%EA%B7%9C%ED%99%94

 

DB 설계 PART.정규화

서론 ※ 이 포스트는 다음 강의의 학습이 목표임을 밝힙니다. https://www.youtube.com/playlist?list=PL9hiYwOHVUQduJN7Pf_kOR8htpJU7K1H8 2020 데이터베이스 www.youtube.com 본론 정규화란 ERD에서 중복 요소를 찾아 제거

hsb422.tistory.com