Deadlock은 mutual exclusion 과정에서 자원 접근 권한 획득과 자원 접근 권한 반환 관계의 꼬임으로 발생한다. Hold and Wait (점유 대기)다수의 스레드가 서로 다른 락을 획득한 후, 다른 락을 기다리며 무한 대기 상태에 빠지게 된다. Circular Wait (순환 대기)순환 대기는 점유 대기와 공유 자원 획득 후 다른 공유 자원 획득 시까지 무한 대기 상태는 동일 하지만, 서로 다른 자원을 점유하면서 서로의 자원을 기다리며 순환 대기 상태에 빠지게 된다. Starvation (기아 상태)다른 프로세스나 스레드가 공유자원의 접근 권한을 지속적으로 가짐으로써 발생할 수 있다.프로세스나 스레드가 공유 자원의 접근 권한을 해제하더라도 운영 방식 등의 이유로 인해 해당 프로세스나 ..
Thread는 하나의 프로세스 내에서 자원을 공유하면서 여러 개가 동시에 실행될 수 있다. Race Condition (경쟁 조건)Race condition은 둘 이상의 thread가 동시에 공유 자원 접근 시 발생한다. Critical Section (임계 구역)병렬 컴퓨팅에서 두 이상의 process 또는 thread가 동시 접근이 허용되지 않는 공유 자원에 접근하는 코드의 블록을 말함. Mutual Exclusion (상호 배제)Mutual exclusion이란 두 개 이상의 process 혹은 thread가 동시에 하나의 공유 자원으로 발생할 수 있는 race condition 문제를 해결하기 위해 어느 시점에서의 공유 자원 접근을 하나의 process 혹은 thread로 제한하는 것을 말한다..
메인 스레드 (Main Thread)자바 프로그램이 실행되면 JVM은 기본적으로 하나의 스레드를 생성하며, 이 스레드가 메인 스레드이다.메인 스레드는 public static void main(String[] args) 메서드를 실행하며, 자바 프로그램의 진입점 역할을 한다.메인 스레드는 자바 프로그램의 생명주기를 관리하며, 프로그램의 기본 스레드로 작동한다. 특징1. 프로그램의 시작점메인 스레드는 main() 메서드를 호출하며, 모든 프로그램 실행은 여기서부터 시작된다. 2. 프로그램 종료 관리자바 프로그램은 Main Thread와 그에 의해 생성된 모든 스레드가 종료될 때 프로그램이 종료된다. 3. 멀티 스레드 프로그램의 조정메인 스레드는 다른 사용자 정의 스레드를 생성하거나 조정할 수 있다.메인 스..
스레드란?프로세스 내에서 실행되는 여러 개의 실행 단위로, 경량화 프로세스라고 부르기도 한다.프로세스 내의 주소 공간이나 자원을 공유할 수 있다.각각 스레드는 각자의 스택과 레지스터 셋을 가지고 있다. 스레드 제어 블록 (Thread Control Block, TCB)스레드를 관리하기 위해 사용하는 데이터 구조스레드 ID (Thread ID)스레드 상태 (Thread State)프로그램 카운터 (Program Counter, PC)레지스터 값 ( Registers)스택 포인터 (Stack Pointer)우선순위 (Priority)스레드별 리소스 정보스레드 소속 정보동기화 정보 Thread 생성자바에서 멀티 스레드 프로그래밍을 구현하는 방법에는 크게 두 가지가 있다. 1. Thread 클래스 상속받아 구현..
프로세스란?프로그램을 실행시킨 인스턴스컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (스케줄링의 대상이 되는 작업과 같은 용어로 쓰임)\프로그램 = 보조 기억 장치에 저장된 실행 코드프로세스 = 프로그램을 가동하여 프로그램 자체와 프로그램의 상태가 메모리상에서 실행되는 작업 단위같은 시간에 여러 개의 프로그램을 실행하는 것을 멀티태스킹 이라고 한다. 프로세스의 구성 요소코드 섹션 (Code Section)실행할 프로그램의 명령어(코드)가 저장된 메모리 영역CPU는 이 영역의 명령어를 읽고 실행한다.데이터 섹션 (Data Section)전역 변수 및 초기화된 데이터가 저장되는 영역프로그램이 실행되면서 공유되거나 수정될 수 있는 데이터가 포함됨.힙 (Heap)동적으로 메모리를 할당받는 영역런타임에 필요..
✅ 전체적인 흐름✅ 장점컨테이너 기반의 서버가 여러 대이더라도 쉽게 자동 배포를 구축할 수 있다.쉽게 무중단 배포를 적용시킬 수 있다.✅ 단점CodeDeploy를 사용함으로써 인프라 구조가 복잡해졌다. 구조가 복잡해짐에 따라 관리 비용, 유지보수 비용, 난이도, 트러블 슈팅 어려움, 복잡도가 증가했다. ✅ Github Actions 코드 수정하기 .github/workflows/deploy.yml name: Deploy To EC2on: push: branches: - mainjobs: deploy: runs-on: ubuntu-latest steps: - name: Github Repository 파일 불러오기 uses: actions/checkout..
전체적인 흐름 ✅ 장점Docker 기반으로 서비스를 운영할 때, 가장 간단하게 구성할 수 있는 인프라 구조이다.✅ 단점무중단 배포를 구현하거나 여러 EC2 인스턴스에 배포를 해야 하는 상황이라면, 직접 Github Actions에 스크립트를 작성해서 구현해야 한다. 직접 구현을 해보면 알겠지만 생각보다 꽤 복잡하다. ✅ 1. Docker 기반으로 프로젝트 수정하기Dockerfile 작성하FROM eclipse-temurin:17-jdk-alpineCOPY ./build/libs/*SNAPSHOT.jar project.jarENTRYPOINT ["java", "-jar", "project.jar"] ✅ 2. EC2가 Private ECR에 접근할 수 있게 셋팅하기# Ubuntu일 경우$ sudo apt ..
✅ 1. Ubuntu에서 Docker, Docker Compose 설치하기$ sudo apt-get update && \ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \ sudo apt-key fingerprint 0EBFCD88 && \ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" &&..
✅ 전체적인 흐름 ✅ CodeDeploy를 사용하는 이유CodeDeploy는 수많은 AWS EC2에 배포를 쉽게 할 수 있도록 도와준다.CodeDeploy에 무중단 배포 기능이 내재되어 있어 손쉽게 무중단 배포를 진행할 수 있다. ✅ 장점서버가 여러 대이더라도 쉽게 자동 배포를 구축할 수 있다.쉽게 무중단 배포를 적용시킬 수 있다.✅ 단점CodeDeploy를 사용함으로써 인프라 구조가 복잡해졌다. 구조가 복잡해짐에 따라 관리 비용, 유지보수 비용, 난이도, 트러블 슈팅 어려움, 복잡도가 증가했다.✅ 이 방법은 언제 주로 쓰는 지서버를 여러 대 이상 구동해야 하거나 무중단 배포가 중요한 서비스일 때 주로 활용한다. 1. appspec.yml, 스크립트 파일 작성하기 appspec.yml은 CodeDepl..
✅ 1. CodeDeploy 역할(Role) 생성하기 Code Deploy가 다른 AWS Resource에 접근하려면 권한이 필요하다. 그 권한을 부여해주는 기능이 IAM의 역할(Role)이다. ✅ 2. CodeDeploy 생성하기1. CodeDeploy 애플리케이션 생성 2. CodeDeploy 배포그룹 생성 ✅ 3. EC2 역할(Role) 생성하기 EC2가 빌드된 파일을 S3로부터 다운받아야 한다. 이 때, EC2가 S3에 접근하려면 권한이 필요하다. 그 권한을 부여해주는 기능이 IAM의 역할(Role)이다. 1. 정책 생성 2. 권한 지정하기 3. 정책 세부 설정 4. 역할 생성 5. EC2에 생성한 IAM 역할 연결하기 참고)혹시나 Code Deploy Agent를 먼저 설치한 뒤에 ..