항해 4주차 마무리
스프링을 하기 전 자바 문법과 객체지향에 대한 개념이 많이 부족하다는 걸 알았다.
그래도 막연하게 부족하다는 점만 느낀 게 아니라, 어떻게 이 부족한 점을 채워 나갈지 알게 되었다.
이 부족한점을 채우기 위해 자바의 정석을 다시 보게되었고, 스프링에 부족한 부분은 공식 문서를 많이 보려고 한다.(영어가 많이 약하지만...천천히 꼼꼼히 보려고한다)
객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미한다.
그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다.
따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
ORM이 모든 걸 해결해줄 수 없다.
ORM을 사용하는 것은 매우 편리하지만 그만큼 신중하게 설계해야한다.
프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.
SQL은 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어다.
1970년대에 IBM에서 최초 개발되었으며 관계형 모델이라는 이론에서 파생된 특징을 가지고 있는데, 현재 SQL의 표준으로 ANSI SQL이 정립되었다.
각 DBMS 프로그램에서 ANSI SQL을 기반으로 개발된 개별 SQL을 사용하며 근소한 차이를 보인다.
SQL 문법의 종류 3가지
DDL (Data Definition Language, 데이터 정의 언어)
-> 각 릴레이션을 정의하기 위해 사용되는 언어 (CREATE, ALTER, DROP...)
DML (Data Manipulation Language, 데이터 조작 언어)
-> 데이터를 추가 / 수정 / 삭제하기 위한, 즉 데이터 관리를 위한 언어 (SELECT, INSERT, UPDATE...)
DCL (Data Control Language, 데이터 제어 언어)
-> 사용자 관리 및 사용자별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어
'데이터' 디자인을 담당한다.
-> ex. 상품 목록, 주문 내역 등
'실제로 렌더링되어 보이는 페이지'를 담당한다.
사용자의 요청을 받고, 응답을 주는 로직을 담당한다.
-> GET 등의 uri 매핑이 여기에 해당된다.
참고