본문 바로가기

TEAM STUDY/한 권으로 읽는 컴퓨터 구조와 프로그래밍

(12)
CI/CD 란 ? 지속적인 통합 관리 배포 !! 😏😏 CI/CD 란 우리는 여태까지 어떻게 하면 더 좋은 코드를 만들어낼 수 있을지에 대해서 고민해왔다. 하지만 궁극적으로 우리가 하고 싶은 것은 사용자에게 우리가 멋드러지게 만든 코드를 결과물로 만들어 보여주는 것이다. 어떻게 하면 사용자에게 우리의 코드를 보여줄 수 있을까? ✅ 컴파일 첫번째로 우리가 만든 코드를 컴파일 한다. 컴파일이란 우리가 만든 프로그래밍 언어를 기계가 이해할 수 있는 기계의 언어로 번역하는 것이다. 우리가 사용한 java, c와 같은 프로그래밍 언어는 기계가 이해할 수 없다. 이렇게 개발자의 편의를 위해 개발자의 언어로 작성한 프로그래밍 언어를 컴파일러가 컴파일 해 기계가 이해할 수 있는 언어로 번역해준다. ✅ 빌드 다음은 컴파일된 기계의 언어를 사용자에게 보여주기 위해 빌드하여 완..
직렬화 ( Serializable ) 란 ? 직렬화를 사용하는 이유 사용하고 있는 데이터들을 파일 저장 혹은 데이터 통신에서 파싱 할 수 있는 유의미한 데이터를 만들기 위함이다. - 데이터 직렬화 serialization 메모리를 디스크에 저장하거나 네트워크 통신에 사용하기 위한 형식으로 변환 하는 것. - 역직렬화 반대로 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모이네 쓸 수 있도록 다시 변환하는 것. 데이터의 메모리 구조는 값 형식 데이터, 참조 형식 데이터 두 가지로 구분된다. 이 두가지 데이터 중에서는 디스크에 저장하거나 통신할 때는 값 형식 데이터만 가능하다. - 값 형식 데이터 ( Value Type ) 흔히 선언해서 사용하는 int, float, char 등 값 형식 데이터들은 스택에 메모리가 쌓이고 직접 접..
런타임 라이브러리와 표준 입출력 런타임 라이브러리와 표준 입출력 C프로그램을 실행 하려면 우리가 작성한 코드를 컴파일한 다음, 컴파일된 코드와 이 코드가 사용하는 stdio 라이브러리 등의 다른 코드를 링크 해야 한다. C에서 런타임 라이브러리는 crt0 등의 이름으로 불린다. 런타임 라이브러리는 스택과 힙을 설정해서 사용 할 수 있도록 준비하는 등의 설정을 담당한다. 런타임 라이브러리는 추가로 터미널 장치 드라이버와 연관된 파일을 하나는 입력을 위해, 하나는 출력을 위해 연다. stdio 라이브러리는 ( 런타임 라이브러리가 연 ) 시스템 파일 디스크립터를 파일 포인터와 연관 시킨다. 파일 포인터는 버퍼링이나 파일 관리에 필요한 데이터 구조를 가르킨다. stdio 는 기본적으로 세 가지 파일 포인터를 제공한다. stdio - 표준 입력..
표준 I/O 표준 I/O 장치 드라이버 내의 버퍼링은 문제 중 일부만 해결해준다. 사용자 프로그램에도 비슷한 문제가 있다. 장치 드라이버가 입력을 버퍼링해도 사용자 프로그램이 사용자가 문자를 입력할 때마다 시스템 콜을 호출하면 장치 드라이버 쪽 입력 버퍼가 아무 쓸모가 없다. 마찬가지로 사용자 프로그램이 문자를 기록하기 위해 매번 시스템 콜을 호출하면 장치 드라이버에 출력 버퍼가 아무 역힐도 못한다. 이런 상황이 자주 있기 때문에 표준 입출력 라이브러리 ( stdio ) 가 만들어졌다. 표준 입출력 라이브러리에는 사용자 프로그램이 쓸 수 있는 버퍼 I/O 함수가 들어 있다. stdio 라이브러리는 버퍼 입력을 지원한다. 버퍼 입력을 사용하면 시스템 콜을 한번만 사용해 장치 드라이버에서 읽은 데이터를 버퍼에 넣을 수 ..
context switch (문맥교환) 이란 ? context switch ( 문맥교환 ) 이란 ? 멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다. ⚫ Context Switching - 인터럽트(Interrupt) 인터럽트는 CPU가 프로그램을 실행하고 있을 때 실행중인 프로그램 밖에서 예외 상황이 발생하여 처리가 필요한 경우 CPU에게 알려 예외 상황을 처리할 수 있도록 하는 것을 말한다. 아래와 같은 인터..
저수준 언어와 고수준 언어 오늘은 스터디 와중에 JW 선배가 저수준 언어와 고수준 언어에 대해 질문을 했는데, 들어보기는 했어도 자세히 다뤄본적이 없어서 대답하지 못했다. 이 기회에 저수준 언어와 고수준 언어에 대해 알아봐야겠다. 컴퓨터는 사용자가 제공한 지침에 따라 작동한다. 특정 작업을 수행하기 위해 작성된 일련의 지침은 컴퓨터 프로그램이라 하고 컴퓨터 프로그램의 모음을 소프트웨어하고 한다. 컴퓨터 프로그램 또는 소프트웨어는 컴퓨터 프로그래밍언어를 사용해서 작성된다. 프로그래밍언어는 크게 두가지로 나뉜다. High Level Programing Language ( 고수준 언어 ) Low Level Programing Language ( 저수준 언어 ) 고수준 언어란 (고수준 언어) ? ⚫ 고수준 언어 EX Java C C # ..
이제는 '컴파일과 인터프리터' 모르면 안됨 🔊 컴파일과 인터프리터의 차이점은 물론 컴파일과 인터프리터가 무엇인지도 개념도 중요하게 생각지 않았는데 기본 개념이라구 !!! 이번 스터디에서 강조해준 선배님들 덕에 한번 더 집고 가야겠다 !!! 🙋‍♀️ 컴파일과 인터프리터는 사람이 이해할 수 있는 고급언어로 작성된 소스 코드를 기계가 번역할 수 있는 기계어로 번역한 후에 프로그램을 실행하는 것이다. ✅ 컴파일러(번역기) 컴파일러는 사람이 고급 언어를 작성을 하면 해당 고급 언어를 한 번에 번역을 합니다. 그렇기 때문에 줄 단위로 번역을 하는 인터프리터에 비해 번역 시간은 오래 걸리는 편입니다. 하지만, 컴파일러는 한 번 번역을 하면 실행 파일이 생성이 되어 다음에 실행을 할 때 기존에 생성되었던 실행 파일을 실행하기 때문에 인터프리터에 비해 실행 시간이 ..
Hash Table ( 해시 테이블) 에 대해 알아보기 😤 해시 테이블 ? 해시 테이블이란 연관 배열 구조를 이용하여 키에 결과 값을 저장하는 자료구조 이다. 연관 배열 구조 ( Associative array ) 란 ? 키 하나와 값 한대다 1 대 1 로 연관되어 있는 자료 구조이다. 따라서 Key 값을 이용하여 값을 도출 할 수 있다. 연관 배열 구조가 지원하는 명령 키 / 값 삽입 키 / 값 확인 키 / 값 수정 키 / 값 삭제 해시 테이블의 구조 해시 테이블의 구성 요소 키 고유한 값이며 해시 함수의 input 이 된다. 다양한 길이의 값이 될 수 있다. 이 상태로 최종 저장소에 저장이 되면 다양한 길이 만큼의 저장소를 구성해 두어야 하기 때문에 해시 함수로 값을 바꾸어 저장이 되어야 공간의 효율성을 추구할 수 있다. 해시 함수 키를 해시로 바꿔주는 역할..