개발자기본지식 20

FTP, TFTP, SFTP, SMTP 프로토콜

블로그 프로젝트에서 메일 전송로직을 작성할 때 메일 전송은 SMTP 프로토콜을 사용한다고 했다. 최근에 aws 강의를 보다가 파일 전송할 때는 SFTP 프로토콜을 사용한다고 배웠다. 비슷한 프로토콜들의 이름이 헷갈렸기 때문에 정리를 해봤다. 1. FTP (File Transfer Protocol) 포트번호 21 / TCP 통신 기본적인 파일을 전달하기 위한 프로토콜이다. 인코딩이나 암호화 기능이 없기 때문에 보안적으로 봤을 때 안전한 편은 아니다. (통신하는 이들이 아닌 제 3자도 파일을 받아볼 수 있다.) 2. TFTP (Trivial File Transfer Protocol) 포트번호 69 / UDP 통신 다수의 클라이언트들에게 파일을 전송할 수 있는 프로토콜이다. 3. SFTP (Secure Fil..

인터럽트 (Interrupt)

CPU가 일을 하는데, 놀고 있으면 (주변 장치들이) 놀지마 하고 명령을 내릴 수 있음. 1 ~ 1000 출력해야 하는데 500 정도에 인터럽트 발생 ( 저 동네가서 숫자 50000 출력하고 와 ) 저 동네 가려면 현재 상태 : 300까지 출력 301부터 출력해야지 - 상태와 복귀 주소 저장 -> PCB 인터럽트 루틴으로 점프 -> 50000 출력 복귀주소를 통해 복귀해서 PCB에 저장된 상태 확인 -> 301부터 출력 인터럽트가 발생했다? 누간 내 프로세스 제어권을 뺏아갔는지 확인하는게 1번 진짜 다양한 이유가 있음 여기서 찾아야하니까 OS에서 로그를 확인해서 어떤 문제가 발생했는지 찾아야한다.

Base64를 사용하는 이유

보통 사진 같은 파일을 전송할 때 base64로 인코딩한다. base64가 뭘까? 인코딩과 디코딩이 가능한 암호화 기법이다. 통신은 기본적으로 바이트(8비트) 스트림이다. 8비트씩 끊어보내면 문자를 하나씩 보낼 수 있는데 이때 8비트 코드를 아스키 코드라고 한다. 아스키코드는 8비트 체계가 아니라 사실 7비트 체계이다. 영어, 숫자, 특수문자를 통신하려면 7비트만으로 가능하다. 128! 그 나머지 비트 하나는 패리티 비트이다. 오류를 찾기 위해 사용하는 비트이다. TCP/IP 통신은 신뢰성 있는 통신인데 오류가 있으면 안되기 때문에 마지막 코드 하나를 오류 검출 코드로 사용한다. 1이 짝수개면 0을 패리티 코드에 넣고 홀수개면 1을 넣어준다. 11110000 이면 1이 4개니까 0이 들어가는 게 맞다. ..

VSCode HTML 자동완성 만들기

기본적으로 제공되는 html 자동완성 코드들 이외에 수정할 필요 없이 본인에게 필요한 자동완성을 만들면 훨씬 편할 것이다. File -> Preferences -> User Sinppets를 클릭해준다. 사용하는 언어를 선택해준다. html의 시작 자동완성 코드를 수정할 것이기 때문에 html을 검색해 클릭해준다. 사용자 코드 조각을 추가하기 위한 방법이 주석으로 친절하게 설명되어 있다. 시키는 대로 중괄호 안에 입력을 해줄 것이다. "My html form" : { "prefix": "m_html", "body": [ "", "", "", "", "$2", "", "" ], "description": "html 자동완성 추가" } prefix는 코드를 불러올 명령어를 지정하는 것이고 불러오는 코드의 내..

개발자에게 필요한 컴퓨터 세팅

1. 폴더 만들기 개발자는 카테고리화를 잘 시키는 것이 필요하다. C드라이브에 본인의 폴더 하나를 생성한 후 하위 폴더 3개를 만들 것이다. HTML을 공부하기 위한 폴더로 html_lab폴더 하나를 만들어두었고 앞으로 내가 다운로드할 프로그램들은 downloads 파일에 옮겨놓을 것이고 프로그래머들이 필요한 도구들을 tools에 설치할 것이다. 이렇게 생성한 나의 폴더는 즐겨찾기에 고정해두고 사용하면 이동이 편리하다. 이때 주의할 점 한 가지가 있다. 폴더 이름에 한글 쓰지 말 것! 마찬가지로 내 PC 위에서 우클릭한 후 속성에 들어가 자신의 PC 이름을 확인해보고 만약 한글로 설정되어있다면 '이 PC의 이름 바꾸기' 버튼을 눌러 영어로 바꿔주어야 한다. 영어는 한 글자에 1바이트로 인식하는데 한글을 ..

#15강. 컴퓨터는 멍청이 ! 비동기란

동기와 비동기의 개념에 대해 알아보자. 동기 프로그래밍을 이해할 때 '동기'라는 단어에 대해 구분이 필요하다. 프로그래밍을 할 때 동기와 데이터 영역에서의 동기는 의미가 다르다. 데이터 영역에서의 동기는 데이터가 일치하는 것을 말한다. 휴대폰에 사진 1, 사진 2 두장의 사진이 있다. 내 클라우드에 사진1만 업로드되어있으면 동기화되지 않은 상태를 말한다. 동기화되지 않았다는 것은 데이터가 일치하지 않았다는 말이다. 프로그래밍을 할 때의 동기는 일의 순서가 있다는 말이다. * 예를 들어 학교 가기 알고리즘이 있다고 치자. ① 일어나기 ② 세수, 양치하기 ③ 아침밥먹기 ④ 스쿨버스 타기 이 알고리즘은 ②를 먼저 할 수 없고 ①번이 끝나야 ②를 할 수 있다. 이렇게 일의 순서가 존재하는 것이 동기이다. 반대로..

#14강. 클라우드란

A쇼핑몰은 컴퓨터 2대로 무리 없이 운영이 가능하다. 연말의 큰 행사인 블랙프라이데이에 A쇼핑몰로 손님이 폭증한다면 컴퓨터 2대로 운영하던 쇼핑몰의 서버가 터지게 된다. 이 손님들을 모두 수용하기 위해 컴퓨터 100대가 필요하다면 1년에 일주일을 위해 100대를 사야 하는 낭비가 발생하게 된다. 평소에 쓰지 않는 컴퓨터 98대는 어떻게 활용해야 할까? 이 쇼핑몰의 컴퓨터들은 보안까지 완벽한 세팅이 된 컴퓨터이기 때문에, 컴퓨터가 필요한 다른 사람들에게 빌려주기로 한 게 클라우드의 시작이다. 클라우드 서비스(Cloud Service) : 다양한 공급업체가 호스팅하고 인터넷을 통해 사용자에게 제공되는 인프라, 플랫폼 또는 소프트웨어 저렴하면 500만원에서 1억 이상까지도 비싸지는 서버를 구매하면 서버의 주변..

#12강. OSI 7계층

회사에 직급별로 사원, 대리, 과장, 사장이 있다고 하자. A회사에서 B회사로 문서를 전달하는 일이 있다고 한다면 A사장 : 기획 B사장 ∨ ∧ A과장 : 문서 생성 B과장 ∨ ∧ A대리 : 오탈자 확인 B대리 ∨ ∧ A사원 : 문서 전달 >> B사원 : 문서 수신 문서를 확인하는 과정은 이러할 것이다. 이렇게 직급이 존재하고 단계별로 일을 처리하면 명백한 책임 분할이 가능하고 오류가 생겼을 때 바로바로 확인이 가능하다. 이와 같은 이유로 통신을 위해 OSI 7 계층이 존재한다. A컴퓨터가 B컴퓨터와 통신하기 위해 물리적인 선으로 연결되어 있다면 속도가 매우 빠를 것이다. A뿐만 아니라 C, D 등등 B와 통신하기 위해 많은 컴퓨터가 물리적인 선을 계속해서 연결한다면 비용이 많이 들지만 다 따로 개인적인..

#11강. Stateful과 Stateless란

웹서버는 문서 공유에 목적이 있기 때문에 수동적이다. 능동적 응답이 필요가 없기 때문에 웹서버에서 클라이언트의 정보를 삭제한다. 클라이언트가 웹서버에게 한번 요청했다가 응답을 받고 메모리에서 삭제된 후 같은 클라이언트가 다시 재요청을 해도 웹서버는 처음 요청한 클라이언트로 인식하게 된다. 이러한 서버를 Stateless 서버라고 한다. 이것과 반대로 클라이언트의 상태를 모두 기억하고 있는 서버를 Stateful 서버라고 한다. 이 서버는 능동적인 응답이 가능하지만 메모리의 부하 때문에 느려지게 된다. Stateless : 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜 Stateful : 이전 트랜잭션의 컨텍스트에 따라 수행되며, 현재 트랜잭션이 이전 트랜잭션에서 ..

#10강. 난 수동적인 웹서버야

내가 html, 파일, 메일 등과 같은 자원(resource)의 '갑'인지 생각해보자. 길동의 집 마당에 석유가 나왔다고 해보자. 석유는 마을 사람들에게 나눌 필요가 없는 온전히 홍길동의 것이다. 길동은 석유를 마을 사람들에게 나눌 의무는 없지만 아량을 베풀어 나누어 줄 수는 있다. 이 상황에서 길동은 갑이된다. 길동이 석유를 나누기 위해 마을에 위 사진과 같은 표지판을 만들었다. 첫째, 오전 9시부터 오후 18시까지만 사용이 가능하다. 둘째, 하루에 1L만 가지고 갈 수 있다. 셋째, 꺽정이는 사용이 불가능하다. 마을 사람들과 협의하지 않고, 동의를 구할 필요 없이 일방적으로 자원을 공유하는 방법을 인터페이스라고 한다. 인터페이스 : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경..