개발(ETC) 5

프로세스와 스레드

1. 프로세스- 프로그램은 실제 실행하기 전까지는 단순한 파일에 불과- 프로그램을 실행하면 프로세스가 만들어지고 프로그램이 실행됨- 이렇게 운영체제 안에서 실행중인 프로그램을 프로세스라 함- 프로세스는 실행 중인 프로그램의 인스턴스- 자바 언어로 비유하자면 클래스는 프로그램이고, 인스턴스는 프로세스이다.  프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립적인 메모리 공간을 갖고 있으며, 운영체제에서 별도의 작업 단위로 분리해서 관리된다. 각 프로세스는 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다.  프로세스가 서로의 메모리에 직접 접근할 수 없다. 프로세스는 이렇듯 서로 격리되어 관리되기 때문에, 하나의 프로세스가 충돌해도 다른 프로세스에는 영향을 미치지 않는다.  쉽게 ..

개발(ETC) 2024.07.17

멀티태스킹과 멀티프로세싱

멀티 스레드를 이해하기 위해 멀티 태스킹과 프로세스 같은 운영체제 기본 개념들을 알아야한다. 멀티 스레드 이해를 위한 핵심 내용만 살펴보자.  1) 단일 프로그램 실행ex) 프로그램 2개 이상을 동시에 실행했다. 음악을 들으면서, 문서를 작성하는 것이다. 이 때 연산을 처리할 수 있는 CPU 코어는 1개만 있다. - 프로그램의 실행이란 프로그램 코드를 순서대로 CPU에서 연산(실행)하는 일이다.- 여기서 CPU 코어는 하나이므로 한 번에 하나의 프로그램 코드만 실행할 수 있다.- 만약 하나의 프로그램 안에 있는 코드를 모두 읽은 후에야 다른 프로그램의 코드를 실행할 수 있다면 사용자는 답답함을 느낀다.- 실제로 초창기 컴퓨터는 이렇게 실행했다.- 이를 해결하기 위해 CPU 코어로 여러 프로그램을 동시에 ..

개발(ETC) 2024.07.16

애자일(Agile) 이란

애자일(Agile) 이란 흔히 개발 ‘방법론' 혹은 ‘프로세스' 라고 얘기하지만 와닿지 않는다. ‘일하는 방식' 정도로 생각하자. 기존 소프트웨어 개발을 할 때 사용하던 전통적인 방식 (구닥다리 방식) 이 아닌 여러 거장들이 ‘유연하게 일하는 방식’ 을 정의한 것이다. 실제 애자일이라는 용어 자체가 ‘기만한', ‘재빠른', ‘민첩한' 이라는 뜻을 가지고 있다. 기존 전통적인 방식 (구닥다리 방식) 전통적인 방식 이라면, 정확히 어떤 방식인지 ‘책을 집필하고 출판하는 과정’ 을 예시로 설명해보겠다. 저자가 기술 서적을 쓰기로 마음 먹음 출판사에 저자의 기획안을 제출 출판사 는 책 출판을 결정 저자와 출판사는 계약을 하고 저자는 집필 시작 탈고일이 6개월 이라 가정, 출판사는 프로그레스를 중간 중간 점검함 ..

개발(ETC) 2022.07.15

대용량 웹 서비스를 위한 마이크로 서비스 아키텍쳐(MSA)의 이해

마이크로 서비스 아키텍쳐 (이하 MSA) 는 최근 웹 기반의 분산 시스템의 디자인에 많이 반영되고 있는 아키텍쳐 스타일이다. 특정 사람이 정의한 아키텍쳐가 아니라 분산 웹 시스템의 구조가 유사한 구조로 설계 되면서 개념적으로만 존재하던 개념이다. 얼마 전 마틴파울러(Martin folwer) 가 MSA 에 대한 개념을 글로 정리하여 개념을 정립 시키는데 일조하였다. 이 글에서는 대규모 분산 웹 시스템의 아케텍쳐 스타일로 주목 받고 있는 MSA 에 대한 개념에 대해서 알아보도록 하자. 모노리틱 아키텍쳐 (Monolithic Architecture) MSA 를 이해하려면 먼저 모노리틱 아키텍쳐 스타일에 대해서 이해해야 한다. (Monolithic: 단단히 짜여 하나로 되어있는, 하나로 된 거대한 덩어리) 모..

개발(ETC) 2022.07.01

Blocking, Non-blocking, Sync, Async

해당 개념을 이해하기 위해서는 다음의 두 용어를 짚고 넘어가야 한다. 제어권 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다. 결과값을 기다린다는 것 A 함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부를 의미한다. Blocking(블로킹) 과 Non-blocking(논블로킹) 블로킹과 논블로킹은 A 함수가 B 함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 달라진다. 1) 블로킹 A 함수가 B 함수를 호출하면 제어권을 B 함수에 넘겨준다. A함수가 B함수를 호출하면 B에게 제어권을 넘긴다. 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었..

개발(ETC) 2022.05.09