
인덕대학교 A&I 동아리를 하며 스터디 한 것을 바탕으로 작성하였습니다.
데이터베이스는 여러 사람에 의해 공유되어 사용될 목적으로
통합하여 관리되는 데이터들의 집합이다.
어플리케이션 레이어에서 로직에 의해서 생성한 특정 변수를 저장하고
지속적으로 참조하는 경우, 어플리케이션이 종료됨에 따라 값이 전부 사라지게 된다.
이를 영구적으로 저장하기 위해서는데이터베이스가 필요하게 된다.
그 외에도 클라이언트가 특수한 정보를 저장할 경우
서버에 저장하게 되면 다른 클라이언트들도 모두 참조할 수 있게 된다.
Spring Boot와 같은 백 엔드(Back-end)에서는
MySQL을 비롯한 MARIA DB, PostgreSQL, MongoDB, Amazon RDS 등등
여러가지 데이터 베이스가 있다.
그래서 여기서는 Spring Boot에서
MySQL을 알아보려고 한다.
그 전에 데이터를 안전하게 전송하기 위해DAO와DTO에 대해 알아보려고 한다.
1. DAO는 Data Access Object의 약자로,
DB의 데이터에 접근하기 위한 객체를 가르킨다.DB에 접근하기 위한 로직을 분리하기 위해서 사용되며,
직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조직할 수 있는 기능을 수행한다.2. DTO는 Data Transfer Object의 약자로,
계층 간 데이터 교환을 위한 객체를 가르킨다.DTO는 로직을 가지지 않는 순수한 데이터 객체이며,
getter,setter메소드만 가진 객체 클래스이다.
DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용한다.3. VO는 Value Object의 약자로, 오직 읽기만 가능한 (Read-Only)의 속성을 갖는다.
단순한 값 타입을 표현하기 위하여 불변 클래스(Read-Only)를 만들어서 사용하며,
getter기능 만을 수행한다.
그렇다면 DTO와 VO의 Getter와 Setter가 궁금할 것이다.
Getter와 Setter는 객체 지향 프로그래밍의 일종의 메서드 라고 생각하면 편하다.1. Getter
Getter는 객체의 속성(Propety)값을 반환하는 메서드이며,2. Setter
Setter는 객체의 속성 값을 설정, 변경하는 메서드이다.
두 방식을 결과적으로 목표하고자 하는 바가 같고 결과값이 같게 보일 수도 있다.
그런데 굳이 번거롭게사용하는 이유는 무엇일까?
getter,setter는 내부 속성에 직접 접근하지 않아 정보 은닉을 가능하게 해주어
보안을 강화할 수 있고, 코드의 안정성과 유지보수성을 높일 수 있는 장점이 있다.
또한 옳지않은 값을 넣으려고 할 때. 이를 미리 방지할 수 있다.

[출처] https://plo-developdiary.tistory.com/62
그렇다면 데이터베이스를 사용하기 위해서 Spring boot의 데이터 흐름도를 알 필요가 있다.
그 앞에서 다루지 않은 Service와 repository, entity의 개념을 알아보자.1. Service
Service는 엔드포인트의 실질적인 비즈니스 로직으로
실제로 Api를 전달받은 Controller는 Service에 데이터를 전달하고,
Service가 완료하여 반환한 값을 되돌려 받아 Client에게 전송한다.2. Repository
Repository는 데이터베이스에 접근하기 위한 메소드 형식을 정의하는 인터페이스이다.
세부적으로 들어가면CrudRepository와JpaRepository가 존재한다.
간단히 설명하면
CrudRepository: Crud 기능을 제공하는 인터페이스
JpaRepository: Crud와 페이징 및 정렬이 제공하는 모든 기능을 쓸 수 있고
추가적으로 JPA에 특화된 메서드를 제공한다.3. Entity
Entity는 데이터베이스에 저장하게 되는 데이터의 모델링이다.
데이터베이스를 사용하기 위해 Spring Boot의 데이터 흐름도에 따른 용어들을 정리해 보았다.
이런 기본적인 용어들을 잘 알아두자!