반응형 분류 전체보기401 Blocking & Non-blocking I/O + Synchronous&Asynchronous I/O 차이점 유튜브 널널한 개발자 TV를 보다가 어떠한 댓글에 Non-blocking과 Asynchronous가 다르다는 댓글에 구글링을 좀 했다. Blocking&Synchronous와 Non-blocking / Asynchonous의 차이점을 크게 보면 이해가 빠른데 자세히 보니 헷갈리더라. 두리뭉실하게 같다고 보는 블로그가 있고 개념이 비슷한데 엄연히 다르다는 블로그도 있고 비동기와 논블록만 다르다는 글도 있고... 일단 내가 맞다고 생각하는 것들로 써본다... 편의상 I/O는 생략한다. Blocking & Synchronous 공통점은 request 후 대기한다는 것 차이점은 제어권이 누구에게 있느냐. Blocking은 request를 하게 되면(예를 들면 File I/O) Kernel에 요청을 하고 제어권을.. 0. 이론 2023. 1. 10. TCP 송/수신 원리 Client에서 요청을 받으면 데이터를 파일 시스템을 통하여 MemoryBuffer로 읽어옴 이때 메모리 버퍼 크기는 개발자가 정할 수 있다. Memory Buffer에 담긴 데이터를 TCP Buffer로 복사한다. (Buffered I/O) Memory Buffer는 보통 64KB이다. (Window Size 개념이 있는데 송신 측도 관련 있는진 모르겠다.) TCP Buffer에 담긴 데이터를 Segment화한다.(더 잘게 쪼갠다) 이때 데이터 순서를 의미하는 id번호를 부여한다. = Packet L2로 내려가게 되면서 Frame화 된다. Frame을 전송하게 되면 같은 프레임으로 온다는 보장은 없다. 택배도 판매점 - 서울 전달하는 택배기사님이 있고, 서울-부산, 부산-구매자 집으로 전달하는 택배기사.. 0. 이론 2023. 1. 8. [JS] webserver 최대 크기 문제 해결(feat. dropzone) 개인 ftp에 존재하는 파일을 웹으로 업&다운로드 하기위해 dropzone을 사용했다. dropzone의 장점인 파일을 drag&drop하는 기능보다는 파일을 web에 나눠 저장하는 기능때문에 사용한다. - 아래는 완전한 정보는 아니므로 참고만 하자 예를 들어 파일을 전송받을 때 http의 최대 전송 패킷(데이터 부분) 크기는 1500byte정도 되므로 데이터를 받을 때마다 임시폴더에 저장을 하게된다. 나의 개인 ftp서버는 라즈베리에서 진행하게 되는데 임시저장폴더인 /tmp는 10MB 밖에 되지 않는다. 그러므로 10MB 이상의 파일은 데이터를 받다가 멈춰버린다. (nginx 최대 전송 크기 문제와는 별개다. Bad Gate - Too Large에러를 본다면 nginx 파일 전송 최대 크기 변경을 검색.. 프로그래밍/NodeJS 2022. 12. 18. [청년내일채움공제] 만기신청(후기) 청년내일채움공제 2년 만기하여 만기 신청을 한다. 2020-11-05부터 시작하여 2022-11-04까지 진행하였고 미납 등은 하지 않았다. 군대와 같이 이등병~상병까진 아무 생각 없었는데 병장 시기쯤 되니 가슴이 조여 오고 시간이 안 가더라... https://www.sbcplan.or.kr 에 접속을 하고 로그인은 당연히 되어있어야 한다. 1. 먼저 [마이페이지] - [계약정보]에 접속하여 본인 납부금, 취업지원금, 기업 기여금이 모두 적립되어있는지 확인한다. 2. [마이페이지] - [변경, 해지 및 만기]를 클릭한다. 3. 해당 청약번호에 [선택]을 클릭하고 [만기금 신청]을 클릭한다. 4. 수령방법을 선택한다. 일시 수령 : 만기금 일시수령 미수령 : 청년내일채움공제 만기 후, 내일채움공제로 연계.. 기타 2022. 12. 15. [Python] 문장(String)에서 리스트 단어 찾기 find 함수로도 찾을수 있지만 뭐... 어쨋건... 리스트로 단어들을 나열하고 임의의 문자열에 포함된 리스트들의 단어들을 출력하는 방법이다. my_find = ['hello', 'hi', 'sorry', 'my', 'mine', 'a', 'b', 'c', 'd', 'e'] my_str = "hello my friend" res = list(v for v in my_find if(v in my_str)) print(res) 리스트로 단어를 나열하고 임의의 문자열에 하나이상 포함되어 있나 출력하는 방법이다. my_find = ['a', 'b', 'c', 'd', 'e'] my_str = "hello" res = any(v for v in my_find if(v in my_str)) print(res) # .. 프로그래밍/Python 2022. 12. 8. [Python] 딕셔너리 리스트 특정 속성이 최대값/최소값 불러오기 딕셔너리(JSON)을 리스트로 받아올 때 리스트 중 딕셔너리의 임의 속성값이 가장 큰 것을 가져오고 싶을 때가 있다. index는 첫번째, 두번째 등 순번을 매기는 속성, value는 실제 값이라고 가정을 하고 value가 최대값/최소값인 딕셔너리를 뽑아오는 방법이다. temp =[{'index':99,'value':1},{'index':98,'value':2},{'index':97, 'value':3}] res = max(temp, key=lambda v: v['value']) print(res) value가 가장 높은 {index:97, value:3} 딕셔너리를 가져온다. 프로그래밍/Python 2022. 12. 8. [Python] Teachable Machine 이미지 프로젝트(Tensorflow Lite) 이 글은 Teachable Machine에서 이미지 분류를 하고 Tensorflow Lite로 모델을 실행하는 방법이다. 환경은 Raspberry Pi 3B Buster(앞으로의 프로젝트는 Buster를 선호한다) Python3.7 1. TensorFlow Lite 설치 아래의 사이트에서 본인의 os에 맞는 버전을 설치한다. 라즈베리 buster라면 보통 arm32/python3.7이다. https://www.tensorflow.org/lite/guide/python#install_tensorflow_lite_for_python 2. 예제 파일&모델 다운로드 git clone https://github.com/tensorflow/examples.git --depth 1 cd lite/examples/so.. 프로그래밍/Python 2022. 12. 7. nodejs&nginx 연동하기 처음에는 파이썬 flask 사용하려다 nodejs로 갈아탐 ... nodejs만 사용하면 오류가 존재한다고 nginx를 거쳐서 들어오는 것을 추천한다고 한다. 사실 개인적으로 사용할 것이라 굳이 nginx를 사용하지 않아도 되지만... 익숙해질겸 사용해본다. 환경은 라즈베리파이3 buster이다. 1. 필요 패키지 설치 1-1. nginx 설치 sudo apt-get install nginx 1-2. nodejs 설치 sudo apt-get install nodejs node -v로 설치 확인 1-3. npm 설치 nodejs를 설치하면 npm도 같이설치된다길래 그런가보다 했는데 설치가 안됨. 따로 설치 sudo apt-get install npm 1-4. express 설치 참고로 나의 경로는 /hom.. 프로그래밍/NodeJS 2022. 12. 4. [라즈베리파이] 유저 추가하기 게스트용 ftp 접속을 위한 유저를 추가하려 한다. sudo 권한은 추가하지 않을 거지만 방법은 일단 추가한다. [유저 추가] sudo adduser -m guest1 -m 옵션은 guest1의 홈 디렉터리를 만든다. ftp root를 /my_disk에 설정해서 홈 디렉터리가 필요없을 줄 알았는데 필요한 것 같다 홈디렉토리가 없으면 filezilla에서 접속이 안된다. 혹시나 -m 명령어를 사용하지 않았다면 소유권을 변경하자. # sudo chown [호스트].[계정] /home/[계정] sudo chown park.guest1 /home/guest1 [비밀번호 추가] #sudo passwd [계정이름] sudo passwd guest1 [sudo 권한 추가] 먼저 편집기로 /etc/sudoers를 연다.. 프로그래밍/Raspberry PI 2022. 12. 4. [라즈베리파이] ftp 서버 설정하기 1. 먼저 apt 업데이트 & 패키지 업그레이드 sudo apt-get update sudo apt-get upgrade 2. vsftpd 설치 sudo apt-get install vsftpd 3. vsftpd 설정 sudo vim /etc/vsftpd.conf 설치시 생성된 파일에 주석으로 간단한 설명들이 적혀있다. 나의 경우에는 아래의 옵션을 추가 local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list allow_writeable_chroot utf8_filesystem=YES local_root=/my_disk .. 프로그래밍/Raspberry PI 2022. 12. 4. [라즈베리파이] 외장 하드디스크 마운트하기 1. 외장 하드디스크검색 sudo blkid 나의 경우 /dev/sda1에 잡혀있고 포맷형식은 ext4이다. sda1이란 디스크 이름으로 나와 다를 수 있다. 각자의 디스크 이름을 기억해둔다. 리눅스계열의 경우 ext4로 포맷하는 것을 추천한다. UUID는 자동 마운트 설정할 때 필요하니 기억해둘 것 2. 외장 하드디스크 마운트 sudo mkdir /my_disk sudo mount /dev/sda1 /my_disk 마운트한다 디스크이름을 ~경로에. ls명령어로 확인하면 이전에 있던 파일들이 그대로 존재한다. 3. 자동 마운트 라즈베리를 종료하면 외장하드디스크도 언마운트된다. 다시 부팅을 하면 다시 마운트해줘야하는데 귀찮으니 자동 마운트 설정을 한다. sudo vim /etc/fstab UUID=[디스크.. 프로그래밍/Raspberry PI 2022. 11. 30. [라즈베리파이] 미러링&미러사이트 변경 라즈베리를 처음 셋팅하면 제일 처음에 해야할 것은 미러사이트 교체이다. install이 안되거나 너무 느리거나 할 때가 있는데 대한민국 주소의 사이트로 변경해주면 빠르다. 나의 경우는 카이스트 미러사이트를 사용한다. 먼저 자신이 사용하는 편집기를 이용하여 sources.list를 open sudo vi /etc/apt/sources.list 그 후 지정되어있는 주소를 지우고 (나의 경우는 주석) 본인이 원하는 주소로 입력 #deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi deb http://ftp.kaist.ac.kr/raspbian/raspbian/ buster main contrib non-free rpi 모.. 프로그래밍/Raspberry PI 2022. 11. 25. 이전 1 ··· 7 8 9 10 11 12 13 ··· 34 다음 반응형