본문 바로가기

CS

(14)
API GateWay 1. API Gateway란? 최근 많은 서비스들이 독립적인 기능을 수행하는 작은 단위의 서비스들로 구성된 마이크로 서비스 아키텍처(Micro Service Architecture) 형태로 구축되면서 서비스의 복잡도를 줄일 수 있게 되었고, 변경에 따른 영향을 최소화하면서 개발과 배포를 할 수 있다는 장점도 얻게 되었다. 하지만 여기서 말하는 작은 단위의 서비스가 50개, 100개가 되었을 때, 이 많은 서비스들의 엔드포인트를 관리하는 데 있어서 어려움이 생기고, 또 각각의 서비스마다 공통적으로 들어가는 기능(ex 인증/인가, 로깅 등)들을 중복으로 개발해야 한다는 문제점이 발생한다. 이러한 문제점을 해결하기 위해 등장한 것이 바로 API Gateway로 API Gateway는 아래 이미지와 같이 클라이..
Web Server? WAS? Spring을 처음 공부하면서, 프로젝트를 진행하면서 자연스럽게 Tomcat을 사용하게 되었다. 처음 Tomcat을 사용하면서 WAS(Web Application Server) 라는 것은 알고 있었고 프로젝트를 진행하면서 HTTPS와 무중단 배포를 구현하면서 NginX를 사용했는데 NginX는 웹 서버라고 알게되었다. 처음에 서버면 같은 서버지 왜 WAS와 Web Server로 나뉠까? 라는 궁금증이 생겼고 미루었던 내용을 정리해보려고 한다. 1. web Server 정적인 페이지를 표현하기 위한 서버로 클라이언트로 부터 HTML, JPG, GIF 등 과 같은 문서,이미지를 HTTP프로토콜을 통해 웹 브라우저로 제공하는 서버 정적 데이터를 처리하며 다양한 동적 데이터를 요청하게 되면 WAS서버로 데이터를..
JVM 메모리 구조? JVM이란? JVM 메모리 구조를 보기전에 JVM이 무엇인지 알아야 한다. JVM은 Java Virtual Machine의 약자로 자바 가상 머신이라고 한다. 자바와 OS(운영체제) 사이에서 중개자 역할을 수행하며 자바가 OS(운영체제)에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다. 위의 이미지는 자바 프로그램의 실행 단계이다. 먼저 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환된다. 이러한 바이트 코드를 JVM에서 읽어 들인 후 복잡한 과정을 거쳐 어떤 운영체제에서든 프로그램을 실행할 수 있도록 만든다. 만약, 자바 소스 파일은 리눅스에서 만들고 윈도..
가비지 컬렉션, 컬렉터(Garbage Collection) 1. 가비지 컬렉션 Garbage Collection 약어로 GC라고 부른다. 메모리 관리 방법중 하나로 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다. 가비지 컬렉션이 없다면 프로그래머가 메모리를 할당한 뒤 수동으로 해제까지 직접 해야 한다. 메모리를 할당해놓고 필요 없어진 뒤에도 해제를 안하여 메모리 누수가 생기거나 해제했던 메모리를 다시 사용하는 실수 등에서 버그가 양산된다. 이러한 문제들을 해결하기 위해서 제시된게 가비지 컬렉션이다. 가비지 컬렉션에서 제공하는 할당과 해제를 이용하여 자동으로 프로그램이 실행되며 생기는 쓸모없어지는 메모리들을 알아서 수집하고 관리해준..
[자료구조] 스택 (Stack), 큐(Queue) 프로젝트 기간이 짧다보니 시간적 여유가 없다는 핑계로 자료구조에 대해 깊게 공부하지 못했다. 이번 프로젝트를 끝으로 개발자에 대한 꿈을 접을 생각이 없고 나는 앞으로 계속 나아가야 하기에 조금씩, 하나하나 공부해 나가려고 한다. 1. 스택 (Stack) 1-1. 스택(Stack)이란? 쉽게 얘기하자면 쌓아 올린다는 것을 의미한다. 따라서 스택 자료구조라는 것은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 말한다. 1-2. 스택(Stack)의 특징 LIFO (Last In First Out) 즉 후입선출 방식으로 동작하며 가장 최근 스택에 삽입(push)된 자료의 위치를 top이라 한다. 스택의 push는 top에 새로운 데이터를 추가하고 pop은 가장 최근에 삽입된 데이터가 스택에서 삭제된다...
메모리 구조(Stack , Heap) JVM은 기본적으로 Stack메모리와 Heap메모리 라는 두가지 저장 공간을 이용하여 메모리를 할당한다고 배웠다. Stack메모리와 Heap메모리가 무엇인지 차근차근 다시 알아보려고 한다. 1. 메모리 먼저 메모리란, 프로그램이 실행되기 위해서는 운영체제(OS)가 프로그램의 정보를 메모리에 로드해야 한다. 또한 프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는 메모리가 명령어와 데이터들을 저장해야 한다. 위와 같이 프로그램이 운영체제(OS)로 부터 할당받는 대표적인 메모리 공간은 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 구성되어있다. 2. 코드 영역(Code) 코드 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고 부르기도 한다. CPU는 코드 영역에 저장된 명령을 ..
TCP / UDP 차이와 특징 전송계층 이전 글에서 TCP/IP 모델에 대해 공부했다. TCP와 UDP는 TCP/IP의 전송계층 에서 사용되는 프로토콜이다. 전송계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층이다. TCP vs UDP TCP는 Transmission Control Protocol의 약자이고, UDP는 User Datagram Protocol의 약자이다. 두 프로토콜은 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되어 있지만, 서로 다른 특징을 가지고 있다. 먼저 TCP는 전송 제어 프로토콜, 연결 지향형 프로토콜이다. 데이터 전송 서비스는 두 통신 프로세스 간에 양방향으로 데이터가 동시에 전송될 수 있는 전이중 통신방식을 사용한다. 반명에 ..
가상메모리? 메모리란? 메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치 메모리는 크게 내부 기억장치인 주기억장치와 외부 기억장치인 보조 기억장치로 분류 가상메모리(Virtual Memory) 초창기 컴퓨터에서는 사용 가능한 RAM의 용량이, 가장 큰 실행 애플리케이션의 주소 공간보다 커야 했다. 그렇지 않을 경우 "메모리 부족" 오류에 의해 해당 애플리케이션을 실행할 수 없었다. 위와 같은 물리 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 가상 메모리 기법은 애플리케이션을 실행하는 데 얼마나 많은 메모리가 필요한지에 집중하지 않고, 대신 애플리케이션을 실행하는 데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 문제를 해결하고자 했다. 메모리 접근은 순차적이고 지역화되어 있기 때문에 ..
프로세스와 스레드 선행지식CPU : 중앙처리장치 초기의 컴퓨터는 멀티 태스킹이 불가능했다. 그러나 CPU 성능이 개선됨에 따라 Context Switching을 통해서 동시성을 구현하는 것이 가능해졌다. 동시성(Concurrency) : 동시에 실행되는 것 같이 보이는 것 2000년대 초반, 한계치 이상까지 CPU의 쿨럭을 끌어올리던 CPU 제조회사들은 2002년에 3Ghz 쿨럭을 돌파했다. 그러나 이로 인해 발생하는 발열, 엄청난 전력 소모로 인해 CPU의 작업 속도를 높이는데에 한계가 있음을 발견한다. 이에 쿨럭을 올리는 방향이 아닌, 코어의 면적을 넓히는 방향, 즉 멀티 코어 프로세서의 방향으로 나아가기 시작한다. 즉 코어 하나를 극한까지 끌어올리는 것이 아닌, 하게 된 것이다. 코어의 수를 늘려서 더 쉽게 CPU ..
인덱스를 사용하는 이유 DB를 사용하면서 데이터 양에 따라 실행 결과의 속도가 차이가 나는 것을 알고 있었다. 데이터의 양이 증가할 수록 실행 속도는 느려지고 WHERE 조건에서 필요한 데이터만 추출 후 사용하는 것이 좋다고 들었는데 보다 쿼리의 성능을 높이는 중요한 것은 인덱스를 활용한다는 것을 알게되었다. 인덱스란? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 ..