티스토리 뷰

인프런수업/JPA

JPA 기본

날따라해봐요요롷게 2022. 5. 13. 00:00

JPQL (Java Persistence Query Language)

JPA를 사용하면 엔티티 객체를 중심으로 개발 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색을 해야한다.

하지만 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.
애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.
그래서 JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
SQL과 문법이 유사하고, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN등을 지원한다.
JPQL은 엔티티 객체를 대상으로 쿼리를 질의하고 SQL은 데이터베이스 테이블을 대상으로 쿼리를 질의한다.

-----------------------------------------------------------------------------

트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위

트랜잭션 4가지
원자성 (Atomicity)
: 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것

일관성 (Consistency)
: 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것

독립성 (Isolation)
: 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.

지속성 (Durability)
:트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 한다는 점
-----------------------------------------------------------------------------
Commit이란 하나의 트랜잭션이 성공적으로 끝난 후, 데이터베이스가 일관성있는 상태에 있을 때, 하나의 트랜잭션이 끝났다라는 것을 알려주기위해 사용하는 연산
-----------------------------------------------------------------------------
인덱스(INDEX)는 DBMS의 검색 속도를 높이기 위한 기술 입니다.
DBMS는 데이터를 순차적으로 쌓으므로, 특정 데이터를 찾기 위해서는 데이터의 FULL-SCAN인 순차 탐색(O(N))이 필요
DBMS는 특정 데이터를 특별한 자료 구조로 쌓아 탐색 속도를 개선할 수 있는 기능을 제공합니다.
해당 기능을 인덱스라 부르고 쌓은 데이터들을 인덱스 테이블이라 부릅니다.

-----------------------------------------------------------------------------

영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻
애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다.
엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

-----------------------------------------------------------------------------

ORM은 객체와 테이블은 자동으로 매핑해주는 역할을 합니다.
객체와 테이블은 애초에 호환을 염두에 두고 만들어진게 아니여서 불일치가 발생하는데,
ORM을 통해 객체간 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 방지합니다.
따라서 ORM을 사용하면 SQL을 따로 작성하지 않아도 객체를 통해 간접적으로 데이터베이스를 조작할 수 있습니다.

-----------------------------------------------------------------------------
엔티티는 데이터의 집합을 의미합니다.
엔티티는 식별자, 인스턴스 집합, 속성, 관계, 업무 의 특징이 있습니다.
유형, 개념, 사건 엔티티로 분류할 수 있습니다.

-----------------------------------------------------------------------------

Setter를 무분별하게 사용하면 안되는 이유는 무엇인가요?
setter는 public으로 어떤 곳에서도 접근이 가능해 객체의 일관성을 유지하기 어렵습니다.

-----------------------------------------------------------------------------

생성자 주입의 장점
생성자 주입시 객체의 불변성을 확보하며 테스트 코드의 작성이 용이합니다.
또한 final 키워드를 사용할 수 있으며, 컴파일 시점에 누락된 의존성을 확인할 수 있습니다.

-----------------------------------------------------------------------------

인스턴스에 대해 설명해보세요

인스턴스는 특정 클래스로부터 선언된 해당 클래스 타입의 객체를 말합니다.
선언 이후 메모리에 할당됩니다.
-----------------------------------------------------------------------------
인스턴스화 된다’라는게 무슨 의미인지 설명해보세요

클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화 라고 합니다.
이렇게 선언된 해당 클래스 타입의 객체를 인스턴스 라고 합니다.
-----------------------------------------------------------------------------

process에 대해 아는대로 설명해보세요
프로세스는 실행 중인 프로그램으로 각각 독립된 CPU의 할당을 받을 수 있는것을 말합니다.
운영체제로부터 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하여 프로세스라고 합니다.

-----------------------------------------------------------------------------

thread에 대해 아는대로 설명해보세요
스레드는 프로세스의 실행 단위라고 할 수 있습니다.
한 프로세스 내에서 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있습니다.

-----------------------------------------------------------------------------
thread와 process의 차이를 설명할 수 있나?
프로세스는 CPU로부터 독립된 자원을 할당받고
쓰레드는 프로세스에 할당된 자원을 공유하여 사용합니다.

이때 한 프로세스가 강제 종료된다면 다른 프로세스에게 영향을 미치지 않지만
스레드의 경우 메모리 영역의 내용을 공유하기 때문에 한 스레드에서 오류가 발생하면
다른 스레드 모두 강제 종료됩니다.

 

 

 

 

 

'인프런수업 > JPA' 카테고리의 다른 글

JPA Repository - Query Method  (0) 2022.05.11
h2  (0) 2022.04.25
연속성 컨텍스트  (0) 2022.04.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함