최근에 올라온 글
-
CS
[알고리즘] MST(최소 신장 트리), Kruskal 알고리즘
알고리즘 문제를 풀다가 흥미로운 알고리즘으로 정리해보려고 한다. Spanning Tree 그래프 내의 모든 정점을 포함하는 최소 연결 부분 그래프 - 모든 정점들이 연결되어 있어야 하고, 사이클을 포함해서는 안됨 - n개의 정점을 정확히 (n-1)개의 간선으로 연결 MST (Minimum Spanning Tree) Spanning Tree 중에서 사용된 간선들의 가중치 합이 최소인 트리 (최소 신장 트리) Kruskal 알고리즘 - Greedy한 방법을 이용 - 최소 비용의 간선으로 구성된다는 조건과 사이클을 포함하지 않는다는 조건에 근거하여 각 단계에서 사이클을 이루지 않는 최소 비용 간선을 선택하는 것 1. 그래프의 간선을 가중치의 오름차순으로 정렬 2. 정렬된 간선 리스트에서 순서대로 사이클을 형성..
-
Web
[Authorization] JWT 토큰 이해하기
서버 기반 인증 시스템 기존의 인증 시스템은 서버 기반으로 서버 측에서 유저의 정보를 기억하고, 세션을 유지하기 위해서 메모리 / 디스크 / 데이터베이스 등이 사용된다. 문제점 세션 서버가 유저의 인증 기록을 남기는 것을 세션이라고 부른다. 로그인하는 유저의 수가 늘어나면 메모리 또는 데이터베이스의 성능에 무리를 줄 수 있다. 확장성 서버를 확장하는 것이 어려워진다. 세션을 서버에 저장하면서 서버를 확장하는 것은 과정이 매우 복잡하다. 토큰 기반 인증 시스템 토큰 기반 인증 시스템은 Stateless 하다고 한다. 유저의 인증 정보를 서버에 담아두지 않기 때문이다. 장점 Stateless & Scalability 상태가 없기 때문에 서버를 여러대로 확장할 수 있다. 특히 Kubernetes 상에 pod로..
-
Cloud Native
[Jenkins] Kubernetes에 Jenkins 분산 빌드 환경 설정 (Master-Slave)
Jenkins는 대표적인 CI(Continuous Intergration) 툴로, 많은 플러그인을 제공하며 확장성이 크다는 장점이 있다. Jenkins를 Kubernetes에 구축하고, 분산 빌드 환경을 설정하려고 한다. Jenkins 단일 서버 - 크고 무거운 프로젝트가 점점 더 많이 빌드된다면, 단일 서버로 버틸 수 없음 - 빌드 환경을 다르게 설정하고 싶을 때에도 단일 서버에서는 불가능함 Jenkins 분산 아키텍처 Jenkins는 Mater-Slave 아키텍처를 통해 분산 빌드 환경을 관리할 수 있다. (요즘은 slave 대신 agent라고 부르는 듯) - Master 빌드 작업을 스케줄링하고 Slave에서 실행 및 모니터링 (물론, 빌드 작업 실행도 가능) / Jenkins 서버 (GUI, AP..
-
AWS
[Terraform] 테라폼으로 모듈 구성하기 - count, for-each 등
Terraform? IaC 도구로, AWS의 서비스를 코드로서 관리할 수 있게 해주는 플랫폼이다. 특히 AWS의 여러 서비스가 유기적으로 관련되어 있고, 콘솔로 반복적인 작업을 해야할 때 Terraform을 사용한다. Terraform 모듈을 생성하면서 깨달은 것 - 테라폼에는 생각보다 다양한 문법이 있다. 잘 사용하면, 복잡한 구성도 테라폼으로 설계가 가능하다. - 모듈을 만들 때는 고려해야 할 부분이 꽤있지만, 잘 만들어놓으면 편하다. Terraform Module Terraform 모듈 내에 원하는 리소스들을 구성해놓으면, 여러 다른 위치에서 다른 변수값을 사용해서 리소스를 생성할 수 있다. 모듈은 다음과 같이 사용할 수 있다. 리소스를 구성해놓은 모듈 코드가 있는 PATH를 설정하고, Module..
-
AWS
[AWS] 대용량 스트림 데이터 처리 플랫폼 - Kinesis
AWS Kinesis Kinesis를 통해 대용량 스트리밍 데이터를 수집하고, 처리 및 분석까지 가능하다. - 스트리밍 데이터란? 데이터 레코드를 동시에 작은 크기(킬로바이트 단위)로 전송하는 수천개의 데이터에 의해 지속적으로 생성되는 데이터 - 스트림 처리 vs 일괄 처리 스트림 처리의 이점이나 용도를 이해하기 위해서는 일괄 처리와 스트리밍 처리를 비교해서 파악하면 된다. 일괄 처리는 보통 모든 데이터에서 파생된 결과의 처리 및 분석을 가능하게 하므로 대량의 데이터를 처리한다. 반면에 스트림 처리는 수집하는 각 데이터 레코드에 대한 처리로 실시간 모니터링 및 응답 기능에 더욱 적합하다. 많은 조직이 두 가지 접근 방식을 결합하여 하이브리드 모델을 구축하고 실시간 계층과 배치 계층을 유지하게 된다. Am..