목록전체 글 (31)
영우

도커는 격리되어있으며 가상화된 실행환경을 제공하는 플랫폼입니다. 격리되어있다는 것은 호스트 PC의 환경 혹은 도커로 실행한 프로세스간 서로의 환경에 영향을 받지 않고 실행할 수 있다는 의미이고, 가상화된 실행환경이란 물리적인 실행환경(OS, 애플리케이션 의존성)을 논리적인 실행환경(컨테이너)으로 변환한 환경을 의미합니다. 즉 논리적인 실행환경을 제공하기 때문에 특정 물리적인 실행환경에 종속되지 않고 도커가 설치된 어떠한 물리적인 환경에서도 일관된 실행결과를 보장합니다.도커를 사용하는 이유도커만 깔려있으면 실행환경과 관계없이 동일한 실행결과를 보장받을 수 있어 배포가 용이합니다. 예를들면 Ubuntu, Node 20환경에서 특정 애플리케이션을 실행하고자하면, 실행환경을 DockerFile에 코드로 명시해 ..
segmentation fault란 뭘까요?segmentation fault(이하 segfault)는 메모리 보호를 갖춘 하드웨어(MMU)에 의해 발생하는 오류로, OS에 프로세스가 제한된 메모리 영역에 접근을 시도했음을 알리는것입니다.운영체제는 segfault를 받으면 해당 프로세스에게 SIGSEGV 시그널를 보내 segfault가 발생했음을 알립니다.제한된 메모리 영역에 접근을 시도한것은 어떤 경우인가요?프로그램이 사용할 수 있는 주소공간 외부에 접근하려 하거나, 프로그램의 주소공간 중 읽기전용 segment에 쓰기를 시도하면 segfault 입니다.paging으로 메모리를 관리하는 경우에도 segmentation fault 인가요?네. paging으로 메모리를 관리하더라도 page fault가 발생..

왜 그럴까요?함수형 프로그래밍에서는 데이터가 불변이라 업데이트가 일어나지 않기 때문에 스레드가 어떤 시점에서 데이터를 읽더라도 같은 데이터임을 보장받을 수 있습니다.함수형 프로그램에서는 순수함수를 사용하기 때문에 외부상태에 관계없이 같은 인자로 함수를 실행하면 같은 결과를 보장받습니다.함수형 프로그래밍이란 무엇인가요?함수형 프로그래밍은 프로그램을 함수로 구성하는 패러다임입니다.함수를 순수함수로 작성합니다.순수함수는 부수효과가 없는 함수로, 함수의 실행이 외부에 영향을 끼치거나 영향을 받지 않습니다.평가시점과 무관하게 같은 입력에서 항상 같은 결과를 반환합니다.문(statement)을 사용해 값을 업데이트하지 않고, 표현식(expression)을 사용해 값을 다른 값에 매핑해 로직을 작성합니다.명령형 프로..

부스트캠프에서의 Lesser부스트캠프에서 마지막 6주는 팀 프로젝트 기간입니다. 저는 마음이 맞는 백엔드 팀원을 미리 구해 놓았고, 아래의 사진처럼 프론트엔드 팀원을 모집했습니다.팀 모집을 할때 가장 중요한 목표로 “1년 이상 유지보수 및 개선을 해보자!”를 작성했는데 다행히 이 목표에 공감하는 팀원들과 만났고, 팀장의 역할을 맡아 ‘Lesser’ 프로젝트를 진행할 수 있었습니다.덕분에 부스트캠프 이후 약 4개월간 지금까지도 같은 팀원들과 프로젝트를 개발하고 있습니다. 6주 동안의 경험인 부스트캠프에서의 아쉬웠던 점, 배웠던 점을 공유하고, 부스트캠프 이후의 개발에서 아쉬운 부분을 어떻게 개선하고 좋았던 점, 배운 점은 어떻게 이어 나갔는지 공유하려 합니다.아쉬운 점애자일한 척저희 팀은 애자일 방법론을 ..

프로세스 간 통신은 무엇인가요?프로세스들은 다른 프로세스와 데이터를 공유해야할 수 있습니다. 예를들면 웹 백엔드 서버 프로세스는 사용자의 요청을 처리하기 위해 데이터베이스 프로세스와 통신할 수 있습니다. 혹은 단일 프로세스가 처리하기 힘든 연산을 더 빠르게 처리하기 위해 여러 프로세스가 동시에 연산해 더 빠르게 연산할 수도 있습니다. 이렇게 다른 프로세스와 데이터를 공유하는 프로세스들을 협력적인 프로세스라고 합니다. 당연히 이 프로세스들은 데이터를 교환할 수 있는 장치가 필요하고 이를 IPC(inter process comminication)라고 합니다.IPC 모델은 크게 두가지가 있습니다. 메모리 공간을 공유하는 공유 메모리 모델, 운영체제의 도움을 받아 메시지를 교환하는 메시지 전달 모델입니다.공유 ..

들어가며 C나 C++같은 고급언어로 소스코드를 작성하고, 소스코드를 컴파일해 실행파일을 만들고, 실행파일을 실행해 프로그램을 사용해왔습니다. 이런 과정들이 복잡하게 생각하지 않아도 될 만큼 잘되어있어서 내부적으로 어떤 일을 하는것인지 잘 알지 못했습니다. 오늘은 미지의 세계인 소스코드부터 실행까지 어떤 일이 일어나는지 알아보았습니다.(요람에서 무덤까지를 패러디했습니다. ㅋㅋ..) 전체적인 절차 고급언어로 작성한 소스코드로부터 시작합니다. 이를 컴파일러가 기계어에 보다 가까운 어셈블리어로 만들어 줍니다. 여전히 어셈블리어는 기계어가 아니라서 실행시킬 수 없습니다. 그렇기 때문에 어셈블리 코드를 바탕으로 어셈블러가 이진파일인 목적파일로 만들어줍니다. 그리고 링커가 목적파일들과 외부 라이브러리를 링킹해 하나의..