[WIL] ORM, SQL, MVC

컴클로딩·2022년 7월 15일
0

Spring-TIL

목록 보기
3/5
post-thumbnail

📌 Intro

  • 오늘부터 항해99 이제 5주차 주특기 심화가 시작되었다. 4주차 주특기 숙련때 과제가 너무 힘들었다. Spring Security, JWT, JPA... 아직 Spring이 이숙해지기도 전에 더 많은 기술들로 과제를 진행하다보니 정말 힘들었다. 처음으로 개인과제 구현을 다 못끝냈다. 그나마 위안이 되는 것은 모두가 힘들어했다는 것.. 그리고 5주차~7주차를 진행하면서 해당 기술들을 계속 사용해보고 익힐 수 있다는 것이다.
  • 4주차를 진행하면서 Spring을 사용하는 것에 부족함이 많다고 많이 느꼈다. 그래서 인프런에서 Spring강의를 로드맵채로 구매했다. 단지 아쉬운 것은 JPA 로드맵도 통채로 구매하고 싶었지만...그것까지는 너무 부담이 되었고 일단 JPA는 책을 사서 공부를 진행해야하나 싶다.
  • 이번 5주차 과제는 프론트엔드단에서 해야할 일은 없고 오로지 API설계대로 구현하는 것인데 이것도 쉽지않아 보인다. 그래도 끝까지 해봐야겠다.

1. ORM(Object-Relational Mapping)

1. ORM이란

  • 객체 지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 매핑하는 기술
  • 객체 지향 프로그래밍에서 사용할 수 있는 가상의 객체 지향 데이터베이스를 만들어 프로그래밍 코드와 데이터 연결
  • SQL을 사용하지 않고도 DB의 데이터를 쉽게 객체로 만들어줌
  • ORM이 필요한 이유는 객체 지향 언어과 관계형 데이터베이스사이의 패러다임 불일치가 있기때문이다.
  • 이 둘 간의 패러다임 불일치 때문에 개발자는 더 많은 코드를 작성해야 하며, 이는 반복적이고 실수하기 쉬운 작업이 된다.
    • 객체 지향
      • 필드와 메서드 등을 묶어서 객체로 잘 만들어 사용하는 것이 목표
      • 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
    • 관계형 데이터베이스
      • 데이터를 잘 정규화해서 보관하는 것이 목표
  • 그렇기 때문에 개발자는 객체지향적인 설계에 집중할 수 없게 된다. ORM이 바로 이러한 문제를 해결해 준다.


2. ORM 장점

  • SQL을 사용하지 않고 객체 지향 프로그래밍 언어를 사용하여 그대로 사용이 가능
    • SQL query를 쓰지 않고 객체 간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체 간의 관계 파악이 가능
  • 재사용 및 유지보수의 편리성
  • DBMS에 대한 종속성이 감소

3. ORM 단점

  • 완벽하게 ORM만을 사용해서 서비스를 구현하기 힘듦
  • 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점 활용이 어려움
  • 프레임워크가 자동으로 작성하기 때문에 의도대로 작성이 되었는지 확인할 필요가 있음
  • 객체지향적 사용을 고려, 설계한 데이터베이스가 아닌 경우 프로젝트가 크고 복잡할수록 ORM 기술 적용이 어려움
  • 기존의 기업들의 경우 ORM을 고려하지 않은 데이터베이스를 사용하고 있어 ORM에 적합하게 변환하기 위해선 많은 시간과 노력이 필요함

2. SQL

SQL( Structured Query Language, 구조화 질의어 ) : 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

