-
[Network] TLS(Transport Layer Security)
TLS(Transport Layer Security) 인터넷에서의 정보를 암호화해서 송수신하는 프로토콜로 넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Sockets Layer)에 기반한 기술이다. 표준에 명시된 정식 명칭은 TLS지만 아직도 SSL 이라는 용어가 많이 사용되고 있다. 인터넷을 사용한 통신에서 보안을 확보하려면 두 통신 당사자가 서로가 신뢰할 수 있는 자임을 확인할 수 있어야 하며, 서로간의 통신 내용이 제3자에 의해 도청되는 것을 방지해야 한다. 따라서 서로 자신을 신뢰할 수 있음을 알리기 위해 전자 서명이 포함된 인증서를 사용하며, 도청을 방지하기 위해 통신 내용을 암호화한다. 이러한... Read More
-
[Network] SSH 프로토콜
쉘 (Shell) 쉘이란 사용자의 명령을 커널(Kernel)에 전달하고, 그 처리 결과를 다시 사용자에게 알려주는 프로그램(= 사용자와 운영체제간의 인터페이스 역할을 하는 소프트웨어)을 뜻한다. 쉘은 커널을 마치 껍질처럼 감싸고 있어, 사용자는 이 껍질을 통해야만 커널과 통신할 수 있다 하여 이런 이름이 붙었다. SSH(Secure Shell) SSH는 네트워크 상 다른 컴퓨터의 쉘을 사용할 수 있게 해 주는 프로그램 혹은 그 프로토콜을 의미한다. SSH를 사용하면 원격에서 네트워크 상의 컴퓨터에 접속할 수 있다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정... Read More
-
[Network] HTTP/HTTPS
HTTP 파이퍼텍스트 트랜스퍼 프로토콜 서로 다른 시스템들 사이에서 통신을 주고 받게 하는 가장 기본적인 프로토콜 서버에서 브라우저로 전송하는 데이터가 암호화 되지 않음 HTTPS 파이퍼텍스트 트랜스퍼 프로토콜 시큐어 HTTPS의 TLS(보안 소켓 계층) 사용 TLS: 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 민감한 정보를 주고받을 때 해당 정보가 도난당하는 것을 막아줌. http 메시지 바디를 암호화함. 헤더는 암호화 하지 않음 왜 HTTPS? 보안성 SEO 검색엔진 최적화 구글은 HTTPS 웹사이트... Read More
-
[Network] 파일 전송 프로토콜 FTP(File Transfer Protocol)
FTP(File Transfer Protocol) FTP는 애플리케이션 계층의 프로토콜이며 TCP/IP 위에서 실행된다. (TCP/IP를 기반으로 동작한다는 것은… ) 클라이언트-서버 모델이다. 보통은 FTP 클라이언트에 의해 시작되고 FTP 서버가 응답한다. 클라이언트와 서버 간에 인증된 연결이 설정되면 연결된 두 컴퓨터 간에 파일과 폴더를 어느 방향으로든 전송할 수 있다. 시스템 관리자와 소프트웨어 개발자가 한 컴퓨터에서 다른 컴퓨터로 파일과 폴더를 이동하기 위해 널리 사용했던 프로토콜이다. FTP 전송은 사이버 보안 조치가 개발된 시기보다 앞선 1970년대에 개발되었다. 보안 프로토콜로 설계되지 않았기 때문... Read More
-
[Network] 디피-헬먼 키 교환
디피-헬먼 키 교환(Diffie–Hellman key exchange)은 암호 키를 교환하는 하나의 방법으로, 두 사람이 암호화되지 않은 통신망을 통해 공통의 비밀 키를 공유할 수 있도록 한다. 앨리스와 밥(암호학이나 물리학에서 자주 사용되는 가상의 이름)이 공개된 통신망에서 디피-헬먼 키 교환을 하기 위해서는 다음과 같은 절차를 거친다. (from wiki) 안정성 p: 300자리 소수 g: 순환군 G의 차수가 소수이거나, 인수분해하기 어려운 큰 소수를 약수로 가져야한다. p와 (p-1)/2 가 모두 소수인 안전소수를 고르기도한다. p가 안전소수이면 G의 차수는 2또는 (p-1)/2 만을 약수로 가진... Read More
-
[OS] Shell이란? Shell은 어떻게 명령어를 해석하는가
CLI에 명령하면, Shell이 명령을 해석해서 Kernel 이 이해할 수 있는 방식으로 전달하고 Kernel은 하드웨어가 이해할 수 있는 방식으로 전달한다. 그리고 반대로 결과를 전달하여 사람에게 보여준다. Shell은 사람이 Kernel을 제어하기 어렵기 때문에 생겨났다. Shell의 명령어 해석 과정 입력 읽기: 사용자가 터미널에 명령어를 입력하면, 쉘은 이 입력을 읽는다. 이 과정에서 줄바꿈 문자나 엔터 키 입력을 명령어의 종료 신호로 간주한다. 토큰화(Tokenizing): 쉘은 입력된 문자열을 토큰으로 분리한다. 토큰은 공백, 탭, 줄바꿈과 같은 구분자를 사용하여 분리되... Read More
-
[OS] Race Condition
Race Condition 임계 구역 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 코드 영역을 임계구역(critical section)이라고 한다. 즉, 임계 구역 안에서 race condition이 발생하는 것이다. 경쟁 조건(Race Condition) race condition이란 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. Race의 뜻 그대로, 간단히 말하면 경쟁하는 상태, 즉 두 개의 스레드가 하나의 자원을 놓고 서... Read More
-
[Network] 네트워크 기초 정리
네트워크 프로토콜(규약) 프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다. 역사 네트워크 전쟁 중 정보 교환을 위해 미국에서 ARPAnet 을 만들었다. IMP(Interface Message Processor)에 host와 전화선을 연결, 아파넷은 NCP(Network Control Program)라는 전송 통신규약(프로토콜)을 사용하였으나, 1983년 TCP/IP가 이를 대체하며 지금의 인터넷으로 진화하게 되었다. OSI 7... Read More
-
[DRF] DRF의 View Classes - GenericAPIView, GenericViewSet, ViewSet
django class base로 api를 구현하려다보니, drf에서 제공하는 다양한 모듈이 보였다. View 클래스를 상속받아 클래스를 구현하는 것이 보통이었는데, 각각이 제공하는 기본 기능들을 살펴보고 적당한 것을 도입하려고 살펴봤다. 그림은 아래 문서를 참고했다. 상위 class로 갈수록 기본적으로 제공하는 기능은 적고 자유도가 높다. APIView에서 갈라지는 두 클래스를 먼저 살펴보자. GenericAPIView GenericAPIView에 추가된 메서드들은 아래와 같다. get_queryset get_object get_serializer get_serializer_context filter_q... Read More
-
[DRF] Django Rest Framework의 Serializer 사용법
Serializers 기본 시리얼라이저는 Model에 정의한 코드를 거의 그대로 반복한다. from rest_framework import serializers from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES class SnippetSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True) title = serializers.CharField(required=False, allow_blank=True, max_le... Read More