JPQL Java Persistence Query Language SQL을 추상화하여, 테이블(레코드) 단위가 아닌 Entity 객체 대상으로 DB에서 데이터를 다루도록 한다. SQL을 추상화했기 때문에 특정 DBMS의 SQL에 종속적이지 않다. DBMS는 SQL만 이해할 수 있으므로, 특정 시점에 JPQL은 SQL로 번역된다. 참고: QueryDSL JPQL은 결국 스크립트, 즉 문자열이다. 그렇다보니 동적 쿼리를 만들기가 어렵다. (버그 발생 가능성) 이를 개선하기 위해 Criteria를 사용하기도 하나, 유지보수가 어렵다는 단점 때문에 잘 사용하지 않는다. 그대신 QueryDSL을 주로 사용한다. TypedQuery, Query TypedQuery는 반환값의 타입이 명확할 때 사용한다. Query는 반환값이 타입이 불분명할 때 사용한다. getResultList(), getSingleResult() getResultList는