1)Model 의 유형과 용도 이해하기

A) Model 이란?
Model이란 데이터의 구조를 프로그래밍 언어로 표현한 방식으로 일반적으로 데이터를 저장하는 개별 테이블의 구조와 맵핑 되는 프로그래밍 환경에서 데이터 구조를 표시하고 데이터를 담을수 있는 방식을 제공합니다.


B)Model의 유형
-Data Model : 데이터의 구조를 언어별 속성으로 표현하고 데이터를 저장하는것이 목적이며 일반적으로 RDBMS Table과 1:1 맵핑 됩니다.
-Domain Model :  실제 업무 기준으로 데이터 구조를 표현하며 테이블과는 구조가 다소 상이할수 있습니다.
-View Model : 뷰(화면)에서 데이터 바인딩을 위해 전문적으로 사용하는  뷰 전용 모델(MVVM패턴에서의 View전용모델인 ViewModel을 말함)
-DTO Model : Data Transfer Object 모델로 프로그래밍 계층간 대량(복합) 데이터 전송을 위해 여러 모델을  하나의 전송모델로 재구성한 모델을 말합니다.  한번의 요청에 보다 많은 데이터를 서버에서 제공하기 위한 데이터 전송 전용 모델로 필요시마다 DTO모델 구조를 정의해서 사용합니다.  


2) ORM 원리 이해하기 

A) ORM(Object Realtion Mapping)이란?
- ORM이란 DB의 물리적 테이블 과 1:1 맵핑되는 프로그램의 데이터 모델(Object)을 이용해 DB프로그램을 구현하는 방식을 말합니다.
- ORM은 객체 관계 맵핑(Object Realtion Mapping)의 줄임말로 실제 데이터가 저장되는 Database 내 특정 물리적 테이블과 동일 데이터 구조를 가진 모델(오브젝트)을 백엔드 개발언어로 정의하고 둘간의 1:1 맵핑을 통해 데이터모델(Object)를 기반으로 DB Programming 손쉽고 빠르게 구현할수 있는 환경을 제공합니다.
- ORM은 백엔드 개발언어별 ORM Framework를 이용해 DB 프로그램밍 기능 구현시 RDBMS의 데이터베이스 구조 및 데이터를 관리하기 위한 SQL(Structured Query Language)를 잘 모르더라도 ORM Framework에서 제공하는 데이터처리 기능을 이용  쉽게 백엔드 언어 기반으로 DB 프로그래밍을 할 수 있는 환경을 제공합니다.
- ORM작동원리는 ORM Framework 메소드와 백엔드 개발언어를 이용해 SQL구문을 자동으로 생성 DB서버에 전달 SQL을 직접 작성하지 않아도 ORM Framework의 의해 자동생성된 SQL구문을 DB서버에 전달 실행해주기 떄문에 좀더 효율적/생산적인 DB 프로그래밍 방식을 제공합니다. 

B) ORM 사용의 장점 
-CRUD작업을 위해 SQL 언어를 직접 사용하는것이 아닌 프로그램 언어별 ORM Framework의 기능(메소드)을 이용해 CRUD 작업이 가능
-SQL을 몰라도 어플리케이션 개발언어와 ORM Framework기능을 이용해 데이터 처리업무를 개발합니다.(내부적으로는 ORM 프레임워크에서 SQL 구문을 자동생성하여  RDBMS로 전달 실행함)
-ORM이 나온 배경은 데이터 처리 업무를 위해 별도로 표준 SQL(ANSI-SQL)을 배워야하고 RDBMS마다 표준 SQL(ANSI-SQL)을  사용하지 않는 상황이 많아   RDBMS마다 특화된 SQL사용법(각종함수,문법)을 별도 알아야 하는 개발자들에게 개발자 친숙한 개발언어로 DB프로그래밍을 쉽게 처리할수 있는 환경을 제공합니다.
-ORM을 이용하면 RDBMS 종속적인 어플리케이션이 아닌 RDBMS SW를 변경해도 쉽게 대응이 가능합니다.
-백엔드 개발자라면 최소한의 SQL 언어는 알아야 DB에 저장된 데이터에 대한 조작이나 고급 쿼리 작성시 도움이 됩니다.


C) ORM 사용의 단점과 보완책

- 개발언어별 ORM Framework 사용법을 추가로 학습해야합니다.
- 복잡한 SQL 구문을 작성하려면  ORM Framework의 충분한 학습이 필요합니다.
- ORM 기법을 사용하면 ORM Framework에 의해 자동으로 SQL구문이 백엔드 환경에서 생성되어 DB서버로 전달되는 실행되는 방식으로 작동하기 때문에
  백엔드에서 직접 SQL구문을 작성해 DB서버로 전달해 실행하는것보다는 실행속도가 떨어질수 밖에는 없습니다.
- 복잡한 SQL 구문 작성이 필요한경우는 ORM 문법 사용보다는 ORM 환경에서 SQL구문을 직접작성해 DB서버로 전달해 실행하거나 SQL구문을 DB서버에 저장해두고 실행시키는 저장프로시저를 사용하는것도 좋은 방안입니다.