Computer Science

💋 CPU Burst VS IO Burst ✔️ Burst 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 계속되는 작업 ✔️ CPU Burst 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간 메모리에 올라가 있는 프로세스가, 자신의 차례가 되어 CPU에서 실행되었을 때, 자신의 명령어가 CPU에서 연속적으로 실행되는 시간 ✔️ IO Burst 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간 프로세스를 실행하면, CPU Burst, IO Burst가 번갈아가며 나타난다. (마지막은 CPU Burst겠죠?) 💋 CPU Bound VS IO Bound ✔️ CPU Burst 시간의 분포 위 그래프를 보면, 대부분의 프로세스는 CPU Burst가 8ms 이내에 끝나는 것을 볼 수 있다. 프로세..
💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 💋 컨텍스트 스위칭 ✔️ 개념 CPU/코어에서 실행중이던 스레드가 다른 스레드로 교체되는 것 이 때 두 스레드는 같은 프로세스에 속할수도, 다른 프로세스에 속할 수도 있다. 여러 프로세스/스레드를 동시에 실행시키기 위해 필요하다. ✔️ 발생 원인 크게 3가지! Time Quato Expiry: 주어진 quantum(time slice)의 시간이 다됨. 쉽게 말해 Time Over! Interrupt: 커널 함수를 통해서 프로그램 실행 도중에 멈춰버림. (SIGKILL interrupt signal) Preemption: 더 우선순위가 높은 일을 해야 할 때 선점해버려서 ✔️ 컨텍스트(context)란? 프로세스/스레드의 상태 CPU, 메모리의..
💋 인트로 안녕하세요, 우아한테크코스 5기 백엔드 깃짱이라고 합니다. 이번 포스팅부터는 유튜브 쉬운코드의 운영체제 영상을 보면서, 운영 체제의 기초에 대해 정리해 나가려고 합니다. 대부분의 내용과 사진은 쉬운코드 개발자님의 영상을 보고 작성한 내용입니다. 텍스트로 이해가 잘 되지 않는다면 참고자료에 있는 영상을 직접 보면서 공부하시면 많은 도움 될 거에요! 💋 용어 정리 먼저 기본적인 용어부터 정리하고 시작해야 한다. ✔️ 프로세스 컴퓨터에서 실행중인 프로그램으로, 각각의 프로세스는 독립된 메모리 공간을 할당 받는다. 또 각 메모리 공간은 독립적인 명령어와 데이터를 가진다. ✔️ CPU(Central Processing Unit) 명령어를 실행하는 연산 장치 ✔️ 메인 메모리 프로세스가 CPU에서 실행되..
💋 문제 설명 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요. 💋 제한사항..
💋 Connection Pool이란? ✔️ 등장 배경 많은 애플리케이션에서 데이터베이스를 활용한다. 하지만, 데이터베이스에 연결하는 과정은 굉장히 비용이 많이 든다. 네트워크를 처리(TCP로 연결을 생성하고 종료)하고, 연결이 필요한 객체(SocketFactorv, Socket 등등)를 만들고 JVM GC에서 처리하는 과정은 굉장히 느리다. 데이터베이스와의 연결 비용을 줄이기 위해서 커넥션 풀 이라는 개념이 등장했다. ✔️ 개념 쉽게 말해서, 커넥션을 미리 만들어주고 빌려주는 것 미리 DB에 연결된 객체를 만들어놓고, 이것들을 Connection Pool이라고 하는 컨테이너에 넣어둔다. DB와 연결 요청이 들어올 때, 커넥션 풀에서 연결 객체를 꺼내서 주고, 다 사용하면 재사용할 수 있게 다시 커넥션 풀..
💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱이라고 합니다. 이번 포스팅에서는 DB Connection Pool Size를 줄일 수록 오히려 성능이 개선될 수 있는 이유에 대해서 작성했습니다. 아래 내용은 HikariCP에서 작성한 깃허브 Wiki의 내용을 토대로 작성했습니다. 💋 커넥션 풀의 크기를 결정할 때, 얼마나 작게 하는지가 더 중요하다? 커넥션 풀을 설정하는 것은 개발자들이 자주 실수하는 부분입니다. 커넥션 풀을 구성할 때 이해해야 할 몇 가지 원칙이 있습니다. 동시에 10,000명의 사용자가 있는 서비스를 상상해보세요. 아마도 페이스북처럼 대규모는 아니더라도 10,000명의 사용자가 동시에 데이터베이스 요청을 하는 경우입니다. 이는 초당 약 20,000개의 트랜잭션을 의미합니다. 이때 커넥..
💋 인덱스란? 데이터베이스의 테이블에서 데이터를 검색하고 정렬하는 데 사용되는 구조 예를 들어, 한 대학교에서 학생들 테이블을 관리한다고 생각해 보자. column으로는 id(primary key), name, age, major 등등이 있다. 이때 이름을 기반으로 한 검색이 매우 많다고 하자. 예를 들어 아래와 같은 검색이다. SELECT * FROM STUDENTS WHERE NAME='깃짱'; 이 경우에 매번 primary key로만 정렬된 테이블에서 '깃짱'이라는 이름을 한 학생을 찾으려면 테이블을 전부 뒤져봐야 한다. 이렇게 값을 찾는 방식을 full scan이라고 한다. 대강 생각해봐도 상당히 비효율적이다. 이름 기반 검색이 자주 사용된다면, 이름을 가나다 순으로 만든 테이블을 별도로 두고 관..
💋 H2 데이터베이스 버전 확인 버전 확인 방법이다! 먼저 h2 데이터베이스에 들어간다. 쿼리문으로 아래 명령어를 작성하고 실행한다. SELECT H2VERSION() FROM DUAL; 버전을 확인할 수 있다!
네트워크 지식은 전공지식이어서 그런가, 공부를 해도 해도 하루만 지나도 계속 까먹는다. 이번엔 진짜 잊지 않겠다는 마음으로 포스팅을 꼼꼼히 쉬운 언어로 해보려고 한다. 다른 사람들에게도 도움이 되면 좋겠다! 💋 OSI 7 Layer란? OSI 7 계층은 네트워크 통신에서 기본이 되는 구조로, 네트워크 관련 기술을 공부하거나 개발할 때 중요한 개념 중 하나이다. 내가 어딘가 다른 컴퓨터로 데이터를 보내고 싶다 하면, 처음에는 가장 사람의 언어에 가까운 Application Layer부터 시작한다. 아래 계층으로 내려갈 수록 데이터를 전송할 수 있는 형태로 네트워크 개발자들이 정해놓은 수많은 약속에 따라 포장하고, 결국에는 전송 가능한 전선에 보내는 01010101의 형태로 만들어서 다른 컴퓨터로 보내게 된..
💋 H2란? H2는 가볍고 편리한 데이터베이스다. 개발 과정에서, 혹은 테스트 용도로 주로 사용하며, SQL을 실행할 수 있는 간단한 화면을 제공한다. 💋 H2 설치하기 ✔ H2 dependencies 추가 build.gradle 파일에서 dependencies에 아래와 같은 코드를 추가한다 runtimeOnly 'com.h2database:h2' 반드시 새로고침 ✔ 스프링부트 버전에 맞는 h2 다운로드 https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com 위 사이트에 들어가서 내 스프링부트 버전에 맞는 h2를 설치한다. 현재 내 스프링부트 버전에 맞는 h2 버전은 프로젝트 바에서 아래와 같이 ..