“Real MySQL 8.0” 스터디를 진행하던 중 WAL(Write-Ahead Logging)이라는 개념이 언급되었고, 이에 대해 더 깊이 공부할 필요성을 느껴 이 글을 작성하게 되었다. WAL은 데이터베이스의 성능과 안정성을 모두 고려할 때 매우 중요한 개념이다. 데이터가 실제 디스크에 기록되기 전에 로그를 먼저 기록하는 방식을 통해, 시스템 장애가 발생하더라도 데이터의 무결성을 보장할 수 있다. 이러한 특성 덕분에 복구 과정에서 효율적인…
요청이 컨트롤러로 들어올 때, 요청에 포함된 값들(Json 등)을 바탕으로 원하는 객체를 만들어내는 작업을 Spring이 ArgumentResolver를 통해 자동으로 처리해줄 수 있다. 그런데 이 ArgumentResolver가 도대체 무엇이길래 그런 일을 할 수 있을까? 또, 이를 통해 무엇을 할 수 있기 때문에 Spring이 이 기능을 지원하는지 알아보자. 실제로 Kicketing 프로젝트에서 사용했던 로직이다. 요청에 포함된 값으로 객체를 생성하는 과정을 ArgumentResolver가…
프록시란 ‘대리’ 라는 의미를 갖고 있으며, 서버와 서버사이의 중계기 역할을 한다 프록시 서버란? 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버 캐시/보안/트래픽 분산 등 여러 장점을 가질 수 있음 프록시 서버는 네트워크 상 어디에 위치하느냐, 혹은 어느 방향으로 데이터를 제공하느냐에 따라 Forward Proxy와 Reverse Proxy 로 나뉘게 된다. 보통 일반적으로 말하는 Proxy는 Forward Proxy에 해당함 Forward Proxy?…
도커란? 도커는 컨테이너 기반 가상화를 활용하여 애플리케이션을 보다 쉽게 배포하고 관리할 수 있도록 도와주는 플랫폼입니다. 도커를 제대로 이해하기 위해서는 먼저 컨테이너와 가상화가 무엇인지 알아보는 것이 중요합니다. 왜 가상화가 등장했을까요? 하나의 서버(비싼 서버)에서 한 가지 프로젝트만 실행하면 문제가 없겠지만, 하나의 서버에서 두 가지 또는 세 가지 서비스를 운영하게 될 경우, 각 서비스에서 사용하는 모듈이나 라이브러리가 다를…
직렬화(serialize)란? 자바 시스템 내부에서 사용되는 객체나 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 변환하는 기술이다. 이렇게 변환된 데이터는 파일로 저장하거나 네트워크로 전송하여 다른 시스템에서도 사용할 수 있게 된다. 반대 되는 개념인 역직렬화(Deserialize)란? 직렬화된 데이터를 다시 객체로 복원하는 과정이다. 직렬화된 데이터를 다시 읽어서, 원래의 객체 상태로 돌려놓는 것이다. 직렬화의 종류 직렬화의 종류는 다양한데 CSV,…
GC(Garbage Collector) GC란 자바 애플리케이션에서 사용하지 않는 메모리를 자동으로 수거하는 기능을 말한다. C/C++ 같은 언어는 메모리를 할당하고 직접 해제해야했지만, 자바에서는 GC를 이용하여 개발자들이 메모리 관리를 비교적 신경쓰지 않아도 된다. GC가 필요한 이유? 프로그램이 동적으로 할당했던 메모리 영역(= Heap Area) 중 필요 없게된 영역(= 어떤 변수도 가르키지 않음)을 알아서 해제해준다. 장점 → 개발자의 실수를 막아줌 단점 → 실시간성이…
JVM JVM이란, Java Virtual Machine의 약자로서, 직역하면 자바를 실행하는 머신입니다. JVM을 사용하면 자바 프로그램을 모든 플랫폼에서 제약 없이 동작할 수 있습니다. JVM을 이해하기 위해서 어떻게 자바 코드가 실행되는지 먼저 알아보겠습니다. 자바는 C언어와 함께 대표적인 컴파일 언어입니다. 여기서 말하는 컴파일(Compile)이란, 우리가 작성한 코드를 컴퓨터가 이해할 수 있는 과정으로 바꾸는 일종의 번역 과정입니다. 우리가 동작시키는 자바 프로그램들은…