study
91 posts
CSAPP-2024-07-1주차 정리 (301p - 310p)

Machine-Level Representation of Programs 3.9 Heterogeneous Data Structures Heterogeneous Data Structures : 이질적인 데이터 구조체들 C는 객체의 다른 타입들을 조합함으로써 데이터 타입을 생성하는 두 가지 메커니즘을 갖고 있다. 구조체, 유니온이 바로 그것이다. 3.9.1 Structures C의 구조체는 단일한 객체에 다를 수 도 있는 객체들을 묶어 놓은 데이터 타입으로 생성하고, 선언한 것을 말한다. 구현은 기본적으로 배열과 동일하며, 연속적인 공간 속에, 구조체의 데이터들이 나열하여 저장되며, 구조체는 최초의 바이트의 주소값을 포인터로 소지한 형태로 구성된다. 이러한 구조체의 각 필드에 접속하기 위해, 컴파일러는 적절하게 구조체의 주소에 접근 가능한 오프셋을 더하는 코드를 생성한다. 교재에서 나오는 예시를 통해 알 수 있는 점은, 구조체의 다른 필드에 접근하는 것에 대한 모든 내용은 컴파일 타임…

July 06, 2024
study
CSAPP-2024-06-4주차 정리 (291p - 312p)

Machine-Level Representation of Programs 3.8 Array Allocation and Access C 언어 안에 배열은 더 큰 단위의 데이터 타입의 스칼라 데이터들을 모아주는 하나의 수단이다. C는 특히나 배열을 단순한 구현을 통해 사용하고, 나아가서 매우 직관적으로 기계어로 번역된다. C의 특수한 기능의 하나로, 포인터들을 통해 배열 내의 요소들을 가리키는 게 가능할 뿐만 아니라, 이러한 포인터들의 수학적 연산을 수행 가능하다는 점이다. 이러한 코드들은 기계어로 주소 계산을 통해 변환된다. 최적화 컴파일러는 특히나 배열의 인덱싱을 수행함으로써 주소 연산을 단순화하기를 매우 잘한다. 이러한 특성은 C 코드와 해당 코드를 기계 코드로 번역하는 것 사이의 대응 관계를 해독하는데 다소 어려워 질 수 있다. 3.8.1 Basic Principles 우리가 익히 아는 배열의 룰 기본적인 x86-64 메모리 참조 구조는 배열 접근을 하기 위해 단순하게 디자인되…

June 29, 2024
study
CSAPP-2024-06-4주차 정리 (281p - 291p)

Machine-Level Representation of Programs 3.7.3 Data Transfer 호출 될 때 프로시져가 제어권을 전달함과 더불어, 여기엔 데이터가 인자로써 전달되고 값이 반환된다. x86-64 에서, 여섯개의 정수 인자가 레지스터를 통해 전달될 수 있다. 인자들은 이러한 인자 리스트 안에 순서에 따라 레지스터들에 순서를 가지고 할당 된다. 정수 인자가 6개보다 많은 함수의 경우, 다른 인자들을 스택 상에서 전달해준다. 따라서 인자를 받기 전 프로시져는 반드시 스택프레임에 7번째부터 인자를 저장하기에 충분한 스택 프레임을 할당해야 한다. 프로시져 Q는 레지스터를 통해 인자에 접근이 가능하고, 스택으로부터도 가능하다. 만약 Q가 6개의 인자보다 더 많이 인자를 가지는 함수를 호출한다면, 6개 이상의 인자들을 위한 스택프레임 내부의 공간을 할당해야 하고, 이는 인자 빌드 에리어에 지정된다. 이에 대한 기계어로 번역된 코드 proc의 예시만 봐도 최초 6개의…

June 19, 2024
study
CSAPP-2024-06-3주차 정리 (268p - 281p)

Machine-Level Representation of Programs 3.6.8 Switch Statements 해당 방식은 가독성, 및 점프테이블이라 불리는 구조를 활용하여 효과적인 구현이 가능케 되었다. 스위치문이 어셈블리어로 구현될 때는, 개발자가 지정한 의미의 케이스 값으로 그대로 가진 않고, 오히려 임의의 정수 숫자로 변환된다. 스위치문이 수행되는데 핵심은 결국 점프 테이블을 통해 코드의 위치로 접근하는데 있다. 간단하게 값을 연산함으로써 함수의 끝으로 갈 수 있다. 유사하게 어셈블리 코드 블록은 레지스터 %rdi 의 값을 연산하고, 레이블로 지정된 위치로 점프를 하는 구조를 취한다. 결국 이러한 코드들은 세심하게 학습할 필요가 있으나, 동시에 점프테이블을 활용함으로써 다양한 분기점으로 효과적으로 이동하는 것을 허락한다는 점이다. 3.7 Procedures 프로시져는 소프트웨어 추상화의 핵심이다. 프로시져는 인자들의 세트와, 옵셔널한 리턴 값의 셋을 사용하여 특정 기능…

June 15, 2024
study
신입 개발자 인터뷰 대비 - 9. ETC

신입 개발자 인터뷰 대비 : 9. ETC ETC 메소드 호출 시 인자 전달 방식인 Call by Value와 Call by Reference에 대해 설명하고, 자신의 직무 언어는 어떤 전달 방식을 채택하고 있는지 설명 하시오 Call by Value와 Call by Reference Call by Value 방식에서는 메소드를 호출할 때 인자로 전달되는 값의 복사본을 생성하여 메소드에 전달한다. 이 방식에서는 메소드 내에서 인자 값이 변경되어도 원래의 변수 값에는 영향을 주지 않는다. Call by Reference 방식에서는 메소드를 호출할 때 인자로 전달되는 변수의 참조(주소)를 전달한다. 이 방식에서는 메소드 내에서 인자 값을 변경하면, 참조된 원본 변수의 값도 변경된다. 메소드가 참조를 통해 실제 객체의 상태를 변경할 수 있기 때문에, 원본 데이터에 대한 수정이 가능하다. 자바의 인자 전달 방식 자바는 Call by Value 방식을 사용한다. 이는 메소드에 인자를 전달할 …

May 03, 2024
study
신입 개발자 인터뷰 대비 - 8. JPA

신입 개발자 인터뷰 대비 : 8. JPA JPA JPA 영속성 컨텍스트가 무엇이며, 이점을 설명하시오(5가지) JPA 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이다. 데이터베이스와 애플리케이션 사이에서 엔티티의 생명주기를 관리한다. 이로 인한 이점은 다음과 같다: 1차 캐시: 영속성 컨텍스트는 1차 캐시 기능을 제공해 이미 조회한 엔티티를 메모리에 저장한다. 이는 같은 트랜잭션 내에서 엔티티를 다시 조회할 때 데이터베이스에 접근할 필요가 없어 성능이 향상된다. 동일성 보장: 같은 트랜잭션 내에서 같은 엔티티에 대한 조회는 항상 같은 인스턴스를 반환한다. 따라서 엔티티의 동일성이 보장되며, 데이터 일관성을 유지할 수 있다. 트랜잭션 지원 쓰기 지연 (Transactional write-behind): 엔티티의 변경 내용을 즉시 데이터베이스에 반영하지 않고, 트랜잭션이 종료될 때까지 내부 쿼리 저장소에 모은 후 일괄 처리한다. 이는 네트워크 사용을 최적화하고 데이터베이스 부하를 줄…

May 03, 2024
study
신입 개발자 인터뷰 대비 - 7. Spring Framework

신입 개발자 인터뷰 대비 : 7. Spring Framework 네트워크 / 보안 Spring Framework에 대해 설명하시오, Spring Boot와 Spring의 차이점을 설명하시오 Spring Framework는 자바 플랫폼을 위한 강력하고 광범위하게 사용되는 개발 프레임워크다. 엔터프라이즈급 애플리케이션을 위해 다양한 기능을 제공하며, 특히 의존성 주입(Dependency Injection)과 관점 지향 프로그래밍(Aspect-Oriented Programming) 같은 개념을 적극적으로 활용하여 애플리케이션의 모듈성을 높이고, 개발을 단순화한다. Spring Boot는 Spring 기반 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 도구다. Spring Boot는 Spring의 복잡성을 크게 줄여주며, 스탠드얼론 애플리케이션을 쉽게 만들 수 있는 환경을 제공한다. Spring과 Spring Boot의 차이점: 설정의 간소화: Spring: 전통적인 Spring …

May 03, 2024
study
신입 개발자 인터뷰 대비 - 6. Java & 객체 지향 언어

신입 개발자 인터뷰 대비 : 6. JAVA & 객체지향언어 JAVA & 객체지향언어 JVM의 역할과, JVM의 구조에 대해 설명하시오 JVM(Java Virtual Machine)은 자바 프로그램이 다양한 플랫폼에서 동일하게 실행될 수 있도록 해주는 가상 머신이다. 이는 자바의 핵심 원리인 “한 번 작성하면 어디서나 실행된다(Write Once, Run Anywhere)“를 가능하게 하는 중요한 요소이다. JVM의 주요 역할: 플랫폼 독립성 제공: 자바 애플리케이션을 컴파일하면 플랫폼에 독립적인 바이트코드가 생성되고, JVM은 이 바이트코드를 해당 플랫폼의 기계어로 변환하여 실행한다. 메모리 관리: JVM은 실행 중인 프로그램의 메모리 할당 및 관리를 담당한다. 이는 가비지 컬렉션을 포함하며, 사용되지 않는 객체를 자동으로 정리하여 메모리 누수를 방지한다. 보안: 클래스 로더와 바이트코드 검증기를 통해 코드를 로드하기 전에 이를 검증하여 시스템의 보안을 유지한다. 실행 환경 제공:…

May 03, 2024
study
신입 개발자 인터뷰 대비 - 5. 운영체제

신입 개발자 인터뷰 대비 : 5. 운영체제 운영체제 프로세스와 스레드의 차이에 대해 설명하시오 프로세스와 스레드의 차이는 주로 운영체제에서 자원 할당과 실행의 기본 단위에서 찾을 수 있다. 프로세스: 운영체제로부터 독립적인 메모리 영역(코드, 데이터, 스택 등)을 할당받는 실행 중인 프로그램의 인스턴스다. 각 프로세스는 독립된 메모리 주소 공간을 가지며, 다른 프로세스와 자원을 공유하지 않는다. 프로세스 간 통신(IPC)을 통해 데이터를 교환할 수 있으며, 이는 상대적으로 비용이 많이 드는 작업이다. 스레드: 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로, 같은 프로세스 내의 스레드들은 메모리와 자원을 공유한다. 이 때문에 스레드 간 데이터 공유와 통신이 훨씬 간단하고 빠르다. 그러나 이 공유된 자원들로 인해 동시성 제어가 필수적이며, 이를 관리하기 위해 락(lock) 같은 메커니즘을 사용해야 한다. 성능 및 자원 사용: 스레드는 프로세스에 비해 생성 및 컨텍스트 스위칭이 …

May 03, 2024
study
신입 개발자 인터뷰 대비 - 4. 네트워크 / 보안

신입 개발자 인터뷰 대비 : 4. 네트워크 / 보안 네트워크 / 보안 브라우저에 URL을 입력부터 화면에 내용이 출력되기 까지의 과정을 최대한 설명할 수 있다. 브라우저에 URL을 입력하고 웹 페이지가 화면에 표시되기까지의 과정은 다음과 같이 진행된다. URL 해석: 사용자가 브라우저의 주소창에 URL을 입력하면, 브라우저는 이 URL을 해석하여 해당 리소스가 위치한 서버의 주소를 찾아낸다. 이 때 도메인 이름을 IP 주소로 변환하는 DNS 조회 과정이 포함된다. 서버 연결: DNS에서 IP 주소를 받으면, 브라우저는 이 IP 주소의 서버와 TCP 연결을 시작한다. HTTPS 프로토콜을 사용하는 경우, 이 단계에서 SSL/TLS 핸드셰이크가 이루어져 암호화된 연결이 설정된다. HTTP 요청: 연결이 설정되면, 브라우저는 HTTP 프로토콜을 사용하여 웹 서버에 데이터를 요청한다. 이 요청에는 사용자가 요청한 웹 페이지의 경로, 브라우저 종류, 수락 가능한 컨텐츠 타입 등이 포함된다.…