SQL 명령어 종류

  • 데이터 정의 언어 ( Data Definition Language, DDL )
    • 컴퓨터 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터의 데이터를 정의하는 컴퓨터 언어 또는 컴퓨터 언어 요소

    • 대표적인 명령어
      • CREATE : 새로운 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저 만들기
      • DROP : 이미 존재하는 데이터베이스 관계(테이블), 뷰, 인덱스, 저장 프로시저를 제거
      • ALTER : 이미 존재하는 데이터베이스 개체에 대한 변경, RENAME의 역할
      • TRUNCATE : 관계 (테이블)에서 데이터를 돌이킬 수 없는 제거
  • 데이터 조작 언어 ( Data Manipulation Language, DML )
    • 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한, 데이터베이스 언어 또는 데이터베이스 언어 요소

    • 대표적인 명령어
      • SELECT : 검색(질의)
      • INSERT : 삽입(등록)
      • UPDATE : 업데이트(수정)
      • DELETE : 삭제
  • 데이터 제어 언어 ( Data Control Language, DCL )
    • 데이터베이스에서 데이터에 대한 액세스를 제어하기 위한 데이터베이스 언어 또는 데이터베이스 언어 요소

    • 대표적인 명령어
      • GRANT : 특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여
      • REVOKE : 특정 데이터베이스 이용자에게 부여한 특정 권한을 박탈
      • GRANT
      • CONNECT: 데이터베이스 또는 스키마에 연결하는 권한
      • SELECT : 데이터베이스에서 데이터를 검색하는 권한
      • INSERT : 데이터베이스에 데이터를 등록할 수 있는 권한
      • UPDATE : 데이터베이스의 데이터를 업데이트 할 수 있는 권한
      • DELETE : 데이터베이스의 데이터를 삭제할 수 있는 권한
      • USAGE : 스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한
    • 오라클 데이터베이스에서는 데이터 제어 언어의 명령 실행은 암시적 커밋을 수반한다. PostgreSQL에서는 데이터 제어 언어의 명령 실행은 트랜잭션의 맥락에서 이루어지므로 롤백을 할 수 있다.

3. MVC

MVC( Model–View–Controller, MVC )는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다.

구성요소

  • 컨트롤러 : 데이터와 비즈니스 로직 사이의 상호 동작을 관리한다. 즉, 모델과 뷰를 통제한다. MVC 패턴에서 View와 Model이 직접적인 상호 소통을 하지 않도록 관리한다.
  • 모델 : 어플리케이션의 정보나 데이터, DB 등을 말한다.
  • 뷰 : 사용자가 볼 결과물을 생성하기 위해 모델로부터 값을 받아오고 컨트롤 정보를 얻어 온다.

  • 참고로 MVC패턴은 크게 MVC 1패턴, MVC 2패턴 2가지가 있다. 그 중에서 스프링이 채택한 패턴은 MVC 2패턴이고 MVC1과 어떻게 다른지 알아보자.

MVC1

  • View와 Controller를 모두 JSP가 담당하는 형태를 가진다.
  • 즉, JSP 하나로 유저의 요청을 받고 응답을 처리하므로 구현 난이도는 쉽다.
  • JSP 하나에서 MVC 가 모두 이루어지다보니 재사용성도 매우 떨어지고, 읽기도 힘들어진다.
  • 즉, 유지보수에 있어서 문제가 발생하다보니 대규모 프로젝트에서는 적합하지 않다.

MVC2

  • MVC2 패턴은 널리 표준으로 사용되는 패턴이다.
  • 요청을 하나의 컨트롤러(Servlet)가 먼저 받는다. 즉, MVC1과는 다르게 Controller, View가 분리되어 있습니다.
  • 따라서 역할이 분리되어 MVC1패턴에서의 단점을 보완할 수 있다.
  • 개발자는 M, V, C 중에서 수정해야 할 부분이 있다면, 그것만 꺼내어 수정하면 된다. 따라서 유지보수에 있어서도 큰 이점을 가진다.
  • MV2는 MVC1 패턴보다 구조가 복잡해질 수 있지만, 개발자가 이러한 세부적인 구성까지 신경쓰지 않을 수 있도록 각종 프레임워크들이 지금까지 잘 발전되어 왔다.
  • 그 중에서 대표적인 것이 바로 스프링 프레임워크입니다.

Spring MVC2

  • 스프링에서는 유저의 요청을 받는 DispathcerServlet이 핵심이다. 이것이 Front Controller의 역할을 맡는다.
  • Front Controller(프런트 컨트롤러)란, 우선적으로 유저(클라이언트)의 모든 요청을 받고, 그 요청을 분석하여 세부 컨트롤러들에게 필요한 작업을 나눠주게 된다.

참고자료

ORM

SQL

MVC

profile
어떠한 가치를 창출할 수 있을까를 고민하는 개발자. 주로 Spring으로 개발해요. https://comclothing.tistory.com/ 👈🏻티스토리 블로그로 이전 완료

0개의 댓글