기본적인 OS 프로세스의 상태와 전이 과정운영체제에서 프로세스(Process)는 실행 중인 프로그램을 의미하며, 특정한 상태(state)를 가지면서 실행 흐름을 이어간다.아래는 대표적인 프로세스 상태 전이 과정에 대한 정리 내용이다.1. NEW → READY프로세스가 처음 생성되면 NEW 상태로 시작한다.OS가 이 프로세스를 준비 상태로 올리면, READY 상태가 된다.❓ READY 상태란?CPU에서 실행될 준비는 되었지만, 아직 CPU를 배정받지 못한 상태이다.2. READY → RUNNING스케줄러에 의해 이 프로세스에게 CPU가 할당되면, RUNNING 상태로 전이된다.RUNNING 상태는 프로세스는 실제로 CPU 위에서 명령어를 실행 중인 상태이다.3. RUNNING → READY (타임슬라이스 ..
운영체제를 공부하다보면 초반부터 "멀티OOO" 라는 용어가 굉장히 많이 나온다.각각 용어만 따로 보면 매우 헷갈리기 때문에 한번에 정리를 해보려고 한다.본 포스팅에서 다루는 용어 목록멀티프로그래밍멀티태스킹멀티스레딩멀티프로세싱☁️ 프로세스와 메모리본격적인 내용을 이야기하기 전에, 기본적인 용어부터 정리해보자.운영체제에서 프로세스는 실행 중인 프로그램을 의미하며, 각 프로세스는 별도의 메모리 공간을 할당받는다.이 메모리 공간은 다른 프로세스와 독립적이어서 서로 간섭하지 않도록 설계되었다. 초기 컴퓨터는 단일 프로세스 시스템이었기 때문에 한 번에 하나의 프로세스만 실행될 수 있었으며, 해당 프로세스가 끝날 때까지 CPU를 점유했다. 이 방식에는 큰 단점이 있었는데, 바로 CPU 사용률이 낮다는 점이다.예를 들..
멀티스레딩 프로그래밍을 하다 보면 데이터의 결과가 예상과 다른 상황을 마주할 때가 있다.이건 동시성 문제 때문인데, 여러 스레드가 동시에 실앻되면서 서로 간섭을 하게 되어 결과가 꼬이는 것이다.이번 글에서는 동시성 문제를 해결하는 동기화와 락의 개념을 정리해보려고 한다.☁️ 기본 개념❇️ 동시성 문제(Concurrency Problem)동시성 문제란 여러 프로세스나 스레드가 동시에 실행될 때 발생할 수 있는 문제를 의미한다. 이는 주로 데이터의 무결성이나 일관성 문제, 데드락(Deadlock), 경쟁 조건(Race Condition) 등의 형태로 나타난다.참고로 데드락은 다음에 더 자세히 다루기 위해 이번 글에서는 추가적으로 언급하지 않을 예정이다.❇️ Race condition(경쟁 조건)여러 프로세스..
Git의 Squash Merge로 인한 예상치 못한 변경사항 감지 문제 발생!Git은 개발자들에게 협업과 코드 관리를 효율적으로 할 수 있게 도와주는 버전 관리 시스템이다. 하지만 이번 상황처럼, 잘 모르는 특정 기능을 사용할 경우, 예상치 못한 문제가 발생하기도 한다. 이번 글에서는 팀 프로젝트 진행 중 Squash Merge라는 기능 사용으로 인해 발생한 예상치 못한 병합 문제를 분석하고, 그 해결 방법을 제시해본다!발생한 상황a라는 브랜치를 작업한 후 이를 feature/photo-post-detail-#406 브랜치로 Squash Merge 하였다.Squash Merge를 하면 여러 개의 커밋이 하나로 압축되며, 원본 브랜치(a)의 히스토리와 타겟 브랜치 간의 연결이 단절된다.병합 후 브랜치(a)..
분산 시스템에서 락을 구현할 때 기존 시스템에서 Redis를 사용하고 있었던 경우, 분산 락 구현 시에도 Redis를 사용하는 경우가 많다.이때, Redisson 이라는 Java 라이브러리를 통해 락 구현을 단순화할 수 있고, 특히 Pub/Sub를 활용한 효율적인 락 관리 방법을 제공한다.Redisson이란?Redisson은 Redis를 위한 오픈소스 Java 클라이언트다. 분산 락, 데이터 구조, 캐싱 등 다양한 기능을 제공한다. 특히 RedissonLock은 Redis의 Pub/Sub 메커니즘을 활용해 락을 관리하며, 복잡한 분산 환경에서도 안정적으로 동작한다. 설정이 간편하고, 비동기 처리와 TTL을 기본으로 지원한다.Redisson Pub/Sub Lock의 동작 과정Redisson의 Pub/Sub..
😕 문제 상황Spring Boot 프로젝트에서 Thymeleaf를 사용하며 TailwindCSS의 유틸리티 클래스(justify-between, text-center, bg-blue-500 등)가 적용되지 않는 문제가 발생했다.특히 header 부분에서 justify-between 클래스를 추가했음에도 레이아웃이 기대한 대로 변경되지 않았다. 🔍 문제 원인 Tailwind CSS 빌드 파일 미생성 또는 갱신 문제Tailwind CSS버전 3.0 이상에서는 기본적으로 JIT(Just-In-Time) 모드로 동작하며, 실제 HTML, JS 파일 등에서 사용된 유틸리티 클래스만을 기반으로 최종 CSS 파일을 생성한다.JIT 모드란? 필요할 때 즉시 CSS를 생성하여 성능을 최적화하는 방식으로, 설정된 co..
현재 진행중인 프로젝트에서 redis 도입이 필요했고 내가 세팅을 담당했다.기존 AWS 아키텍처 구성에서 어떤 방식으로 redis를 추가 구성하는게 가장 좋은 선택일지 고민해본 결과, Private subnet의 API 서버 EC2에 Redis를 함께 설치하기로 했다. (우리 프로젝트의 클라우드 인프라 아키텍처는 글의 하단부에 다이어그램을 첨부해두었다) 그 이유는:프리티어는 EC2 인스턴스 사용 시간을 기준으로 과금이 되는데, 지금 이미 2개 이상의 인스턴스가 실행되고 있으므로(private, public subnet 각각), 현재 실행중인 EC2에 설치하는게 맞다고 판단했다.또한, 구조적으로도 안정적이다!이미 Private subnet에 위치하고 있으므로 보안성이 확보된다.Bastion 호스트(Publ..
1. 최단 경로 알고리즘이란?최단 경로 알고리즘은 그래프에서 한 정점에서 다른 정점까지 가는 데 필요한 최단 거리를 찾는 알고리즘입니다. 여기서 ‘최단’의 의미는 경로 상의 가중치 합이 가장 작다는 뜻입니다. 예를 들어, 지도에서 두 도시를 최단 거리로 연결하는 방법을 찾는 것이 최단 경로 문제라고 볼 수 있습니다.방금 제가 풀고 있던 이 문제: https://www.acmicpc.net/problem/16928 에서의 '정점'은 게임판의 칸이 될 것이며, 각 칸마다 이동하는 것이 경로를 통해 이동하는 상황이 되는 것입니다. 다만, 이 문제에서는 각 경로의 가중치가 모두 1로 동일한 상황이며, 이 경우에는 어떤 알고리즘으로 푸는 게 적합한지 글의 마지막 부분에 언급하도록 하겠습니다. 2. 대표적인 최단 ..
정렬 알고리즘 문제를 푸는 중에 매우 깔끔한 코드를 발견했습니다.저는 열심히 퀵소트로 문제를 풀었는데, 어떤 분들은 Arrays.sort와 lambda 함수를 사용해서 아주 깔끔한 코드로 풀이를 완성한 것이었죠!!! 저는 그런 식으로 코딩해본 적이 없어서 한 줄씩 뜯어봤는데,사실 '저 코드가 도대체 왜 오름차순 정렬을 하는 코드인거지???' 하는 생각이 계속 들었습니다. 그래서 다시 찾아보면서 이해를 하고 메모를 해두려고 합니당 정렬하는 부분만 작성해둔 예시 코드는 다음과 같습니다.// 예시 코드import java.util.Arrays;public class Main { public static void main(String[] args) { int[] arr1d = new int[]..
자바 언어로 알고리즘 문제를 풀 때, 문제에서 주어진 입출력 조건을 맞추기 위해 문제마다 반복적으로 어떤 값을 입력받는 코드를 작성해야 한다. 나는 처음에는 그냥 내가 알고있던 Scanner와 System.out.println()을 활용해서 입출력 부분 코드를 작성했다.그런데 구글링을 하다 보니까 보통은 StringBuilder와 BuffererdReader를 많이 사용하길래 더 찾아본 기록을 남겨본다. 먼저, 출력 부분을 보자.나는 뭔가의 결괏값을 반복해서 출력해야 할 때, 그냥 반복문에서 System.out.println()을 돌렸었다.그런데 입출력 작업은 굉장히 느리고 자원 소모가 크기 때문에, 이렇게 하지 말고모든 출력할 값들을 하나의 문자열로 만들어준 뒤, 그 값을 한 번에 출력하는 방식이 더 ..