May 03, 2024
study
신입 개발자 인터뷰 대비 - 3. 데이터베이스

신입 개발자 인터뷰 대비 : 3. 데이터베이스 데이터베이스 데이터베이스를 사용하는 이유에 대해서 설명하라 조직화 및 관리 용이성 : 대량의 정보 체계적으로 저장, 관리할 수 있고 데이터를 구조화 저장으로 검색, 갱신, 관리가 쉬워진다. 데이터 무결성 및 보안 : 데이터베이스는 데이터의 정확성과 일관성을 유지하는 다양한 기능을 제공한다. 권한설정, 파일 자체의 암호화 등을 포함함. 효율적인 데이터 접근 : 데이터베이스를 사용하면 여러 사용자가 동시에 데이터 접근이 가능하고, 데이터를 빠르고 효율적으로 처리할 수 있게 해주며 대용량의 데이터를 쉽게 핸들링 할수 있다. 개인적인 생각 정리 : 데이터베이스를 쓰는 실질적인 의미는 결국 분할 처리에 가깝다고 생각한다. 서버 상에서 파일 형태로 데이터를 관리하거나 인메모리 상태로 관리하는 구조는, 확장성, 운용성 면에서 제약이 심하다. 특히나 peer 프로젝트 과정에서 온프레미스 서버를 구축했고, 비록 스펙적으로 부족함이 있는 PC를 기반으로…

May 02, 2024
study
신입 개발자 인터뷰 대비 - 2. 알고리즘

신입 개발자 인터뷰 대비 : 2. 알고리즘 알고리즘 시간 복잡도 O(N^2)의 정렬 알고리즘과 O(NlogN)의 정렬 알고리즘을 직무 언어로 모듈 없이 구현할수 있는가? 기본적으로 시간 복잡도 N^2, NlogN인 정렬 알고리즘은 각각 버블 정렬 알고리즘, 퀵 정렬 알고리즘이다. 버블 정렬은 각 순회에서 가장 큰 요소를 배열 끝으로 이동시키는 방식으로 동작하고, 인접 요소를 계속 비교 및 스왑한다. 퀵 정렬은 분할 정복 전략을 사용하여 배열을 정렬한다. 기준점(피봇)을 선택하고 이 기준점 대비 작은 요소와 큰 요소를 좌우로 분할하고 각 부분을 재귀적으로 정렬한다. - 버블 정렬 구현 퀵 정렬 구현 각 정렬 알고리즘의 Best와 Worst case 시간복잡도에 대해 알고, 각 특성을 설명할 수 있다. 버블 정렬 특성 : 매우 직관적이고 간단한 정렬 방법 인접한 두 원소 사이 검사를 통해 정렬을 진행하며, 정렬된 데이터를 다시 정렬 시 효과적이라는 장점이 있다. 그러나 대부분의 경…

April 30, 2024
study
신입 개발자 인터뷰 대비 - 1. 자료구조

