가비지 컬렉션(Garbage Collection)이란?가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 사용하지 않는 메모리 영역을 주기적으로 삭제하는 프로세스를 말한다. C나 C++에서는 가비지 컬렉션 없이 개발자가 수동으로 메모리 할당과 해제를 일일이 해줘야 하는 반면 Java는 가비지 컬렉터가 메모리 관리를 대신 해주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자는 메모리 관리, 메모리 누수(Memory Leak) 문제에 대해 완벽하게 관리하지 않아도 되어 개발에만 집중할 수 있다는 장점이 있다. (가비지 컬렉션은 꼭 자바에만 있는 개념이 아니다. ..
결론부터 말하자면 JPA와 MyBatis 둘 다 Persistence Framework이지만 JPA는 ORM이고 MyBatis는 SQL Mapper이다. ORM? SQL Mapper? Persistence? 먼저 Persistence가 무엇인지 알아보도록 하자. Persistence란?? Persistence(영속성)란 프로그램이 종료되어도 사라지지 않는 것을 의미한다. 예를 들어 애플리케이션을 사용하다가 종료하고 다시 실행했을 때 이전에 저장한 데이터를 다시 불러올 수 있는 것을 말한다. Persistence FrameworkPersistence Framework란 데이터의 저장, 조회, 변경, 삭제 (CRUD)를 다루는 클래스 및 설정 파일들의 집합으로, Persistence Framework를 ..
Redis란??Redis는 Remote Dictionary Server의 약자로, 원격에 위치하고 프로세스로 존재하는 In-Memory 데이터베이스이자 Dicionary(key-value) 구조 데이터 관리 Server 시스템이다. 일반 데이터베이스 같이 디스크에 데이터를 쓰는 구조가 아니라 메모리(dram)에서 데이터를 처리하기 때문에 작업속도가 빠르다. DB, Cache, Message Queue, Shared Memory 등으로 사용한다. 캐시(Cache)란?캐시란 데이터나 계산 결과를 미리 저장하여 빠른 액세스와 높은 성능을 제공하기 위한 저장소를 말한다.즉, 미리 결과를 저장하고 나중에 요청이 오면 해당 요청에 대해 DB를 참조하지 않고 캐시에 접근하여 요청을 빠르게 처리하는 것을..
RDB는 데이터 구조가 명확하며 변경될 여지가 없으므로 명확한 데이터 구조가 중요한 경우에 사용하는 것이 좋다. 또한 데이터의 중복이 없기 때문에 데이터 업데이트가 많을 때 유리하다.NoSQL은 정확한 데이터 구조를 알 수 없고, 데이터가 변경/확장될 수 있는 경우에 사용하는 것이 좋다. 또한 데이터 중복으로 인해 업데이트 시 모든 컬렉션에서 수정이 필요하기 때문에 업데이트가 적고 조회가 많을 때 유리하다. RDB (Relational Database, 관계형 데이터베이스) 관계형 데이터베이스는 데이터가 2차원 테이블에 저장되며 데이터의 구조와 데이터 간 종속성 등을 알 수 있다. 테이블이란 키와 값으로 이루어진 2차원 형태로, 행과 열로 구성된다.스키마를 바탕으로 데이터베이스의 구조를 정의 한다...
OSI 7계층OSI 7계층(Open System Interconnection Reference Model 7 Layers)이란 국제 표준화 기구(ISO, International Organization for Standardization)가 1977년에 정의한 국제 통신 표준 규약으로, 통신의 접속에서부터 완료까지의 과정을 7단계로 나눈 네트워크 표준 모델이다. 계층을 나눈 이유가 무엇일까? 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴 단계만 고칠 수 있기 때문이다. 데이터 송수신데이터를 송신할 때는 높은 계층에서 낮은 계층으로 전달하고, 데이터가 수신부의 가장 낮은 계층에 ..
가변 객체(mutable Object)란?가변 객체는 Java에서 Class의 인스턴스가 생성된 이후에 내부 상태가 변경 가능한 객체이다. 멀티 스레드 환경에서 사용하려면 별도의 동기화 처리가 필요하며, 대표적인 가변 객체로 ArrayList, HashMap, StringBuilder, StringBuffer 등이 존재한다. 이 외에도 개발자가 커스텀 객체를 생성하여 내부 상태를 변경할 수 있게 만든다면 그것도 가변 객체가 된다. 불변 객체(Immutable Object)란?불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메서드만을 제공하며, 객체의 내부 상태를 제공하는 메서드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다...