목록cs (14)
hmk run dev
공유기(Router)란?단일 IP에서 하위 클라이언트 PC가 유선 또는 무선으로 하나의 인터넷 라인을 공유하여 동시에 인터넷 접속이 가능하도록 하는기기다. WAN과 LAN 사이의 중계 역할을 하며 공인 IP를 각각의 PC에 사설 IP로 나누어 주고, 공유기에 연결된 장치들이 통신을 시도하면 NAT 기술을 이용하여 외부방 서버에 메세지를전달한다. 네트워크 주소 변환(Network Address Translation, NAT) : 공인 IP와 사설 IP간 주소를 변환시켜주는 기술광대역 통신망(Wide Area Network, WAN) : ISP가 제공하는 서비스에 의해 구축된 네트워크근거리 통신망(Local Area Network, LAN) : 작은 지역에서 여러 통신 기기와 상호 연결이 가능하게 하는 ..
운영체제가 프로세스 스케줄링을 위해 사용하는 실질적인 방법이다. 대표적인 CPU 할당을 위한 프로세스 스케줄링 알고리즘의 종류는 아래와 같다. 1. 선입 선처리 스케줄링(FIFO) 준비 큐에 삽입된 순서대로 CPU를 할당해주는 방식이다. 먼저 실행되는 프로세스들의 실행 시간이 길다면, 대기 중인 프로세스들이 기다리는 시간이 매우 길어질 수 있다. 2. 최단 작업 우선 스케줄링(Shortest Job First) 실행 시간이 가장 짧은 프로세스부터 CPU를 할당해주는 방식이다. 3. 라운드 로빈 스케줄링(Round Robin) 준비 큐에 삽입된 순서대로 CPU를 할당하지만, 정해진 시간(타임 슬라이스)만큼만 할당해주는 방식이다. 정해진 시간동안 전부 실행되지 못했다면, 맨 마지막 순서로 돌아가서 다시 기다..
디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 설계문제를 정리해서 상황에 따라 간편하게 적용할 수 있게 정리한 것입니다. 선배 개발자 분들의 시행착오 끝에 그중 가장 효과적이라고 알려진 패턴으로 잘 활용할 수만 있다면 적지 않은 시간과 노력, 시행착오를 줄일 수 있습니다. 간략하게 미리 알아두고 풀고 싶은 문제가 있을 때 적재적소에 적용한다면 좋겠습니다! 디자인 패턴 용도에 따라 나누기 가장 대중적으로 널리 알려진 나누는 기준은 생성, 구조, 행동으로 나눈 기준입니다. 생성 패턴(Creational Pattern) 객체 인스턴스를 생성하는 패턴으로, 객체를 생성하는 방법과 시점을 추상화하고, 코드의 유연성, 재사용성 및 유지보수성을 향상시킵니다. 싱글턴 패턴(Singleton Pat..
클럭(clock) 1. 컴퓨터 부품들은 '클럭 신호'에 맞춰 일사불란하게 움직인다. 2. CPU는 '명령어 사이클'이라는 정해진 흐름에 맞춰 명령어들을 실행한다. 일반적으로 클럭 신호가 빠르게 반복되면 CPU를 비롯한 컴퓨터 부품들은 그만큼 빠른 박자에 맞춰 움직이겠네요? 꼭 그런건 아니지만 일반적으로는 맞다. 클럭 속도 - 헤르츠(Hz) 단위로 측정 (초당 횟수) - 클럭이 '똑-딱-' 하고 1초에 한 번 반복되면 1Hz 클럭 신호를 무지성으로 높이면 CPU가 무지막지하게 빨라진다? 필요 이상으로 클럭을 높이면 발열이 심해짐 코어와 멀티 코어 - 클럭 속도를 늘리는 것 이외에 성능을 높이는 방법은? - 코어 수를 늘리는 방법 ex) 듀얼 코어, 멀티 코어... - 스레드 수를 늘리는 방법 ex) 멀티 ..
내가 작성한 소스코드가 어떻게 컴퓨터가 이해할 수 있는 명령어로 바꿔서 동작하게 할까? 고급 언어(js, java, python 등등)와 저급 언어 고급 언어 - 개발자가 이해하기 쉽게 만든 언어 - 컴파일 언어 작성된 소스코드가 컴파일러에 의해 저급 언어로 변환되고, 컴파일 결과로 저급 언어인 목적 코드가 생성된다, - 인터프리트 언어 인터프리터에 의해 한 줄씩 실행 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요 없음 컴파일과 인터프리트 과정 살펴보기 https://godbolt.org/ 저급 언어 - 컴퓨터가 이해하고 실행하는 언어 기계어 이진수 혹은 16진수로 표현된 기계어 어셈블리어 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급언어 Reference https://www.ye..
알다시피 컴퓨터는 0과 1밖에 이해하지 못한다. 그런데 어떻게 우리가 작성한 문자를 해석해서 명령을 실행시킬 수 있을까? 문자집합(character set) 컴퓨터가 이해할 수 있는 문자 모음 인코딩(encoding) 코드화하는 과정 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정 문자 => 0 or 1 디코딩(decoding) 코드를 해석하는 과정 0과 1로 표현된 문자 코드를 문자로 변환하는 과정 0 or 1 => 문자 문자집합 아스키코드(ASCI) - 초창기 문자집합 중 하나 - 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어문자 - 7비트로 하나의 문자 표현(실제로는 8비트) 8비트 중 1비트는 오휴 검출을 위해 사용되는 패리티 비트(parity bit) EUC-KR - 2300여개의 한글..
컴퓨터는 0과 1밖에 이해하지 못한다. 그런데 1보다 큰수를 어떻게 이해할 수 있을까? 컴퓨터가 이해하는 가장작은 정보단위는 bit이다 비트(bit) : 0과 1을 표현하는 가장 작은 정보 단위 아래와 같이 0과 1을 표현할 수 있는 여러개의 비트로 1보다 큰 수를 표현할 수 있다. - n 비트로는 2n가지의 정보를 표현가능 - 프로그램은 수많은 비트로 이루어져 있음(브라우저, 포토샵, 게임 등등) - 다만, 평소 "이 파일은 8,920,120 비트야" 라고 표현하진 않음 - 비트보다 큰 단위를 사용함 (byte, kb, mb, gb, TB) 정보단위 워드(word) - cpu가 하번에 처리할 수 있는 정보의 크기단위 - 하드워드 : 워드의 절반 크기 - 풀워드 : 워드 크기 - 더블 워드 : 워드의 두..
컴퓨터가 이해하는 두 가지 정보는 크게 두 가지가 있다. 1. 데이터 - 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 - 컴퓨터와 주고 받는, 내부에 저장된 정보 - 0과 1로 숫자를 표현하는 방법 - 0과 1로 문자를 표현하는 방법 2. 명령어 - 컴퓨터는 결국 명령어를 처리하는 기계 - 명령어 - 컴퓨터를 실질적으로 움직이는 정보 - 데이터는 명령어를 위한 일종의 재료 - 명령어의 생김새와 동작 방식 컴퓨터의 4가지 핵심 부품 컴퓨터의 종류를 막론하고 컴퓨터를 동작시키는 부품은 대부분 같다. CPU 컴퓨터의 두뇌, 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치 CPU는 크게 세 가지로 구성되어 있음(이 밖에 많은 부품이 존재하긴함 ex. 캐시 메모리) - ALU:계산기(계산을 위한..
처음 개발을 배운다면 프로그래밍 언어와 문법부터 학습을한다. 개발자는 코드만 잘짜면 되는가? 컴퓨터구조를 굳이 왜 알아야하는가? 좋은 개발자가 되기 위해선 프로그래밍 언어의 문법과 함께 컴퓨터의 근간을 알아야한다. 1. 문제 해결 능력 2. 성능 용량 비용을 고려한개발 분명 코드를 제대로 작성했는데 왜 동작하지 않는 거지? 같은 코드라도 실제로 사용자들에게 동작이 잘 되지 않는 경우가 꽤 있다 이는 프로그래밍 언어의 문제일까? 입력 너머에 근원적인 문제가 아닐까? 여기서 컴퓨터에 대해서 무지하다면 문제 원인에 대한 파악부터 어려워 질 수 있다. 심지어 개발 전에 사전에 미리 문제점을 파악하고 예방을 할 수 있는 사고를 할 수도 있다. 좋은 개발자의 덕목중 하나인 문제해결력은 탄탄한 기본에서 나오지 않나싶..
Process OS가 관리하는 단위, 프로그램 실행의 단위 프로세스라는 것은 기본적으로 연산할 작업을 뜻하기도 한다. 동시에 여러개의 프로세스가 실행된다면 이를 멀티프로세싱이라고 한다. Thread 프로세스가 하나가 있다면 그안에 스레드는 최소 1개 이상이 있다. 스레드는 프로세스 내의 하나의 실행 흐름, 코드 실행의 흐름이라고 봐도 무방하다. 한 프로세스 내부에 스레드는 N개가 될 수 있다. 이를 멀티 스레딩 이라고 하는데 스레드들은 동시에 그리고 각자 작동한다. Virtual Memory 하드웨어 수준에서 CPU 같은 전산자원이 존재하고 CPU에 코어가 4개가 있다고 가정해보자, 연산들은 주로 CPU와 RAM(1차 메모리)을 사용해서 처리된다. 어떤 프로세스가 존재한다면, 프로세스 내부엔 여러 연산 ..