일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이진탐색
- 알고리즘
- 스택
- APOLLO
- 자료구조
- 컨테이너
- 포인터
- 큐
- 코딩테스트
- 릿코드
- 연결리스트
- 타입스크립트
- alexnet
- cors
- RxJS
- 프론트엔드
- 웹팩
- 해시테이블
- 프로세스
- GraphQL
- 연결 리스트
- 프로그래머스
- pytorch
- 브라우저
- RT scheduling
- C
- 자바스크립트
- vue3
- Machine Learning
- 배열
- Today
- Total
목록분류 전체보기 (164)
프린세스 다이어리
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kNa8H/btrhlyTeu3L/MAaoWO5kalyP57zpLfJDo1/img.png)
1. 프록시란 프록시는 클라이언트와 서버 사이에 위치하여, 그들 사이의 HTTP 메시지를 정리하는 중개인의 역할을 한다. '프락시'라고 하는 것이 표준어인 것 같은데, 보편적으로 프록시라는 단어가 더 많이 쓰이고 있고 나도 프록시라는 말이 더 친숙해서 굳이 표준어를 고집하지는 않으려 한다. 프록시라는 단어를 인터넷에 검색한 결과나, 일전에 프록시 우회 프로그램을 활용했던 경험에 비추어 보았을 때, 프록시는 VPN과 비교하여 다소 부정적인 방식으로 활용이 되거나 보안성의 측면에서 떨어진다는 인식이 있는 것 같다. 2. 프록시는 게이트웨이와 어떻게 다를까? 웹 프록시 서버는 클라이언트와 서버 사이에서 트랜잭션을 수행하는 중개인이다. 프록시 서버는 HTTP 클라이언트의 요청을 받기 때문에 클라이언트 입장에서는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpTqwm/btrhc8ooL3A/26hXb83midvrtdZsuNsLQ1/img.png)
크롬에서 가끔 아주 정말 가끔 이런 문제가 생긴다. 특정 리소스를 받아오지 못하는 게 아니라 애초에 브라우저가 요청조차 하지 못하는 상황이다. 무슨 영문인지 모를 때는 환장하겠는데 원인을 알면 전혀 문제되지 않는다. 원인은 인터넷 연결 불량 또는 이로 인한 크롬의 일시적 작동 불량이고 해결책은 간단하다. 1. 인터넷 연결이 잘 되었는지 확인한다. 2. 크롬을 껐다 켠다. 3. 크롬 네트워크 창의 throttle 설정이 오프라인으로 되어 있는지 확인한다. 3번 진짜 혹시나 나같은 멍청이가 있을까 싶어서 적는다. 우리 프로젝트가 네트워크 상황이 좋지 않을 때 어떤 모습으로 렌더링되는지 알아보기 위해, 네트워크 창에서 인터넷 설정을 오프라인으로 해 두고 잊고 술을 먹으러 가 버려서 이런 문제가 생겼다. 나는 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pZ3wT/btrg4K2uhfR/NRYkSEwFX9DOZoQKoV8iIk/img.jpg)
이 글을 임시저장을 하며 조금씩 쓰고 있는 차에, 마침 오늘 코드 리뷰 도중에 경력직 신규 입사자 분께서 질문을 하셨다. "혹시 네트워크 환경이 좋지 않을 때도 대비하여 작업하시는 건가요?" 화면을 공유하시곤, 크롬 네트워크 창에서 있는지도 몰랐던 작은 드롭다운을 열어 '빠른 3G' 탭을 클릭했다. 그리곤 우리가 열심히 작업한 웹뷰 페이지를 새로고침 했더니 안타까운 모습이 나타났다. 기본적인 마크업 화면에 데이터가 받아와지지 않은 휑한 모습으로 뻘쭘하게 몇 초를 기다린 후에야 온전한 페이지가 나왔다. 서비스를 구상하고 실제로 구현할 때 꼭 염두에 두어야 하는 UX 벌집 모형이 있다. 바로 2004년 피터 모빌이 제시한 "User Experience Honeycomb"이다. Useful, Usable, D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/U2BMh/btrgXhq6z51/HS4xNjJLJm1agjfYYWGAg1/img.png)
입사 초기에 잘 몰라서 해결하는 데 오래 걸렸던 이슈였다. 사실 지금 생각하면 해결점이 꽤나 뚜렷한 초보적인 고민이었는데 당시에는 대체 누가 이걸 해결해야 하나 구글만 뒤지고 있었다. preflight이 뭔지도 모르고, 도대체 OPTIONS는 쓰지도 않았는데 왜 계속 등장하는지 서로 익숙지 않아 애를 썼던 기억이 난다. 브라우저의 보안에 대해 잘 알고 있었다면 문제없이 해결할 수 있었을 거다. 1. CORS란 먼저 CORS 가 가능하기 전 브라우저가 공격으로부터 보호하기 위해 동일 출처 정책(SOP)을 가지고 엄격하게 제약을 걸었다는 것을 짚고 넘어가야 한다. 브라우저에 대한 공격은 크게 능동적 공격과 수동적 공격으로 분류된다. 능동적 공격은 해커가 웹서버에 직접 공격하는 것을 뜻하고, 수동적 공격은 웹..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/d4RAtj/btrgQAdoI1e/2k1AVLbmmcjHYJDDk4t250/img.png)
1. 동일 출처 정책(Same-Origin Policy) 동일 출처 정책이란, 자바스크립트 같은 클라이언트 스크립트에서 사이트의 특정 자원에 대한 접근을 금지하는 보안상의 제한이자, 브라우저의 샌드박스에 포함된 제한 중 하나다. 한 origin으로부터 로드된 document 또는 스크립트가, 다른 origin으로부터 받은 리소스와 상호작용을 하는 것을 제한하여 공격에 대비하는 중요한 보안 메커니즘이다. 브라우저가 같은 오리진임을 판단할 때, 딱 세 가지의 조건으로 판단을 한다. - 스킴(프로토콜) 일치 - URL의 호스트(Fully Qualified Domain Name)가 일치 - 포트 번호 일치 위의 URL과 동일한 origin인 url은 다음 중에서 어떤 것일까? 1. https://eunjinii..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cfZaoG/btrgC6Lz7MK/NaWe012K01n925WdIaVXD1/img.png)
제목의 답부터 말하자면 둘 중에 뚜렷하게 좋고 나쁨이 갈리는 게 아니다. 프로세스와 스레드 각각의 특성과 장단점이 있기 때문에 운영체제의 복잡성이나 프로그램의 특성 등을 고려해서 채택된다. 1. 프로세스와 스레드의 특징 차이 프로세스란 실행 중인 프로그램으로, 1개의 CPU가 한 번에 한 프로세스만을 실행할 수 있고 프로세스 간 데이터 접근이 불가하다는 특징이 있다. 스레드란 한 개의 프로세스 안에 여러 개의 프로세스를 동시에 생성 및 실행 가능한 구조다. 프로세스 안에서는 모든 스레드끼리 데이터에 접근이 가능하다. 멀티프로그래밍을 구현할 때 CPU가 어떻게 콘텍스트 스위칭을 하는지 이전 글에 정리해 두었다. 프로세스를 한꺼번에 여러 개 실행하는 것처럼 보이기 위해 CPU는 레지스터의 도움을 받아서 사용..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lk7r9/btrgCEuyi8l/8pru2sccksmkUcVoq9y6pK/img.png)
1. 프로세스의 구조 프로세스는 크게 stack, heap, data, code로 구성되어 있다. 프로그램 소스가 컴파일되어 기계어로 code 부분에 저장이 되고, 글로벌 변수는 data에 저장이 되고, 함수 및 지역변수 등이 선언되면 stack으로 들어간다. stack - 임시 데이터(함수 호출, 로컬 변수 등) 저장 heap - 코드에서 동적으로 만들어지는 데이터 저장 data - 변수, 초기화된 데이터 code(text) - 컴파일된 코드 이렇게 프로세스가 구성되어 CPU가 코드를 읽으며 실행을 한다. 위에 파이썬 코드에서는 heap 영역에 해당하는 변수는 없지만 C에서 malloc() 동적 메모리 할당 시 heap 공간에 메모리가 생성이 된다. int main() { int *data; data ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNF4qp/btrgMtyDaGp/RJvQrJQTblESXYrNFSzCi0/img.png)
1. 인터럽트란 CPU가 프로세스 a를 실행 중일 때, 파일 읽기의 끝이 나서 block 상태에서 running 상태로 돌아가야 한다고 가정해 보자. 그럼 누가 CPU에게 파일 읽기가 끝났다고 알려줄까? 바로 인터럽트 기술이 기본적으로 OS에 구현되어 있기 때문에 가능하다. 인터럽트는 일종의 이벤트로, CPU에게 정보를 알려주는 기술이다. 이전 글에서 CPU가 실행 중인 프로세스를 강제로 중단하고 다른 프로세스로 갈아타게 만드는 걸 스케줄러가 담당한다고 하였는데, 그 스케줄러 코드를 실행하게 하는 것이 인터럽트다. 2. 인터럽트 발생 상황 예시 CPU가 코드를 한 줄 한 줄 읽는데 집중하다가 인터럽트가 필요하면 즉시 실행을 멈춘다. 이때 실행을 멈춰야 하는 3가지 주요 상황이 있다. 2-1. 입출력 하드..