ORM SQL MVC 정리

서병범·2022년 10월 16일

항해99

목록 보기
4/4

ORM


ORM(Object-Relational Mapping)
객체와 관계형데이터베이스의 테이블을 매핑한다는 뜻으로, 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이다.

쉽게말하면, ORM은 Model을 기술하는 도구이고, 이를 통해 데이터베이스와 프로그래밍 언어 사이 개념의 간극을 줄이는 것이다.

ORM을 사용하여 SQL문을 직접 작성하지 않고 엔티티들을 객체로 표현할 수 있으며
ORM을 이용한 대표적인 라이브러리에는 JPA가 있다.

다시 설명하자면 이전에는 데이터베이스의 데이터를 꺼내오거나 수정하기 위해서 웹 서비스를 개발 할 때 SQL문을 필수적으로 작성해야 했다.

하지만 JPA를 사용함으로써, 대부분의 SQL문을 생략할 수 있게 되었다.
(SQL: 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어)

ORM의 장점

위에서 간략하게 설명했지만, ORM의 장점을 다시 잘 설명해보자면,

관계형 데이터베이스에서 필드는, Java 객체에서의 각 속성이라 볼 수 있다.

관계형 데이터베이스에서 Join Table의 경우, 객체 지향 프로그래밍에서 배열로 조회가 가능하다.

이처럼 객체 지향으로 데이터를 다루는 방법과, 관계형 데이터베이스에서 데이터를 다루는 방법은 서로 다르다.

그래서 관계형 데이터베이스가 불편하고 Java가 익숙하다면(Java 외의 다른 언어도 마찬가지),
ORM을 이용해 관계형으로 사고하지 않고 관계형 데이터베이스에 접근할 수 있습니다.
-> 기존에 사용하던 똑같은 사고(java문법)로 데이터베이스에 접근 가능하다는 말

관계형 데이터베이스에 접근하는 방법 자체를 프로그래밍 언어의 관점에서 맞출 수 있도록 도와주는 것이 ORM이라 할 수 있겠다.

SQL문을 사용하지 않고, 데이터베이스에 접근할 수 있으니 사용자에게 굉장한 편리함을 가져다준다고 말할 수 있겠다.

JPA

JPA는 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다.

실제로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.

Persistence(영속성)은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다.

간단하게, JPA는 JAVA 데이터베이스 관련한 API라고 생각하면 이해가 쉽다.

JPA를 사용하는 이유

JPA는 반복적인 CRUD SQL을 처리해준다. JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다.

추가적으로 JPA는 네이티브 SQL이란 기능을 제공해주는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.

JPA를 사용하여 얻을 수 있는 가장 큰 것은 SQL아닌 객체 중심으로 개발할 수 있다는 것이다. 이에 따라 당연히 생산성이 좋아지고 유지보수도 수월하다.

Hibernate

자바 진영의 다양한 ORM 프레임워크 중 가장 많이 사용되는 프레임워크

이러한 Hibernate 기반으로 만들어진 ORM 기술 표준이 바로 JPA다.

즉, JPA라는 ORM 기술 표준을 구현한 것이 Hibernate이므로, JPA를 사용하려면 Hibernate를 사용하면 된다.

SQL


SQL이란?

구조적 쿼리 언어(SQL)는 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다. 관계형 데이터베이스는 정보를 표 형식으로 저장하며, 행과 열은 다양한 데이터 속성과 데이터 값 간의 다양한 관계를 나타냅니다. SQL 문을 사용하여 데이터베이스에서 정보를 저장, 업데이트, 제거, 검색 및 검색할 수 있습니다. 데이터베이스 성능을 유지 관리하고 최적화하는 데 SQL을 사용할 수도 있습니다.

SQL이 중요한 이유

구조적 쿼리 언어(SQL)는 모든 유형의 애플리케이션에서 자주 사용되는 널리 사용되는 쿼리 언어입니다. 데이터 분석가와 개발자는 SQL이 서로 다른 프로그래밍 언어와 잘 통합되므로 SQL을 배우고 사용합니다. 예를 들어, Java 프로그래밍 언어로 SQL 쿼리를 포함시켜 Oracle 또는 MS SQL Server와 같은 주요 SQL 데이터베이스 시스템으로 고성능 데이터 처리 애플리케이션을 빌드할 수 있습니다. SQL은 문에 일반적인 영어 키워드를 사용하기 때문에 배우기가 매우 쉽습니다.

SQL의 역사

