서론JPA와 Spring Data JPA는 서로 다른 개념이라는 것, 그리고 Spring Data JPA는 JPA를 더 쉽게 사용할 수 있는 라이브러리라는 것은 알고 있었다. 하지만 실제로 Spring Data JPA가 어떤 방식으로 JPA를 더 편리하게 만들어주는지는 모르고 사용하고 있었다. 그래서 오늘은 Spring Data JPA가 JPA 위에서 어떤 기능들을 제공하고, 어떻게 개발을 편리하게 도와주는지 구체적으로 살펴보려고 한다. JPAJPA(Java Persistence API)는 자바 ORM(Object-relational mapping) 표준 명세로, ORM 프레임워크가 구현해야 하는 인터페이스다. JPA의 주요 목적 중 하나는 Java에서 데이터를 지속적으로 저장하기 위한 표준적인 접근..
서론앞서 가상 메모리 포스팅을 하면서 프로세스를 이루는 모든 페이지가 메모리에 적재되지 않아도 된다는 것과, 이처럼 메모리에 필요한 페이지만을 적재하는 기법이 요구 페이징이라고 하는 것을 알아보았다. 요구 페이징을 통해 페이지들을 메모리에 점차 적재하다 보면 언젠가는 메모리가 가득 찰 것이다. 메모리에 페이지가 가득 찬 상태에서 추가적으로 페이지를 적재해야 한다면 메모리에 적재된 일부 페이지를 스왑 아웃해야 한다. 이때 메모리에 적재된 페이지 중 보조기억장치로 내보낼 페이지를 선택하는 방법을 페이지 교체 알고리즘이라고 한다. 페이지 교체 알고리즘은 컴퓨터 전체 성능과 직결된다. 어떤 알고리즘이 사용되느냐에 따라 페이지 폴트의 발생 빈도가 달라질 수 있기 때문이다. 어떤 것이 좋은 페이지 교체 알고리즘일..
서론가상 메모리란 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 기법이다. 그렇다면 이러한 메모리 관리 기법이 왜 필요할까? 새로운 프로세스는 새롭게 메모리에 적재되고, 사용되지 않는 프로세스는 메모리에서 삭제된다. 즉, 메모리 정보는 자주 변경될 수 있다는 의미다. 그렇기 때문에 메모리에 적재된 모든 프로세스와 CPU가 이렇게 실시간으로 바뀌는 정보를 모두 기억하고 있기는 어렵다. 그렇다면 CPU는 어떻게 메모리에 적재된 프로세스의 주소를 인식하고 관리할까? 지금부터 알아보도록 하자. 물리 주소와 논리 주소CPU와 프로세스는 메모리의 하드웨어 상 실제 주소인 물리 주소가 아니라 논리 주소를 이용한다. 논리 주소는 프로세스마..
데이터베이스 인덱스 테이블을 구현할 때 트리 구조의 B+Tree와 B-tree 인덱스 방식을 많이 사용한다. B tree의 시간 복잡도는 O(log N)으로, B tree 인덱스를 사용하면 데이터의 삽입, 갱신, 삭제 등에 드는 작업 비용을 줄일 수 있기 때문이다. 그런데 균형 이진 탐색 트리인 AVL Tree와 Red-Black Tree도 시간 복잡도 O(log N)으로, B Tree와 시간 복잡도가 동일하다. B 트리의 시간 복잡도 O(log N) 균형 이진 탐색 트리 시간 복잡도 O(log N) 둘 다 O(log N)인데 왜 균형 이진 탐색 트리가 아닌 B 트리 계열을 인덱스로 사용하는 걸까? 잠시 컴퓨터 구조를 살펴보도록 하자. CPU(Central Processing Unit, 중앙 처리..
JVM(Java Virtual Machine) 이란?JVM은 Java Virtual Machine의 줄임말로 직역하면 자바를 실행하기 위한 가상 컴퓨터라고 할 수 있다. 자바는 OS에 종속적이지 않는다는 특징을 가지고 있는데, OS에 종속받지 않고 CPU가 자바를 인식, 실행할 수 있게 해주는 것이 바로 JVM이다. 자바의 특징 중 하나인 자동 메모리 관리(Garbage Collection) 또한 JVM이 수행한다. 자바 소스코드, 즉 원시 코드(*.java)는 CPU가 인식 하지 못하므로 기계어로 컴파일 해줘야 한다.하지만 자바는 JVM을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아닌 JVM이 인식할 수 있는 바이트 코드(*.class)로 변환된다. 자바 코드를..
이번에는 Garbage Collection 알고리즘에 대해 알아보도록 하자.GC를 수행하기 위해 Stop-The-World가 발생되고 이 때문에 애플리케이션의 지연 현상이 두드러지게 되었고, 이를 막기 위해 다양한 가비지 컬렉션 알고리즘이 나왔다. Serial GC싱글 스레드로 동작하며 Serial GC의 Young 영역은 이전 게시글에서 보았던 알고리즘(Mark-and-Sweep)대로 수행된다. Old 영역에서는 Mark-Sweep-Compaction 알고리즘이 사용되는데, 기존의 Mark-And-Sweep에 Compact라는 작업이 추가되었다. Compact는 heap 영역을 정리하기 위한 단계로 Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로..