WIL (Weekly I Learned) 2월 1째주

2022. 2. 6. 22:12WIL(Weekly I Learned)

반응형

<배운 것>

1. ORM

* ORM(Object Relational Mapping) 개념

‘ORM(Object Relational Mapping)’은 ‘객체로 연결을 해준다’는 의미로, 어플리케이션과 데이터베이스 연결 시 SQL언어가 아닌 어플리케이션 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴입니다.

ORM은 SQL문법 대신 어플리케이션의 개발언어를 그대로 사용할 수 있게 함으로써, 개발 언어의 일관성과 가독성을 높여준다는 장점을 갖고 있습니다.

 

* ORM(Object Relational Mapping) 장점

  • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
    • 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다.
    • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드의 가독성을 올려준다.
    • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.
  • 재사용 및 유지보수의 편리성이 증가한다.
    • ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있다.
    • 때문에 모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리하다.
    • 매핑정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있다.
  • DBMS에 대한 종속성이 줄어든다.
    • 대부분 ORM 솔루션은 DB에 종속적이지 않다.
    • 종속적이지 않다는것은 구현 방법 뿐만아니라 많은 솔루션에서 자료형 타입까지 유효하다.
    • 프로그래머는 Object에 집중함으로 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요된다.
    • 또한 자바에서 가공할경우 equals, hashCode의 오버라이드 같은 자바의 기능을 이용할 수 있고, 간결하고 빠른 가공이 가능하다.

* ORM(Object Relational Mapping) 단점

  • 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
    • 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
    • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
    • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
    • 일부 자주 사용되는 대형 쿼리는 속도를 위해 SP를 쓰는등 별도의 튜닝이 필요한 경우가 있다.
    • DBMS의 고유 기능을 이용하기 어렵다. (하지만 이건 단점으로만 볼 수 없다 : 특정 DBMS의 고유기능을 이용하면 이식성이 저하된다.)
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.
    • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.

* ORM(Object Relational Mapping) 프레임워크들

- JPA/Hibernate

JPA(Java Persistence API)는 자바의 ORM 기술 표준으로 인터페이스의 모음이다. 이러한 JPA 표준 명세를 구현한 구현체가 바로 Hibernate이다.

-Sequelize

Sequelize는 Postgres, MySQL, MariaDB, SQLite 등을 지원하는 Promise에 기반한 비동기로 동작하는 Node.js ORM이다.

-Django ORM

python기반 프레임워크인 Django에서 자체적으로 지원하는 ORM이다.


2. SQL

SQL(Structured Query Language, 구조적 질의 언어)은 관계형 데이터베이스 시스템(RDBMS)을 제어하는 컴퓨터 언어입니다.

일반적인 프로그래밍 언어(범용 언어)와 달리 대화식 언어이기 때문에, 명령문이 짧고 간결합니다. 

SQL 자체는 범용 언어에 비해 한계가 있기 때문에, 단독으로 사용하기 보단 C#, Java, Python, PHP와 같은 고수준 언어와 함께 쓰는 것이 일반적입니다.

* SQL 명령어

SQL 명령어는 크게 4가지의 그룹으로 나뉜다.

  • DDL - 데이터베이스 스키마와 설명을 처리하는 정의하는 언어이다. 데이터베이스나 테이블 생성/변경/삭제 등의 작업이 여기에 포함된다.
  • DML - 데이터 검색, 삽입, 변경, 삭제를 수행하여 조작하는 언어이다. 실질적으로 저장된 데이터에 처리할 때 사용한다.
  • DCL - 데이터에 접근할 수 있는 권한을 관리하는 언어이다.
  • TCL - 트랜잭션을 다루는 언어이다.
종류명령어
DDL CREATE, ALTER, DROP, TRUNCATE, COMMENT, RENAME
DML SELECT, INSERT, UPDATE, DELETE, MERGE, CALL, EXPLAIN PLAN, LOCK TABLE
DCL GRANT, REVOKE
TCL COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION

3. MVC

Spring MVC

  • 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다.
  • 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔다.
  • 간단하게 Model, View, Controller로 분리하여 개발하는 디자인 패턴이다.

Model

  • 데이터와 비즈니스 로직을 관리한다.
  • 애플리케이션이 포함해야할 데이터가 무엇인지를 정의한다.
  • 일반적으로 POJO로 구성된다.
  • Java Beans

View

  • 레이아웃과 화면을 처리한다.
  • 애플리케이션의 데이터를 보여주는 방식을 정의한다.
  • JSP
  • JSP 이외에도 Thymeleaf, Groovy 등 여러 Template Engine이 있다.

Controller

  • VIew와 Model 사이의 인터페이스 역할을 한다.
  • 애플리케이션 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트하는 로직을 포함한다.
  • Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달한다.
  • 즉, Model Object와 이 Model을 화면에 출력할 View Name을 반환한다.
  • Controller —> Service —> Dao —> DB

<생각>
 
웹 MVC의 개념을 배우고 나서 프로젝트 코드들을 보니 MODEL, VIEW, CONTROLLER 서로의 관계들이 좀 더 구체적으로 느껴졌다.

MVC의 처리 순서

  1. 클라이언트가 서버에 요청을 하면, front controller인 DispatcherServlet 클래스가 요청을 받는다.
  2. DispatcherServlet는 프로젝트 파일 내의 servlet-context.xml 파일의 @Controller 인자를 통해 등록한 요청 위임 컨트롤러를 찾아 매핑(mapping)된 컨트롤러가 존재하면 @RequestMapping을 통해 요청을 처리할 메소드로 이동한다.
  3. 컨트롤러는 해당 요청을 처리할 Service(서비스)를 받아 비즈니스로직을 서비스에게 위임한다.
  4. Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
  5. DAO는 DB정보를 DTO를 통해 받아 서비스에게 전달한다.
  6. 서비스는 전달받은 데이터를 컨트롤러에게 전달한다.
  7. 컨트롤러는 Model(모델) 객체에게 요청에 맞는 View(뷰) 정보를 담아 DispatcherServlet에게 전송한다.
  8. DispatcherServlet는 ViewResolver에게 전달받은 View정보를 전달한다.
  9. ViewResolver는 응답할 View에 대한 JSP를 찾아 DispatcherServlet에게 전달한다.
  10. DispatcherServlet는 응답할 뷰의 Render를 지시하고 뷰는 로직을 처리한다.
  11. DispatcherServlet는 클라이언트에게 Rendering된 뷰를 응답하며 요청을 마친다.

이런 처리순서들을 거치며 응답하는 거라는 어느정도의 그림들이 머리에 그려지는 뜻깊은 시간이였다. 반복숙달을 통해

머리속에 더욱 확고한 그림을 저장해둬야겠다. 

 

반응형