
문제치매 환자 돌봄 서비스를 개발하던 중, 프론트엔드 개발자로부터 디바이스 토큰 저장 API 호출 시 500 Internal Server Error가 발생한다는 이슈를 전달받았습니다. 해당 API는 단순히 클라이언트로부터 전달받은 디바이스 토큰을 Redis에 저장하는 기능으로, 로직 자체는 복잡하지 않았습니다.에러 메시지를 확인한 결과 JSON 데이터를 NotificationRequestDto.DeviceToken 객체로 역직렬화하는 과정에서 에러가 발생하고 있었습니다.JSON parse error: Cannot construct instance of `kr.co.onehunnit.onhunnit.dto.notification.NotificationRequestDto$DeviceToken` (althou..

개요컴퓨터의 보조기억장치(HDD, SSD 등)에 정보를 무질서하게 저장하면 원하는 정보를 찾는 데 시간이 오래 걸릴 수 있습니다. 운영체제는 보조기억장치를 효율적으로 관리하기 위해 파일 시스템을 사용합니다.파일 시스템은 보조기억장치 내 정보를 파일 및 디렉터리 단위로 접근하고 관리하는 운영체제 내부 프로그램입니다. 파일과 파일 디스크립터파일은 크게 파일 이름, 실행을 위한 정보, 그리고 메타데이터(metadata)로 구성됩니다.메타데이터는 파일의 크기, 생성 및 수정 날짜, 접근 권한 등의 부가 정보로 구성되어 있으며, 이를 속성(attribute)라고도 합니다.운영체제는 프로세스가 파일을 열거나 생성할 때 해당 파일을 식별할 수 있도록 파일 디스크립터(file descriptor)를 할당합니다. 파일..

개요운영체제는 프로그램을 실행하기 위해 메모리에 적재하고, 종료된 프로그램을 메모리에서 삭제합니다. 단순히 적재하고 삭제하는 것을 넘어 낭비되는 메모리 용량이 없도록 효율적으로 메모리 관리를 수행합니다. 이를 위해 대부분의 현대 운영체제는 가상 메모리(Virtual Memory) 기술을 활용합니다. 논리 주소와 물리 주소CPU와 프로세스는 직접 물리 주소(Physical Address)를 다루지 않습니다. 대신, 논리 주소(Logical Address) 라는 개념을 사용합니다.논리 주소: 각 프로세스마다 0번지부터 시작하는 주소 체계로, 프로세스마다 같은 주소를 사용할 수 있습니다.물리 주소: 실제 메모리(RAM)의 주소로, 논리 주소와 달리 중복되지 않고 고유합니다.즉, 여러 프로세스가 각자의 논리 주..

CPU 스케줄러CPU는 메모리에 적재된 모든 프로그램을 동시에 실행할 수 없습니다. 한정된 자원인 CPU를 효율적으로 활용하기 위해, 운영체제는 실행 중인 프로그램들이 공정하고 합리적으로 CPU를 할당받도록 CPU의 할당 순서와 사용 시간을 결정합니다. CPU 스케줄링 알고리즘은 CPU 스케줄링의 절차를 말하며, 이 CPU 스케줄링 알고리즘을 결정하고 수행하는 운영체제의 일부분을 CPU 스케줄러라고 합니다.프로세스와 스레드는 모두 CPU 스케줄링의 대상이 된다. 운영체제는 프로세스별 우선순위를 판단하여 PCB(Process Control Block)에 기록하고, 우선순위가 높은 프로세스에 CPU 자원을 더 빠르고 많이 할당합니다. 운영 체제는 어떤 기준으로 프로세스의 우선순위를 결정하는가?대표적인 고려 ..

레이스 컨디션(Race Condition)프로세스 혹은 스레드가 공유하는 자원을 공유 자원(shared resource)이라고 합니다.공유 자원은 메모리, 파일, 전역 변수, 입출력 장치 등이 될 수 있습니다.공유 자원에 접근하는 코드 중 동시에 실행했을 때 문제가 발생할 수 있는 코드는 임계 구역(critical section)라고 합니다.프로세스나 스레드가 동시에 임계 구역을 실행하면 데이터가 예상치 못한 방식으로 변경될 수 있습니다.위 예시에서는 원래 결과값이 25만원이어야 하지만, 프로세스 P1과 P2가 동시에 접근하여 타이밍이 꼬여 20만원으로 잘못된 결과가 발생했습니다. 이러한 상황에서 프로세스나 스레드가 동시에 임계 구역의 코드를 실행할 때 발생하는 문제를 레이스 컨디션(race condit..

개요실행 중인 프로그램을 프로세스(Process)라고 하며, 프로세스를 구성하는 실행 단위를 스레드(Thread)라고 합니다.메모리에는 여러 프로세스가 적재될 수 있으며, 운영체제는 각 프로세스에 필요한 자원을 할당합니다.스레드는 프로세스가 할당받은 자원을 활용하여 작업을 수행하며, 하나의 프로세스가 여러 개의 스레드를 포함할 수 있습니다. 프로세스를 이루는 스레드가 둘 이상인 경우에는 동일한 작업을 동시에 실행할 수도 있습니다.운영체제는 여러 프로세스와 스레드가 동시에 실행될 때, 실행 순서를 적절히 제어하고 필요한 자원을 효율적으로 배분함으로써 시스템이 원활하게 동작하도록 관리합니다. 프로세스프로세스의 유형으로는 포그라운드 프로세스, 백그라운드 프로세스, 데몬 등이 있습니다.포그라운드 프로세스(For..

개요운영체제(OS, Operating System)는 컴퓨터 시스템을 관리하고, 사용자와 하드웨어 간의 인터페이스 역할을 수행하는 소프트웨어입니다.대표적으로 Windows, macOS, Linux, Android, iOS 등이 있습니다.이처럼 운영체제의 종류는 다양하지만, 모든 운영체제가 제공하는 핵심 기능은 유사합니다.이러한 핵심 기능을 수행하는 운영체제의 핵심 부분을 커널(Kernel)이라고 합니다.운영체제의 역할운영체제는 크게 두 가지 핵심 역할을 담당합니다.프로세스 및 스레드 관리자원 할당 및 관리프로세스 및 스레드 관리운영체제는 프로그램(프로세스)의 실행을 제어하고, 여러 개의 프로세스가 동시에 실행될 수 있도록 스케줄링합니다.또한, 프로세스 내부에서 실행되는 스레드를 관리하여 효율적인 멀티태스..
![[Spring] 놀멍 서비스 개발 일지 - 로그 시스템 구축하기2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWxziw%2FbtsL7iT9f3v%2FFUgvzxhQTgaBoSSgjxHIf0%2Fimg.png)
이 글은 반려견 동반 가능 시설 공유 플랫폼 '놀멍'의 모니터링 서버를 구축하는 과정입니다.놀멍 서비스 개발 일지 - 로그 시스템 구축하기1 이전 글에서 이어진 내용입니다. 로그 시스템 개발 이전 글에서 설명한 대로 운영 서버와 모니터링 서버를 분리하여 관리하며, 각 서버의 아키텍처는 다음과 같습니다.운영 서버: Spring Boot Application, Promtail모니터링 서버: Prometheus, Loki, Grafana 1. docker-compose 설치먼저, Docker Compose가 설치되어 있지 않다면 아래 명령어로 설치합니다.놀멍 서버의 OS는 Amazon Linux2를 사용하고 있습니다. 만약, 다른 OS를 사용하신다면 Docker Compose 설치 명령어가 다릅니다.sudo ..