새길 것 › 2025년의 나
2025년이 온지 4개월이 지난 지금 정신없었던 지난 4개월 수원에서 약 반 년간의 정글 생활이 끝나고부터 지금까지 약 4개월이 지났다. 그 때 만났던 인연들과 함께 팀을 꾸려 팀 프로젝트를 진행하고, 이전 알고 지내던 형들과 개발자 디스코드 채널에 참여하여 아침 10시 모각코 스터디도 진행하고 있다. 또한 본가에서 지내면서 야간 편의점 아르바...
2025년이 온지 4개월이 지난 지금 정신없었던 지난 4개월 수원에서 약 반 년간의 정글 생활이 끝나고부터 지금까지 약 4개월이 지났다. 그 때 만났던 인연들과 함께 팀을 꾸려 팀 프로젝트를 진행하고, 이전 알고 지내던 형들과 개발자 디스코드 채널에 참여하여 아침 10시 모각코 스터디도 진행하고 있다. 또한 본가에서 지내면서 야간 편의점 아르바...
이번에 새로운 프로젝트를 진행하면서 SEO의 필요성을 느껴서 Next.js를 공부하게 되었다. Next.js 란? React.js의 전용인 웹 개발 프레임워크 이다. 당연히 알겠지만, React는 라이브러리, Next는 프레임워크이다. 이는 제어권이 누구에게 있냐의 차이이다. React는 제어권이 개발자에게 있으며, 필요한 기능만 유연하게 가져...
지난 5개월을 돌아보며 5개월 전의 나를 돌아보며 드는 생각 뭔갈 해야하는 건 알겠는데 뭘 어디서부터 어떻게 해야 할지 몰라서 손에 잡히는 대로 일단 하고 있었다. 그렇게 생각 없이 한 일은 확신을 가질 수 있게 해주지 않았고 조금만 막히고 힘들어도 중간에 그만두기 일수였다. 지금 생각해보면 시작부터 단추를 잘못 끼웠었다. 단순히 하고 싶다 적성...
포트폴리오와 이력서의 차이 포트폴리오와 이력서 포트 폴리오 프로젝트의 배경 및 목적 프로젝트 진행 과정 활용한 기술 스택 프로젝트의 결과 잘한 점 아쉬운 점 이력서 개인정보 직무 관련 경험 경력 및 학력...
pintOS에서 기록해놨다가 바빠서 정리 못했던 내용들을 복기 할 겸 정리한다. System Call 정의 운영체제의 커널이 제공하는 서비스에 대해 응용프로그램의 요청에 따라 커널에 접근하기위한 인터페이스 이다. 조금 더 큰 그림을 기준으로 생각 해보자. 컴퓨터의 구분 우리가 사용하는 컴퓨터는 크게 물리적인 하드웨어와 그렇지 않은 소프트 웨...
오늘부터 잠시 내려놓았던 알고리즘을 틈틈히 복습한다. 재귀함수 자기자신을 다시 호출하는 함수로 파이썬에서 최대 깊이가 정해져있다(스택 프레임에 쌓여서 마지막 부터 처리가 되는데, 메모리는 무한하지 않으니까). 재귀함수가 무한하게 하고 싶은게 아니라면 반드시 종료조건을 명시 해햐한다. def recursive_function(i): if i ...
드디어 고대하던 React를 정리한다. React란? Facebook(Meta)이 개발한 오픈소스 JS 라이브러리이며, 대규모 웹 서비스의 UI를 더 편하게 개발하기 위해서 만들어졌다. React는 왜 선택되었을까? React를 현재 시장의 선두주자로 만든 기술적인 특징을 알아보자. 컴포넌트 기반의 UI 화면 업데이트 구현이 쉬움 ...
Node.js란? Node.js는 web 브라우저가 아닌 환경에서도 js 코드를 실행시켜주는 js의 런타임(실행환경)이다. 즉 구동기 이다! 등장 배경 JS는 웹 페이지 내부에 필요한 단순한 기능을 개발하기 위해 만들어진 간단한 script 언어이다. 그렇게 웹 브라우저 내부에서만 작동이 가능하도록 만들어졌다. 문법이 유연하고 작성하기 편리하게 ...
웹을 다루는 언어 HTML의 역할 요소들의 내용, 배치, 모양을 정하기 위해 사용. 색상, 디자인 수정 불가. CSS의 역할 요소들의 색상, 크기 등 스타일 설정 가능 JS의 역할 웹 내부에서 발생하는 다양한 기능을 만들 수 있는 언어. 웹을 움직이는 ‘근육’이라는 표현. JavaScript의 실행 Ja...
드디어 JS를 맛 볼 시간이다. JAVASCRIPT 정의 자바스크립트는 High-level(고수준) : 저급언어(어셈블리어, 기계어)등과 다르게 사람이 이해하기 쉬운 고급 언어이다. Object-oriented(객체 지향) : 객체(object)를 중심으로 프로그래밍 하며, 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 묶어서 ...
오늘도 이어서 pintOS vm의 stack growth 를 다루어 보겠다. 이전 프로젝트 까지는 스택이 USER_STACK 으로 부터 시작하는 단일 페이지로, 프로그램은 이 크기에 종속되어 실행되었으나, 이젠 스택이 부족하면 확장할 수 있도록 한다. 그럼 왜 동적으로 할당하는 것이 스택 사이즈를 정적으로 고정하는 것 보다 좋을까?? 미리 고정으...
오늘은 이어서 lazy loading을 정리한다. 구현 setup_stack stack의 페이지를 생성하는 함수로, 스택은 아래로 성장하기 때문에, 스택의 시작점에서, 페이지만큼 내려서 페이지를 생성한다. 이 때는 프로세스가 실행 될 때 command line arguments를 스택에 저장하기 위해 바로 접근하기 때문에 별도로 lazy load...
오늘은 어제에 이어서 이번주에 pintOS vm (Anonymous page)을 구현하면서 겪은 내용을 정리한다. 개요 이번에는 디스크와 연결되지 않은 익명 페이지에 대해서 구현을 하게 된다. 해당 페이지는 대표적으로 힙, 스택 등에서 사용되며, 동적이고 비영구적인 메모리 영역에서 사용된다. Anonymous page Anonymous page...
오늘은 이번주에 pintOS 3번째 과제 vm을 구현한 부분까지 전체 흐름과 과정을 정리하려고 한다. 개요 지난 프로젝트까지는 pml4라는 페이지 테이블을 통해 가상메모리와 물리 메모리 간의 매핑을 관리하였는데, 이제 page fault과 자원관리를 다루기 위해서 각각의 페이지에 대한 추가 정보를 가지는 supplementary page table...
오늘은 pintOS 마지막 Virtual Memory를 정리한다. Virtual Memory 지금까지의 과제는 기기 환경의 메인 메모리 크기에 따라 돌릴 수 있는 프로그램의 수가 제한되어 있었다. 이번 과제를 통해 무한한듯한 메모리를 구현하여 그 제한을 없애 볼 것이다! 배경지식 문제상황 우선 pintOS에서는 대량의 템플릿 코드를 제공하고 ...
김버그님 강의를 통해 배운 내용을 정리하려 한다. 구조적인 문서의 설계 앞에서는 ui 컴포넌트 하나하나를 마크업하는 것에만 집중(각 요소의 의미에 맞는 마크업)했지만, 이제는 구조적인 웹 문서를 설계한다. 구조적인 문서의 설계 란? 글의 구조를 쉽게 한 번에 파악이 되도록 HTML 태그를 작성하는 것을 의미한다. 예를 들어 책을 읽을 때 목차...
오늘은 USER PROGRAMS의 Argument Passing에 대해 공부한다. Argument Passing process_exec()에 있는 유저 프로그램을 위한 인자를 설정한다. x86-64 Calling Convention 이 섹션에서는 Unix의 64비트 x86-64 구현에서 일반 함수 호출에 사용되는 규칙의 중요점을 요약한다. ...
오늘은 pintOS 2주차 USER PROGRAMS의 이론을 정리하려한다. USER PROGRAMS 프로젝트 소개 Threads 프로젝트까지는 운영체제 커널 영역을 다루고 있었기 때문에 시스템에 전체에 대한 권한을 가지고 작업을 했었다. 그러나 이번 User programs 프로젝트에서는 유저 프로그램을 실행할 수 있는 시스템 영역을 다룰 것이다...
김버그님 강의를 통해 배운 내용을 정리하려 한다. Mark UP 여기서의 마크업이란, 특정 웹사이트의 주요 요소들을 HTML를 사용하여 표현해 보는 것을 의미한다. 중점적으로 생각해 볼 것 마크업을 함에 있어서 가장 최우선으로 진행해야 할 것은 위에서 말한 주요 요소, 또는 나아가서 최소한의 단위로 요소를 자르는 것이다. 실습 및 작성 팁! ...
오늘은 어제 마저 못마친 condition varialbes와 donation을 정리한다. condition variables condition variables의 경우는 조건이 충족되기를 기다리는 waiters의 리스트 만을 가지는 구조체 이다. 문제상황 condition variables의 경우 다른 동기화 도구들과 마찬가지로 waite...
오늘은 pintOS Thread과제 중 Priority Scheduling을 구현하면서 배운 점을 정리한다. Priority Scheduling 배경지식 기존에 pintOS의 스케쥴러는 Round-Robin 방식으로 구현되어있었다. CPU 스케쥴링은 제한된 CPU의 자원을 효율적으로 분배하여 주어진 프로세스들에게 CPU시간을 분배하는 것을 의미하...
오늘은 pintOS Thread과제 중 Alarm Clock을 구현하면서 배운 점을 정리한다. Alarm Clock 역할 동시에 여러 작업을 실행 할 때 생길 수 있는 동시성 문제를 해결하기 위해서 기존에 주어진 pintOS코드에서는 busy-waiting방식을 사용하고 있었다. 운영체제에서 한번에 한 쓰레드 만이 공유 자원에 접근할 수 있도록 ...
오늘은 어제에 이어서 pintOS 1주차의 개념을 정리한다. 쓰레드(Threads) 쓰레드의 생성과 실행 쓰레드가 처음 생성 될 때, 새로운 실행 컨텍스트를 생성하는 것으로 이 컨텍스트에서 실행 될 함수를 thread_create()의 인자로서 전달한다. 쓰레드가 처음 실행 될 때, 해당 함수는 main()함수처럼 함수의 처음 부터 실행 되며 함...
드디어 pintOS 주간의 시작이다! 오늘은 사전 학습 자료를 정리하기로 했다. Threads(쓰레드) 동기화 쓰레드 간의 자원 공유는 통제하지 않으면 모든걸 망가뜨릴 수도 있다! pintOS에서 제공하는 몇 가지 동기화 요소들에 대해 정리해 보자. 공통 사전 지식 pintOS는 선점형 커널이다. 이를 이해하기 위해서는 두 가지 개념을 이해해...
오늘부터 pintOS 시작 주간이지만, 지난 주 웹서버는 꼭 이해하고 넘어가야할 것 같아 정리한다. Socket(소켓) 소켓이란? 소켓은 네트워크 상에서 통신을 수행하는 Endpoint를 나타내는 추상화된 개념으로, 클라이언트와 서버는 소켓 식별자를 읽고 쓰면서 서로 통신을 한다. BSD(Berkeley Software Distribution)소...
오늘도 어제에 이어서 키워드를 공부해 봤다. 파일 디스크립터(File Descripter) 정의 파일 디스크립터는 시스템으로 부터 할당 받은 파일을 대표하는 음수가 아닌(Non-negetive Integer)0, 양의 정수이다. 이 숫자는 프로세스에서 열린 파일의 목록을 관리하는 FD table의 인덱스로 사용된다. 우리가 파일을 열거나 생...
오늘은 어제에 이어서 시작한다. 실제 시스템이 동작 하는 관점에서의 정의 앞서 CSAPP 책에서도 봤었지만, 어플리케이션이 시스템의 기능을 함부로 써서는 안된다. 대신 인터페이스를 통해서 시스템 기능을 사용할 수 있도록 만들어 주어야 한다. 소켓 어플리케이션이 네트워크 기능을 사용할 수 있도록 시스템이 제공하는 프로그래밍 인터페이스를 바로 소켓...
오늘은 7주차 키워드에 대해 정리해보았다. 서버 클라이언트 모델 서버와 클라이언트란? 단순하게는 네트워크에서 데이터를 주는 컴퓨터를 서버(Server), 데이터를 요청하고 받는 컴퓨터를 클라이언트(Client) 라고 할 수 있다. 그 목적에 집중해서 본다면, 컴퓨터가 데이터를 주고 받는 행위를 하는 목적은 특정한 기능(서비스)를 제공하기 위함 ...
블로그를 작성하는 이유 어느새 블로그라는 개념이 개인 기록의 목적에서 취업 스펙에 가까워졌다. 내가 이렇게 열심히 했어요! 전 노력하고 근성있어요! 를 보여주기 위한 것 일수도 있고, 저 이런 것도 공부했어요! 가 될 수도 있다. 물론 부정할 수 없는 부분이지만 그럼에도 어디까지나 그 뿌리에는 공부한 내용을 글로 옮겨내는 과정에서 다시 점검하고 후에...
어제에 이어서 정리 한다! Routing과 Forwarding Routing 길찾기 : 내가 어떤 선택 가능한 경로들을 가지고 있나? 데이터 전송의 본질적인 부분이 아닌 컨트롤의 영역. Forwarding 전송하기 : 선택 가능한 경로들 중 하나를 골라서 보낸다. 데이터 전송의 본질적인 영역. 목적지에 따라 골라서 보내기 때문에 Switc...
7주차는 네트워크에 관한 주차이다. 명지대학교 문대경 교수님 (UC Berkeley CS Ph.D., (전)넥슨 개발자)의 강의 내용과 CSAPP을 참고한 내용을 정리하려 한다. 네트워크(Network) 네트워크는 무엇인가? 상호 연결되어 있는 사람들이나 사물들로 이루어진 그룹이나 시스템. 사람/사물을 ‘점’으로 표시하고 그들간의 어떤 관계를 ...
공학적인 사고를 함에 있어서 중요하지만, SSAFY를 이수하는 과정에선 놓쳤던 지금 생각하면 아쉬웠던 점은. 내가 가진 선택지가 무엇인지를 알고, 그 선택지들의 장단점을 판단할 수 있거나, 최소한 궁금해 해야 한다는 점이다. 세상에 무조건 좋은 것은 없다. 최선의 선택지는 있을 순 있겠지만 그 조차 단점이 존재하나 다른 선택지에 비해 단점이 적거나 장...
오늘은 6주차 키워드를 마무리 한다. 시스템 콜(System Call) 시스템 콜의 정의 시스템 콜은 운영체제의 커널이 제공하는 서비스에 접근하기 위해 응용 프로그램의 요청에 따라 커널에 접근 하기위한 인터페이스이다. 시스템 콜이 필요한 이유 일반적으로 사용하는 프로그램은 응용프로그램인데 유저레벨에서는 필요한 모든 기능을 사용 할 수 없기...
생활코딩 채널을 통해 배운 내용을 정리하려 한다. CSS(Cascading Style Sheet) box_model html의 모든 요소는 박스로 이루어져 있다. 그런 박스가 일정한 형태의 모델로 이루어져있기 때문에 이를 box model이라고 부른다. 예를 들어서 봉지라면을 생각했을 때 여러가지 종류의 라면이 있지만 봉지안에는 면, 스프...
오늘은 이번주 공부했던 내용들의 흐름이 어느정도 이해가 되어서 정리 해보려한다. + 어제 부족했던 내용 보완 및 수정. 가상메모리 가상메모리는 각 프로세스가 실행이 될 때 일정 크기를 커널로 부터 할당 받는다. 32비트 환경에서는 4GB(2^32) 64비트 환경에서는 2^48 또는 2^57이라고 한다. 32비트에서는 2^32바이트인 4GB를...
free list 아래께 공부했던 메모리 할당 정책 중 등장했던 개념으로 가용 블록을 탐색할 때 사용하는 리스트 였다. 어제는 묵시적 리스트(Implicit free list)로 가정하고 설명했지만, 오늘은 좀 더 알아보도록 했다. 묵시적 리스트(Implicit free list) 할당된 블록과 가용블록이 연속적으로 메모리에 나열되어 있는 형태로...
인자 전달 방식 함수에서 인자를 불러 올 때 어떤 방식으로 호출 하는가? Call by Value(복사) 함수의 인자를 받을 때 변수에 담긴 값을 스택에 복사하여 넘겨준다. 장점 : 원본 값을 변경할 수 없기 때문에 안전하다. 단점 : 복사를 하니까 메모리 공간을 차지 한다. Call by Reference(주소값) 함수의 인자를...
포인터의 크기 32비트 환경에서와 64비트 환경에서의 포인터의 크기는 왜 다를까?? 32비트 => 4byte 64비트 => 8byte 인 건 알고 있었지만 이유는 몰랐었다. 32비트 환경에서 메모리 주소는 32비트로 표현이 되고, 64비트 환경에서는 메모리 주소가 64비트로 표현이 된다. 그렇기 때문에 메모리 주소를 표기하기 위해서는...
오늘은 RB_tree 구현이 끝나고 배운 점을 정리해 본다. 문제점 전방 선언 처음 마주했던 오류는 함수의 호출이 함수의 선언 부 보다 앞에 있었기 때문에 발생한 문제였다. 해당 경우에는 해결 방법이 두 가지가 있었다. 함수의 원형을 상단부에 전방선언으로 알린다. 단순하게 함수의 위치를 호출하는 곳 보다 앞으로 옮긴다. heade...
생활코딩 채널과 김버그님 강의를 통해 배운 내용을 정리하려 한다. HTML(Hyper Text Markup Language) Hyper Link : 웹 상에서 흔히 볼 수 있는 밑줄로 된 링크(자료 -> 사진, 동영상, 파일의 위치를 지정할 수 있는 참조고리). Hyper Text : 하이퍼링크를 나타낼 수 있는 텍스트. 즉 하...
오늘 C언어를 이용한 스택, 큐, 이진트리의 구현을 해보면서 구조체의 선언과 메모리 할당에 대해 새로 이해한 내용을 정리하려한다. 구조체 정의 typedef struct _queue { QueueNode *head; QueueNode *tail; } Queue; 이런 식으로 _queue라는 구조체를 선언을 하였으며, 별명을 Queue로 하였...
오늘은 어제에 이어서 c의 포인터에 대해 공부해 보았다. 포인터의 포인터(더블 포인터) 더블포인터는 말 그대로 포인터를 가리키는 포인터이다. int **p; 이런 형태로 선언 한다. #include <stdio.h> int main() { int a; int *pa; int **ppa; pa = &...
오늘은 어제에 이어서 c언어 공부를 했다. 포인터 사전지식 먼저 짚고 갈 점은 모든 데이터들은 메모리 상에 특정 공간에 저장 되어 있다는 것이다. 메모리의 각각의 공간은 1바이트를 가지고, 예를 들어 int형 변수를 정의한다면 4칸을 차지하게 된다. 어떤 공간의 정보를 사용해야 할 지 구분하기 위해서 각 공간에 고유 주소(address)를 붙이고...
어제에 이어서 C의 문법에 대해 이어 공부하였다. if 문 if문 지금까지의 코드들은 위에서부터 아래로 순서대로 실행되었었다. 허나 조건문에서는 조건에 따라 실행되는 것이 달라 진다. 코드 #include <stdio.h> int main(){ int i; printf("입력하고 싶은 숫자를 입력하세요! : "); ...
이번 주차는 C에 대해 공부를 하는 시간이였다. 그 전에 앞서 참고자료를 따라서 visual studio를 설치하려했는데, 지원이 종료된다는 얘기를 보았다. 이유가 궁금해서 찾아보니, macOS는 기본적으로 UNIX기반이기 때문에 C언어 개발에 필요한 도구들을 기본적으로 제공하거나, 간단하게 설치할 수 있으나, Window의 경우 C언어 개발 도구...
오늘은 3주차 알고리즘에 대해 정리 해보았다. DP(동적 계획법) DP란 동적 계획법이라는 이름은 뭔가 와닿지 않아 찾아보니 모 교수님께서 기억하기 알고리즘이라고 표현하셨다고 한다. 그렇게 표현한 이유는 DP알고리즘의 목적은 메모리를 사용하여(자료구조, 배열을 사용) 중복연산을 줄이고 수행속도를 개선하는 것이기 때문이다. 즉 한 번 수행한 연산을...
오늘은 csapp3장을 이어서 공부했다. 제어문 반복문, 스위치문들은 조건부 실행이 요구됨. 기계어 코드에서 조건부 동작을 시행하는 법으론 데이터의 흐름 변경, 제어흐름의 변경 두 가지 방법이 있음. 먼저 제어 흐름에 대해서 알아볼 것. 조건 코드 cpu의 비교연산이나 테스트 연산 이후에 설정되는 cpu의 상태 플래그로 각 플래그는 1비트의 크...
오늘은 CSAPP 3장을 읽어보았다. 컴퓨터 프로그램 컴퓨터는 프로그램을 실행 할 때, 기계어 코드를 실행한다. 기계어 : 이진수로 표현되는 저수준 언어로 하드웨어와 직접 상호작용할 수 있고, 그렇다 보니 작성하고, 이해하기 어려우며 cpu 종속적이라 이식성이 낮다. 어셈블리어 : 기계어와 대응되는 저수준 언어로 기계어보다 사람이 읽고 이해...
오늘은 파이썬의 자료구조에 대해 알아보았다. 스택(Stack) 말미잘 같은 자료구조이다. 입으로 들어와서 입으로 뱉듯이, 한쪽으로 들어와서 한쪽으로만 나간다. 세로로 긴 관에 사탕을 색깔별로 넣었다고 생각하면, 빨간색, 파란색, 초록색 사탕을 넣고, 다시 빼려고 뒤집으면 초록색, 파란색, 빨간색 순서로 나올 것이다.이런 구조를 LIFO(Last I...
오늘은 컴퓨터 시스템 1.1 ~ 1.4 장을 읽어보았다. 1장에서는 hello프로그램의 생성 -> 시스템에서실행 -> 메세지 출력 -> 종료 의 수명주기를 간단히 설명했다. hello 프로그램의 생성 프로그래머가 에디터로 작성한 소스파일로 시작한다고 한다. 이 소스 파일은 바이트 단위로 구성된다고 한다. 비트 : 0 또는...
오늘은 정렬에 대해서 공부를 해보았다. 정렬 정렬은 말그대로 오름차순 내림차순 등의 정렬이다. 그 중 같은 데이터의 순서가 유지되는 정렬은 안정적인 정렬 그렇지 못하면 안정적이지 않은 것이다. 원소를 비교하고 교환하는 과정을 패스라고 한다. 버블정렬 거품이 올라오는 것과 같이 정렬된다고 해서 버블정렬이라고 부른단다. 오름차순 정렬을...
2일차는 공부했던 내용을 바탕으로 알고리즘을 풀어보며 몰랐던 것을 정리한다. 아스키코드 변환 chr(숫자:int) : 숫자에 맞는 아스키 코드 반환 함수 ord(문자:str) : 문자에 맞는 아스키 코드 반환 함수 소수 찾기 에라토스테네스의 체를 공부하기 전에는 def find_prime(numbers): cnt = 0 ...
1주차 첫 번째 키워드는 자료구조와 배열이였다. 자료구조 데이터를 구조적으로 표현하는 방식 배열(Array) 하나의 변수가 아니라 묶음 단위로 객체를 저장 각각의 객체는 원소이며 0~ 인덱스를 부여받음. 파이썬에서는 리스트와 튜플로 배열을 구현 사전지식 리스트와 튜플에 대해 알아보기 이전에 mutable과 imm...
⏲ 입소 전의 시간 대학 졸업 이후 전공을 살려서 취업을 할지 많은 고민을 했었다. 나름 많은 것을 시도해봤고 이어지는 좋지 못한 결과에 좌절도 했었다. 와중에 친구에게 SSAFY라는 부트캠프의 존재를 전해들었고, 당시에는 놀아서 뭐하겠냐는 생각으로 일종의 도피를 위해 부트캠프를 지원했던 것 같다. 그렇기 때문에 프로그래머라는 직업의 정의를 머...