이번 주차는 스프링 숙련 주차에서 심화 주차로 넘어갔습니다!
숙련 주차에는 게시글을 완성하고, 회원가입과 로그인을 적용시켰고
오늘까지 댓글 구현을 끝낼려고 하고 있습니다!
(가능하겠죠...??)ㅠ
일단 시큐리티나 테스트 코드에 공부를 하면서 하고 있는데, 많이 부족한 것 같습니다..
자바, 스프링, 스프링 JPA 들도 아직 부족한게 많은데 시큐리티와 테스트코드까지 더 공부해야 하는 것이..
현재 자바와 스프링을 스터디를 하고 있지만, 복습하고 있지만.. 여전히 거북이가 기어가는 수준인거 같아용...ㅎㅎㅎ
그래도 꾸준히 해서 실력이 눈에 띄게 늘었으면 좋겠습니다..!! 다시 화이팅..!!
이번 주차 회고록에서는 ORM,SQL,MVC에 대해 정리를 했다.
ORM이란?
ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
전에 정리했던 JPA는 ORM기술을 이용한 인터페이스이다.즉 객체와-관계형 데이터베이스를 매핑 시켜주는 기술이고 객체를 통해 DB조작을 가능하게 해준다.
장점
ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게한다. SQL 문을 사용하면서 같이 필요한 선언문, 할당, 종료 같은 부수적인 코드가 사라지거나 줄어들며, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성이 증가하게 된다.
자바 기능을 통해 DB를 조작할 수 있다.
단점
ORM을 사용하는 것은 매우 편리하지만 그만큼 신중하게 설계해야한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.
SQL이란?
SQL(Structured Query Language, 구조적 질의 언어)은 관계형 데이터베이스 시스템(RDBMS)을 제어하는 컴퓨터 언어를 말한다.
SQL 명령어 종류
SQL 쿼리문은 역할에 따라 3가지로 분류되며 아래와 같습니다.
- DDL(Data Definition Language, 데이터 정의어)DB 오브젝트를 생성, 삭제, 변경하는 역할을 하며, DB 설계 단계에서 주로 사용됩니다. (CREATE, DROP, ALTER...)
- DML(Data Manipulation Language, 데이터 조작어)DB를 조회, 삽입, 삭제, 변경하는 역할을 하며, 관리 목적의 쿼리문입니다. (SELECT, INSERT, UPDATE...)
- DCL(Data Control Language, 데이터 제어어)사용자의 권한을 관리하는 역할을 합니다. (GRANT, DENY, REVOKE...)
이중 개발자가 일반적으로 DB를 사용할 때 사용하는 언어의 중요도는 DML > DDL > DCL 순입니다.
DB를 조회하고, 관리하는 DML을 가장 많이 사용하며, DB의 테이블의 스키마(설계 수준)를 수정하는 DDL을 그다음으로 많이 씁니다.
DCL은 DBA(DataBase Administration, 데이터베이스 관리자)가 주로 사용하며 일반 개발자는 사용할 일이 드뭅니다.
MVC란
- 1.model데이터베이스에서 데이터를 가지고 올 수 있고 데이터를 가지고 있을 수도 있다.데이터베이스와 소통한다.컨트롤러에게 데이터를 전달한다.모델이 뷰와 직접 소통하는 일은 없다.
- View유저가 보는 화면을 보여주게 하는 역할이다.데이터를 받고 그리는 역할을 수행한다.모델이나 데이터베이스와는 소통하지 않고 컨트롤러와만 소통한다.컨트롤러에게 엑션이나 데이터를 전달만 하고 전달 받기만 한다.
- Controller뷰에서 엑션과 이벤트에 대한 인풋 값을 받는다.모델에게 전달해주기 전에 데이터를 가공할 수 있다.뷰에게 모델에게 받은 데이터를 가공할 수 있다.
이렇게 세가지로 나눠서 API를 설계하는 패턴을 말한다.
MVC 디자인 패턴 특징
- 소프트웨어가 서비스하기 위해서는 여러 과정과 처리가 필요한다.
- 그러한 처리들을 각 기능 단위 별로 나눠서 처리한다.
- 그러므로써 프로그래밍을 할 때 역할을 하는 정돈된 코드를 작성할 수 있다.
- 디버깅이나 코드 가독성을 높인다.