일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 타입스크립트
- Nestjs
- 수학
- 백준
- socket
- Crawling
- typescript
- 소켓
- type challenge
- Algorithm
- 그래프
- javascript
- HTTP 완벽 가이드
- dp
- Node.js
- 레벨 1
- 알고리즘
- 프로그래머스
- TCP
- 가천대
- HTTP
- 프로그래머스 레벨 2
- ip
- 크롤링
- dfs
- 타입 챌린지
- 쉬운 문제
- BFS
- 자바스크립트
- 문자열
- Today
- Total
목록전체 글 (499)
kakasoo
형변환 JavaScript에서는 명시적인 형변환, 묵시적인 형변환이 있다. 엄밀히 말해, 묵시적인 형변환은 Wrapper 함수로 인한 형변환이라고 할 수 있겠다. 여기서는 둘의 구분 없이, 자주 보게되는 형태의 형변환들을 짚고 넘어가고자 한다. String String(1) === '1'; // true 1 + "" = '1' // true String으로 감싸서 문자열로 변경할 수도 있으며, 숫자에 문자열을 더해 변경할 수도 있다. Number Number('1') === 1 // true '1' - 0 === 1 // true +'1' === 1 // true '1' / 1 === 1 // true String과 마찬가지로 Number로 감싸서 숫자로 변경하는 것이 가능하고, 뺄셈이나 나눗셈으로도 가..
JavaScript에서의 배열과 리스트 MDN을 참고하면, JavaScript의 Array는 List 형태의 고수준 객체이다. 고수준 객체라는 건, 프로그래머가 내부 코드를 알 필요 없이 사용 가능한, 다양한 메서드들이 미리 구현된 자료구조임을 뜻한다. const arr = new Array(); arr[arr.length] = 3; arr.push(3); 정말 간단하게 push를 구현한다면 위의 코드처럼, 현재 length에 대한 값 대입이다. C언어에서는 생성되지 않은 공간에 값을 할당하면 에러가 발생하지만, JavaScript에서 Array는 길이나 요소의 형태가 결정되어 있지 않아 가능한 방법이다. 여담으로, 이를 이용하면 0번 index 다음에 100번 index에 값을 넣는 것도 가능하다. 물..
어떠한 것인지 설명하는 데에는 내 이해가 깊지 않아서 다른 글을 보는 걸 추천하고, 나는 좀 더 실용적인 정보를 제공하고 싶다, 그러니까, 직접 사용하는 법을 말해줄 테니 단계 별로 다뤄보고, 필요한 내용을 직접 조사해보도록 하자. 내가 하나 하나 설명할 수는 없지만, 이 내용들을 따라하고 공부함으로써 얻게 되는 CS 지식은 매우 유용할 것이다. 추가로, 여담을 굉장히 많이 적을 건데, 개발자가 알아두면 좋을 내용들을, 내용 상 시계열로 정리하겠다. 1. bash를 사용하기 위해서 wsl를 다운받도록 하자, 이는 윈도우에서 리눅스 환경 명령어를 쓸 수 있게 해준다. 1 - 1. 이것은 마이크로소프트의 store에서 설치할 수 있다, 우분투로 되어 있는 것이 있을 것이다. 1 - 2. 리눅스는 종류가 매우..
챌린지 1주차는 어땠는지? 시작부터, 부정적인 말을 하고 싶진 않은데, 좀 많이 어려웠다. 뭐, 어려운 것을 모르고 시작했겠냐만은, 어렵다, 노력하면 된다고 생각했는데, 내 생각보다 노력의 양이 좀 많아서 고통스러웠다. 4일동안 타이머 측정 시간으로는 총 41시간을 프로그래밍에만 시간을 썼고, 금요일은 불금을 즐기자고 조금만 달려서 7시간을 했다. 사람은 적응의 동물이라고, 금요일에 7시간 코딩한 것을 두고, '와 오늘 조금 했네.' 생각하니, 이건 부스트캠프에 세뇌당한 거 아닌가 싶을 정도의 학습량이었다. 부스트캠프는 강의를 따로 해주는 것은 아니다. 공부할 수 있는 환경을 만들고, 사람들을 전력질주하게 해주는 게 아닌가, 싶은 그런 교육 시스템이다, 자발적 공부에 가깝다. 하지만, 고작 4일임에도, ..
act.sa_handler = urg_handler; sigemptyset(&act.sa_mask); act.sa_flags = 0; fcntl (recv_sock, F_SETOWN, getpid()); state = sigaction (SIGURG, &act, 0); 이 코드들에 대해서 이야기 해보도록 하자! MSG_OOB : 긴급 메세지의 전송 저자는 다음과 같이 설명한다. 만약 환자들이 줄 서 있는 병원에 긴급 환자가 오면, 길을 비켜주는 게 당연한 수순 아니냐고, 즉 차례를 양보한다는 뜻. 여기서의 긴급 메세지도 비슷한 의미로서, 긴급한 메세지의 경우 전송 방법과 경로를 달리 하겠다는 뜻이다. server 측에서는 그저 send() 함수에 옵션을 넣어서 보내주기만 하면 된다, 아래의 간략한 코드를..
라즈베리파이를 다루고 있는지라, 이 함수들에 대해서 자세히 볼 수 밖에 없게 되었다. 미리 말하는데, 위의 함수와 동일하게 write와 read함수가 있는데, 거의 비슷하다. 미세한 차이가 있긴 한데, 이 미세한 차이를 느낄 수 있을까, 사실 그걸 위해 설명하는 것이기도 하지만, send, recv는 옵션을 설정할 수도 있고... usb port 라던가, 입출력 방식에 따른 호환성이 높은 편이라 할 수 있다.ㅌ 리눅스에서의 send & recv 함수 ssize_t send (int sockfd, const void* buf, size_t nbytes, int flags) sockfd // 데이터 전송 대상과의 연결을 의미하는 소켓의 파일 디스크립터, 윈도우에서는 그저 0이었다 buf // 전송할 데이터를..
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 #include #include #include #include #define BUF_SIZE 1024 void ErrorHandli..
server와 client는 서로 이렇게 입출력을 주고 받는다, 물론 main이 되는 server가 있긴 하겠지만, 이런 입출력은 반드시 server와 client간의 것이 아니니, client끼리도 입출력을 주고받을 수는 있긴 하겠다, 그러니 그림을 다시 그려보자. 좌측처럼 그리면 모든 대상이 정보를 주고 받을 수 있을 것이다. 하지만 필요한 socket의 수가 매우 많아질 것이고, 당연히 연결도 빈번해지니 전체 시스템이 느려질 수 밖에 없다. 그러니까 새로이, 우측 같은 그림으로 다시 그려보자. 이런 형태로 그리게 된다면, 각 선의 길이도 (개수를 의미) 줄고 입출력의 숫자도 절반으로 줄어들게 된다. 멀리플렉싱 기반의 서버라는 것은 위의 그림과 같은 형태를 의미하는데, 엄밀히 표현하면, 서버에 멀티플..
내 지인 sdworkbase가 나한테 운영체제에 대한 과외를 해줬을 때, 프로세스에 관한 이야기가 나온 적 있었다. 프로세스는 메모리 공간을 차지한 상태에서 실행 중인 프로그램을 지칭하는 말이다. 저장 중인 상태에서는 프로그램이지만, 동작하는 시점에서는 프로세스다. 이런 원리가 갑자기 왜 나오냐면, 내가 만들 서버에서도, 다중 접속을 허용하기 위해 필요하기 때문이다. 프로세스들은 운영체제에 의해서 실행과 멈춤을 반복하게 되는데, 마치 껌벅이는 듯한 이런 모양새 덕분에 컴퓨터는 적은 자원으로 여러 프로그램들을 실행시킬 수 있게 된다. 말하자면, 하나의 서버는 1등부터 100등까지 선착순으로 정보를 제공해주는데, 1등과 100등의 접속 시간 차이가 단 0.5초에 불과한데도 결과에 대한 지연 시간이 너무 큰 ..
IP 주소와 도메인 이름 사이에서 변환을 수행하는 시스템을 가리켜 DNS (Domain Name System) 이라고 하며, DNS의 중심에는 DNS 서버가 있다 - 윤성우 열혈 TCP/IP 소켓 프로그래밍 184P 125.209.222.141를 주소창에 입력해보자, 두려워하지 말라, 이상한 게 아니다. 넣으면 네이버가 나온다, 이는 네이버의 IP 주소이다. 자, 다시 정리해보자, 네이버 "도메인" 주소는 www.naver.com 이다. 네이버 네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요 www.naver.com 왜 이 주소가 아닌 숫자를 입력해도 네이버가 나오는 걸까, 이 두 접속 방법의 차이는 무엇일까? 정답은, 문자열로 되어 있는 이 주소는 가상의 주소이지, 실제 주소가 아니라는 점이..
지인의 추천으로 개발자 커뮤니티를 다수 가입하게 되었고, 그 과정에서 사람들이 하는 이야기나 훔쳐보다가(?) 부스트캠프라는 것에 대해서 알게 되었다. 지인이 말한 것의 의미를 순식간에 알 수 있었다. 개발자 커뮤니티에 들어가면서 자기가 얼마나 부족한지를 보고, 정보 습득에도 심혈을 다 하라는 말을, 한 번에 이해했다. 만약 커뮤니티에서 참여하지 않았다면, 부스트캠프가 있다는 것도 몰랐을 것이다. 부스트캠프는 작년까지는 1달 정도의 교육기간이었지만, 이번에는 무려 4~5달 정도의 기간이 되었고, 내 실력을 올릴 기회라고 생각됐다. 하지만 이번 부스트캠프는, 좋은 기회이고 아니고를 떠나서, 나에게 많은 교훈을 줄 수 있는 계기가 될 거라고 생각했다. 그런데 웬걸, 읽어보니, 내용도 훌륭한데 그 주최 기관도 ..
음, 해보다 안 것인데, server 하나에 client 여러 개를 연결할 수가 없다. 이게 아마, 프로세스와 스레드가 필요한 영역. 문제가 된 요소를 몇 개 발견했는데, client 2개가 있다고 하자, 하나는 A, 하나는 B라고 명명할 때 A를 서버에 연결했다. 이 상태로 연결이 잘 되고 있다고 할 때, B도 서버에 연결해보았다, 그런데 B는 전혀 동작하지 않는다. 이 서버는 동시성이 없기 때문이다. 그런데 B에서 메세지를 보낸다, 당연히 처리되지 않는다. A에서 서버와 연결을 종료한다, 그럼 B에서 동작해야 할 거 같지만, 앞서 B가 보낸 메세지는 씹혔다, 서버는 계속 B의 메세지를 기다리고 있는데 B는 이미 다음 단계로 넘어가서 메세지를 보낼 수가 없다. 동시성만이 이 문제를 해결할 수 있는 듯 ..