일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자료구조
- 연결리스트
- 스택
- Machine Learning
- 프로세스
- 프론트엔드
- cors
- 코딩테스트
- 타입스크립트
- 이진탐색
- vue3
- 포인터
- 브라우저
- 해시테이블
- 컨테이너
- 자바스크립트
- 웹팩
- C
- GraphQL
- RxJS
- 프로그래머스
- APOLLO
- 알고리즘
- RT scheduling
- 연결 리스트
- 릿코드
- pytorch
- 큐
- alexnet
- 배열
- Today
- Total
목록전체 글 (164)
프린세스 다이어리

1. 가상 메모리란? 등장 배경과 개념 우리 PC는 대부분 폰 노이만 구조 기반으로, 프로그램의 코드는 무조건 메모리에 올려서 실행되어야 한다. 즉 프로세스가 실행되려면, 각 프로세스마다 충분한 메모리를 할당받아야 한다. 리눅스 프로세스는 하나에 4GB인데, 통상적인 메모리는 8GB 또는 16GB다. 멀티 프로세스로 프로그램을 실행시킨다고 가정했을 때 동시에 2개에서 4개 정도만 프로그램을 실행시킬 수 있다. 더 많은 프로세스를 동시에 실행하려면 메모리가 더 커져야 하는데 현실적으로 비용이 많이 든다는 한계가 있다. 따라서, 여러 프로세스를 돌릴 수 있는 구조가 필요해지면서 가상 메모리의 개념이 등장했다. 물리 메모리만 사용한다고 가정을 했을 때, 단순하게 생각해 보면 물리 메모리에 Process A와 ..

새로운 프로젝트를 시작하고 나서부터 vscode에서 뭔가 이상한 현상이 발생됐다. components 폴더가 있으면 바로 밑에 components 2, components 3 이라는 빈 폴더가 생기고, 또 내가 수정한 적도 없는 파일들이 source control 탭에 좀비처럼 올라오고 있었다. 원래는 단순히 changes를 비워주거나 일시적인 vscode 오류인 줄 알고 브랜치를 삭제 후 다시 받아서 작업을 계속했는데, 똑같은 문제가 계속 발생하여 혹시 깃 캐시 문제가 아닐까 하고 캐시 삭제를 해 보았다. 방법은 다음과 같다. git rm -r --cached . git add . git commit -m "깃 캐시삭제" 프로젝트 루트에서 차례로 수행해주면 된다. 커밋 메시지는 각자 원하는 메시지로 작..

구글 라이트하우스는 각자가 관리하는 사이트의 성능과 접근성 등을 테스트하여 SEO에 도움이 될 수 있는 방안을 제안해 주는 툴이다. 라이트하우스 보고서를 활용하는 방법은 이 글에 정리했다. 회사에서 개발한 프로젝트 일부가 첫 로딩 속도가 너무 느려서 라이트하우스를 활용해 성능을 개선해보려고 한다. 역시 측정 결과 극악의 성능을 자랑한다. 인터넷 상에서 본 점수 중에서 가장 낮은 점수다. 배포한 상태는 이거보다는 훨씬 나은데, 로컬 서버로 열어보면 100점 만점에 9점이 나온다. 이제 이것의 성능을 구글 라이트하우스 리포트에 나온 내용을 활용하여 'Performance' 부분을 개선해보려고 한다. 1. 압축된 페이로드 응답 받기 먼저, 맨 처음으로 제안된 Enable text compression 항목에서..