SQL은 1970년대에 관계형 데이터 모델을 기반으로 발명되었습니다. 처음에는 구조적 영어 쿼리 언어(SEQUEL)라고 했다가, 나중에 SQL로 줄였습니다. Oracle(구 Relational Software)은 상용 SQL 관계형 데이터베이스 관리 시스템을 제공하는 최초의 공급업체가 되었습니다.

MySQL이란?

MySQL은 Oracle에서 제공하는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 개발자는 라이선스 비용을 지불하지 않고 MySQL을 다운로드하여 사용할 수 있습니다. 다른 운영 체제 또는 클라우드 서버에 MySQL을 설치할 수 있습니다. MySQL은 웹 애플리케이션을 위한 인기 있는 데이터베이스 시스템입니다.

SQL과 MySQL 비교

구조적 쿼리 언어(SQL)는 데이터베이스 생성 및 조작을 위한 표준 언어입니다. MySQL은 SQL 쿼리를 사용하는 관계형 데이터베이스 프로그램입니다. SQL 명령은 국제 표준에 의해 정의되지만 MySQL 소프트웨어는 지속적인 업그레이드 및 개선을 거칩니다.

MVC


MVC 는 Model, View, Controller의 약자로,
하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.

사용자가 웹 브라우저를 통해서 URL을 호출하면 Controller에서 요청들을 받고 그안에서 로직이나 데이터가 필요하다면 Model에서 호출해서 모델에 구성된 로직이나 데이터베이스에 접근해서 데이터를 가져온다.

가져온 데이터를 다시 Controller가 받게되고 그 데이터를 VIEW에게 보내주고 VIEW는 최종적으로 사용자에게 데이터와 로직이 적용된 화면을 제공한다.

MVC패턴은 처음부터 Model, View, Controller가 나누어져 있지는 않았다고 한다.

model 1
위 그림의 방식이 Model 1 방식인데 View와 Controller를 JSP에서 모두 구현하는 구조이다.

JSP에 대한 간단한 설명

JSP는 Java Server Pages 의 약자이며 HTML 코드에 JAVA 코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구이다. JSP가 실행되면 자바 서블릿(Servlet)으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고 그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

JSP 동작 과정

  • 브라우저가 웹 서버에게 JSP에 대한 요청 정보를 전달한다.
  • 브라우저가 요청한 JSP가 최초로 요청했을 경우만 JSP로 작성된 코드가 서블릿 코드로 변환됨(java파일 생성)
  • 서블릿 코드를 컴파일해서 실행가능한 bytecode로 변환한다(class파일 생성)
  • 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.

다시 돌아가서,
MVC Model1 구조는 흐름이 단순하기 때문에 개발이 쉽고 중소형 프로젝트에 적합하다.

하지만 프로젝트의 규모가 커질수록 유지보수가 어려워지고, View와 Controller가 하나의 JSP에 합쳐져 있기때문에 프론트엔드 개발자와 백엔드 개발자의 협업에 어려움이 있었다.

model 2
그래서 Controller와 View를 분리된 방식이 model2 방식이다.

Controller와 View를 분리함으로써 클라이언트의 요청처리 부분과 응답처리 부분을 분리하여 각 로직을 독립적으로 수행할 수 있게 되었다.

그래서 이제는 프론트개발 따로 백엔드 영역 따로 개발이 가능해졌다.

물론 JSP를 사용하는 곳은 줄어들고 있지만 MVC 패턴은 비슷하게 가져가고 있다.

Model

Model은 데이터베이스와 연동하여 사용자의 입출력 데이터를 내부 로직으로 처리하는 역할을 한다.

자세히는 데이터를 추출하고, 저장하고, 삭제하고, 업데이트하는 역할을 수행한다.

다시말해서, 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다.

Controller

Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다.

쉽게 말해 사용자가 접근한 URL에 따라 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model을 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려주는 역할을 하는것이다.

View

View는 클라이언트 측 기술은 HTML/CSS/Javascript들을 모와둔 컨테이너이며, 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어온다.

View는 사용자에게 보여주는 화면(UI)이 해당되고, 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다.

ORM 참고)
https://velog.io/@shitaikoto/ORM-MVC-Sequelize

JPA 참고)
https://geonoo.tistory.com/m/147?category=1077864

SQL 참고)
https://aws.amazon.com/ko/what-is/sql/

MVC 참고)
https://geonoo.tistory.com/m/148

profile
코딩초보

0개의 댓글