전체 글
-
아파치 하이브란? (Apache Hive)Data 2021. 2. 24. 22:21
아파치 하이브는 하둡 환경에서 1) 복잡한 맵리듀스(또는 다른 엔진) 코드를 SQL과 유사한 간단한 HiveQL로 처리가 가능하도록 하고, 2) 파일시스템에 저장된 데이터에 catalog와 metastore를 제공하여 논리적 데이터 베이스, 테이블, 파티션을 제공하여 데이터를 구조화할 수 있게 합니다. 이번글에서는 아파치 하이브의 구조를 중심으로 아래와 같은 내용을 살펴보도록 하겠습니다: 하이브의 탄생배경 아파치 하이브 아키텍쳐 하이브의 데이터모델과 쿼리 (Hive QL) 하이브의 탄생배경 하이브는 페이스북에서 개발이 시작되어, 넷플릭스와 같은 다른 기업도 기여하였습니다. 2000년대 초, 하둡이 탄생하여 데이터 분석은 데이터베이스 기반에서 하둡 환경을 기반으로 진행되기 시작하였습니다. 하둡은 기존의 데..
-
파이썬 int 내부구조 (Python int Internals)Python 2021. 2. 22. 21:59
Python 버젼 2.2 이후로는 파이썬에서의 정수는 언제나 int 타입을 가집니다 (이전에는 short int, long int 2가지로 나뉘어 있었습니다)[2]. 그리고 int 타입의 크기는 오로지 가용한 메모리 사이즈로 인해 제한 받습니다. 파이썬 int가 가질 수 있는 max 값(바이트로)은 아래와 같은 sys.maxsize를 통해 구할 수 있는데요: import sys print(sys.maxsize) # 9223372036854775807 이번 글에서는 파이썬 int가 cpython에서 어떻게 구성되는지 살펴보겠습니다: cpython longobject 내부구조 파이썬의 다양한 int 값은 실제 어떻게 cpython longobject에 저장되나 cpython longobject 내부구조 in..
-
서블릿의 세션 관리 (Servlet Session Management)Java 2021. 2. 21. 16:35
세션은 특정 시간의 구간을 의미하며, 세션 관리는 사용자의 상태를 유지하는 방법을 말합니다. 이러한 세션관리가 필요한 이유는 사용자에게 상태를 부여해야할 경우가 존재하기 때문입니다. 예로, 사용자 상태를 관리하여 매 페이지를 이동할 때마다 로그인을 요구하지 않고 세션을 통해 이미 로그인 한 사용자임을 입증할 수 있습니다. 그러나, HTTP 프로토콜은 그 자체로 stateless하기 때문에, HTTP 프로토콜 '바깥'에서 이러한 상태 관리를 담당하여야 합니다. 서블릿의 명세 상에서 이러한 세션 관리는 톰캣과 같은 서블릿 컨테이너가 담당합니다. '톰캣 내부구조'에서 살펴본 바와 같이, 세션은 주로 아래의 2가지 방법으로 관리됩니다: 브라우저 상의 쿠키를 통해서 URL Rewriting을 통해서 이번 글에서는..
-
아파치 톰캣 내부구조 (Apache Tomcat Internals)Java 2021. 2. 17. 18:53
컨텍스트를 이해하며 알아보는 Nginx 내부구조 아파치 톰캣 내부구조 (Apache Tomcat Internals) 아파치 톰캣은 Java Servlet, JavaServer Pages, Java Expression Language와 WebSocket 기술의 오픈소스 구현체로, Java 코드가 실행될 수 있는 "pure Java" HTTP Web server 환경을 kadensungbincho.tistory.com 아파치 톰캣은 Java Servlet, JavaServer Pages, Java Expression Language와 WebSocket 기술의 오픈소스 구현체로, Java 코드가 실행될 수 있는 "pure Java" HTTP Web server 환경을 제공합니다 [1]. 웹 서버 역할을 하는 ..
-
서블릿(Servlet)의 구조와 접근방식 (feat. CGI)Java 2021. 2. 16. 08:18
서블릿은 자바 소프트웨어 컴포넌트로 클라이언트의 요청을 처리하기 위해서 서버 안에서 실행됩니다 [1, 2]. 서블릿은 특정 클라이언트 프로토콜에 한정되지 않으나, 주로 HTTP를 많이 사용하기에 Servlet은 보통 HTTP Servlet을 의미하곤 합니다. 서블릿은 Sun Microsystems에 의해 CGI의 한계점을 극복하기 위해 개발되었습니다. 서블릿은 javax.servlet 또는 javax.servlet.http 패키지에 존재하는 자바 인터페이스를 implement하여 만들어 집니다. HTTP 서블릿은 주로 아래와 같은 목적을 위해 사용됩니다: HTML 폼 형태로 제출된 데이터의 처리 및 저장 동적 컨텐츠 제공 (예로, 클라이언트에 쿼리 요청에 해당되는 데이터를 데이터베이스에서 읽어서 전달) ..
-
웹서버, 앱서버 그리고 CGI (Web & Application Server and CGI)Java 2021. 2. 14. 22:25
Java 기반의 웹 애플리케이션을 개발 시, 로컬에서 src/java와 src/webapp의 파일들을 서버에 올리고 실행하여 http://localhost:8080으로 들어가 체크하게 됩니다. 반면, 배포 시 어떠한 경우에는 web과 같은 경우는 하나의 서버에 그리고 src/java의 파일들을 포함한 war 파일로 압축한 것은 다른 서버에 나누어 배포 하기도 합니다. 이 글에서는 아래와 같은 사항을 중점으로 웹 서버(전자)와 애플리케이션 서버(후자), 그리고 웹 서버와 앱 서버의 커뮤니케이션을 담당하는 CGI(Common Gateway Interface)에 대해 기술합니다: CGI 웹 서버와 애플리케이션 서버 CGI 가장 처음의 그래픽 웹 브라우저인 Mosaic 브라우저가 탄생했던 웹 초창기에 stati..
-
파이썬 리스트 내부구조 (Python List Internals)Python 2021. 2. 13. 20:33
파이썬 리스트는 mutable 시퀀스(sequence)로, 주로 유사한(homogeneous) 아이템들의 콜렉션(collections)을 저장하기 위해서 사용합니다. 그렇기에 시퀀스가 기본적으로 가지는 연산자(collections.abc.Sequence ABC)들은 리스트에도 구현되어 있습니다. 이번 글에서는 CPython에서의 리스트 내부구조를 아래와 같은 사항을 중점으로 살펴보겠습니다: 리스트 내부구조와 기본 연산 메모리 할당 관련글: 파이썬 딕셔너리 내부구조 파이썬 튜플 내부구조 파이썬 클래스 내부구조 리스트 내부구조와 기본 연산 cpython 코드 상에서 파이썬 리스트는 다음과 같은 형태를 가지고 있습니다: 흔히 인지하는 리스트의 길이, len(list_a)는 PyVarObject의 ob_size..
-
Spring MVC Internals (내부구조)Java 2021. 2. 12. 23:39
Spring MVC는 Spring Framework의 일부로 Spring Web Layer에서 MVC(Model-View-Controller)를 구현한 Web-Servlet 모듈입니다. 이번 글에서는 클라이언트 요청과 응답 시 Spring MVC가 어떻게 동작하는지를 중점으로 그 구조를 살펴보겠습니다. Servlet: Java Web 애플리케이션의 기반 DispatcherServlet: SpringMVC의 중심 HTTP 요청 처리 과정 요청 처리(handle) Handler 메소드의 아규먼트와 리턴값 처리 뷰 렌더링 아래에서 SpringWeb MVC가 어떠한 방식으로 동작하는지 이해하기 위해서, 아래와 같이 간단한 hello() 메소드가 @Controller로 annotated된 클래스에 존재한다고 가정..