Studying 46

테스트 주도 개발(TDD)

1. Test-Driven Development TDD는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스입니다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성합니다. 일단 테스트를 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거쳐 말 그대로 테스트가 코드 작성을 주도하는 프로세스입니다. Add a Test 테스트 주도형 개발에서는 새로운 기능을 추가하기 전에 테스트를 먼저 작성합니다. 테스트를 작성하기 위해 개발자는 해당 기능의 요구사항과 명세를 분명히 이해하고 있어야 합니다. 이는 사용자 케이스와 사용자 스토리 등으로 이해할 수 있으며, 이는 개발자가 코드를 작성하기 전에 보다 요구사항에 집중할 ..

메모리 관리

1. Memory 보통 메모리라 함은 메인 메모리인 RAM을 뜻합니다. 프로그램 실행 시 필요한 주소, 정보를 저장하고 가져다 사용할 수 있게 만드는 공간을 말하죠. 이 메모리를 관리해야하는 이유가 무엇일까요? 컴퓨터에서 각각의 프로세스는 독립된 메모리 공간을 갖고, OS 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한이 걸려있습니다. OS체제만이 OS 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않기 때문에, OS에서 메모리를 관리합니다. 또한 멀티프로그래밍 환경으로 변화하면서 한정된 메모리를 효율적으로 사용해야 했고, OS가 이를 어떻게 관리하는에 대한 관리 방법이 중요해졌습니다. OS의 역할은 실행파일이 로더에 의해 메모리에 올라오고 OS가 이 실행파일을 메모리의 어느 부분에 올..

Studying/Roadmap 2022.03.17

UI & API

1. UI UI(User Interface)는 컴퓨터라는 시스템과 사용하는 사람의 접점에 존재하며, 사람이 생각하는걸 컴퓨터에게 전달하는 입력 장치, 컴퓨터의 상태를 사람에게 전달하는 출력장치가 UI입니다. 말보다 실제로 예시를 들어 알아보는게 편하겠죠. 우리가 사용하는 컴퓨터의 화면입니다. 브라우저나 메신저를 사용하려면 마우스를 프로그램 위에 두고 클릭하여 사용하겠죠. 웹 브라우저에서는 버튼 및 스크롤바를 이용하여 어떤 링크로 이동하거나 내용을 볼 때 사용하게 되겠죠. 이 때, 사용하는 버튼 및 스크롤 프로그램 아이콘을 UI라고 하는 것입니다. 2. API UI가 사용자(User) 차원에서 시스템을 제어한다면, API(Application Programing Interface)는 개발자 차원으로 넘어가..

객체 지향 프로그래밍

1. Object Oriented Programming 객체 지향 프로그래밍의 사전적 의미는 컴퓨터 프로그램의 명령어를 목록으로 보는 시각에서 벗어나, 하나의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 굉장히 추상적입니다.. 객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면 컴퓨터를 중심으로 컴퓨터가 사고하는대로 프로그래밍을 했지만, 객체 지향 프로그래밍은 인간 중심적 프로그래밍이라고 할 수 있습니다. 즉 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말하는데, 현실 세계의 사물을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것입니다. 이를 추상화 라고합니다. 객체지향으로 코드를 작성하면 이미 작성한 코드에 대한..

스레드와 동시성

1. Thread Thread(스레드)는 어떤 프로세스 내에서 실행되는 흐름을 말합니다. int main(void) { int n = 0; int m = 10; printf("%d\n", n * m); while(n < m) n++; printf("END\n"); } 위와 같은 코드는 하나의 흐름을 가지며 이를 스레드라합니다. 일반적으로 하나의 프로그램은 하나의 스레드를 갖습니다. 그런데 하나의 프로그램에 스레드가 2개 이상 존재하는 경우가 있습니다. 이를 다중 스레드라고 합니다. 한 프로그램(프로세스)에 여러 개의 스레드가 있을 수 있는 이유는 스레드가 빠른 시간 간격으로 스위칭(교체)되기 때문입니다. 이러한 동작으로 사용자는 스레드가 동시에 실행되는 것처럼 보는 것입니다. 이처럼 CPU가 하나인 환경..

Studying/Roadmap 2022.03.14

프로세스 관리

