02.19 ORM / SQL / MVC

2023. 2. 20. 01:40개발일지

ORM (Object Relational Mapping) : 객체 - 관계 매핑
  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다.
    • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용합니다.
    • 객체 모델과 관계형 모델 간에 불일치가 존재합니다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결합니다.
  • 데이터베이스 데이터 <- 매핑 -> Object 필드
    • 객체를 통해 간접적으로 데이터베이스 데이터를 다룹니다.
  • Persistant API라고도 할 수 있습니다
    • ex : JPA, Hibernate 등

ORM의 장단점
  • 장점
    • 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와줍니다.
      • ORM을 이용하면  SQL Query가 아닌 직관적인 코드(메서드)로 데이터를 조작할 수 있어 개발자가 객체 모델로 프로그래밍하는 데 집중할 수 있도록 도와줍니다.
      • 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어듭니다.
      • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드의 가독성을 올려줍니다.
      • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가합니다.
    • 재사용 및 유지보수의 편리성이 증가합니다
      • ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있습니다.
      • 때문에 모델에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태로 디자인 패턴을 견고하게 다지는데 유리합니다.
      • 매핑정보가 명확하여, ERD를 보는 것에 대한 의존도를 낮출 수 있습니다.
    • DBMS에 대한 종속성이 줄어듭니다.
      • 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하기 때문에 RDBMS의 데이터 구조와 Java의 객체지향 모델 사이의 간격을 좁힐 수 있습니다.
      • 대부분 ORM 솔루션은 DB에 종속적이지 않습니다.
  • 단점
    • 완벽한 ORM으로만 서비스를 구현하기가 어렵습니다.
      • 사용하기는 편하지만 설계는 매우 신중하게 해야합니다.
      • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있습니다.
      • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있습니다.
    • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵습니다.
      • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있습니다.

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

MVC (모델 - 뷰 - 컨트롤러)

사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리"는 더나은 업무의 분리와 향상된 관리를 제공합니다. MVC에 기반을 둔 몇 가지 다른 디자인 패턴으로 MVVM (모델-뷰-뷰모델), MVP (모델-뷰-프리젠터), MVW (모델-뷰-왓에버) 가 있습니다.

'개발일지' 카테고리의 다른 글

02.27 Mini_Project 서버 및 로그인, 회원가입 기능 구현(CORS 문제 해결)  (0) 2023.02.27
02.25 CORS  (0) 2023.02.25
02.18 Transaction  (0) 2023.02.18
02.18 Spring Test  (0) 2023.02.18
02.18 OAuth2  (0) 2023.02.18