1. 내가 이해한 JPA
쉽게 말해 반복적인 SQL 쿼리문을 대신 처리해줘서 개발자는 객체 지향적으로 코드를 작성하는데 집중할 수 있다.
JAVA의 객체지향과 데이터베이스의 구조는 충돌되는 부분이 있다. 상속이 그 대표적인 사례인데 객체엔 상속이 존재하지만 데이터베이스엔 존재하지 않는다. 이를 패러다임 불일치라고 하는데 이 부분이 원래 개발자가 코드 작성을 통해 해결해야하지만 JPA는 패러다임 불일치를 개발자 대신 해결해준다.
위처럼 객체와 데이터베이스의 구조를 비슷하게 만든다고 한들 JPA를 이용하지 않으면 단순 삽입, 조회 기능에 작성해야할 코드가 적지 않다.
abstract class Item {
Long id;
String name;
int price;
}
class Album extends Item {
String artist;
}
class Movie extends Item {
String director;
String actor;
}
class Book extends Item {
String author;
String isbn;
}
사진에 보여진 자바 객체 코드는 위와 같고, ALBUM 테이블에 무언가 삽입하려면
INSERT INTO ITEM ...
INSERT INTO ALBUM ...
이렇게 sql만 두줄 작성해야하고, JDBC API를 이용해서 코드를 작성하려면 ITEM용 SQL을 작성하고 ALBUM용 SQL을 따로 작성해야한다.
이러한 과정이 패러다임 불일치를 해결하기 위해 개발자가 들이는 비용인데 이를 JPA가 중간에서 해결해준다.
presist()메소드를 사용해서 객체를 저장한다.
jpa.persist(album);
JPA는 다음 SQL을 작성하고 실행해서 객체를 ITEM, ALBUM 두 테이블에 나누어 저장해준다.
// JPA 내부적으로 자동으로 작성, 실행
INSERT INTO ITEM ...
INSERT INTO ALBUM ...
이 처럼 개발자가 sql을 따로 작성하거나 JDBC API를 이용하면서 작성해야할 코드가 생략되는 것을 볼 수 있다.
*객체의 참조와 데이터베이스의 pk,fk 등 패러다임 불일치에 대한 설명을 좀 더 길어질 수 있지만 패러다임 불일치에 대해 더 깊게 파고들면 주제에 벗어나는 것 같아 따로 포스팅을 해야겠다.
JPA는 개발자가 객체지향적인 코드 작성에만 몰두할 수 있게 패러다임 불일치를 해결하고, SQL 쿼리문을 대신 작성해주는 API인 것 같다.
2. 내가 이해한 디자인 패턴 - MVC
MVC 디자인 패턴 특징
소프트웨어가 서비스하기 위해서는 여러 과정과 처리가 필요한다.
그러한 처리들을 각 기능 단위 별로 나눠서 처리한다.
그러므로써 프로그래밍을 할 때 역할을 하는 정돈된 코드를 작성할 수 있다.
디버깅이나 코드 가독성을 높인다.
3. 내가 이해한 RESTful
REST의 의미
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
REST의 개념
HTTP URI를 이용해 HTTP Method(POST, GET, PUT, DELETE)를 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
CRUD란?
RESTful을 이해하기 위해서는 먼저 REST API 설계 규칙부터 알아야한다.
RESTful하다는 것은 위 규칙을 지키면서 CRUD를 각 적합한 상황에 사용하는 것이다.