20220807_WIL
들어가며
항해에 합류하고 이제 4주차가 끝나가고 있다.
금주도 한 주간의 회고록 작성에 앞서 Spring Boot를 사용하며 끊임없이 접하게될 ORM, SQL, MVC라는 개념에 대해 정리해보고자 한다.
ORM(Object Relational Mapping)
ORM(Object Relational Mapping)이란, 객체지향 패러다임을 이용하여 데이터베이스로부터 데이터를 쿼리하고 조작할 수 있도록 해주는 기술이다.
즉, 객체와 데이터베이스를 연결(매핑)해주는 역할 을 한다.
ORM에 대해서 말할 때, 대부분의 사람들은 ORM 기술을 구현하는 '하나의' 라이브러리를 지칭하고 있는 것이다. 그러므로 '하나의' ORM('an' ORM)으로 표현하는 것이다.
ORM 라이브러리는 우리가 사용하는 언어로 쓰인 완전히 평범한 라이브러리로, 데이터를 조작하기 위해 필요한 코드를 캡슐화 하고 있기 때문에 데이터를 조작하기 위해 더 이상 SQL 쿼리문을 사용하지 않아도 된다.
우리가 사용하고 있는 그 언어를 통해서 객체와 직접적으로 상호작용하게 되는 것이다. SQL 쿼리문 작성의 기술적인 부분은 ORM 라이브러리가 맡아준다.
ORM을 쓰면 좋은 이유
1) 시간을 많이 절약할 수 있다
- 중복 배제(Don't Repeat Yourself; DRY): 우리는 데이터 모델을 오직 한 곳에서만 작성하게 되고, 이는 코드의 유지보수와 재사용을 보다 쉽게 한다.
- DB 핸들링부터 국제화와 현지화(i18N)까지 많은 일들이 자동적으로 처리된다
- ORM은 우리가 MVC 코드를 쓰도록 강제하고, 이는 결국 우리의 코드를 조금 더 클린하게 만든다.
- SQL문을 형편없이 작성할 필요가 없다.
- 대부분의 웹 프로그래머들은 SQL문 작성에 젬병이라고 한다. 이는 SQL이 마치 "서브" 언어처럼 다뤄지기 때문인데, 사실 SQL은 굉장히 강력하고 복잡한 언어이다. - 코드를 무해하게 만들어 준다(Sanitazation): 미리 준비된 표현이나 트랜잭션은 메소드를 호출하는 것만큼이나 쉽다.
- 참고로 Sanitization은 형식은 올바르지만, 실제로 DB에 전달되어 실행될 때 DB에 악영향을 미칠 수 있는 내용이 inject 되어 있는 경우 이를 걸러내는 작업과 같이, 코드를 '무해'하게 하는, 즉 코드에 대한 위생처리라고 할 수 있다.
- 이와 달리, Validation은 사용자의 입력이 올바른 '형식'으로 되어 있는지를 확인하는 작업이다.
2) 더 유연하다
- 우리가 코딩하는 자연스러운 방식에 잘 맞는다(원래 주로 사용하는 언어로!)
- DB 시스템을 추상화하기 때문에 언제든 우리가 원할 때 변경할 수 있다.
- 모델이 애플리케이션의 나머지 부분에 느슨하게 묶여있기 때문에, 다른 어디서든 이를 변경하거나 사용할 수 있다.
- 데이터 상속과 같은 객체 지향 프로그래밍의 장점을 이용할 수 있게 해준다.
하지만 ORM이 고통이 될 수도 있는 이유
- 일단 배워야 하고, 세팅해야 한다. ORM 라이브러리들은 가벼운 툴이 아니다.
- 일반적인 쿼리들의 경우 성능이 괜찮은 수준이지만, 큰 프로젝트에서는 직접 SQL 문을 작성하는 SQL 마스터가 항상 더 나을 것이다.
- ORM은 DB를 추상화한다.
- 그 이면에서 어떤 일들이 일어나는지를 알고 있다면 괜찮지만, 굉장히 탐욕적인 표현들을 작성할 수 있는 프로그래밍 입문자들에게는 함정이 될 수 있다.
SQL(Structured Query Language)
SQL은 Structured Query Language(구조적 질의 언어)의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 프로그래밍 언어이다. RDBMS에서 자료의 검색과 관리, DB 스키마 생성과 수정, DB 객체 접근 조정 관리를 위해 고안되었다. 많은 수의 DB 관련 프로그램들이 SQL을 표준으로 채택하고 있다.
즉, Spring boot라는 프레임워크를 이용하기 위해서는 Java라는 프로그래밍 언어가 사용되듯, SQL 또한 DB를 이용하기 위한 프로그래밍 언어의 일종이다.
MVC
MVC란 Model, View, Controller의 약자로 프로그래밍의 세가지 역할을 구분한 개발 방법론이다.
아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고, 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다.
Reference
ORM이 뭐야?
ORM을 가볍게 소개하는 글
velog.io
🤜금주목표(8/1~8/7)
- 항해99 중도하차 하지 않기
- 코드 작성뿐만 아니라 개념적인 부분들에 대해서도 이해하려하기(TIL 작성 시 하루 1 개념 포스팅)
- 마인드셋 다잡기
🤜차주목표(8/8~8/14)
- 항해99 중도하차 하지 않기
- Spring Boot 다룰 수 있다고 자신있게 말할 수 있게 되기(Mapping 숙달 등)
- 마인드셋 다잡기
금주는 항해를 시작하고 지난 4주를 통틀어 가장 아쉬운 한 주가 되었다.
개인 사정으로 인하여 이틀 간 접속하지 못해 일정을 따라가지 못했고, 그 여파로 과제 수행을 물론
새로운 과제에 필요한 부분도 충분히 가져가지 못하였다.
하지만 그렇다고 마냥 낙담하고만 있을 수는 없다.
더 이상 물러날 곳이 없다는 생각으로 최선을 다해 임해보자.
다음 주는 만족스러운 한 주로 기억되길
'WIL👨🏫' 카테고리의 다른 글
20220821_WIL(프로젝트 협업) (0) | 2022.08.21 |
---|---|
20220814_WIL(Spring Security CORS) (0) | 2022.08.14 |
20220731_WIL(feat.항해 3주차 회고) / DI, IoC, Bean (0) | 2022.07.31 |
20220724_WIL(feat.항해99 2주차 회고) (0) | 2022.07.24 |
20220717_WIL(feat.항해99 1주차 회고) (0) | 2022.07.17 |