우선 사용할 줄 아는 척하려면 일단 이게 뭔지, 실행시키면 어떻게 생겼는지 알아야 한다. 이 글에서는 사이트 성능을 구체적으로 개선하는 방법이 아니라 구글 라이트하우스로 측정한 리포트의 각 요소들이 어떤 정보를 제공하는지, 왜 이런 리포트의 점수 결과가 좋게 나와야 하는지 등을 정리해볼 것이다. ✐ 라이트하우스 리포트 내용을 구체적으로 개선해보는 글 구글 라이트하우스는 웹사이트를 개발하는 모든 개발자들이 사이트 성능을 개선하기 위해 알아야 하는 툴이다. 무료이고 사용하기 엄청 쉬워서 당장 내가 개발한 사이트가 뭐가 문젠지 뭘 개선해야 하는지 원클릭에 알아볼 수 있다. 라이트하우스는 크롬 익스텐션으로 추가하는 방법과, 개발자 도구를 활용하는 방법이 있는데, 나는 크롬 익스텐션을 추가했다. 구글에 "구글 라..
1. 중위 표기법과 후위 표기법 뜻 중위 표기법이란, 일반적으로 사람이 수식을 표기할 때 사용하는 표기 방법이다. 흔히 우리는 두 개의 피연산자가 있고 한 개의 연산자가 있을 때, 피연산자 사이에 연산자가 들어갈 수 있도록 표기를 한다. 그러나 컴퓨터가 좋아하는 방식은 후위 표기법이다. 후위 표기법은 연산자가 뒤쪽에 위치한다. 중위 표기법: 7 * 9 + 2 후위 표기법: 7 9 * 2 + 2. 기본적인 구조체와 push, pop 함수 만들기 #include #include #include // 문자열을 처리할 거기 때문에 typedef struct Node{ char data[100]; // 하나의 문자열을 담을 수 있도록. 숫자 또는 연산자 등 다양한 형태가 들어가기 떄문에. struct Node *..

1. 연결 리스트 구조체 만들기 #include #include #define INF 99999999 typedef struct Node{ int data; struct Node *next; } Node; typedef struct Stack{ Node *top; } Stack; 먼저 INF를 무한대의 값으로 설정하고, Node 구조체를 만든다. 기본적으로 연결 리스트는 다음 노드를 가리켜야 하므로, 노드의 data와 다음 노드를 가리키는 포인터 변수 next를 만들어준다. 또 Stack이라는 구조체를 만들어서, 모든 스택이 top이라는 노드를 가지고 있고 포인터를 가지고 있는 구조체이기 때문에 일종의 배열 형태로 만들 수 있다. Top은 스택의 최상단이다. 스택은 데이터를 넣을 때 반드시 top의 자리..

1. 스택(Stack)의 개념 스택은 한쪽으로 들어가서, 동일한쪽으로 나오는 자료구조다. 스택에 한쪽 방향으로 데이터를 넣는 Push와 스택에서 한 쪽 방향으로 데이터를 빼내는 Pop으로 이루어져 있다. 일반적으로 스택은 리스트처럼 생겼기 때문에 배열을 이용한 구현 방법과 연결 리스트를 이용한 구현 방법으로 나뉜다. Push(7) -> Push(8) -> Push(4) -> Pop() -> Push(2) -> Pop() 위 함수를 차례로 실행하면 다음 그림과 같다. 2. 배열을 이용한 스택 구현 #include #define SIZE 10000 #define INF 99999999 int stack[SIZE]; int top = -1; 먼저 전체 스택의 크기 SIZE를 10000으로 정해주고, INF에 ..

1. 양방향 연결 리스트란 양방향 연결 리스트는 각 노드가 머리(Head)와 꼬리(Tail)를 모두 가지는 특징이 있다. 양방향 연결 리스트의 각 노드는 앞 노드와 뒤 노드의 정보를 모두 저장하고 있다. 다음 그림을 보면 앞 노드는 prev, 뒤 노드는 next로 지칭하고 있다. 양방향 연결 리스트를 이용하면 단방향과 달리 리스트의 앞에서부터 혹은 뒤에서부터 모두 접근할 수 있다. typedef struct Node{ int data; struct Node *prev; struct Node *next; } Node; Node *head, *tail; 2. 연결 리스트 노드 삽입 과정 데이터를 오름차순으로 저장하는 양방향 연결 리스트를 구현해 보자. 노드를 삽입할 때는, 앞쪽 노드의 next가 삽입할 노드..