1. Process 프로세스는 job, task라고 불리기도 하며 메인 메모리에 할당되어 실행중인 상태인 프로그램을 말합니다. 프로그램은 일반적으로 하드디스크에 저장되어 아무일도 하지 않는 상태입니다. 프로세스는 실행하면서 stack pointer, data, text, register 등 끊임없이 변합니다. 위 사진은 프로세스 상태 전이도를 나타낸 것입니다. New는 프로그램이 메인 메모리에 할당되는 상태를 말합니다. Ready상태는 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마친 뒤, CPU가 프로세스를 실행하면 Running 상태가 됩니다. Waiting 상태는 프로세스가 끝나지 않은 시점에서 I/O로 인해 CPU를 사용하지 않고 다른 작업을 합니다. 해당 작업이 끝나면..

Studying/Roadmap 2022.03.13

운영체제의 구조와 원리

1. OS의 작업방식 Windows와 Mac Os같은 운영체제가 등장하기 전에는 MS-DOS라는 운영체제를 사용했습니다. MS-DOS는 Single tasking(단일 작업)밖에 하지 못했습니다. 예를 들어 수행해야 할 작업-1과 작업-2가 있다고 생각해봅시다. 작업-1은 CPU를 사용한 후 I/O 장치를 사용하고, 작업-2는 CPU만을 사용하는 작업이라고 예를 들어 보겠습니다 작업-1이 먼저 수행이 되면서 CPU를 사용하고 I/O를 사용하는 동안 CPU는 놀고 있음에도 불구하고 작업-2는 메모리에 올라가있지 않기 때문에 작업-1의 전체적인 작업이 끝나기 전까지 작업을 시작하지 못하였습니다. ( I/O 장치를 사용할 때도 마찬가지입니다. ) 이러한 유연하지 않은 구조는 컴퓨터 전체의 효율성을 떨어뜨렸습니..

Studying/Roadmap 2022.03.11

운영체제란?

1. OS(Operating System) OS는 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어입니다. 컴퓨터를 사용하면서 실행하는 모든 프로그램들은 운영체제에서 제어하고 있습니다. 많이 사용하는 Windows, Mac os, Linux 등 많은 운영체제가 있습니다. 이 운영체제는 컴퓨터의 하드웨어를 관리합니다. CPU, 메모리, 키보드, 마우스, 네트워크 등 을 관리하여 컴퓨터를 좀 더 효율적으로 사용하게끔 사용자에게 편의를 제공합니다. 2. Booting 사용자가 컴퓨터를 사용하려면 컴퓨터를 켜게 되죠. 이 때, 컴퓨터에서 사용자가 OS를 시동할 때 운영 체제를 시작하는 부트스트래핑(전원을 켜거나 재부팅을 할 때 적재되는 프로그램) 과정을 부팅이라고 합니다. 위의 사진은 컴퓨터의 구조를 단순화한 ..

Studying/Roadmap 2022.03.10

Git과 GIthub의 차이

1. Git Git은 본인의 코드와 그 이력을 기록하고 관리하도록 돕는 버전 관리 시스템(VCS) 입니다. 버전관리는 시간에 따라 파일의 변경사항을 추적하고 기록함으로써 이전 버전으로 복구하거나 조회할 수 있는 기능을 제공하죠. GIt은 클라우드가 아닌 본인의 로컬 시스템에 설치되어 진행하는 프로그래밍 버전 기록을 스스로 관리할 수 있습니다. 이러한 GIt이 특별한 이유는 바로 브랜치(Branch)때문 입니다. 브랜치는 독립적으로 어떤 작업을 진행하기 위한 개념입니다. 필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있습니다. 이렇게 만들어진 브랜치는 다른 브랜치와 병합함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있습니다. 여..

호스팅이란?

1. 호스팅(Hosting)? 호스팅은 사업자가 주로 홈페이지의 서버 기능을 대행하는 것을 의미합니다. 호스팅의 종류를 살펴보며 차이점을 알아보겠습니다. 2. 웹 호스팅 본인이 HTML, CSS 같은 코드를 이용해 웹 페이지를 만들었다고해서 누구나 만든 사이트에 접속할 수 있는 것이 아니죠. 배포 과정을 거치고 도메인까지 연결을 하면 비로소 하나의 웹 페이지가 사이트가 되는 것입니다. 이 때, 개인이 서버를 구매하고 설치하는 것이 어렵기 때문에, 배포 과정을 전문업체에 맡깁니다. (임대의 개념) 3. 서버 호스팅 서버 호스팅은 서버 하나를 통째로 구매하여 서버 운영에 필요한 인프라, 기술력을 제공받을 수 있는 서비스입니다. 웹 호스팅과 웹 호스팅은 저렴한 가격으로 서버 및 인프라 구축이 필요 없지만, 서..

Studying/Roadmap 2022.03.09