전체 글

Computer Science/OS

동기, 비동기

동기, 비동기 여기서의 동기, 비동기는 프로그래밍 영역이랑 관련이 있다. 개발을 하다보면 "동기 또는 비동기적으로 수행한다" 라는 말을 종종 듣게 된다. 무슨 의미일까? 동기, 비동기는 실행 순서에 관한 개념이다. 동기 코드는 위에서부터 아래로 순차적으로 수행된다. 그래서 순차 코드라고 불리기도 한다. 만약 중간에 I/O 코드가 있으면 I/O 작업이 끝날때까지 대기한 후 다음 코드를 실행한다. 비동기 코드는 순차적으로 실행되지 않는다. 비동기 코드가 수행된 시점부터 프로그램의 실행 순서를 특정할 수 없으며 아래처럼 실행 순서는 3가지 경우로 나눠진다. 비동기 코드가 먼저 수행 다음의 동기 코드가 먼저 수행 비동기 코드와 다음의 동기 코드가 동시 수행 비동기 코드는 실행 순서를 특정할 수 없게 만들어 프로..

Hadoop Echo System

YARN

YARN YARN (Yet Another Resource Negotiator)은 하둡 2부터 도입된 클러스터 리소스 관리, 애플리케이션 라이프 사이클 관리를 위한 아키텍처이다. YARN에서는 맵리듀스 기반의 애플리케이션외에도 피그, 스톰, 스파크 등 분산 애플리케이션에 대해 클러스터 리소스를 관리 할 수 있다. YARN 아키텍처의 세 가지 중요한 요소는 리소스 매니저, 노드 매니저, 애플리케이션 마스터이다. 리소스 매니저 리소스 매니저(Resource Manager)는 하둡 클러스터의 마스터 노드에 실행되는 자바 프로세서로 노드 매니저로부터 전달받은 정보를 이용하여 클러스터에서 CPU, 메모리, 디스크 등의 자원을 관리한다. 클러스터 상태 모니터링 : 클러스터 내 노드의 상태를 모니터링하고 노드 장애 발..

Hadoop Echo System

스파크 애플리케이션 제출

스파크 애플리케이션 제출 Spark bin 폴더의 spark-submit 스크립트로 사용자가 작성한 애플리케이션을 클러스터에 배포할 수 있다. spark-submit은 모든 클러스터 매니저와 같이 사용할 수 있으므로 클러스터 매니저에 따라 애플리케이션을 변경할 필요는 없다. 종속성이 있는 애플리케이션 번들링 만약 애플리케이션의 코드에 의존성이 있는 경우 의존성과 함께 코드를 패키징해야한다. 따라서 코드와 종속성을 포함하는 어셈블리 jar(또는 jber jar)을 만든다. 어셈블리 jar을 만들기 위해 sbt, maven와 같은 어셈블리 플러그인을 사용할 수 있다. 어셈블리 jar을 만들 때 Spark 및 Hadoop 종속성을 provided 종속성으로 지정한다. 클러스터 매니저가 런타임 시에 해당 종속성..

Hadoop Echo System

스파크 클러스터

스파크 클러스터 넓은 의미에서 보면, 스파크 애플리케이션은 스파크 클러스터의 병렬 작업들을 조율하는 하나의 드라이버 프로그램이다. 드라이버 프로그램은 SparkSession 객체를 초기화하고 클러스터 매니저와 통신하며 스파크 이그제큐터를 위한 필요한 자원(cpu, memory)를 요청한다. 또한 모든 스파크 작업을 DAG 연산 형태로 변환해 스케줄링하며 각 실행 단위를 태스크로 나누어 스파크 이그제큐터(Executor)에 분배한다. 자원이 할당되면 그 다음부터 드라이버 프로그램은 이그제큐터와 직접 통신한다. 스파크 2.0에서 스파크 세션은 모든 스파크 연산과 데이터에 대한 통합 연결 채널이 되었다. 이전의 SparkContext, SQLContext, HiveContext, SparkConf, Strea..

Infra/쿠버네티스

쿠버네티스 클러스터 구축

