++/CS

[TIL] CS공부 2일차

writtenbyrla 2024. 3. 6. 12:03

JPA의 더티 체킹이란 무엇인가요?

Dirty는 데이터의 변경된 부분을 뜻하며 Dirty Checking은 데이터의 변경된 부분을 검사하는 것을 뜻합니다.

대표적으로 데이터 update 시 사용되는데, 따로 update에 관한 쿼리를 작성하지 않아도 dirty checking을 통해 변경된 부분을 감지하여 데이터 업데이트를 수행하기 때문에 코드의 복잡성을 줄일 수 있습니다.

더티 체킹은 영속성 컨텍스트가 관리하는 엔티티에만 적용되며, Transaction이 커밋되기 전까지 변경사항을 추적하여 스냅샷을 만들어놓고 Transaction이 커밋된 시점에서 스냅샷과 비교해 변경된 사항이 감지되면 update 쿼리를 데이터베이스로 전달하여 엔티티의 변경된 상태를 반영합니다.

하지만 Dirty Checking으로 생성된 update 쿼리는 기본적으로 모든 필드를 업데이트 하므로 엔티티의 필드가 많은 경우에는 전체 필드를 update 하는 쿼리가 부담될 수 있습니다. 이런 경우에는 해당 엔티티에 @DynamicUpdate를 추가하여 변경된 필드만 데이터베이스에 반영될 수 있도록 할 수 있습니다.

 

++ 영속성 컨텍스트란?

엔티티를 영구적으로 저장하는 환경으로 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 역할을 합니다. 엔티티 매니저 생성 시에 영속성 컨텍스트가 만들어지며 엔티티 매니저를 통해 영속성 컨텍스트에 접근하고 관리할 수 있습니다.

 

++ 영속 상태란? 영속성 컨텍스트에 의해 엔티티가 관리되고 있는 상태입니다.

++ 비영속 상태란? 엔티티 매니저로 영속성 컨텍스트에 저장하지 않은 상태입니다.

 

 

 

 


 

 

 

 

JVM 이란 무엇이고 왜 필요한지 설명해 주실 수 있을까요?

 

JVM이란 자바 프로그램이 실행되는 환경을 제공하는 가상 머신입니다.

운영체제에 종속받지 않고 독립성을 유지하기 위해 JVM을 사용합니다. "한 번 작성하고 어디에서나 실행한다"는 원칙에 따라 어느 기기나 어느 운영체제에서도 실행될 수 있게 합니다.
또한 JVM은 Garbage Collection을 통해  불필요한 코드를 정리하여 자동으로 효율적인 메모리 관리하며, 다중 스레드 프로그래밍을 지원하여 스레드 간 동기화와 관련된 복잡한 작업을 단순화합니다.

 

++ JVM은 어떻게 설치하는지 알고 계시나요?

JDK(자바 개발 도구)는 JRE(자바 실행 환경)를 포함하고 있으며, JRE는 JVM을 포함하고 있어 사실상 JAVA 사용을 위해 JDK를 설치하게 되면 따로 JVM을 설치하지 않아도 자동으로 설치됩니다.

 

++ Java 버전을 설치할 때 어떤 버전을 쓰고 있고, 왜 그걸로 선택하셨는지 말해주세요.

 

 

 

 


 

 

 

 

 

Java가 컴파일되는 과정은 어떻게 되는지 설명해주실 수 있을까요?

개발자가 자바 소스코드를 .java인 확장자로 소스파일을 작성합니다.

작성된 소스파일은 자바 컴파일러(javac.exe)로 컴파일되어 확장자가 .class인 바이트코드(기계어)로 번역되어 저장됩니다. 

컴파일 된 .class 파일은 JVM의 클래스 로더에게 전달되며, 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역인 JVM의 메모리 영역에 올립니다.

JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행하는데, 실행 엔진은 두 가지 방식으로 변경합니다.
첫 번째는 바이트코드(기계어)를 하나씩 읽어서 해석하고 실행하는 인터프리터 방식이며 하나씩 읽어서 해석하기 때문에 전체적인 실행 속도가 느리다는 단점이 있습니다. 
이를 보완하기 위해 JIT 컴파일러 방식을 도입하였는데, 이는 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 직접 실행하는 방식입니다. 하나씩 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 인터프리터 방식에 비해 전체적인 실행속도가 빠르다는 장점이 있습니다.

 

'++ > CS' 카테고리의 다른 글

[TIL] CS공부 5일차  (0) 2024.03.09
[TIL] CS공부 4일차  (0) 2024.03.08
[TIL] CS공부 3일차  (0) 2024.03.07
[TIL] CS공부 1일차  (0) 2024.03.05
주니어 자바 개발자를 위한 100가지 질문(1) - 기초  (0) 2023.12.20