[매주 일요일은, “혼자만의 시간을 가지며, 한 주를 회고하는 날입니다.”]
이번 4주 차에 배운 키워드
ORM, SQL, MVC
1. ORM(Object Relational Mapping)이란?
ORM이란 객체와 DB의 테이블이 매핑을 이루는 것을 말합니다. (Java 진영에 국한된 기술은 아닙니다.)
즉, 객체가 테이블이 되도록 매핑 시켜주는 것을 말합니다.
ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작할 수 있습니다.
예를들어, User 테이블의 데이터를 출력하기 위해서 MySQL에서는 SELECT * FROM user; 라는 query를 실행해야 하지만,
ORM을 사용하면 User 테이블과 매핑된 객체를 user라 할 때, user.findAll() 라는 메서드 호출로 데이터 조회가 가능합니다.
query를 직접 작성하지 않고 메서드 호출만으로 query가 수행되다 보니, ORM을 사용하면 생산성이 매우 높아집니다.
그러나 query가 복잡해지면 ORM으로 표현하는데 한계가 있고, 성능이 raw query에 비해 느리다는 단점이 있는데요,
그래서 나중에 다루게 될 JPQL, QueryDSL 등을 사용하거나 한 프로젝트 내에서 Mybatis와 JPA를 같이 사용하기도 합니다.
같이 알아두면 좋은 JPA
JPA ( Java Persistent API )
JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미합니다.
JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 합니다.
참고자료
https://victorydntmd.tistory.com/195
2. SQL(Structured Query Language, 구조적 질의 언어)이란?
- 데이터베이스가 이해할 수 있는 언어
-
관계형 데이터베이스 시스템(RDBMS)을 제어하는 컴퓨터 언어
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...)
참고자료
https://bio-info.tistory.com/100
https://brunch.co.kr/@dan-kim/18
3. MVC란?
MVC란 Model-View-Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론입니다. 아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 통해 시각적 표현을 제어하여 사용자에게 전달하게 됩니다.
이러한 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시작적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 됩니다.
Web과 MVC
위의 개념을 웹에 적용해보자.
- 사용자가 웹사이트에 접속한다. (Uses)
- Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출한다. (Manipulates)
- 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
- Controller는 Model이 리턴한 결과를 View에 반영한다. (Updates)
- 데이터가 반영된 VIew는 사용자에게 보여진다. (Sees)
참고자료
https://cocoon1787.tistory.com/733
https://opentutorials.org/course/697/3828
항해99 4주 차를 해보고 나서 느낀 점
매주 쉽지 않았지만 이번 스프링 숙련주차는 막다른 공간에 놓여서 아무것도 할 수 없는 무기력함을 느꼈다. 스프링 시큐리티, JWT를 구현해서 게시글에 작성하는 사용자를 제한하는 건데 나는 그 부분까지 가지도 못했다. 지난 주에 했던 게시글을 다시 손봐야하는데도 시간이 많이 걸린다. 그리고 댓글을 달아야하는데 이 부분도 쉽지가 않았다. 그렇게 한 주가 통으로 날라가버렸다. 지식을 습득하지도 못하고 코딩을 계속 시도 했던것도 아니고 시간만 낭비했다.
이것저것 시도하다가 지나와서 시간낭비는 아닐 수 있지만 3개월이라는 시간이 정해져 있어서 하루하루가 그냥 지나가는 게 아깝다.
자바랑 스프링을 전혀 모르다가 3주 동안 접한 걸로 프로젝트를 만들어야하는게 겁이 난다. 팀에 민폐일 거 같다. 스프링에 대한 기본 지식이 너무 없다 ㅠㅠ 코드를 혼자 작성할 줄 아는 게 없다...
앞으로의 다짐
- 지금의 최선은 API 빡세게 공부하자!!
'Weekly I Learned' 카테고리의 다른 글
WIL_항해99_6주차 (0) | 2022.06.20 |
---|---|
WIL_항해99_5주차 (0) | 2022.06.13 |
WIL_항해99_3주차 (0) | 2022.05.29 |
WIL_항해99_2주차 (0) | 2022.05.22 |
WIL_항해99_1주차 (0) | 2022.05.15 |