[Data Structures] 선형 자료구조
·
Computer Science/Data Structures
선형 자료구조(Linear Data Structures) 선형 자료구조는 원소들이 논리적으로 일렬의 순서를 이루는 자료구조이다. 각 원소가 앞/뒤 관계를 가지며 순차적으로 조직된다.예를 들어, 배열처럼 연속 메모리를 사용하거나 연결 리스트처럼 메모리 상에서는 흩어져 있지만 포인터로 한 줄을 이루는 구조가 있다. 배열은 빠른 인덱스 접근, 연결리스트는 유연한 삽입/삭제에 강점을 가진다. 스택과 큐 역시 선형 구조 위에서 각각 Last-In-First-Out(LIFO)와 First-In-First-Out(FIFO)라는 접근 규칙을 부여한 형태로 이해할 수 있다.이러한 선형 자료구조는 순서가 있는 데이터의 저장 방식과 연산의 효율성에 대해 다루는 가장 기초적인 자료구조 범주라 할 수 있겠다.리스트 추상 자료..
[Data Structures] 자료구조 개론
·
Computer Science/Data Structures
1. 서론 만약 우리가 특정 단어의 정확한 사전적 의미를 파악하기 위해 어떤 백과사전을 선택했다고 가정하자. 백과사전의 존재가치는 "저장"과 "탐색"으로 결정된다. 만약 그 백과사전에 저장된 정보가 너무 없거나, 원하는 정보를 찾는데 너무 오랜 시간이 걸린다면, 해당 백과사전은 사전으로써의 의미를 잃는다. 즉, 본질적으로 백과사전은 저장할 수 있는 능력을 가져야하며(종이에 기록), 사용자가 탐색하고자 하는 단어를 빠르게 제공할 수 있어야 한다.(문자열순 인덱스) 자료구조 또한 이와 마찬가지이다. 우리의 문제해결에 필요한 데이터들을 담을 수 있는 자료 저장 능력과, 필요할 때 꺼낼 수 있도록 탐색 가능한 구조를 제공해야한다. 컴퓨터 과학 자체가 데이터를 다루고 그것들을 활용하는 학문이기 때문에, 자료구조..
[Algorithms] 정렬 알고리즘 개론
·
Computer Science/Algorithms
1. 서론 우리가 처음 Computer Science를 공부할 때, 가장 먼저 만나게 되는 알고리즘은 정렬 알고리즘(Sorting Algorithm)이다. 기초 알고리즘의 대부분을 차지한다고 봐도 무방할 정도이다. 기술 면접을 준비하거나 알고리즘 문제를 풀이할 때도 숱하게 등장하는데, 여기서 궁금증이 생긴다. 왜 정렬 알고리즘이 그렇게 중요할까? 1. 많은 알고리즘의 전체 파이프라인을 여는 전처리 단계이다.이진 탐색(Binary Search)구간 처리(Interval Processing)투 포인터(Two Pointers)그리디(Greedy)스윕 라인(Sweep Line)좌표 압축(Coordinate Compression)위 알고리즘들은 정렬 → 스캔의 과정을 거친다.따라서 시간복잡도는 $O(n\log ..
[Algorithms] 알고리즘 분석, 시간 복잡도와 공간 복잡도
·
Computer Science/Algorithms
1. 서론 알고리즘은 문제를 해결하기 위한 절차나 방법이다. 쉽게 말해 "이 문제를 어떤 방법으로 해결할 것인가?"에 대한 답이다. 알고리즘이라는 단어 정의에서 느낄 수 있듯, 알고리즘을 다룰 때에는 "문제 해결" 자체에 중점을 두지 않는다. "어떻게"에 가장 무게를 두고 고민해야한다. 같은 문제를 해결하더라도 어떤 알고리즘은 입력이 조금만 커져도 감당할 수 없을 정도로 느려지는 반면, 어떤 알고리즘은 수백만 배의 데이터 증가에도 견딜 수 있다.가령, 이름이 총 10명 들어있는 전화번호부에서 김아무개를 찾아야하는 문제가 있다고 해보자. 단순하게 이름을 한 명씩 확인하는 방법이라면, 최악의 경우 10번을 전부 확인해야한다. 지금처럼 10명으로 작다면 문제가 되지 않지만, 사람이 1,000,000명 들어있..
[Nginx] Web Server와 WAS, 그리고 Nginx에 대하여
·
Infrastructure/Nginx
1. 서론  웹 지식을 공부하다보면 웹 서버와 웹 어플리케이션 서버(WAS)에 대한 언급이 심심치 않게 나온다. 필자는 웹 서비스 아키텍처에 대한 제대로된 개념이 확립되지 않았을 시기, 이러한 용어들이 직관적으로 와닿지 않았다. 따라서 웹 서버와 WAS가 "실제로" 어떤 형태로 존재하고 쓰이는지 정확하게 인지할 수 없었다. 하지만 프로젝트의 개발과 배포 과정을 몸소 거치며 실제 아키텍처를 피부로 느끼는 과정에서 해당하는 개념들을 나름대로 정확히 이해할 수 있게 되었다. 이번 게시에서 웹 서버와 WAS 및 Nginx 대한 설명을 기록하며 스스로는 물론이고 보는 이로 하여금 해당 개념에 대한 직관적인 이해를 제시하려 한다.2. 웹 서비스 아키텍처  먼저 간단하게 설명하자면, 웹 서버는 정적인 컨텐츠(HTML..
[Docker] Spring Boot App 배포 (4) - 서버에 배포하기
·
Infrastructure/Docker
1. 서론 빌드 도구인 gradle을 이용해 스프링부트 어플리케이션 build를 성공했다면, 실행 가능한 JAR 파일을 얻었을 것이다. 우리는 이제 이 JAR 파일을 사용해서 WAS가 내장된 스프링부트 어플리케이션에 대한 도커 이미지를 만들고 컨테이너로 구동시킬 것이다. 이전에 우리는 배포 서버로 AWS EC2 인스턴스를 활용하기로 했다. 이전 포스팅들의 흐름대로라면, EC2 인스턴스에는 Docker가 설치된 상태이고, 자신의 로컬 PC에는 빌드된 JAR 파일이 존재하는 상태이다. 도커 컨테이너는 배포 서버인 EC2 인스턴스 안에 띄워야하므로, 현재 EC2 인스턴스 내부에는 활용해야 하는 JAR 파일이 존재하지 않는다는 문제가 발생한다. 이를 해결하기 위한 2가지 방법이 있다.Docker hub를 이용..
[Docker] Spring Boot App 배포 (3) - Web App 구동 및 빌드
·
Infrastructure/Docker
1. 서론 도커를 설치했다면, 도커 컨테이너를 만들 준비가 완료되었다는 뜻이다. 그렇다면 이제 이미지를 만들어 이를 컨테이너에 담아 우리가 원하는 어플리케이션으로 동작하도록 해야 한다. 당연히 이번의 경우, 컨테이너에 담길 어플리케이션은 스프링부트 어플리케이션이다. 스프링부트 어플리케이션을 이미지로 만들기 위해서는 스프링부트 프로젝트를 빌드해서 나온 산출물인 Executable JAR 파일이 필요하다. 따라서 본격적인 Docker 활용 전에, 웹 어플리케이션 구동과 스프링부트 프로젝트 빌드에 대해 살펴보자.2. Java 웹 어플리케이션 구동 방식 Java 웹 어플리케이션 구동 방식에는 2가지가 있다.외장 WAS : 톰캣과 같은 Web Application Server(이하 WAS) 내부에 WAR 파일..
[Docker] Spring Boot App 배포 (2) - EC2 기본 + Docker 설치
·
Infrastructure/Docker
1. 서론 Docker를 사용하려면 Docker를 설치해야 한다. 설치되는 곳은 우리의 PC일수도 있고, AWS와 같은 클라우드 서비스일 수도 있다. 우리가 어떤 어플리케이션을 배포한다고 가정하면 어플리케이션이 실제로 존재하는 서버는 우리의 PC가 될 수도 있고, 클라우드 서비스를 이용해 서버를 구축할 수도 있다. 즉, Docker를 활용해 우리의 어플리케이션을 배포하기 위해서는 서버를 어디에서 어떻게 구축할지부터 결정해야 한다. 필자는 AWS EC2 서비스를 활용했다. AWS 계정을 새로 생성하면 1년 동안 일부 AWS 서비스를 무료로 이용할 수 있는데, 이를 프리티어라고 한다. 프리티어인 경우 매월 정해진 최대 사용량을 초과하지 않는다면 아예 무료이고, 성능이 아쉽다면 딱 한단계 높은 인스턴스로 ..
[Docker] Spring Boot App 배포 (1) - Docker 기본
·
Infrastructure/Docker
1. 서론 신한DS SW Academy에서 진행한 2차 프로젝트는 웹 어플리케이션이다. 프론트엔드는 React, 백엔드는 Spring boot 모듈로 구현되었다. 해당 프로젝트에서 배포를 위해 DevOps 체계를 구축했는데, DevOps 체계에서 CI(Continuous Integration)와 CD(Continuous Deployment)의 자동화는 불가피한 요소이다. 바로 이 자동화의 중심에 Docker라는 리눅스 컨테이너 기술이 있다. 쉽게 말하면, Docker는 이런 자동화 과정에서 필요한 것을 만들고, 올리고, 내릴 수 있는 일꾼이라고 생각하면 편하다. Docker의 기본적인 개념부터 살펴보도록 하자.2. 가상화란? Wikipedia에서 정의하는 정돈된 정의는 다음과 같다.가상화(假像化, v..
[Spring Boot] OAuth(Google) & JWT Login (7) - JWT 인증 필터 + 그 외
·
Frameworks/Spring Boot
1. 서론 이전 포스팅(https://inthebleakmidwinter.tistory.com/6)에서 JWT를 생성하는 JwtTokenProvider와 이를 HTTP Cookie 형태로 포장시켜주는 JwtCookieProvider 객체에 대해 설명했다. 이번에는 Security Configuration을 시작으로 이 객체들을 이용해, 개발자가 커스텀한 필터(JwtAuthenticationFilter)를 거쳐 사용자를 검증하는 과정을 알아보자.2. 필터체인 설정에서 .addFilterBefore() 메서드SecurityConfig.java...@Configuration@EnableWebSecurity@RequiredArgsConstructorpublic class SecurityConfig { pri..