[TIL] CPU 스케줄링
·
CS/운영체제 & 네트워크
CPU 스케줄링운영체제가 Ready Queue에 있는 프로세스들에게 CPU 자원을 할당하는 것CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당함 선점 스케줄링다른 프로세스가 CPU를 사용 중이더라도, 운영체제가 프로세스로부터 자원을 빼앗아 다른 프로세스에 할당하는 방식우선순위가 높은 프로세스를 빠르게 처리할 수 있다.라운드 로빈, SRT, 멀티 큐, 멀티 피드백 큐컨텍스트 스위칭이 자주 일어나 오버헤드가 발생하여 성능 저하의 우려가 있다.문맥교환 (Context Switching)CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때, 기존 프로세스의 상태 또는 레지스터 값(Context)을 저장하..
[TIL] 메모리 계층 구조
·
CS
메모리 계층 구조 "CPU에 얼마나 가까운가" 를 기준으로 각기 다른 용량과 성능의 저장 장치들을 계층적으로 나타낸 구조각 계층은 성능, 용량, 가격 측면에서 차이가 있으며, 이를 효율적으로 활용하여 최적의 성능을 달성할 수 있음 메모리 계층 구조의 원리CPU와 가까울수록 빠르다CPU 바로 옆에 있는 레지스터와 캐시 메모리는 매우 빠른 속도를 제공하지만, 용량이 작고 가격이 비쌉니다.반면, RAM, SSD/HDD 등은 점점 CPU와 거리가 멀어지면서 속도가 느려지지만, 저장 용량이 커지고 가격이 저렴해집니다.고속 메모리는 비싸고 용량이 작다속도가 빠른 L1, L2, L3 캐시는 매우 비싸므로, CPU 내부에 소량만 탑재됩니다.대용량 데이터를 저장하려면 상대적으로 느린 RAM이나 SSD를 활용해야 합니다...
[TIL] 명령어 집합 구조(ISA), CISC vs RISC
·
CS
명령어 집합 구조(ISA)CPU가 이해하고 실행할 수 있는 명령어들의 집합즉, ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속 CPU 마다 ISA가 다르기 때문에, 인텔 CPU(x86)를 사용하는 프로그램은 ARM 기반 아이폰에서 실행되지 않음즉, ISA의 차이는 소프트웨어 호환성에도 영향을 미치며, 동일한 프로그램을 다른 ISA에서 실행하려면 별도의 변환이 필요 CISCCISC는 Complex Instruction Set Computer의 약자로, 복잡한 명령어 집합을 사용하는 CPU다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어 사용  장점적은 수의 명령어만으로 프로그램을 동작시킬 수 있고, 이를 통해 메모리 절약 가..
[TIL] 명령어 병렬 처리 기법 (파이프 라이닝, 슈퍼스칼라)
·
CS
명령어 병렬 처리 기법CPU의 가용성을 최대화하기 위해 명령어를 동시에 처리하는 기법이는 CPU 자원의 효율적인 활용을 통해 실행 시간을 단축하고, 처리량(TPS)를 증가시키는 목적을 가짐대표적인 병렬 처리 기법에는 명령어 파이프 라이닝, 슈퍼스칼라, 비순차적 명령어 처리가 있음 명령어 파이프 라이닝명령어를 처리하는 단계를 분리하여 각 단계가 독립적으로 실행될 수 있도록 하는 방식일반적으로 명령어 인출(Fetch), 해석(Decode), 실행(Execute), 메모리 접근(Memory Access), 기록(Write Back)의 다섯 단계로 나뉨이를 통해 한 사이클에서 여러 명령어가 다른 단계를 동시에 실행함으로써 전체적인 성능을 향상시킴 즉, 단계가 다른 명령어를 겹쳐서 동시에 처리하는 방법으로, 하나..
[프로그래머스/Level2] 다리를 지나는 트럭 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 2유형 : 큐 / 구현 / 시뮬레이션구현 시간 : 30분링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제 풀이우선 해당 문제는 문제에 대한 설명이 부족하다.예제를 보면 추측이 가능한데 아래 2가지 조건을 추가해야 한다.트럭은 1초에 1씩 전진한다.트럭은 1초에 1대씩 다리에 올라갈 수 있다. 1. Queue 자료구조를 사용해서 다리 위 트럭 객체를 관리2. currentWeight, idx, time 변수를 통해 현재 다리 위 무게, 시간, 대기 트럭의 ..
[Spring Boot] MongoDB와 MySQL의 이기종 트랜잭션 문제 해결
·
Back-End/Spring
문제 상황채팅 데이터베이스를 MySQL에서 MongoDB로 이전하며 트랜잭션이 적용되지 않는 문제가 발생했습니다.Spring은 @Transactional 어노테이션을 통해 AOP를 사용하여 트랜잭션을 제어하며, 트랜잭션은 TransactionManager을 통해 관리됩니다.Spring Boot는 등록된 라이브러리를 통해 자동으로 스프링 컨테이너에 트랜잭션에 등록됩니다.  그러나 MongoDB 트랜잭션은 선택 사항이기 때문에, Spring Boot는 자동으로 트랜잭션 매니저를 등록하지 않습니다. 따라서 MongoDB 트랜잭션을 사용하기 위해서는 별도로 트랜잭션 매니저를 빈으로 등록해야 합니다.@Configurationpublic class MongoConfig { @Bean(name = "mongoT..
[Spring Boot] MongoDB LocalDateTime 저장 시 UTC로 저장되는 문제
·
Back-End/Spring
문제 상황 Spring Boot 환경에서 MongoDB에 LocalDateTime을 저장할 때, Date 컬럼이 자동으로 UTC로 변환되어 저장되는 문제가 발생했습니다.예를 들어, 한국 시간(KST) 기준 18시 36분에 전송한 채팅 메시지가 국제 표준 시간(UTC) 기준 09시 36분으로 저장됩니다.그러나 데이터를 다시 Spring Boot 애플리케이션에서 조회하면, 시스템 기본 시간대(KST)로 변환되어 정상적으로 출력되는 것을 확인할 수 있습니다.해당 문제는 비즈니스 로직에 직접적인 영향을 미치지는 않지만, 팀 내에서 데이터 저장 시간과 변환 방식에 대한 혼동이 발생할 수 있습니다. 데이터베이스에 저장된 시간과 애플리케이션에서 조회된 시간이 다르게 보이기 때문에 개발자나 운영팀이 시간 데이터를 해석..
[BOJ/Gold4] 12869번 뮤탈리스크 - JAVA[자바]
·
PS/백준
난이도 : 골드 4유형 : BFS / DFS / DP링크 : https://www.acmicpc.net/problem/12869구현 시간 : 30분     문제 풀이 이 문제는 BFS / DFS 알고리즘의 유형으로, 뮤탈리스크는 한 번의 공격에서 세 개의 SCV에 각각 9, 3, 1의 피해를 줄 수 있으며, 세 개의 공격 순서를 자유롭게 선택할 수 있습니다.즉, 모든 가능한 공격 순서를 고려하여 최소 공격 횟수를 찾아야 하는 문제입니다. 얼핏 보면 SCV 체력을 내림차순으로 정렬하고, 9 -> 3 -> 1 순서로 공격하면 쉽게 해결할 수 있지 않나? 싶지만아래 예제를 보면 그리디하게 문제를 해결할 수 없다는 것을 알 수 있습니다.SCV의 체력이 (12 , 10, 4)일 때첫번째 공격 -> 1, 3, 2 ..
[Spring Boot] WebSocket 을 사용하여 채팅 서비스 구현하기(4) - 채팅 서비스 성능 개선 및 부하 테스트
·
Back-End/Spring
들어가며야구 직관 서비스 CATCH-Mi 프로젝트에서 실시간 채팅 서비스를 구현한 경험을 기록하고 복습하기 위해 본 글을 작성합니다. 이번 포스팅에서는 현재 CATCH-Mi 채팅 서비스의 문제점과 잠재적인 장애 요소를 고민하고, 이에 대한 성능 개선 과정과 Jmeter를 통한 성능 테스트 결과를 비교해 보겠습니다. SpringBoot와 웹소켓을 통해 채팅 서비스 구현과정이 궁금하신 분은 이전 글을 참고해 주세요! [Spring boot] WebSocket 을 사용하여 채팅 서비스 구현하기(3) - STOMP를 사용하여 실시간 채팅 구현 (비들어가며야구 직관 서비스 캐치미 프로젝트에서 실시간 채팅 서비스를 구현한 내용을 기록 및 복습의 목적으로 본 글을 포스팅합니다. 이번 포스팅에서는 STOMP 프로토콜..
[프로그래머스/Level2] 구명 보트 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 2유형 : 그리디 / 투 포인터 구현 시간 : 1시간 (못 품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제풀이이 문제는 그리디 알고리즘 유형으로, 최소한의 구명보트 개수로 모든 사람을 태우는 문제이다. 처음에는 A라는 사람의 무게가 주어지면 남은 사람들 중 구명보트의 무게 제한을 넘지 않는 최대값이 되는 B라는 사람을 찾아 최소한의 보트를 사용하려 했다. 만약 무게 제한을 넘지 않는 B가 없다면 A만 보트에 태우는 방식으로 접근했다. 이 접근 방식은..