신입 개발자 인터뷰 대비 : 1. 자료구조 자료구조 Array, ArrayList, LinkedList의 차이를 알고, 직무 언어로 모듈 없이 구현할 수 있다. Array : 배열은 크기가 고정되고 데이터가 연속적으로 메모리 상에 들어가게 된다. 이는 인덱스를 통해 접근하므로 어떤 위치라도 O(1)의 시간 복잡도로 접근이 가능하다는 의미를 가지며, 일반적인 배열이므로 구현은 생략 가능 ArrayList : 해당 데이터 구조는 Array 를 기반으로 하지만, 동적으로 크기를 변경할 수 있다는 차이를 가지며, 접근 시간은 Array와 동일하나, 크기 조정이나 데이터 이동, 중간 삽입 등에선 O(n)의 시간이 소요될 수 있다. } ``` Stack과 Queue에 대해 알고, 차이를 설명할 수 있다. 직무 언어로 모듈 없이 구현할 수 있다. stack : 특징 : LIFO 후입 선출의 구조를 가지며, 마지막에 삽입된 데이터가 가장 먼저 추출되고, push, pop, peek 등의 연산을 …

April 30, 2024
study
신입 개발자 인터뷰 대비 - 0. INDEX

신입 개발자 인터뷰 대비 면접 체크 리스트 급하게 면접을 준비해야 하는 만큼, 할 수 있는 데까지 준비 하고자 본 글을 작성하게 되었습니다. 본 내용은 이 글을 기반으로 하여 작성되었으며, 필요하다고 판단되는 내용들을 포함하여 작성되었습니다. 없던 내용이나 좀 더 보완이 필요하다고 생각한 내용에 대해 추가하였으며, 히스토리이자 내 학습의 결과물로 남기고자 이렇게 글로서 작성하게 되었습니다. 각 질문 답변 포스트 각 챕터별 추가 내용들을 포함하여 구성 완료. 참고한 글에 추가적으로 필요하다고 판단되는 질문들을 추가하여 완성하였습니다. 모든 내용은 오류를 포함하고 있을 수 있으므로 확인 후 사용 하시길 권합니다. 제목 최종 수정일자 링크 1. 자료구조 2024-04-30 링크 2. 알고리즘 2024-04-30 링크 3. 데이터베이스 2024-04-30 링크 4. 네트워크 / 보안 2024-04-30 링크 5. 운영체제 2024-04-30 링크 6. Java & 객체 지향 언어 2024…

April 30, 2024
study
면접 준비를 위한 질문 정리 모음

백엔드 신입을 위한 면접 질문 모음 면접 제의가 들어왔다…! 서둘러 준비해야 해서 여기저기서 필요한 질문들을 긁어 왔다. 내용 파악 후 내 스타일로 재 정리 해볼 예정이다. 인성 관련하여서는 준비 해둔게 있으니, 기술적인 면들을 시리즈로 정리할 필요가 있어 보인다. Table Of Contents Contributors Information 이 저장소를 잘 사용하기 위한 팁 면접 전 정보 CS 관련 지식 언어 관련 기타 면접 꿀팁 Special Thanks to Contributors 이 프로젝트에 기여해주신 분들입니다. Information 백엔드 개발자를 준비하면서 받았던 면접 질문, 학습했던 내용, 예상가능한 질문을 선별했습니다. 이 저작물은 CC BY-NC(저작자 표시-비영리)입니다. 기여를 통해서 더 좋은 컨텐츠가 될 수 있도록 해주세요. 이 컨텐츠의 목표는 가능하면 간단하게 면접질문에 대답을 할 수 있도록 하는 것입니다. 당연히 세부적인 지식에 대한 꼬리질문이 들어올 수…

April 30, 2024
study
CSAPP-2024-04-3주차 ~ 4주차-정리

Machine-Level Representation of Programs 3.6.2 Accessing the Condition Codes 조건 코드를 직접 수행읽는 대신 사용하는 방법 세 가지 조건코드의 조합에 따라 단일 바이트를 0, 1 로 설정한다. 프로그램의 다른 부분으로 점프할 수 있다. 데이터를 조건부로 전송할 수 있다. 1번의 방법은 set 명령어에서 나타나며, 이때 단 접미사가 다른 연산자와 같이 워드 크기를 나타내는게 아니라는 점이 중요하다(less, below의 l, b를 나타냄, long 또는 byte 아님) 3.6.3 Jump Instructions jump 명령어는 기본적인 명령어의 흐름에서 뛰어 넘어 다른 명령어를 수행하고 다시 시작하도록 만드는데, 오브젝트 코드 파일을 생성할 때 어셈블러가 모든 이러한 명령어의 주소값을 결정한다. 명령어들은 간접 점프와 직접 점프가 있는데, 직접 점프의 경우 어셈블리코드에서 점프 목표로 레이블을 지정하고 작성되며, 간…

April 15, 2024
study
CSAPP-2024-04-2주차-정리

Machine-Level Representation of Programs 3.4.2 Data Movement Instructions 가장 많이 사용되는 명령어 중 하나는 데이터 위치를 복사하는 명령어일 것이다. 소스와 목적지 유형, 수행하는 변환, 그리고 기타 부작용이 다른 여러가지 데이터 이동 명령어가 있음을 보여준다. 위 그림의 데이터 이동 명령어는 가장 단순한 형태인 mov 클래스다. 여기서 각 워드 바이트 크기를 다룬다는 차이점을 갖고 있다. 소스 피연산자는 상수 값, 레지스터에 저장된 값, 메모리에 저장된 값을 지정하고, 이동할 목적지도 지정해준다. 이때, x86-64 의 기준 특성상 이동 시 모두 메모리 위치를 참조하는 식으로는 되어 있지 않다. 메모리에서 메모리는 반드시 두번의 명령어가 필요하다. 대부분의 경우 mov 명령어는 목적지 피연산자에 의해 지정된 특정 레지스터 바이트나 메모리 위치만을 업데이트 한다. 아래의 그림은 특정 위치에서 목적지로의 다섯가지 조합을 …

April 09, 2024
study
Lua Script 기본 개념과 문법 정리

Lua Script 란 1993년 개발된 프로그래밍 언어. 브라질 리우데자네이루의 교황청대학교에서 호베르투 예루잘링스키 및 2명이 공동 제작했다. 달을 의미하는 포르투갈어 단어에서 따왔다. 스크립트 언어를 하나의 목적으로 가지고 있기 때문에 굉장히 작고 가벼운 인터프리터형 언어다. 태생 자체가 C/ C++ 프로그램 내부에 포함시키기 쉬운 깔끔한 문법의 가벼운 스크립트 언어를 목표로 개발 되었다. 교황청대학교 컴퓨터 그래픽 기술 연구소에서 내부적으로 개발해서 사용하던 기존의 데이터 처리용 스크립티 언어 SOL과 DEL의 한계를 극복할 더 강력한 언어가 요구되었다고 한다. 언어적 특징 가벼움 인터프리터의 용량이 KB 단위로 작고 굉장히 빠르다. 굉장히 적은 데이터 형만 지원하고, 쉽게 붙일 수 있기에 절차적으로도, 객체지향적으로도, 함수형으로도 이용이 가능하다. 문법적 특징 기본 자료형 : null 이 Lua 에선 nil 로 쓴다. 진리값은 boolean 타입일 때, true, …

April 06, 2024
study
CSAPP-2024-04-1주차-정리

Machine-Level Representation of Programs 3.2.3 Notes on Formatting 서식에 관한 노트 어셈블리 코드에 대한 포맷들에 대해 앞으로 사용할 내용을 설명한다. 모든 라인에서 이 붙어 있다면 어셈블러와 링커의 가이드 역할을 하는 명령어 라고 보면 된다. 기본적으로 어셈블러 상태에는 없지만 본 교재에서는 각 라인 왼쪽에 라인 번호를, 오른쪽에는 원본 코드와 연관된 설명을 첨부한다. CSAPP 저자들은 웹에서 관련 자료를 제공해주고 있다. 3.3 Data Formats 16비트 아키텍쳐 때부터가 기원이다보니, 인텔은 16비트 데이터 타입(2바이트)를 워드(word) 라고 불렀으며, 이것을 기반으로 더블워드(double words), 64비트 데이터 양에 대해서는 쿼드 워드(quad words)라고 부른다. x86-64 명령어 셋 역시 모든 바이트, 워느, 더블이나 쿼드 워드까지를 아우르는 명령어 셋을 갖고 있다. 부동 소수점에 대해서는 8…

April 02, 2024
study
영어 단어 모음 - 2024.03 - 4th

2024년 3월 4주차 2024-03-25 2024-03-26 colloquially : 구어체로, 회화체로 incorporate : 포함하다, 설립하다 vestige : 마지막 흔적 arcane : 신비로운, 불가사의한 2024-03-27 2024-03-28 2024-03-29 2024년 3월 4주차 2024-03-25 2024-03-26 2024-03-27 2024-03-28 2024-03-29

March 26, 2024
study
CSAPP-2024-03-4주차-정리

Machine-Level Representation of Programs 이번 챕터에서는 기계어 코드와 사람이 읽을 수 있도록 표현된 어셈블리 코드에 대해 자세히 살펴볼 것이다. 대부분의 시간동안, 고수준의 언어로 생산된 고수준의 추상화를 가진 환경에서가 프로그래밍 개발이 생산적이며, 신뢰성이 있다. 예를 들면 타입 검사를 포함하여, 숙련된 어셈블리 언어 개발자들의 노력으로 현대의 최적화된 컴파일러는 훌륭한, 기계에 특화된 기계어 코드로 변환을 시켜준다. 그렇기에 왜 우리는 기계어를 배울 필요가 생기는 것일까? 기계어 코드를 읽는 것으로, 우리는 컴파일러의 최적화 능력의 수준을 이해하고, 코드 상의 비효율적인 영역이 어딘지 분석하는 눈이 생길 수 있다. 더 나아가서 우리가 알아야 하는 런타임 시의 동작들에 관해 추상화 언어로 숨겨진 것들의 추상 레이어들 속에서도 정확하게 이해할 수 있게 된다. 취약성이 어떻게 증대 될지를 이해하는 것, 그리고 이러한 부분들에 대하여 어떻게 보호할 …

March 25, 2024
study
kotlin 컴파일 과정을 알아보자

kotlin이란? 자바 언어를 기반으로, JVM 위에서 동작하는 새로운 프로그래밍 언어이다. intelliJ IDE 로 유명한 JetBrains에서 개발되었다. 웹 프론트, 서버 백 앤드, 안드로이드 네이티브 프로그램을 작성 가능하며, 아직 불완전하지만 Kotlin native 를 통해 JVM없이 실행 가능한 단일 실행 프로그램도 만들 수 있는 언어이다. 2010년 첫 버전이 등장한 이후로 지속적인 개선과 지원으로 많은 개발자들에게 관심을 받게 된다. 특히나 안드로이드 개발 면에서 자바 6에 대한 갈증을 해소하는 영역에서 많이 쓰인다. 2017년에는 구글 I/O에서 정식으로 코틀린을 안드로이드 개발 언어로 채택하게 되면서 더더욱 성장하는 중인 언어이다. kotlin은 무슨 특징을 갖고 있을까? Null 안전성 : kotlin 의 유형 시스템은 null 참조가 역참조 되는 것을 방지한다. 확장 기능 : kotlin을 사용하면 클래스에서 상속하지 않고도 새로운 기능으로 클래스를 확장…

March 20, 2024
study
java
영어 단어 모음 - 2024.03 - 3rd

2024년 3월 3주차 2024-03-18 2024-03-19 2024-03-20 2024-03-21 2024-03-22 2024년 3월 3주차 2024-03-18 2024-03-19 2024-03-20 2024-03-21 2024-03-22

March 19, 2024
study
CSAPP-2024-03-2주차-정리

2024년 3월 3주차 Integer Representations 음수가 아닌 숫자만을 표현할 수 있는 방법이고, 다른 하나는 음수, 영, 양수 모두 표현하는 방법을 배우는 챕터이다.이 챕터에서는 수학적 성질과 기계 수준 구현 모두에서의 특징을 살필 것이다. 더불어 인코딩된 정수를 다른 길이의 표현으로 확장하거나 축소했을 때의 영향도 같이 확인할 예정이다. 2.2.1 Integral Data Types C 언어는 ASCII 기반으로 32, 64비트 프로그램에 대해 가질 수 있는 숫자의 범위를 갖고 있다. 여기서 알아둬야 할 핵심은 범위가 대칭이 아니라는 점이다. 바이트에 데이터를 넣어 표현하는 특성 상 음수 범위는 양수 범위보다 하나 더 넓다. 2.2.2 Unsigned Encodings 부호에 대한 표시 없이 비트 백터들은 각 자리를 통해 값을 표현할 수 있다. 이는 딱히 어려울 것이 없이 우리가 상식적으로 아는 형태 그대로라고 보면 된다. 2.2.3 Two’s-Complem…

March 19, 2024
study
JavaScript 컴파일 과정을 알아보자

자바스크립트 자바 스크립트의 개요 JavaScript 는 가벼운 인터프리터 혹은 JIT 컴파일 프로그래밍 언어로 보통 웹 페이질를 위한 스크립트 언어로 알려져 있지만, 자바 런타임 엔진을 통해 비브라우저 환경에서 동작하기도 하는 프로그래밍 언어이다. 기본적으로 프로토타입 기반, 다중 패러다임, 단일 스레드, 동적 언어로 객체지향형, 명령형, 선언형 스타일을 지원한다. JS의 표준은 ECMAScript 언어 사양(ECMA-262) 와 국제화 API 사양(ECMA-402) 이다. JS의 역사 1993년 PC의 보급이 시작되던 시절, 네트워크 환경에서의 컴퓨터를 잘 모르는 사람도 쉽게 사용이 가능한 UI 요소가 가미된 브라우저 Mosaic Web Browser가 출시하게 된다. Marc Andreessen이 최초로 만든 브라우저였다. 네트워크 세상이 열리고, 그는 기존의 노하우를 살려 Netscape 라는 회사를 설립하고, 94년도에 이르러선 좀더 UI를 다듬고 Netscape N…

March 18, 2024
study
js
java 컴파일 과정을 알아보자

자바의 역사 1990년대, Sun Microsystems 에서 개발되었다. 당시 엔지니어 부서 중 하나인 ‘Green Team’은 이제 곧 소비자 개개인의 물건에 컴퓨터가 있는 시대를 예감하여, 이를 위한 새로운 언어 개발을 착수한다. 이때 Green Team 의 깃에서 greentalk 라고 부르다가, 이름을 라고 짓게된다. 모바일 기기라는 개념조차 부족하던 시대 가전제품에 칩을 탑재할 용도로 언어가 만들어졌으나, 이 아이디어 자체가 시대를 너무 앞섰다. 당시 하드웨어가 구동 될만한 성능이 되지 못해 성공하지 못하였으나, 웹 애플리케이션에 적합한 언어로 되었고 1955년 Java 1.0 으로 세상에 나오게 된다. 상당히 오랜시간 썬에서 업데이트 해왔으나 2010년 오라클에 인수되었다. 일부 오라클의 유료화 선언 등으로 논란이 있었으나, 결론적으로 자바는 무료로 사용할 수 있다. 인터프리터와 컴파일러 컴퓨터는 기계어, 즉 0, 1로 구성된 binary 데이터를 읽어낸다. 그러나 …

March 18, 2024
study
java
영어 단어 모음 - 2024.03 - 2nd

2024년 3월 2주차 2024-03-11 derivation : the origin of something, such as a word, from which another form has developed, or the new form itself intuition :Add to word list (knowledge from) an ability to understand or know something immediately based on your feelings rather than facts: 2024-03-12 verbose : using or containing more words than are necessary tedius : boring quotient : a particular degree or amount of something derives from something : to come from something vagaries : unexpected events…

March 11, 2024
study
CSAPP-2024-03-2주차-정리

2024년 3월 2주차 Chapter 2 Representing and Manipulating Information 현대 컴퓨터는 이진 신호를 사용해 정보를 저장하고 처리한다. 이진수, 또는 비트는 디지털 혁명의 기반이며, 십진법에 비해 기계 설계에 더 적합하다. 단일 비트는 제한된 정보만을 표현하지만, 비트를 그룹화하고 의미를 부여함으로써 다양한 데이터를 인코딩할 수 있다. 이 장에서는 이진수 시스템, 표준 문자 코드, 음수 및 실수 표현을 포함한 여러 인코딩 방식을 다룬다. 이를 통해 컴퓨터는 숫자, 문자, 실수 등을 효율적으로 표현할 수 있다. 숫자의 컴퓨터 표현에는 부호 없는 인코딩, 2의 보수 인코딩, 부동 소수점 인코딩 등 세 가지 주요 방식이 있다. 이들은 각각 0 이상의 수, 정수, 실수를 표현하는 데 사용된다. 컴퓨터는 제한된 비트 수를 사용해 숫자를 인코딩하기 때문에, 일부 연산 결과는 오버플로우를 경험할 수 있다. 현대 컴퓨터는 예상과 다른 결과를 낼 수 있지만…

March 04, 2024
study
영어 단어 모음 - 2024.02 - 4th

2024년 2월 4주차 2024-02-29 delve into : to search in order to find a thing or information: colloquially : informally and in a way that is more suitable for use in speech than in writing: Colloquially referred to as a “brain attack”, a stroke occurs when the flow of blood to the brain is interrupted. Jardine writes clearly and colloquially for the non-academic reader. pervade : When qualities, characteristics, or smells pervade a place or thing, they spread through it and are present in every part …

February 29, 2024
study
CSAPP-2024-02-4주차-정리

2024년 2월 4주차 Preface 본 교재는 다양한 컴퓨터와 관련된 다양한 분야들을 프로그래머의 관점에서 통합된 시각으로 바라봅니다. Assumptions about the Reader’s Background 이 책은 x86-64 기계어로 실행되는 시스템에 주목하고, 특히 Unix 기반의 Linux OS 상에서 동작하는 C 프로그램들이 어떻게 동작하는 지를 고려할 것이다. 알잘딱하게 C 언어로 동작하며, GNU 기반으로 컴파일 된 프로그램들이 예시로 쓰일거니 알아서 잘 신경 쓸 것! How to Read the Book 예시가 되는 것들의 레이팅은 이 정도 느낌이다. Book Overview 작자 의도를 그대로 담기위해 직역만 진행한다. Chapter 1 : A Tour of Computer Systems. 컴퓨터 시스템에 대한 여행. 이 장은 간단한 “hello, world” 프로그램의 생명 주기를 추적함으로써 컴퓨터 시스템에서의 주요 아이디어와 테마를 소개합니다. Chap…

February 29, 2024
study
CSAPP 주말반 학습 방법 정리

CSAPP…! 드디어 진행한다. 복습 겸 해서 정리하는 만큼 어떻게 정리하면 좋을지 잘 정리해보고자 한다…! 팀 스터디, 기존의 방식은 잘 유지 : 설명하고, 내용정리한 것들을 논의할 수 있도록 유지할 것 그렇다면 복습은 어떻게? 세팅 레이아웃 ChatGPT : 해석 + 간단한 검증용 캐임브릿지 영영 사전 알PDF : 주석 작성용 작성 옵시디언 : 실제 글 쓰기 장소 기술블로그 데모 : 문서 문제 발생 확인용 전체를 다 기재하는 방법은 기존에도 했지만 너무 많다. 내용 정리가 쉽지 않다. 가능하면 정독(소리내어 읽기) 위주 + 기억할 사항만 메모할 것 모르는 영어 단어들은 한 주 단위로 묶어서 작업 진행하기(일주일치 학습 사항을 정리하기) 토론 준비는 어떻게? 토론 준비를 위한 아이디어는 정리되는 문서 별로 진행 하단부에 이것저것 적으면서, 아이디어를 모으고 이를 그 다음주 분량에서 진행 금주 연구해야하는 주제는 가능하면 20-30분 할애를 매일 진행해보기 금주 토론 주제에 대해…

February 28, 2024
study
OSTEP - Part 3. Persistency - 50

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 50. Andrew 파일 시스템(AFS) 50. Andrew 파일 시스템(AFS)

July 02, 2023
study
OSTEP - Part 3. Persistency - 49

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 49. Sun 사의 네트워크 파일 시스템 49. Sun 사의 네트워크 파일 시스템

July 02, 2023
study
OSTEP - Part 3. Persistency - 48

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 48. 분산 시스템 48. 분산 시스템

July 02, 2023
study
OSTEP - Part 3. Persistency - 45

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 45. 데이터 무결성과 보호 45. 데이터 무결성과 보호

July 02, 2023
study
OSTEP - Part 3. Persistency - 44

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 44 플래시 기반의 SSD 44.1 하나의 비트를 저장하기 44.2 비트에서 뱅크와 플레인으로 44.3 기본 플래시 작업 44.4 플래시 성능과 신뢰성 44.5 플래시에서 플래시 기반 SSD로 44.6 FTL 구성: 잘못된 접근 44.7 로그 기반 FTL 44.8 가비지 회수 작업 44.9 맵핑 테이블의 크기 44.10 마모도 평준화 44.11 SSD의 성능과 가격 44 플래시 기반의 SSD 44.1 하나의 비트를 저장하기 44.2 비트에서 뱅크와 플레인으로 44.3 기본 플래시 작업 44.4 플래시 성능과 신뢰성 44.5 플래시에서 플래시 기반 SSD로 44.6 FTL 구성: 잘못된 접근 44.7 로그 기반 FTL 44.8 가비지 회수 작업 44.9 맵핑 테이블의 크기 44.10 마모도 평준화 44.11 SSD의 성능과 가격

July 02, 2023
study
OSTEP - Part 3. Persistency - 43

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 43. 로그 기반 파일 시스템 1900년대 초반 Berkeley 대학에서 연구한 분들은 로그 기반 파일 시스템이라는 새로운 파일 시스템을 개발한다. 이러한 연구의 동기는 다음과 같은 이유 때문이다. 시스템 메모리 크기가 증가하는 추세였다 : 이러한 특징은 파일 시스템의 성능이 대체적으로 쓰기 성능에 의해 결정되었다. 임의 I/O와 순차 I/O의 성능 간격의 차가 크게 벌어졌다 : 하드 디스크 드라이브의 전송 대역폭은 꾸준히 증가해왔다. 반면 탐색, 회전 지연 비용은 그 발전 속도가 작았고, 디스크를 순차 접근만 할 수 있다면 탐색, 회전이 필요한 방식보다 큰 성능적 이득을 가질 수 있던 것이다. 대량의 일반적인 워크로드에서 기존 파일 시스템들은 성능이 좋지 않았다 : FFS는 블럭 하나의 크기의 새로운 파일을 생성하기 위해 여러번 쓰기를 해야 한다. 이렇듯 기존의 방식은 여러…

July 02, 2023
study
OSTEP - Part 3. Persistency - 42

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 42. 크래시 일관성: FSCK와 저널링 파일 시스템은 자신들의 기본 개념들을 구현하는데 필요한 각종 자료구조들을 관리한다. 여기엔 파일, 디렉터리 외에 메타 데이터 들이 포함된다. 여기서 핵심은 파일 시스템의 자료구조가 안전하게 저장되어야 한다는 점이다. 즉, 장시간 사용 후에도 유지되어야 하며 전력 손실에도 하드디스크나 플래시 기반 SSD 장치의 데이터는 손상없이 유지되어야 한다. 전력 손실이나 크래시 때문에 디스크 상의 자료 구조를 안전하게 갱신하는 것은 상당히 까다롭다. 파일 시스템은 크래시 일관성(crash-consistency)이라는 새로운 문제를 직면하게 된다. 해당 문제가 어떤 것인가, 예를 들어 특정 작업을 위해 디스크 상에서 두개의 자료구조 A, B를 갱신해야 한다고 생각하자. 디스크는 한번에 하나만 요청을 처리할 수있으므로, 하나의 요청이 먼저 디스크에 도…

May 14, 2023
study
Google app script 로 자동화 만들어보자 - (00)

Prologue 정말 놀라운 한 해의 연속. 여러 개인적인 일들이 터지고, 이를 수습하고, 정말 정신없이 올 초, 봄이 다 지나갔다. 공통과정 과제를 깨는 것도 일인데, 그와 함께 찾아오는 여러 개인적인 일들을 수습하다보니 peer 커뮤니티를 위해 무언가 한다는 것이 불가능했다. 그럼에도 다행이, 일들은 정신없이 지나감에도 어떻게든 대응을 할 수 있었다. 과제에 집중을 하면서 여러 경험들을 했고, 몸도 마음도 다져지는 기분이 드는 것은 기분탓이 아니었다. 그렇게 정신 차리니 4월이 되어 있었고, 어느 정도 일이 끝나자 내 앞에는 기존에 하던 일들에 대한 책임, 이제는 진짜로 이룰 수 있으리라- 라는 내 나름의 자신감이 생기게 되었었다. 기존에 피어 참여자들의 리워드 자동계산을 구현했었는데, 이를 개선하고자 했다. 피어를 위한 웹 서비스 구축을 진행해본다. 42서울의 개발 판도나, 개발에 대한 환경 자체를 좀 바꿀만한 플랫폼을 만들고 싶다. 1번의 경우 단순히 구글 스프레드 시트와 …

May 10, 2023
study
OSTEP - Part 3. Persistency - 41

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 41. 지역성과 Fast File System 처음 Unix가 등장시 가장 기본적인 파일 시스템이 생기고, 이를 “오래된 UNIX 파일 시스템” 이라고 부른다. 이 구형 파일 시스템의 장점은 단순하다는 것이며, 파일 시스템의 가장 기본적인 개념인 파일과 디렉터리만을 제공한다. 가장 기본적인 개념인 파일과 디랙토라먼울 제공하며, 그 이전시기 사용되던 레코드 기반의 저장장소시스템과 비고하면 큰 발전을 이룩했다. 특히 유닉스 파일 시스템이 가지게 된 계층 구조의 디렉터리는 이전 시스템들이 사용했던 단일 계층 디렉터리 구조와 굉장한 차이를 보였다. 41.1 문제 : 낮은 성능 혁신적인 시스템을 구축하였으나 성능이 매우 안좋았고, 최초 시스템에 대한 측정 결과는 파일 시스템이 디스크의 대역폭에 2%밖에 활용하지못하는 결과를 보였다. 이렇게 느린 이유는 디스크를 시스템이 RAM 을 대…

April 29, 2023
study
OSTEP - Part 3. Persistency - 40

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 40. 파일 시스템 구현 이라는 간단한 파일 시스템을 구현하여서, 현존하는 시스템에 대한 이해도를 높이는 시도를 해보고자 한다. 파일 시스템은 순수한 소프트웨어다. CPU, 메모리와 같은 부분들은 가상화에 도움을 주는 하드웨어와의 조합을 통해 구현하지만, 파일 시스템에선 오로지 소프트웨어적 개선만을 고려할 것이다. (물론 실제 현실에선 동작 특성이 일부 고려된다.) vsfs를 구현해보면서, 현실에서 AFS에서 ZFS까지 다양한 파일 시스템들의 동작을 이해해보자. 40.1 생각하는 방법 파일 시스템에 대한 학습에서 바라보는 방법은 크게 다음과 같다. 파일 시스템의 자료구조 : 파일 시스템이 자신의 데이터와 메타 데이터를 관리하기 위해선 디스크 상에 어떤 자료구조를 취해야 하는가? 기본적으로 vsfs 에서는 간단한 배열의 구조를 취하겠지만, 다른 시스템의 경우 복잡한 트리 기반인…

April 23, 2023
study
OSTEP - Part 3. Persistency - 39

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 39. 막간 : 파일과 디렉터리 운영체제는 자신만의 프로세서 또는 프로세서들과 자신만의 메모리가 있는 것처럼 만들어준다. 이러한 환상은 프로그램 개발을 촉진하고, 다양한 프로그래밍이 가능한 플랫폼에서 광범위하게 차용하고 있다. 이번 장에선 영속 저장장치(persistent storage) 라고 하는 가상화의 핵심 개념을 다룬다. 하드 디스크, 최근에는 솔리드 스테이 드라이브까지, 전원공급이 차단되면 내용이 사라지는 메모리와는 다르게 영속 저장장치는 그러한 상황에서도 데이터를 그대로 보존해야하고, 당연히 운영체제는 그런 장치들을 좀더 신중하게 다루어야 한다. 오늘의 파트는 영속 데이터를 관리하는 핵심 기술을 살피며, 성능과 신뢰성 향상의 기법을 중점적으로 바라볼 것이다. 39.1 파일과 디렉터리 저장화 장치의 가상화를 위한 핵심 개념은 1) 파일이며, 2)디렉터리 개념이다. 파…

April 09, 2023
study
OSTEP - Part 3. Persistency - 38

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 38 Redundant Array of Inexpensive Disk(RAID) 디스크를 사용할 때 디스크가 좀더 빨랐으면 하는 바램이 있다. 입출력 작업은 항상 시스템 전체의 병목이 되기 때문이다. 용량도 마찬가지며, 안정성도 마찬가지로 필요하다. 디스크가 고장이 나는 경우 백업 없이는 소중한 데이터를 잃어 버리기 때문이다. 이번 장은 Redundant Array of Inexpensive Disk 또는 RAID 라고 알려진 기술을 보고자 한다. 외면적으로 RAID는 하나의 디스크처럼 보인다. 읽거나 쓸수 있는 블럭의 그룹으로 보인다. 그러나 안을 들여다 보면 RAID는 여러 개의 디스크와 메모리(휘발성과 비휘발성을 모두 포함), 시스템을 관리하기 위한 하나 또는 그 이상의 프로세서로 이루어진 복잡한 기계이다. RAID의 하드웨어는 컴퓨터 시스템과 매우 유사하며, 디스크의 …

April 02, 2023
study
OSTEP - Part 3. Persistency - 37

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 37 하드 디스크 드라이브 이전 장에서 입출력 장치에 대한 전반적인 개념을 다루었고, 운영체제가 I/O 장치라는 괴물과 어떻게 상호작용하는지 살펴보았다. 이제는 특정 장치에 대해 더 살펴 볼 것이다. 하드디스크 드라이브는 지속적으로 컴퓨터 시스템의 영구적인 데이터 저장소였으며, 영속성 핵심 주제인 파일 시스템도 결국 하드 디스크 드라이브의 동작에 기반을 두고 개발되었다. 따라서 디스크를 관리하는 파일 시스템 소프트웨어를 구현하기 전에 디스크의 상세한 동작을 이헤하는 것이 중요하다. 37.1 인터페이스 현대의 하드 디스크 드라이브의 인터페이스는 단순하다. 읽고 쓸 수 있는 매우 많은 수의 섹터(512byte 블럭)들로 이루어져 있다. 디스크 위의 n개의 섹터들은 0부터 n-1까지의 이름이 붙어 있다. 그렇기에 디스크를 섹터들의 배열로 볼 수 있으며, 0부터 n -1 까지를 드…

March 26, 2023
study
OSTEP - Part 3. Persistence - 36

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 35 영속성에 관한 대화 해당 파트는 적당하게 강조점들만 정리하여 핵심을 정리하고 넘어간다. Persistence(영속성)은 사전적으로 곤경과 반대에도 불구하고 굳게 또는 완고하게 행동 방침을 유지할 때 쓰는 말이라고 한다. 이는 컴퓨터도 마찬가지로, 정보도 마찬가지의 의미를 강조한다고 보면 된다. 컴퓨터가 멈추고 디스크가 고장이 나거나 전원이 꺼져도 정보 자체는 유지 되어야 하고, 되도록 만들어야 한다. 그것이 설령 어려운 도전이라도 말이다. 36 I/O 장치 주제(영속성)에 대한 세부적 논의에 앞서 입출력 장치(I/O)의 개념을 먼저 이야기 하고자 한다. 결국 컴퓨터에서 연산을 하고 컴퓨터 시스템을 유용하게 쓰려면 당연히 입력과 출력이 존재 해야 한다는 점에서, 우선적으로 기반을 닦고 간다. 36.1 시스템 구조 위 그림을 보자. CPU와 주 메모리가 메모리 버스로 연결…

March 26, 2023
study
OSTEP - Part 2. Concurrency - 33

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 33 이벤트 기반의 병행성(고급) 동시성을 가진 프로그램이라고 하는 것은, 쓰레드 만이 방법론으로 존재하는 것이 아니다. GUI 기반의 프로그램이나, 인터넷 서버에서는 다른 스타일의 병행 프로그래밍이 사용된다. 이 방법이 바로 이벤트 기반의 동시성(event-based concurrency) 의 방법이다. 이 방법의 핵심은 동시 프로그래밍, 병렬 프로그래밍이라는 어려운 방법을 사용한 것이 아니다. 이러한 방법은 자료 구조를 락으로 보호 해야하거나, CPU의 스케쥴링에 기대서 잘 처리되기를 바라는 등의복잡한 작업들이 필요하다. 시미어 개발자는 운영체제가 합리적으로 쓰레드가 처리되길 기도하는 수밖에 없다(!) 따라서 이번 과에서는 다음과 같은 것을 배울 것이다. 33.1 기본 개념 : 이벤트 루프 결국, 위에서 언급한 내용처럼 핵심은 이벤트 기반의 동시성(병행성) 이다. 이 접근…

March 26, 2023
study
OSTEP - Part 2. Concurrency - 32

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 32 병행성 관련 버그 수년 동안 병행성 관련 오류의 해결은 주요한 숙제였다. 대부분의 초기 연구는 교착 상태에 초점이 맞추어져 있었고, 최근에는 다른 종류의 버그들도 다루고 있다. 실 코드를 보면서 이러한 경우와 어떤 문제들을 조심해야 동시성(병행성)을 유지할 수 있는지를 살필 것이다. 32.1 오류의 종류 복잡한 동시성 프로그램에서는 어떤 종류의 문제점들이 발생하는가? 위 예시를 보면 알 수 있듯이 다양한 오류가 발생하는 것이 보이며, 그중 대부분이 의외로 교착 상태와 무관한 오류였다. 따라서 우선적으로 비교착 상태에 대한 오류를 살펴 본 뒤에, 교착 상태 오류들을 다룰 때에, 이 분야에서 핵심 중에 핵심 소재인 예방, 회피, 해결 혹은 관리 연구에 대해 논의 한다. 32.2 비 교착 상태 오류 Lu라는 연구자의 결과에 따르면 절반의 버그는 교착 상태와 무관한 버그였다.…

March 13, 2023
study
OSTEP - Part 2. Concurrency - 31

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 31 세마포어 다양한 범주의 병행성 문제 해결을 위해선 락, 컨디션 변수 모두 필요하다. 이를 인지한 최초의 사람들 중 한 사람이 다익스트라 이다. 그는 최단 경로 알고리즘을 시작으로 Goto문의 유해성 등 구조화 프로그래밍의 논쟁을 일으킨 장본인이다. 이번 장에서 배우는 세마포어(semaphore) 동기화 기법 역시 그가 개발한 것이다. 세마포어는 락과 컨디션 변수로 모두 사용이 가능한 도구이다. 31.1 세마포어 : 정의 세마포어는 정수 값을 갖는 객체로, 두 개의 루틴으로 조작할 수 있다. POSIX 표준에서는 이 두 루틴을 , 라고 한다. 우선 사용을 위해선 값을 초기화해야 한다. 위 예시는 세마포어 s를 선언, 3번째 인자 1을 전달하여 세마포어의 값을 1로 초기화 한다. 두번째 값은 모든 예제에서 0으로 둘 것이다. 이 값은 같은 프로세스 내의 쓰레드 간에 세마포…

March 11, 2023
study
OSTEP - Part 2. Concurrency - 30

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 30 컨디션 변수 사실 락은 하드웨어와 운영체제의 지원을 적절하게 받아서 만들었던 도구이다. 더불어 동시성 프로그램 제작에서 락만이 정답은 아니다. 쓰레드가 실행을 계속 하기 전에, 어떤 특정 조건의 만족 여부를 검사해야 될 수 있는데, 이때 사용하는 것이 컨디션 변수이다. 이러한 상황에서 해결할 수 있는 방법으로는 대기를 한다거나 ,여러 방법이 있을 수 있다. 락도 포함되고 여럿이 존재하지만 효과적인 것은 쓰레드를 잠을 재우는 방법이다. 30.1 컨디션 변수의 개념과 관련 루틴 쓰레드 실행 시 특정 조건이 만족될 때까지의 대기를 위해 라고 불리는 개념을 사용할 수 있다. 이것은 일종의 큐로, 컨디션 변수는 쓰레드 실행에서 어떤 상태가 원하는 것과 다를 때 만족되기를 대기하는 큐이다. 컨디션 변수의 시초는 다익스트라(Dijikstra)가 Private Semaphore 라…

March 05, 2023
study
OSTEP - Part 2. Concurrency - 29

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 29 락 기반의 병행 자료 구조 가장 먼저 범용 자료구조에서 락을 사용하는 방법에 대해 살펴보자. 자료구조에 락을 추가하면 해당 자료 구조를 경쟁 조건에서 자유로워질 수 있다.(쓰레드 안전, thread safe) 그러나 락이 어떤 방식으로 추가되냐에 따라 그 성능이 매우 천차만별이 될 수 있다. 29.1 병행 카운터 가장 보편적으로 사용되는 구조 중 하나이며, 간단한 인터페이스를 갖고 있다. 아래의 예시가 락이 없는, 병행이 불가능한 카운터와 반대로 가능한 경우를 보여준다. 간단하지만 확장성이 없음 위 예시, 병행이 가능한 카운터는 간단하지만 상당히 정확히 동작한다. 기본적인 병행 자료 구조의 보편적인 디자인 패턴을 따르고 있다. 이러한 방식은 monitor 를 사용하여 만든 자료구조와 유사하다. 모니터 기법 자체는 객체에 대한 메소드를 호출하고 리턴할 때 자동적으로 락을 …

March 05, 2023
study
OSTEP - Part 2. Concurrency - 28

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 28 락 이 장에서는 앞서 다룬 락(lock) 을 이용하여 이 문제를 직접적으로 다루고자 한다. 프로그래머들은 소스 코드의 임계 영역을 락으로 둘러서 그 임계 영역이 마치 하나의 원자 단위 명령어인 것처럼 실행되도록 한다. 28.1 락: 기본 개념 락은 일종의 변수다. 락의 변수는 락의 상태를 나타낸다. 사용가능 상태(available) : unlocked 나 free 상태 사용중(acquired) : 점유 중 상태 락의 자료구조에 락을 보유한 쓰레드에 대한 정보나, 락을 대기하는 쓰레드들에 대한 정보 저장도 가능하다. lock() 과 unlock() : lock 루틴을 호출함으로써 락 획득을 시도한다. 락을 획득하면, 임계영역으로 진입이 된다. 이렇게 락을 획득한 쓰레드를 라고 부른다. lock의 소유자가 임계영역에 존재하는 상태에서는 다른 쓰레드들은 임계영역을 진입할 …

February 26, 2023
study
OSTEP - Part 2. Concurrency - 27

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 27 막간 : 쓰레드 API 쓰레드를 다루기 위한 API의 주요 부분을 간략하게 다룬다. 27.1 쓰레드 생성 쓰레드 생성은 POSIX에서 다음과 같이 정의한다. 4인자를 가지며, 는 pthread_t 타입 구조체를 가리킨다. 은 쓰레드 속성을 지정하는 데 사용한다. 스택의 크기, 쓰레드 스케줄링 우선순위와 같은 정보를 지정하는 용도이며, 개별속성은 함수를 호출하여 초기화할 수 있다. 디폴트로 값을 넣고 싶을 때는 NULL 을 지정해주면 된다. 세번째 인자는 쓰레드가 실행될 함수를 나타낸다. C 언어의 함수 포인터 개념으로 구성되어 있고, void 타입의 포인터 한개를 전달 받는다. 더불어 이 함수 포인터 역시 를 타입값으로 반환한다. 여기서 void 포인터 타입 대신 integer를 인자로 쓴다거나, 함수 포인터 자체에 들어가는 인자를 int형으로 받는 다거나 하는 방…

February 18, 2023
study
OSTEP - Part 2. Concurrency - 25 ~ 26

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 25. 동시성(병행성)에 관한 대화 본 교재에서는 이란 키워드로 설명을 진행합니다. 하지만 현재 공통적으로 사용되는 한국어 번역은 라고 생각하여, 이후 모든 ‘병행성’은 ‘동시성’으로 지칭하고 진행합니다. 대화 내용 생략 동시성이라고 하는 항목은 응용 프로그램이 보다 빠르지만 정확하게 여러 작업이 한꺼번에 일어나도록 하는 것과 관련이 있다. 그럼에도 왜 이것을 운영체제에서 배워야 하는가? ➡️ 운영체제는 락(lock)과 컨디션 변수(condition variables)와 같은 멀티 쓰레드 프로그램을 지원해야 하기 때문이다. 운영체제는 그 자체가 최초의 동시성 프로그램이기 때문이다. 26. 동시성 : 개요 지금까지 배운 내용, 가상화를 통해 가상 CPU로 CPU를 확장하여 여러 프로그램이 동시 실행하는 듯한 착시를 만듬 가상 메모리를 가지는 것으로, 실제 메모리 공간에서 프로세스…

February 18, 2023
study
OSTEP - Part 1. Virtualization - 23

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 23. 완전한 가상 메모리 시스템 완전한 가상 메모리 시스템 구현을 위해선, 페이지 테이블 설계 방식, TLB와의 상호작용(MMU), 페이지 교체 정책 외에도 많은 다양한 특징들이 필요하다. 이러한 특징에는 , , 등을 다양하게 포함하고 있다. 그렇기에 이번 챕터의 핵심 질문은 다음과 같다. 핵심 질문 : 완전한 VM 시스템 구현 하는 방법은? 완전한 가상 메모리 시스템을 구현하기 위해서 필요한 특징은 무엇인가? 2개의 기존 시스템을 바라보면서 구체적인 구현 방법에 대해 알아볼 것이다. 1970년대, 80년대 초에 개발된 것으로 현대적인 가상 메모리 관리자의 시초인 VAX, VMS 운영체제를 찾을 수 있고, 학습할 가치가 있는 시스템이다. 두번째로 볼 시스템은 Linux에 대한 내용이다. 이는 Linux가 널리 사용되는 시스템이며, 아주 다양한 곳에서 Linux VM 시스템…

February 14, 2023
study
OSTEP - Part 1. Virtualization - 22

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 22. 물리 메모리 크기의 극복: 정책 가상 메모리 관리자의 입장에서 비어있는 메모리가 많을 수록 관리가 쉬워진다. 페이지 폴트가 발생하면, 빈 페이지 리스트에서 페이지를 찾아서 폴트를 일으킨 페이지에게 할당하면 된다. 하지만 빈 메모리 공간이 없는 경우 관리는 더욱 복잡해진다. OS는 이러한 상황 메모리 압박(memory pressure) 를 해소하기 위해 다른 페이지들을 강제적으로 paging-out 하여 활발히 사용 중인 페이지들을 위한 공간을 확보한다. 여기서 내보낼(evict) 페이지(또는 페이지들) 을 선택하는 과정은 OS의 교체 정책(replacement policy) 안에 집약되어 있다. 과거 시스템에서 이러한 정책은 시스템의 물리 메모리의 크기가 작기 때문에 초기 가상 메모리 시스템의 핵심이었다. 핵심 질문 : 내보낼 페이지는 어떻게 결정하는가? 이 결정은 시…

February 12, 2023
study
OSTEP - Part 1. Virtualization - 21

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 21. 물리 메모리 크기의 극복: 메커니즘 지금까지 가상 주소 공간이 아주 작고, 모두 물리 메모리에 탑재가 가능한 것으로 가정하였다. 하지만 이는 가정에 가까우며, 이제부턴 다수 프로세스들이 동시에 각자 크 ㄴ주소 공간을 사용하고 있는 상황이라고 볼 것이다. 이를 위해 메모리 계층에 레이어의 추가가 필요하다. 지금까지는 모든 페이지들이 물리 메모리에 존재할거라 생각했으나, 이젠 큰 주소 공간 지원을 위해 주소 공간 중 크게 필요하지 않은 부분은 ‘보관’해 둘 공간이 필요하게 된 것이다. 그리고 이런 경우 당연히 그 공간은 메모리 공간 보다 크며, 느리다. 현대 시스템에서 주 기억장치인 SSD, HDD가 이 역할을 한다고 보면 된다. 핵심 질문 : 물리 메모리 이상으로 나아가기 위해선 어떻게 할까 운영체제가 어떻게 크고 느린 저장 장치를 사용해서, 커다란 가상 주소 공간이 있…

February 12, 2023
study
OSTEP - Part 1. Virtualization - 20

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 20. 페이징: 더 작은 테이블 페이징의 두 번째 문제점은 페이지 테이블의 크기다. 크기가 커진다면 많은 메모리 공간을 사용하게 된다. 선형 페이지 테이블(linear page table)을 예를 들어보면, 페이지 크기가 4KB이고, 페이지 테이블 각 항목은 4바이트인 32비트 주소 공간을 가정해보자. 이 경우 주소 공간에는 대략 백만 개의 가상 페이지가 존재할 것이다. 여기서 페이지 테이블 항목의 크기를 곱하면 페이지 테이블의 크기가 된다. 즉 백만 * 4바이트 = 4MB 가 되는 것이다. 일반적으로 각 프로세스는 자기 자신의 페이지 테이블을 갖으며, 백개의 프로세스가 실행중이 되면 페이지 테이블이 100개가 존재하게 되며, 이때 페이지 테이블은 전체 주소 페이지 테이블 크기는 400MByte 의 메모리를 쓸 수 밖에 없는 것이다. 핵심 질문 : 페이지 테이블을 어떻게 더 …

February 05, 2023
study
OSTEP - Part 1. Virtualization - 19

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 19. 페이징 : 더 빠른 변환(TLB) 페이징은 성능 저하를 유발한다. 페이징은 주소 공간을 일정하게 페이지 사이즈로 크기를 나눈 뒤 각 페이지 실제 위치(매핑 정보, mapping information)를 메모리에 저장한다. 매칭 정보를 저장하는 자료구조가 페이지 테이블이며, 각 프로세스당 하나씩 생성된다. 가장 중요한 것은 가상 주소에서 물리주소로 변환하면서 메모리에 존재하는 매핑 정보를 읽어야 한다는 사실이고, 이때 엄청난 성능저하를 수반한다는 점이다. 이에 이와같이 질문할 수 있을 것이다. 핵심 질문 : 주소 변환 속도를 어떻게 향상할까 주소 변환을 어떻게 빨리 할수 있을까? 페이징에서 발생하는 추가 메모리 참조를 어떻게 피할 수 있을까? 어떤 하드웨어가 필요하며, 운영체제는 어떤식으로 개입해야 할까? 운영체제의 실행 속도를 개선하기위해선 도움이 필요하고, 하드웨어로…

January 28, 2023
study
OSTEP - Part 1. Virtualization - 18

본 내용은 OSTEP 의 내 용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 18. 페이징 : 개요 운영체제의 공간을 관리할 때, 크게 두 가지 방법으로 관리가 가능하다. 첫 번째 방법은 세그멘테이션 파트에서 봣듯이 의 조각들로 분할하는 것이다. 그러나 이 방법은 태생적인 문제를 갖고 있는데 이는 청크로 분할할 때 공간 자체가 단편화 될 수 있고, 할당은 점점 어려워지며, 성능적 제한이 있다는 사실이다. 두 번째 방법은 공간은 동일 크기의 조각으로 분할하는 페이장(paging) 이라는 아이디어가 바로 그것이다. 프로세스의 주소 공간을 몇 개의 가변 크기의 논리 세그먼트로 분리하는 것이 아니라, 고정 크기의 단위로 나눈다. 이 각각의 고정 크기 단위를 라고 부르며, 상응 하는 물리 메모리도 이라고 불리는 고정 크기의 슬롯의 배열이라고 생각한다. 이 프레임은 각각 하나의 가상 메모리 페이지를 저장할 수 있다. 핵심 질문 : 페이지를 사용하여 어떻게 …

January 28, 2023
study
OSTEP - Part 1. Virtualization - 17

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 17. 빈 공간 관리 메모리 관리 시스템이란 프로세스 힙의 페이지를 관리하는 malloc 라이브러리일 수도 있고 혹은 프로세스의 주소 공간의 일부분을 관리하는 운영체제 자체일 수 있다. 구체적으로 이 장에서 논의 할 내용은 빈 공간 관리 에 대한 내용이다. 빈 공간에 대한 관리는 페이징의 개념을 논의 하게되면 상대적으로 쉬운 논제가 되지만, 빈 공간 관리가 더 어렵고, 흥미롭게 되는 것은 공간이 가변크기인 빈 공간들의 집합으로 구성되어 있는 경우이다. 이 경우는 malloc()과 free()에서 처럼 사용자 수준 메모리-할당 라이브러리에서, 그리고 세그멘테이션으로 물리 메모리를 관리하는 운영체제에서 발생할 수 밖에 없다. 이러한 상황에서 외부 단편화가 존재하며, 그런 과정에서 빈 공간들의 전체 크기가 요청된 것보다 크더라도, 하나의 연속된 영역이 존재하지 않으면 요청의 실패가…

January 28, 2023
study
OSTEP - Part 1. Virtualization - 16

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 16. 세그멘테이션 (Segmentation) 베이스와 바운드 레지스터를 활용하는 방식은 운영체제가 프로세스를 물리 메모리의 다른 부분으로 쉽게 재배치 할 수 있게 해주었다. 하지만 이러한 형태는 가장 큰 문제로 스택과 힙 사이에 사용되지 않는 큰 공간이 존재한다는 점이다. 위 그림에서 볼 수 있드이 구조를 짜면서 공간이 여전히 사용되지 않으나 할당되는 구조를 갖고 있고, 물리 메모리에 재배치 할 때 물리 메모리를 차지하게 된다. 메모리 낭비가 심하다. 뿐만 아니라 주소 공간이 물리 메모리보다 큰 경우 실행이 매우 어렵다. 이런 점에서 베이스와 바운드 방식은 유연성이 없다고 볼 수 있다. 핵심 질문 : 대형주소공간을 어떻게 지원하는가? 16.1 베이스 / 바운드의 일반화 위에서 지적한 문제들을 해결하고자 나온 방식이 이다. MMU에 하나의 베이스와 바운드 값이 존재하는 것이…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 15

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 15. 주소 변환의 원리 CPU 가상화에서 이라는 기법에 대해 공부했다. 타이머 인터럽트가 발생하는 상황에, 운영체제가 개입하여 문제 발생을 막거나, 하드웨어 지원을 통해 효율적인 가상화를 꽤한다. 중요한 순간 마다 운영체제가 관여하여 하드웨어를 직접 제어함으로써 효율성과 제어를 이루는 것이 현대 운영체제의 목표이다. 메모리의 가상화 역시 이와 비슷하다. 결국 과 를 동시에 추구하며, 이를 위한 핵심적인 내용은 상당히 쉬운 원리로 구성되어 있다(물론 뒤로 가면 징그럽게 어렵지만). 효율성을 위해선 몇 개의 레지스터를 사용하고, 이후에는 TLB와 같은 복잡한 하드웨어를 통해 얻어낸다. 제어는 응용 프로그램이 자기자신의 메모리 이외에 다른 메모리에 접근하지 못하는 것을 운영체제가 지원하는 것을 의미하며, 이러한 것들이 지켜지면서도 유연성 측면에서 메모리 가상화 시스템에서는 프…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 14

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 14. 막간 : 메모리 관리 API UNIX 시스템에서의 메모리 관리 인터페이스 간략하게 소개한다. 핵심 질문 : 어떻게 메모리를 할당하고, 관리하는가? 14.1 메모리 공간의 종류 C 프로그래밍에서 메모리는 두 가지 영역으로 나뉘어 할당된다. 첫 째는 스택(stack), 둘째는 힙(heap) 영역이다. 스택(stack) 메모리는 할당과 반환이 컴파일러에 의해 암묵적으로 이루어 진다. 이러한 이유로 때론 라고도 불린다. 그저 선언만 하면 되고, 선언 이후, 컴파일러는 나머지 작업을 수행하고, 함수가 종료되면 리턴되면서 프로그래머 대신 메모리를 반환한다. 힙 메모리는 오랫동안 값이 유지되어야 하는 변수를 위하며, 모든 할당과 반환이 프로그래머에 의해 명시적 으로 처리 되어야 하며, 정상적으로 관리되지 못하면 많은 버그의 원인이 되곤 한다. 힙 메모리의 이러한 특성 때문에 이 1…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 13

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 10과 끝나고 갑자기 13과라 당황스럽겠지만, 중간 대화 등을 생략했다 ㅎㅎ.. 13. 주소 공간의 개념 13.1 초기 시스템 메모리 관점에서 초기 컴퓨터는 많은 개념을 사용자에게 제공하지 않았고, 컴퓨터의 물리 메모리는 아래의 그림과 닮아 있었다. 물리 메모리에 하나의 실행중인 프로그램이 존재하고, 나머지 메모리를 사용한다. 특별한 가상화도 존재 하지 않았고, 사용자는 운영체제로부터 많은 것을 기대하지 않았다. 13.2 멀티프로그래밍과 시분할 멀티 프로그래밍 시대가 도래하였고, 여러 프로세스가 실행 준비 상태에 있고 운영체제는 그들을 전환하면서 실행하는 구조화 되어 갔다. 프로세스는 전환되는 것들이 생기니 CPU 이용률이 증가되었고, 특히나 이러한 상황에서 효율성 개선이라는 키워드에 집중하게 되었다. 점차 더 많은 기대치를 갖게된 컴퓨터에는 시분할(time-sharing)…

January 15, 2023
study
OSTEP - Part 1. Virtualization - 9 ~ 10

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 9. 스케줄링 : 비례 배분 비례 배분(Proportional Share)스케줄러, 공정 배분(fair share)이라고도 하는 유형의 스케줄러에 대해 다루도록 하겠다. 반환시간이나 응답 시간을 최적화는 대신 스케줄러가 각 작업에게 CPU의 일정 비율을 보장하는 것이 목적이다. 비례 배분 스케줄링의 좋은 예가 추첨 스케줄링(lottery scheduling) 으로 알려져 있다. 핵심 질문 : 어떻게 CPU를 정해진 비율로 배분할 수 있는가. 특정 비율로 CPU를 배분하는 스케줄러를 어떻게 설계할 수 있는가? 기본 개념 : 추첨권이 당신이 지분이다 추첨권이라는 기본적인 개념이 추첨 스케줄링의 근간을 이룬다. 추첨권은 경품권의 개념과 유사하고 특정 자원에 대한 프로세스에게 할달될 몫을 나타낸다. 팁 : 무작위성의 이용 추첨권 스케줄릥 큰 장점 중 하나는 무작위서이다. 이러한 무작…

January 08, 2023
study
OSTEP - Part 1. Virtualization - 7 ~ 8

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 7. Scheduling : Introduction 스케줄링 정책 (scheduling policy) 이라는 것은 원칙 (discipline)이라고도 하며, 오랜시간 개발되어왔다. 초기에 생산 관리 분야에서 어떻게 효과적이고 효율적으로 할지에 대한 방법론적 문제가 존재해왔고, 그것이 컴퓨터라는 영역에서도 연결되어 왔다고 생각하면 된다. 핵심 질문 : 스케줄링 정책은 어떻게 개발하는가스케줄링 정책을 하기 위한 기본적인 프레임워크는 어떻게 만드는가, 어떤 가정과 어떤 기준으로 정책의 평가가 일어나는가? 초기의 기법들은 무엇이 있을까? 7.1 워크로드에 대한 가정 워크로드 (workload) : 프로세스가 동작하는 일련의 행위 적절한 워크로드의 선정이, 스케줄링 정책 개발에 매우 중요한 부분이다. 시스템에서 실행 중인 프로세스 혹은 작업(job) 에 대해 다음과 같은 가정을 한다.…

December 17, 2022
study
OSTEP - Part 1. Virtualization - 3 ~ 6

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 3. A Dialogue on Virtualization 4. The Abstraction: The Process 본 챕터에서 학습할 내용은 운영체제가 사용자에게 제공하는 가장 근본적인 추상화 개념 중 하나인 프로세스 이다. 프로세스Process : 실행중인 프로그램 프로그램Program : 디스크 상에 저장된 명령어의 덩어리로, 어떤 명령을 행하기 전 상태. 운영체제의해 변환되어 프로그램은 유용한 형태의 실행중인 대상으로 바뀌게 된다. 일단 하나의 프로그램 이상을 실행시킬 사람들은 종종 원한다. 그렇기에 실제로 전형적인 시스템들은 겉 보기엔 동시에 수백개의 프로세스들을 가동시키는 것처럼 보인다. 문제의 핵심어떻게 하면 많은 CPU들이 있는 화상을 제공할 수 있을까?비록 물리적 이용가능한 연산장치는 몇개 없다하더라도, 어떻게 운영체제는 CPU들이 거의 무한대의 작업을 지원하는…

September 14, 2022
study
CPP 스터디 00 - destructor

이번 내용에서는 생성자에 대해 배웠고, 변수를 초기화 하지 않아서 생기는 C의 다양한 오류들을 효과적이고, 효율적으로 없앨 수 있었다. 더불어 함수 오버로딩의 정책 덕분에 C언어에서 함수들의 이름을 제대로 사용하지 않으면 안되었지만, 더욱 편리한 사용이 가능해졌다. 스타크래프트 만들기 위 코드에서 실제 게임 처럼 수십마리 호출 및 싸우게 만들 수 없음. 이를 위해선 아래처럼 만들수 있다. 소멸자(Destructor) 지금까지 만든 마린 클래스에 이름을 지정할수도 있습니다. 이라는 인스턴스 변수를 추가함으로써 동적으로 할당하여 이름 스트링을 넣어줍니다. 정상적으로 컴파일 하면, 다음과 같은 메시지를 볼 수 있다. 위 코드에서는 이름 외에도 문제가 발생하게 되는데, 이는 이름을 넣어줄 때, 영역을 동적으로 생성해서 문자열을 복사했고, 이에 따라 동적으로 할당된 배열을 해 주어야 한다. 그러나 를 명확하게 지정하지 않으면, 기본적으로 가 되는 경우는 없다. 즉, 이에 대해 처리하지 않으…

September 08, 2022
study
CPP 스터디 00 - constructor

#생성자 #constructor #기본생성자 #default_constructor 함수 오버로딩(Overloading) C 에서는 라이브러리 상에서 함수 이름 1개다 한 개만 존재합니다(C 도 오버로딩이 있지 않나?) 하지만 C++에선 공시적으로 함수 이름이 중복이 되도 되며, 어떻게 구분할까요? 이런 케이스의 경우 어떤식으로 실행 결과가 나올까요? C++ 에서는 기본적으로 다른 타입의 자료형이 들어감에 따라 동일한 이름의 함수이어도, 이를 구분합니다. 동시에 위의 예시처럼 자기와 정확히 일치하는 인자를 가지는 함수가 없다면 ‘가장 근접한’ 함수를 찾아 실행하게 됩니다. C++ 컴파일러의 함수 오버로딩 과정 자신의 타입이 정확히 일치하는 함수를 찾는다. 일치 타입이 없으면 다음으로 형변환이 일어난다. , , 는 는 의 크기에 따라 or 은 은 위 세부 변환에서도 일치하는 타입이 없다면 좀더 포괄적인 형변환으로 일치하는 자료타입의 함수를 찾는다. 임의의 숫자 타입은 …

September 08, 2022
study
CPP 스터디 00 - obejective language

#object_oriented #object #class #access_identifier 모두의 코드 객체란? #객체 #추상화 #캡슐화 절차 지향 언어로 몇십년을 버텨온(?) 컴퓨터 공학은 객체 지향언어(Objected oriented language)를 발전시키게 되며, C++, Java Python, C# 등등 90년대 이후 등장한 대부분의 언어들이 객체지향언어 입니다. 그렇다면 무엇이 부족해서 절차 지향이 객체 지향의 스타일로 바뀔 필요가 있을까요? 구조체를 정의한 후, 변수를 만들어 이를 필요로 하는 함수들에게 이와 같이 전달해주었다고 가정해봅시다. 그런데 보이는 바처럼 함수에게 인자가 전달될 필요가 없었고, 개념적으로 마치 ”가 하는 것으로 보여집니다.” 따라서 이를 이렇게 바꾼다면 보다 명확하게 이해할 수 있을 것입니다. 이러한 구조가되면, animal을 인자로 play에 주지 않아도 됩니다. 논리적으로나 어떤 면으로나 animal은 자신의 상태를 알려주는 변수(v…

September 08, 2022
study
CPP 스터디 00 - reference

참조자의 도입 #CPP #reference #참조자 C에선 어떤 변수를 가리키고 싶을 땐, 반드시 포인터를 사용 해야 했으나, 이를 쉽게 해결하는 방법을 C++ 에서 제공하는 것 정수값 a 는 3으로 초기화 되어 있습니다. 그러나 여기서 참조자가 새롭게 정의 되어 있습니다. 참조자 기본형 : 예시에서는 그렇기에 위에서 a의 참조자로 another_a 가 지정되었으며, 이로써 값이 바뀌게 됩니다. 주의 : 레퍼런스는 반드시 처음에 누구의 별명이 될 것인지를 지정해야 합니다. 따라서 아래처럼 설정은 불가능합니다. 레퍼런스가 한 번 별명이 되면 절대로 다른이의 별명이 될 수 없습니다. 또한 레퍼런스는 메모리 상에 존재하지 않을 수도 있습니다. 이러한 경우 뭔가 문제가 있어 보인다. 어떤 타입기준으로 참조자 타입은 이며 따라서 이중으로 참조를 하게 되면, 로 하는게 맞을 것으로 보이며, 그 경우 z는 int&& 가 될 것처럼 생각된다. 하지만, 참조자의 참조자 라는 것은 말이 안되는…

September 08, 2022
study
OSTEP - 02. 운영 체제 소개

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 02. Introduction to Operating Systems 프로그램이 실행되면 무슨 일이 일어날까? : 가장 심플한 답은 아래와 같다. 들을 수행한다. 매초 마다 수백만회나, 프로세서들은 메모리에서 명령어를 가져오고(fetch), 이를 실행하고(execute), 한 명령어가 마무리 되면, 프로세서는 다음 명령어로 이동하며, 모든 작업이 마무리 될 때까지 계속 이어진다. 우리는 이 교재를 통해 프로그램의 동작을 배울 것이고, 프로그램이 동작하는 동안 아주 많은 다른 거친 일들이 작동하고 있음을 배울 것이다. 또한 이것의 주요 목적은 어디까지나 시스템을 사용하기 쉽게 만드는 것에 있다. 이러한 목적을 위한 소프트웨어의 몸통이 존재하고, 이 몸통은 프로그램들 사이에 메모리를 공유하거나, 프로그램과 장치 간의 상호작용을 가능케 하며, 여러 다른 재밌는 일들을 도와주는데 이…

September 07, 2022
study
OSTEP - 01.A Dialogue on The Book

본 내용은 OSTEP 의 내용을 정리 및 요약한 내용입니다. 전문은 이 곳을 방문하시면 보실 수 있습니다. 시작 Q. 왜 이 책의 이름이 인가요? A. 이 책은 Richard Feynman 저서인 아주 유명한 물리학 책의 이름을 오마쥬 한 것입니다. 더불어 세개의 조각이라는 것은, 운영체제에서 중요하고도 좋은 주제 3가지를 의미합니다. Q. 그럼 조각들은 무엇들을 의미하나요? A. 세 조각의 키들은 , , 입니다. 우선 운영체제가 어떻게 동작하는지를 배울 것입니다. 여기에는 CPU 가 다음 무슨 파일을 실행할 지, 어떻게 가상 메모리 시스템 상에서 메모리 오버로딩을 대처하는 지, 디스크 상의 정보를 어떻게 관리하며, 부분들이 실패할 때 작동하는 구분된 시스템을 빌드하는 지 등을 포함합니다. Q. 그렇다면 이 책을 갖고 가상 좋은 학습 방법은 뭘까요? A. 좋은 질문입니다! 일단 각자 자기 스스로 이러한 내용들에 대해 파악하는 작업이 필요합니다. (교수님 말 잘 듣는다던지, 클래…

September 07, 2022
study
CPP 스터디 00 - Orthodox Canonical Form

관련 문서 원문 번역본 본 문서는 Flylib에서 설명하는 내용 의 번역본입니다. Orthodox Canonical class form(OCCF)은 적절한 클래스 디자인을 원한다면 사용 가능한 레시피입니다. 네개의 기초 객체 사용 컨텍스트 상에서 적절하게 작동하는 것을 보장해야하는 사용자 정의 데이터 타입을 선언할 때 당신이 구현할 필요가 있는 4가지 기능을 OCCF 는 표현하고 있습니다. 사용자 정의 타입 상에서 OCCF 를 사용함으로써, 객체의 사용에 관련된 상황적 인지도를 상승시킬 수 있습니다. 이러한 수행능력 상에서 OCCF는 객체의 적절한 행동을 위한 레시피일 뿐만 아니라, 근본적인 보다 더 고급 수준의 C++의 특징적인 구조체에 대한 이해도의 초석이 되어 줄 겁니다. OCCF에 대한 직관적인 이해도는 당신의 C++ 클래스 작성 수준을 끌어올려줄 것이며, 복잡함 속에서 어떻게 사용할지, 적절한 형태를 만들어줄 것입니다. Four Required Functions(요구되는 …

September 04, 2022
study
OSTEP - Prologue

프롤로그 CS 공부를 확신하다 CS 공부를 할 때마다 굉장한 불안감을 안고 있었다. 어딜 가도 CS 학습보단 급급하게 문제를 풀어나가고 만들기에 바쁘단 생각이 앞섰다. 42서울에서 학습을 해나가면서, 그런 사람들의 이야기를 들을 때면 인터뷰를 한다거나, 실제 현업에서 고생하는 사람들의 이야기는 다소 신빙성이 떨어지는 듯, 보일 때가 많았다. 현업에 계신 분들은 CS를 채워야 하는것이 가장 힘들고 곤욕스럽다고 한다. 그럼에도 온갖 미디어에서나, 42에서 취업에 열중인 이들은 컴퓨터를 이해하기보단, 컴퓨터로 무언가를 시키기에 바쁜 모습. 그리고 거기서 나는 어느 흐름을 타야 하느라 걱정되었다. 하지만 CSAPP 교재를 1독을 끝을 내고, 과제를 하나씩 하나씩 해결해나가면서 드는 느낌은 사뭇 내 불안이 확신이 되게 만드는 과정이었다고 생각한다. 컴퓨터는 최첨단을 달리는 존재이고, 그런 바탕에서 눈 한번 깜빡하고 젖힐 때, 놀라울 정도로 그 다음 영역으로 성장하고 있는 것이 느껴진다. 그…

September 03, 2022
study
CPP 스터디 00 - NamingConvention

원본링크 원본링크 UpperCamelCase UpperCamelCase 는 이름 짓는 컨벤션으로, 이름이 복수의 단어로 조합되면서도, 첫 글자가 대문자화된 형태를 띠는 것을 말합니다. 바리에이션으로 라는 것도 존재하고, 이는 UpperCamelCase와 구분되어 보이기 위한 방식의 일종입니다. 해당 방식이 가지는 이점은 이름이 공백 없이 연속적으로 이어져야 하는 체계를 가진 시스템 상에서, 훨씬더 의미를 부여하는 방법의 일환으로, 이름에 대한 제한 사항을 어기지 않으면서도, 좀더 의미를 정확히 부여하는 방식이란 점에서 나름의 의미가 있습니다. 해당 컨벤션은 현재는 매우 유명해져서, 전세계 규모로 권장받는 프로토콜의 역할을 하고 있습니다. 여러 종류의 이름 컨벤션들  or  . Also called , , , ,  and   or   or  ,  or   or  UpperCamelCase 여러 종류의 이름 컨벤션들

September 03, 2022
study
CPP 스터디 00 - usingnamespace

using namespace 개념 가 C++ 의 표준 라이브러리의 모든 함수, 객체등이 정의된 이름공간(namespace) 라고 합니다. 이라는 것이 굳이 추가된 이유는, 말 그대로 어떤 정의된 객체에 대해 어디에 소속인지를 명시적으로 선언해주는 역할을 합니다. 이는 코드 크기가 늘어 남에 따라, 다른 사람의 중복된 이름의 함수들이 많아졌고, 이러한 상황을 구분하기 위해 소속된 이름 공간이 다르면 다른 것으로 취급하기 위한 도구 입니다. 위의 예시에서 보이듯, 표준 라이브러리에 있는 을 쓰겠다는 말이 됩니다. 사용 방법 위와 같은 예시가 있다고 할 때, 자기 자신이 포함되어 있는 이름 공간 안에선 굳이 이름 공간 명시 없이 사용이 가능합니다. 이때 만약 의 를 호출한다면 이런 식으로 호출이 가능합니다. 동시에 어떠한 이름 공간에도 소속되지 않은 경우에는 다음처럼 명시적으로 이름 공간을 지정해서 명시적 구분으로 연결시켜 주어야 합니다. 위의 방식이 귀찮아서, 명시적으로 안쓰고, …

September 03, 2022
study
CPP 스터디 00 - STL

STL 원본 참고 링크_C++ STL 이란? 개념 : Standard Template Library의 약자 이다. 프로그래머가 자료구조와 알고리즘을 알지 못해도 사용할 수 있도록 제공되는 라이브러리이며, 편의도구라고 생각하면 될 듯 싶다. 즉, 가이드라인에서 명시하는 내용은, 해당 ‘라이브러리’만 잘 쓰면 된다- 로 해석하면 될 것으로 보입니ㅏㄷ. “당신에게는 모듈 08 안에서 STL의 사용만을 허락받습니다. 이 의미는 컨테이너(벡터, 리스트, 맵, 그 외에 것들)들은 안되며, 알고리즘( 헤더를 포함할 필요가 있는 어떤 것들)도 마찬가지입니다. 이것들을 사용하면 -42를 받게 됩니다.” 내부 개념 컨테이너 : 특정 타입의 원소들을 담아 다루기 위한 객체 ex) list, vector, map, deque, multimap 등… 반복자iterator 컨테이너가 보유한 내부 데이터 순회 가능한 객체, 컨테이너의 특정 위치를 나타냅니다. 근래의 객체지향 언어에서 편리한 자료구조가 지원 …

September 02, 2022
study
CPP 스터디 00

다시 시작 하는 블로그… 몇 번째냐 ㅋㅋ… 여러가지 생각을 해봤다. 쉽지 않은 생각이긴하지만 허허.. 블로그, 기술블로그를 운영하겠다고 마음 먹었었다. 하지만 바쁜 42생활, 몰려오는 블랙홀과 함께 어떤 식으로 학습을 해야 하는지 라던지, 취업과 관련된 활동들을 하다보니 이제서야 다시 정신을 차리고 이렇게 블로그를 신경써보려고 한다. 사실 목표는 그렇다. 누군가에게 도움이 되는, 나름 오픈 소스 정신이 고 생각한게 아니었는데… 그럼에도 불구하고 다른 것들을 하다보니 자연스럽게 뒤로 밀렸던 것들이 참 가슴이 아프다 ㅋㅋ.. 여하튼, 미니쉘에서 정신을 놔 버리고, 그 뒤 정신없이 벌써 1달이 지났기에, 멘탈 붙잡고 다시 블로그를 유익한 공간으로 만드려고 한다. 핵심 포인트는 역시 ‘도움이 되는 정보’와 ‘고민’이 녹아 있냐. 블로그를 볼 때마다 떠올려야 할 것 같다. 그냥 단순한 정보만 쌓여 있는게 아니라, 그렇다고 잡소리만 한 가득이 아닌, 진짜가 되기 위한 몸부림을 적어보려고 한…

September 02, 2022
study
Git memo, 깃 고수가 되어보자_2

프롤로그 이 글은 앞으로 쓸 예정인 필로소퍼, 미니쉘에 대한 회고 기록, 학습 기록을 남기기 앞서 다시 블로그 관리에 시동을 거려는 나름의 처절한 몸부림(…) 입니다. 협업으로 학습과 개발을 해보니, 자연스레 저보다 깃에 익숙한 팀원에게 사실상 깃 관리를 맡겼었습니다. 하지만 아무래도 관리적으로 아쉬운 점이나, 깃의 제대로된 활용(?) 에 있어서 배워야 한다는 생각, 보완을 어떻게 하면 좋을까? 하는 생각을 하게 되었습니다. 따라서 협업에서 충분한 숙지가 필요한 ‘깃’이라는 협업 관리 툴에 대한 이해도를 높이고, 유용한 기능들을 놓치지 않기 위해 정리하는 글입니다. 사실은 이런 글을 굳이 적을 필요가 없다? 는 생각도 한 켠에 들긴 했습니다. 사실상 모든 기능들이나, 개념은 매뉴얼을 참조하면 되고, 커맨드 몇 번 입력하면 되니… 그러나 막상 팀업으로 빌드가 이어지는 와중에 그런 식으로 맥을 끊는 고민들이 발생하는게, 상당히 안 좋다는 걸 느꼈습니다. 개발 흐름을 끊기도 하고, 무엇…

July 26, 2022
study
Git memo, 깃 고수가 되어보자

프롤로그 이 글은 앞으로 쓸 예정인 필로소퍼, 미니쉘에 대한 회고 기록, 학습 기록을 남기기 앞서 다시 블로그 관리에 시동을 거려는 나름의 처절한 몸부림(…) 입니다. 협업으로 학습과 개발을 해보니, 자연스레 저보다 깃에 익숙한 팀원에게 사실상 깃 관리를 맡겼었습니다. 하지만 아무래도 관리적으로 아쉬운 점이나, 깃의 제대로된 활용(?) 에 있어서 배워야 한다는 생각, 보완을 어떻게 하면 좋을까? 하는 생각을 하게 되었습니다. 따라서 협업에서 충분한 숙지가 필요한 ‘깃’이라는 협업 관리 툴에 대한 이해도를 높이고, 유용한 기능들을 놓치지 않기 위해 정리하는 글입니다. 사실은 이런 글을 굳이 적을 필요가 없다? 는 생각도 한 켠에 들긴 했습니다. 사실상 모든 기능들이나, 개념은 매뉴얼을 참조하면 되고, 커맨드 몇 번 입력하면 되니… 그러나 막상 팀업으로 빌드가 이어지는 와중에 그런 식으로 맥을 끊는 고민들이 발생하는게, 상당히 안 좋다는 걸 느꼈습니다. 개발 흐름을 끊기도 하고, 무엇…

July 13, 2022
study
17_Lemon-sized luxury boxes

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Lemon-sized luxury boxes 이 집 꺾기 연출이 굉장히 맛집이다… 이메일로 비즈니스 식으로 보내면 된다고 하는데, 카페베네로 마지막 장면 끊어서 궁금하게 만들듯이 사람을 궁금하게 만든다.. 흥미 진진… 이전에 수출 수입관련하여 일을 할 때 이런 표현을 쓰진 않았었다. 그만큼 개념 없이 행동했다고 보여지기는 한다. 이런 발주 관련 표현은 기억해 놓으리라. 주요 영단어나 표현 정리 I’d like to place an order for… : 공손하게 발주를 요청하는 표현, 핵심은 가 , 라는 표현으로 해석하면 된다. We’re going t…

June 23, 2022
study
16_Slimy Limey

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Slimey Limey 그러게 느끼하게 작업을 걸면 안되지… 정중한 거절 표현들은 알아두면 좋을 것으로 보여서 메모해둔다. 더불어 동서고금을 막론하고 변명의 최고봉은 자기가 속한 곳을 언급하는게 아닌가(…) 하는 생각이 들었다. 주요 영단어나 표현 정리 Thank you for your offer. But I’m really sorry, I won’t be able to : 정중하게 거절하기 표현 (1) I’m afraid it is against company policy… : 정중하게 거절하면서 변명으로 회사를 언급하기(2) It wouldn’t be…

June 23, 2022
study
15_Seb Lime

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. Seb Lime 처음엔 영어 단어 표현인 줄 알았는디, 내용중에 찝쩍되는 남자 이름일줄이야… (?!) 영어식 전화, 특히나 비즈니스 시 영어 표현에 대한 내용이었다. 회사 생활 하면서 전화 매너를 배워봤다면 익숙한 표현이다. 오히려 한국어로 된 표현들이 결국 영어식 표현의 번역인건가 싶다. 주요 영단어나 표현 정리 Hello? Tip Top Trading. This is Anna speaking. : 전화 받을 때 Hello? Anna speaking. : 동일하게 전화 받을 때지만, 통성명이 어느정도 되어 상대를 알 때 Hello Mrs Smith, how…

June 21, 2022
study
14_Telephone tell-tale

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Imperial Lemon 후… 미니쉘 하면서 다른 공부하기 정말 힘드네… 고민해본 결과 핵심적인 내용을 제외하고 굳이 영어를 적거나 해석해가면서 하는건 시간낭비 같아 빠르게 빠르게 진행하자. ps. 역시 영미권인가, 거의 성희롱하는 것 같은 상사 목소리가 기냥 필터링 없이 꽂히네…ㅋㅋ 주요 영단어나 표현 정리 I’m a little bit concerned about : 공손한 우려표현(혹은 불만 표현) You need to work on … : 공손한 행동 바꾸기 요청 표현 Perhaps you should think about : 공손하게 태도를…

June 20, 2022
study
13_The Imperial Lemon

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Imperial Lemon 후… 미니쉘 하면서 다른 공부하기 정말 힘드네… 고민해본 결과 핵심적인 내용을 제외하고 굳이 영어를 적거나 해석해가면서 하는건 시간낭비 같아 빠르게 빠르게 진행하자. ps. 역시 영미권인가, 거의 성희롱하는 것 같은 상사 목소리가 기냥 필터링 없이 꽂히네…ㅋㅋ 주요 영단어나 표현 정리 fast-forward : 미국식은 ㅐ 발음이지만, f 이후 ㅏ 발음으로 읽는다. The compony has a strong track record of … Let me share with you… The Imperial Lemon’s key…

June 20, 2022
study
12_The big day

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse P.S) iframe 이 정상작동을 하지 않아 영상은 없이 대본 번역만 올리도록 합니다 ㅠ. 내용 해석 Hello, welcome to the offices of Citrus Ventures! 안녕하세요. Citrus Ventures 의 사무실에 오신 것을 환영합니다. It’s a big day for Anna, she’s about to present Tip Top Trading’s new Imperial Lemon to Mr Lime and his colleagues. This must not go wrong. 오늘은 Anna에…

June 16, 2022
study
11_Overtime

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 영단어나 표현 정리 burning the candle at both ends : 영어로 의미 표현은 다음과 같이 적혀 있다. “to work or do other things from early in ther morning until late at night and so get very little rest” 출처 doing overtime : 당연한 표현이지만 밤새 행동했음을 의미한다. putting in the hours : 수시간을 때려 넣었다는 표현을 하고 싶은 것으로 보인다. burning out : 번 아웃 lady-cur…

June 15, 2022
study
10_The brainstorm

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 핵심 메모 “But people might think there’s something wrong with our lemons and that we’re desperate to get rid of them.” 위 표현에서 후반부분이 굉장히 발음이 연결되어 있어서 혀가 오랜만에 아파왔다. 월-데스퍼ㄹ트겟륏돕뎀 … 영단어나 표현 정리 I’ve got to do a good job but it’s going to take me ages.(링크) 시간이 굉장히 걸린다, 나이를 먹었다 등.. 약간 드립성 표현 인상적. 딱히 비즈니스적 용어는 아…

June 14, 2022
study
09_The Warehouse

Introduction 본 포스트는 영어를 하도 안 해서 굳어버린 것 같은 나의 혀를 풀어주기 위하 작업으로 시작하였습니다. 멘토님, 다른 분들과 함께 영어 학습을 진행하는 것이며 해당 글의 기반은 의 내용입니다. (원본링크) 해당 포스트는 전체 내용 중 기억하려는 핵심만을 정리해 두었으므로 다분히 개인적인 학습 메모입니다. The Warehouse 핵심 메모 영국식 발음이 오랜만이라 소리가 상당히 어색했고, 내가 그렇게 하려고 해도 입에서 미국식 억양이 튀어나온다. BBC 영어로 시작한 만큼 영국식 영어 악센트(r, t, d)가 아직 적응이 잘 안되는 느낌이다. 영단어나 표현 정리 sorry to bother you overalls : 멜빵바지 입는 작업복 // 전체적인 상황을 표현하는 것 처럼보이기도 한다. Brown shoes don’t look right on him! He’s not a brown shoe sort of person… : 이 말의 의미를 잘 모르겠다. 직…

June 13, 2022
study
Markdown 사용을 위한 메뉴얼

해당 글은 이분의 글을 참고로 작성되었음을 알려드립니다. Markdown 사용을 위한 메뉴얼 사용화 시키기 위하여 저장해둔 글입니다. [공통] 마크다운 markdown 작성법 1. 마크다운에 관하여 1.1. 마크다운이란? Markdown은 텍스트 기반의 마크업언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있으며 HTML로 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다. 마크다운이 최근 각광받기 시작한 이유는 깃헙(https://github.com) 덕분이다. 깃헙의 저장소Repository에 관한 정보를 기록하는 README.md는 깃헙을 사용하는 사람이라면 누구나 가장 먼저 접하게 되는 마크다운 문서였다. 마크다운을 통해서 설치방법, 소스코드 설명, 이슈 등을 간단하게 기록하고 가독성을 높일 수 있다는 강점이 부각되면서 점점 여러 곳으로 퍼져가게 된다. 1.…

March 18, 2022
42seoul
study