데이터베이스 개론 | 김연희 - 교보문고데이터베이스 개론 | 기초 개념부터 빅데이터까지 큰 흐름이 보이는 데이터베이스 교과서데이터베이스로 첫 항해를 떠나는 이들에게 지도와 돛이 되어주는 책입니다. 마인드맵으로 생소한 개product.kyobobook.co.kr(지금은 데이터베이스 개론 3판이 최신 개정판입니다.) 데이터베이스에 대한 기초 지식이 전혀 없는 입문자에게 추천할 만한 책이다. 다른 입문서들이 SQL 문법이나 활용 예제에 조금 더 치중되어 있는 반면, 이 책은 전공 교재로 집필된 만큼 SQL뿐 아니라 데이터베이스의 이론적인 내용이 잘 담겨있다. 특히 데이터베이스가 무엇인지, 데이터베이스 설계를 위한 모델링은 어떻게 해야 하는지, 정규화의 의미와 필요성은 무엇인지, 트랜잭션의 개념과 병행 제어를 ..
개요 웹의 기반이 되는 HTTP프로토콜은 근본적으로 무상태성(Stateless)이라는 특징을 가진다. 이는 서버가 클라이언트의 이전 요청을 기억하지 못한다는 의미이다. 모든 요청은 독립적인 것으로 취급되기 때문에, 서버는 방금 전 통신한 클라이언트가 다시 요청을 보내도 그 클라이언트가 누구였는지 알지 못한다. 마치 서버가 단기 기억상실증에 걸린 것처럼, 매번 "누구시죠?"라고 묻는 것과 같다. 이러한 방식은 서버의 부담을 줄이고 확장성을 높이는 장점이 있으나, 로그인 유지나 장바구니 기능 등 연속적인 상태가 필요한 서비스를 구현하기에는 어려움이 있다. 쿠키(Cookie)쿠키는 HTTP의 무상태성을 보완하기 위해 등장한 것이 쿠키이다. 쿠키는 서버가 클라이언트(브라우저)에 데이터를 저장하고, 클라이언트가 ..
개요 멀티 스레드 환경에서는 여러 스레드가 동시에 공유 자원에 접근할 수 있다. 이때 하나의 스레드가 값을 읽거나 수정하는 도중에 다른 스레드가 접근하게 되면 정합성에 문제가 발생할 수 있다. 이러한 구역을 임계영역(Critical Section)이라 하며, 반드시 동시에 하나의 스레드만 접근할 수 있도록 상호배제(mutual exclusion)이라는 기법을 지켜야한다. balance라는 공유 변수를 1증가시키는 연산을 수행하고 있다. 이때 소스코드의 임계영역을 락으로 둘러 그 임계구역을 마치 하나의 원자 단위 명령어인 것처럼 실행되도록 한다.lock_t mutex;...lock(&mutex);balance = balance + 1;unlock(&mutex);락은 상호배제(mutual exclusion)..
개요 Spring 프레임워크는 IoC(제어의 역전) 컨테이너를 통해 객체 생성과 의존성 주입을 자동으로 관리한다. 이때 핵심적으로 활용되는 기술이 리플렉션(Reflection)이다. 스프링 컨테이너는 각 Bean을 BeanDefinition이라는 메타정보 객체에 정의해두고, 이를 기반으로 리플렉션을 이용해 실제 객체 인스턴스를 생성한다. 이 과정은 XML설정이나 애노테이션을 읽어 BeanDefinition을 구성하는 단계부터 시작되며, 이후 내부 로직을 확인하면 리플렉션이 어떤 방식으로 객체 생성에 활용되는지 확인할 수 있다. 이러한 복잡한 과정을 거치면서 의존성 주입(DI)를 사용하는 이유는 명확하다. 객체를 사용하는 쪽에서 직접 생성하지 않고, 외부(스프링 컨테이너)에서 생성된 객체를 주입받음으로써 ..
개요 JVM은 .class파일의 정보를 클래스 로더를 통해 읽어오고, 이 정보는 메소드 영역(Method Area) 혹은 Java 8 이상에서는 메타스페이스(Metaspace)에 저장된다. 이러한 구조는 런타임 시 클래스의 내부 정보를 동적으로 분석하거나 조작할 수 있게 해주는 기반이 되며, 바로 이 기능이 리플렉션(Reflection)이다. Spring 프레임워크는 이 리플렉션 기능을 활용하여, 적절한 의존 객체를 찾아 자동으로 주입(Dependency Injection)해준다. 대표적으로 @Autowired 덕분에 클라이언트 코드는 구체 클래스가 아닌 추상화(인터페이스)에만 의존하게 되어 DIP(Dependency Inversion Principle) 를 만족하며, 새로운 구현체를 추가해도 기존 코..
좋다고 알려졌지만 현재 2판이 절판된 상태이다. 그럼에도 불구하고 이 책을 꼭 읽어 보고싶다는 욕망하나로 어찌저찌 중고로 구매해서 읽을 수 있었다. 이 책을 처음 접했을 때, 문득 대학 시절 네트워크 전공수업이 떠올랐다. 당시 수업을 맡았던 교수님은 연세가 꽤 있으셨고, 기말고사에는 단 하나의 서술형 문제가 출제되었다."브라우저에 URL을 입력하면 내부적으로 어떤 일이 발생하는가?" 시험은 오픈북이였지만, 문제를 보는 순간 싸한 기분이 들었던 기억이 난다. 한 학기 동안 배운 내용을 단순히 암기해서 푸는 것이 아니라, 전체적인 흐름을 이해하고 이를 논리적으로 설명할 수 있어야 했기 때문이다. 네트워크의 본질을 꿰뚫는 핵심적인 물음이었다. 사실 이 질문은 기술 면접에서도 자주 등장하는 단골 문제이다. "브..
개요 지난 글에서는 유저공간과 커널공간 혹은 커널 내부에서 발생하는 불필요한 데이터 복사를 최적화 하는 기술인 zero-copy를 이론 중심으로 살펴보았다. 본 포스트에서는 직접 구현한 Java NIO 기반 웹 애플리케이션 서버의 정적 파일 성능 병목 현상을 분석하고, 이 문제를 해결하기 위해 Java NIO의 FileChannel.transferTo()를 이용해 Zero-Copy를 직접 적용한 과정을 기록한다. 이를 통해 이론으로만 접했던 Zero-Copy가 실제 애플리케이션의 성능에 미치는 영향을 정량적으로 확인하고, 도입 과정에서 고려해야 했던 아키텍처 변경 사항까지 함께 다룬다. (이전 글은 아래 링크를 참고 바랍니다.) 메모리 복사를 최소화하는 기술, Zero-Copy개요 이전 글에서 다룬 인터..
개요 이전 글에서 다룬 인터럽트는 CPU의 대기 시간을 줄여주고, DMA는 CPU가 직접 데이터 전송을 수행하는 부담을 줄여준다. 하지만 여전히 해결되지 않은 비효율이 존재한다. 커널 공간(Kernel Space)과 사용자 공간(User Space)사이에서 발생하는 데이터 복사이다. 이러한 문제를 해결하기 위해서 등장한 기술이 바로 Zero-Copy이다. 현재 제로 카피를 주제로 가장 유명한 아티클 중 하나인 IBM의 'Efficient data transfer through zero copy'을 기반으로 제로 카피의 원리와 필요성과 구현된 mmap(), sendfile()시스템 콜에 대해 알아본다. (이전 글은 아래 링크를 참고 바랍니다.) I/O장치와 인터럽트 그리고 DMA개요 입출력(I/O)은 컴퓨..