WIL 3주차

min·2021년 10월 3일
0

항해99 3주차

✨ 주특기 심화 - Spring

9/30 - 10/9 기본 주차 과제까지 겨우 끝냈는데 심화 주차 너무 어렵다.. 기본 주차도 어렵다고 쓴 것 같은데 비교가 안 될 정도다. 기본 주차 강의를 들을 때 시간이 너무 안 간다고 느껴졌는데 지금은 들을 것도 알아야 할 것도 해야 할 것도 너무 많아 시간이 부족하다고 느껴진다. 그래도 파이팅! 시간을 허비하지 않도록 노력하자!!

ORM

Object Relational Mapping, 객체-관계 매핑

OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블을 자동으로 매핑(연결) 하는 것을 의미

클래스와 테이블은 서로가 기존부터 호환 가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요 없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.

ORM 장점

완벽한 객체지향적인 코드

SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게한다.
각종 객체에 대한 코드를 별로로 작성하여 코드의 가독성을 높일 수 있다.
SQL의 절차적/순차적인 접근이 아닌 오직 객체지향적 접근으로 인해 생산성이 증가한다.

재사용, 유지보수, 리팩토링 용이성

ORM은 독립적으로 작성되어있고 객체로 작성되었기에 재활용이 가능하다.
매핑정보가 명확하여 ERD를 보는 것에 대한 의존도를 낮출 수 있다.

DBMS(DataBase Management System) 종속성 하락

객체 간의 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 Java의 객체지향 모델 사이의 간격을 좁힐 수 있다.
객체에만 집중할 수 있기 때문에 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간도 줄어든다.

ORM 단점

ORM이 모든 걸 해결할 수 없음

ORM을 사용하는 것은 매우 편리하나 신중하게 설계해야 한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고
부족한 설계로 잘 못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 발생한다.
일부 자주 사용되는 대형 SQL문은 속도를 위해 별도 튜닝이 필요하여 SQL문을 써야할 수 있다.

객체-관계 간의 불일치

-세분성(Granularity) : 경우에 따라 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.
-상속성(Inheritance) : RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다.
-일치(Identity) : RDBMS는 기본키를 이용하여 동일성을 정의하나 자바는 객체 식별과 객체 동일성을 모두 정의한다.
-연관성(Associations) : 객체지향 언어는 방향성이 있는 객체의 참조를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키를 이용해서 나타낸다.
-탐색(Navigation) : 자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다. 자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색한다. 그러나 RDBMS에서는 일반적으로 SQL문을 최소화하고 JOIN을 통해 여러 엔티티를 로드하고 원하는 대상 엔티티를 선택하는 방식으로 탐색한다.

ORM 프레임워크

-JPA/Hibernate
-Sequelize
-Django ORM


SQL (Structured Query Language, 구조적 질의 언어)

관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

SQL 명령어

DDL(Data Definition Language, 데이터 정의 언어) : 데이터베이스 스키마와 설명을 처리/정의하는 언어로 데이터베이스나 테이블 생성/변경/삭제 등의 작업이 포함 된다.
DML(Data Manipulation Language, 데이터 조작 언어) : 데이터 검색/삽입/변경/삭제를 수행하여 조작하는 언어로 실직적으로 저장된 데이터를 처리할 때 사용된다.
DCL(Data Control Language, 데이터 제어 언어) : 데이터에 접근할 수 있는 권한을 관리하는 언어이다.
TCL(Transaction Control Language) : 트랜젝션 제어 언어로 DCL과 구분하여, 트랜젝션을 제어하고자 할때 쓰인다.


MVC

Model, View, Controller의 약자. 소프트웨어 디자인 패턴의 하나로, 애플리케이션의 기능을 구분함으로, 정돈된 개발을 가능하게 한다.

MVC의 각 컴포넌트의 역할

Model (모델)
컨트롤러가 호출할 때, 요청에 맞는 역할을 수행한다. 비즈니스 로직을 구현하는 영역으로 응용프로그램에서 데이터를 처리하는 부분이다. 비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부라고 할 수 있다. DB에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행한다. 상태의 변화가 있을 때 컨트롤러와 뷰에 통보해 후속 조치 명령을 받을 수 있게 한다.

View (뷰)
컨트롤러부터 받은 모델의 결과값을 가지고 사용자에게 출력할 화면을 만드는 일을 한다. 만들어진 화면을 웹브라우저에 전송하여 웹브라우저가 출력하게 하는 것이다. 화면에 표시되는 부분으로 추출한 데이터나 일반적인 텍스트 데이터를 표시하거나 입력폼 또는 사용자와의 상호작용을 위한 인터페이스를 표시하는 영역이다.

Controller (컨트롤러)
일종의 조정자라고 할 수 있다. 클라이언트의 요청을 받았을 때, 그 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출한다. 또한 클라이언트가 보낸 데이터가 있다면, 모델에 전달하기 쉽게 데이터를 가공한다. 모델이 업무를 마치면 그 결과를 뷰에게 전달한다.

C/S(Client - Server)구조로 요청을 하면 그에 맞는 응답을 하는 구조를 기본으로 하고 있다.

  1. 웹 브라우저가 웹 서버에 웹 애플리케이션 실행을 요청한다. (MVC 구조가 WAS라고 보면된다.)
  2. 웹 서버는 들어온 요청을 처리할 수 있는 서블릿을 찾아서 요청을 전달한다.
  3. 서블릿은 모델 자바 객체의 메서드를 호출한다.
  4. 데이터를 가공하여 값 객체를 생성하거나, JDBC를 사용하여 데이터베이스와의 인터랙션을 통해 값 객체를 생성한다.
  5. 업무 수행을 마친 결과값을 컨트롤러에게 반환한다.
  6. 컨트롤러는 모델로부터 받은 결과값을 View에게 전달한다.
  7. JSP는 전달받은 값을 참조하여 출력할 결과 화면을 만들고 컨트롤러에게 전달한다.
  8. 뷰로부터 받은 화면을 웹서버에게 전달한다.
  9. 웹 브라우저는 웹 서버로부터 요청한 결과값을 응답받으면 그 값을 화면에 출력한다.

👍 참고

ORM(Object Relational Mapping)이 뭘까? 🤔
[SQL] DBMS와 SQL이란
1.MVC 아키텍쳐에 대한 이해

0개의 댓글