지난 주차에 JPA에 대해 공부를 했었다.
JPA(Java persistence API)는 간단히 말해서,
자바 명령어를 SQL로 번역해주는 역할, SQL을 쓰지않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 도와주는 번역기
자바 진영의 ORM(객체관계매핑) 기술 표준, 인터페이스의 집합
이렇게 정의 할 수 있는데,
자연스럽게 ORM과 SQL-Mapper에 대해서도 찾아보게 되었다.
https://velog.io/@davidko/TIL-%ED%95%AD%ED%95%B499-15%EC%9D%BC%EC%B0%A8
이번주 조금더 자바의 DB기술에 대해 알아 보았다.
프로그램을 실행하는동안 많은 데이터들이 사용되고, 사라지는데 우리는 이데이터들이 프로그램이 종료되어도 사라지지 않고 저장이 되도록 해야한다. 이것이 바로 영속성(Persistence)이다. <------- JPA의 P에 의미
영속성의 개념은 Laytered Architecture에서 다음과 같이 도메인 모델과 데이터 베이스 사이에 존재하며, 프로그램의 객체 정보를 DB에 저장하고, DB의 정보를 객체로 담아와 사용할 수 있도록 해준다.
자바에서는 영속성의 기능을 위해 JDBC를 지원해즈는데 DB에 접금하여 SQL을 수행하고 결과값을 다시 객체로 매핑시켜주는 작업이 개발자에게 번거롭기 때문에 개발자가 직접 JDBC Programming을 하지 않도록 SQL Mapper와 ORM이라는 Persistence Framework가 제공 되었다.
SQL Mapper와 ORM의 차이는 간단히 말해서 SQL문을 이용해서 객체지향 모델과 데이터베이스 테이블을 매핑하냐 마냐의 차이이다. ORM은 객체에 데이터베이스 테이블이 자동으로 매핑되고, SQL-Mapper는 객체를 SQL statement에 매핑시킬 수 있도록 도와 준다.
SQL 이란?
SQL은 Structed Query Language의 줄임말로 관계형 데이터 베이스의 데이터를 관리 및 처리하기 위해 설계된 언어이다.
두 프레임워크 모두 장단점이 존재하는데,
ORM은 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어서 개발자가 객체 모델만 사용해서 프로그래밍을 하는 데 집중할 수 있게 해주지만, 서드 호출로 DB데이터를 조작하기 때문에 세밀함이 떨어진다. 복잡한 통계 분석 쿼리를 메서드만으로 해결하는 것을 힘든 일이다.
SQL-Mapper는 JDBC를 사용했을때 발생하는 불필요한 코드를 줄일 수 있고, SQL이 코드와 분리되어 있기 때문에 유지보수도 편하지만, 데이터베이스에 종속적이므로 DB변경시 수정할 부분이 너무 많아진다.
MVC 패턴이란
Model, View, Controller 개념이 합쳐진 소프트웨어 공학에서 주로 사용되는 디자인 패턴
Controller 가 사용자의 request를 받음
Controller가 logic처리를 Service와 함께 한 후 Model에 그 결과를 담음
Model에 저장된 결과를 바탕으로 시각 처리를 담당하는 View를 제어해서 사용자에게 전달
사용자가 접근 한 URL에 따라 요청을 파악한다. URL에 맞는 Method를 호출하여 Service와 함께 Business Logic을 처리한다. 최종적으로 나온 결과는 Model에 저장을 하고, View에 던져준다.
Model은 Controller에서 받은 데이터를 저장하는 역할을 한다.
Controller로 부터 받은 Model 데이터를 바탕으로 사용자에게 표현해준다. 일반적으로 HTML, JSP... 에 해당한다.
MVC의 2가지 패턴 중 많이 사용하는 것은 Model 2이다
Model 2 구조는 처리해야할 역할을 Controller, View, Model이 모두 나눠 처리한다.
Controller는 RequestMapping을 통해 URL을 확인하여 바로 View에 던져줄지, Service로 들어가 추가적인 Business Login을 할지 결정한다. 이렇게 역할을 나눔으로써 HTML과 Java를 분리하여 처리하기 때문에 확장성도 좋고 유연하며 유지보수도 하기 쉬워진다.
현재 대부분의 Spring 프로젝트들은 Model 2 구조를 따른다.
출처: https://deveun.tistory.com/entry/SQL-Mapper%EC%99%80-ORM-%EC%B0%A8%EC%9D%B4
https://velog.io/@mu1616/ORM-SQL-Mapper-%EC%B0%A8%EC%9D%B4