이번 글에서는 안드로이드에서 서버와 데이터베이스를 연동하는 방법에 대하여 작성해보겠습니다.
우선, 저는 Front-end에서는 android studio를 사용하고 Back-end에서는 InteliJ에서 spring boot를,
마지막으로 DB의 경우 Maria DB를 사용하였습니다.
현재는 이러한 형식으로 진행 중이며, 추후에 application을 배포할 때는 AWS를 이용할 생각입니다.
이제 본격적으로 안드로이드에서 서버와 db연동을 위한 spring boot 설계 구조에 대해 이야기 해보겠습니다.
아래에 나올 내용 및 사진은 어라운드 허브 슈튜디오( https://youtu.be/4Pvd0KrTfvE ) 를 참조하였습니다.
1. Spring Boot 서비스 구조
1) Client
front-end part로 android studio에서 구현합니다.
2) DTO (Data Transfer Object)
DTO는 VO(Value Object)로도 불립니다. 이는 계층간 데이터 교환을 위한 객체를 의미합니다.
VO의 경우 Read Only라는 성격을 갖고 있습니다.
DTO는 back-end part에서 사용하기 위한 변수라고 생각하시면 편할 것 같습니다.
3) Controller
컨트롤러의 경우 spring boot project에서 구현하며 CRUD method를 사용하는 부분입니다.
controller에 대한 자세한 내용은 이전 글인 MVC패턴을 참고하시면 도움이 되실 것 같습니다.
4) Service
위의 그림에서 service를 보시면 service와 serviceImpl이 있습니다.
이에 대해 설명하자면 service의 경우 interface로 작성을 하여 스케치를 하고
serviceImpl에서는 interface의 기능을 구현한다고 생각하시면 편할 것 같습니다.
주로 service에서는 controller로 부터 받아온 DTO를 entity로 바꾸어 전달하는 역할을 합니다.
5) Entity
Entity는 데이터베이스에 쓰일 컬럼과 여러 entity간의 연관관계를 정의합니다.
데이터베이스의 테이블을 하나의 entity라고 생각해도 무방합니다.
entity의 경우 실제 데이터베이스의 테이블과 1:1로 매핑됩니다.
이 클래스의 필드는 각 테이블 내부의 컬럼을 의미합니다.
여기까지 오셨다면 왜 dto와 entity를 구분을 해야하는지? 라는 의구심이 생기실 수 있습니다.
그 이유는 dto는 개념상 front-end와 관계를 갖고 있고 entity의 경우 db와 관계를 갖고 있습니다.
여기서 dto 혹은 entity 하나만 쓰게 된다면 불필요한 정보의 전달 혹은 보안이 필요한 정보의 유출이 생길 수 있습니다.
이를 방지하기 위하여 dto와 entity의 역할을 분리하게 된 것입니다.
6) DataHandler
주어진 그림에는 없는 부분입니다. 허나 저는 service에서 DAO로 값을 전달하는 과정을 위해
추가적으로 DataHandler를 구현하였습니다.
DataHandler의 경우 dto로 받아온 값들을 entity로 생성을 해주고
DAO에서 entity를 인지하는 것을 도와주는 형식으로 코드를 생성하였습니다.
해당 과정을 수행하는 모습은 추후에 spring boot 실습편에서 자세히 다뤄보도록 하겠습니다.
7) DAO (Data Access Object)
데이터베이스에 직접적으로 접근하는 객체를 의미합니다. (Persistance Layer)
DAO의 경우 service가 DB에 연결할 수 있게 해주는 역할을 갖고 있습니다.
DAO는 DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담합니다.
DAO의 경우 역시 위 그림을 보시면 DAO와 DAOImpl로 구성되어 있는데
service의 case와 마찬가지로 DAO file에서는 interface로 만들어 method를 선언하고
DAOImpl에서는 method가 선언되어 있는 interface를 실체화하는 작업을 수행합니다.
DAO 파일을 구현하는데 있어서 실질적으로 interface와 impl에서 필요한 entity값을 반환하는 method를 만들었습니다.
그리고 이러한 entity값을 db에 저장하기 위해서 controller에서는 DAO에서 구성한 method를 필요에 맞게 사용하였습니다.
8) Repository
위의 그림을 보시면 DAO아래에 (Repository) 라고 써있는 부분을 확인하실 수 있습니다.
Repository란 entity에 의해 생성된 데이터베이스에 접근하는 method를 사용하기 위한 interface입니다.
Repository의 경우 service와 DB를 연결하는 고리의 역할을 수행합니다.
Repository에서는 JPA를 이용하여 데이터베이스에 적용하고자 하는 CRUD를 정의하는 영역입니다.
9) DB
DB의 경우 말 그대로 DataBase입니다. 저는 DB로 MariaDB를 사용하였고 client가 원하는 요청을 controller에서 인지하여 db로 부터 데이터를 읽어오거나 저장하는 등 CRUD를 진행합니다.
2. 이 글을 마무리하며
이번 글에서는 안드로이드에서 서버를 구현하기 위한 spring boot의 구조에 대해 글을 썼습니다.
이번 글에서는 구조에 대한 간단한 개념을 정리하는 시간이었지만 추후에 spring boot실습편에서 제가 만든 예시 코드들과 함께 실습하는 글을 작성하겠습니다.
'Spring이론' 카테고리의 다른 글
DAO생성해서 간단한 CRUD 구현하기 (0) | 2023.03.28 |
---|---|
Spring 개념 부족을 해결하기 위해서 (0) | 2023.03.28 |
MVC 패턴 (0) | 2023.02.25 |
retrofit2 (0) | 2023.02.23 |
REST API (0) | 2023.02.21 |