사전 진행 필자는 AWS 계정에서 두 대의 EC2를 만들어 진행함 1. 전제 조건 최소 2개의 리눅스 머신 노드 (master 노드 1, worker 노드 1개)가 필요, 요구 사항에 따라 더 많은 작업자 노드가 필요할 수 있음 master 노드에는 최소 2개의 vCPU와 2GB RAM이 있어야하며, worker 노드는 최소 1vCPU 및 2GB RAM 권장 클러스터의 모든 노드는 서로 통신이 가능해야함 클러스터의 모든 노드는 스왑 비활성화 (활성화 되어 있으면 kubelet이 제대로 작동하지 않음) 클러스터의 모든 노드는 고유한 호스트 이름, MAC 주소 및 product_uuid 가져야함 2. 포트 허용 아래 그림을 참고해 마스터 노드(컨트롤 플레인) 및 워커 노드의 포트를 허용, 필자는 ec2간 방..

Infra/CI&CD

SpringBoot, Vue3 프로젝트 CI/CD (2)

이번 글에서는 이전 글에 이어서 젠킨스 설정(소나 큐브와 연동), Nginx Proxy Manager 설정을 진행한다. 진행하기 전 소나 큐브와 포테이너에 접속해 계정을 만들고, 어떤 기능이 있는지 한번 살펴보자. 포테이너의 웹 UI로 편하게 컨테이너를 관리하고 모니터링 할 수 있으며 소나 큐브의 웹 UI로 정적 분석 결과를 볼 수 있다. 젠킨스 시작 젠킨스란 빌드, 배포 과정을 자동화할 수 있는 소프트웨어이다. 설치형이기에 설치와 설정이 필요하다는 단점이 있지만 비용(돈)이 들지 않는다. 웹 브라우저 URL 검색 창에 호스트 서버 IP:9090을 검색했을 때 아래의 화면이 나오면 정상 설치 된 것이다. 젠킨스는 편리하게 사용할 수 있도록 웹 인터페이스를 제공한다. 처음 접속 시 계정을 설정해야한다. 젠..

Infra/CI&CD

SpringBoot, Vue3 프로젝트 CI/CD (1)

아키텍처 구조 본 글에서는 SpringBoot와 Vue3 사용한 '날숨' 프로젝트의 자동 빌드, 배포하는 과정을 설명한다. 아래는 필자가 진행한 '날숨' 프로젝트의 아키텍처 구조이다. Docker를 사용하며, Docker를 개념적으로 두 개의 영역으로 구분했다. 왼쪽은 배포한 웹 애플리케이션이 동작하는 영역이며, 클라이언트 요청에 대해 응답한다. 오른쪽은 그 외 컨테이너들이 있는 영역이다. 각 컨테이너의 역할은 아래와 같다. Nginx: Nginx 웹 서버가 동작하는 컨테이너. 리버스 프록시 역할을 수행한다. 빌드된 Vue3의 파일들을 갖고 있어 정적 파일 요청(HTML, JS, CSS)을 처리하며 백엔드 요청을 Spring Boot 컨테이너로 프록시한다. Spring Boot : jdk 21이 설치된 ..

Linux/Ubuntu

사용자와 그룹

사용자와 그룹 리눅스는 다중 사용자 시스템(Multi-user system)이다. 즉 1대의 리눅스에 사용자가 여러 명 동시에 접속해 사용할 수 있는 시스템이다. 리눅스를 설치하면 기본적으로 root라는 슈퍼 유저가 있다. 이 root 사용자는 시스템의 모든 작업을 실행 할 수 있는 권한이 있다. 사용자는 하나 이상의 그룹에 소속되어 있어야한다. /etc/passwd 파일에 아래의 규칙으로 사용자 정보가 저장되어 있다. 사용자 이름:암호:사용자 ID:사용자가 소속된 그룹 ID:추가 정보:홈 디렉터리:기본 셸 /etc/group 파일에 아래의 규칙으로 그룹 정보가 저장되어 있다. 그룹 이름:비밀번호:그룹 id:그룹에 속한 사용자 이름 사용자, 그룹 관련 명령어 adduser : 새로운 사용자를 추가한다. ..

gunjoon98
하루한방울