기타: 123개의 글
참조문서 : https://stackoverflow.com/questions/12296910/so-jsonp-or-cors 해당 참조문서는 12년도 글이라서 최신 브라우저일 경우 CORS를, 아니라면 JSONP를 사용하라고 권장하고 있지만, 이제는 대부분 CORS를 지원한다. ※ 브라우저 호환성표 CORS는 웹 표준 CORS는 크로스도메인을 해결하는 웹 표준이고, 보안상 권장되고 있다. JSONP는 script injection으로, GET밖에 지원안한다. CORS는 이와 대비되게 다양한 메소드를 허용하고 있다. 또한 JSONP는 http에서 https는 호출가능하지만, https에서 http는 호출이 불가능하다. This request has been blocked; the content must be..
참조문서 : https://blog.seotory.com/post/2016/04/understand-jsonp JSONP는 json with padding의 약자이다. 태그는 SOP 정책에 속하지 않는다는 점을 이용해, 서로 다른 도메인간의 javascript 호출을 위하여 jsonp가 사용되었다. 1. 원리 API서버에 데이터를 요청할 페이지에서 서버의 데이터를 받아 처리할 콜백 함수를 준비한다. 그 후에 script 태그를 생성하고 API서버에 request한다. 데이터 요청을 받은 서버에서는 콜백 함수를 실행하는 스크립트를 출력한다. 이 때 callback 함수의 인자에는 요청받은 데이터(기존 JSON)가 들어간다. 즉, 기존에 서버에서 {"key1" : "value1", "key2" : "valu..
GNU MAKE 참조문서: http://wiki.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html make는 파일 간의 종속관계를 파악하여 Makefile(기술파일)에 적힌 대로 컴파일러에 명령하여 SHELL명령이 순차적으로 실행 1. make의 장점 단순 반복 작업을 자동화 해준다(일일이 gcc명령어를 안쳐도 됨) 프로그램의 종속 구조를 빠르게 파악 2. makefile 구성 목적파일(Target) : 명령어가 수행되어 나온 결과를 저장할 파일 의존성(Dependency) : 목적파일을 만들기 위해 필요한 재료 명령어(Command) : 실행 되어야 할 명령어들 매크로(macro) : 중복되는 이름들을 특정 단어로 치환(C의 #define)으로 코드를 단순화 3. ma..
1. 소켓의 옵션 아래는 프로토콜 레벨과 옵션 이름들이다. 1-1. SOL_SOCKET : 일반적인 옵션 SO_SNDBUF : 송신버퍼 크기 설정 SO_RCVBUF : 수신버퍼 크기 설정 SO_REUSEADDR : 지역 주소(IP,Port) 재사용여부 SO_KEEPALIVE : 주기적으로 연결 여부 확인 SO_BROADCAST : 브로드캐스팅 허용여부 SO_DONTROUTE : 라우팅 테이블 참조과정 생략여부 SO_OOBINLINE SO_ERROR SO_TYPE : 소켓의 타입(변경 불가) 1-2. IPPROTO_IP : IP 패킷 관련 IP_TOS : Type of Service 변경 IP_TTL : Time-To-Live 변경 IP_MULTICAST_TTL : 멀티캐스트 패킷의 TTL 변경 IP_MU..
1. hostent 구조체 struct hostent { char *h_name; //공식 도메인 이름 char **h_aliases; //공식 이외 도메인 이름들 int h_addrtype; //주소정보 체계(IPv4: AF_INET, IPv6: AF_INET6) int h_length; //IP주소의 크기를 담는다. (IPv4는 4) char **h_addr_list; //도메인 이름에 대한 IP주소가 정수 형태로 반환될 때 이 멤버 변수를 이용 } * 예제 2. 도메인 관련 API #include 아래 함수들을 호출하면 소켓 라이브러리가 DNS서버에 조회하여 IP주소나 도메인명을 찾는 기능을 제공한다. 이와같은 정보를 hostent 구조체에 담아서 반환해주는 것이다. 개발자가 IP주소를 알아내기위해..
1. Half-close란? 1-1. 일방적인 close()의 문제점 A호스트와 B호스트가 서로 TCP통신하고 있다. 그러나 A호스트가 일방적으로 close()로 연결을 종료하면 B호스트는 A호스트로 데이터를 보낼게 있어도 보낼 수 없다. 따라서 일방적으로 송수신 스트림을 끊어버리는 건 문제가 있으므로, 하나의 스트림(주로 송신을 닫고, 수신을 열어둠)만 닫는 것을 Half-close 기법이라고 한다. 1-2. Half-close가 필요한 이유 서버는 단순히 데이터를 연속해서 전송하면 되지만, 클라이언트는 언제까지 데이터를 수신해야 하는지 알 수 없다. 주기적으로 read()함수를 호출하다가는 블로킹(호출된함수가 반환되지 않음) 상태에 빠질 수도 있다. 그러므로, 데이터전송이 끝났음을 알리는 EOF를 날..
TCP소켓에 이어서 쓴다 1. UDP소켓이란? UDP소켓은 비연결지향형 소켓이다. TCP에 있는 흐름제어가 없다. 특징으로는 전송순서에 상관없이 가장 빠른 전송,경로를 지향한다. 데이터 손실의 우려가 있고 한번에 전송할 수 있는 데이터의 크기가 제한된다. 데이터의 경계가 존재한다. TCP소켓과 반대라고 생각하면 쉽다. 데이터의 경계가 존재한다는 건, 3번 write()했으면 3번 read()를 해서 수신해야한다는 것이다. 이러한 특징때문에 UDP는 주로 고속의 데이터 전송이나 데이터가 조금 손실되도 상관없는 곳에 쓰인다. 대표적인 예가 동영상 스트리밍을 들 수 있겠다. 중학교 때 스타좀 (많이)해봤는데.. 스타크1을 한사람이면 특히 UDP란 글자가 익숙할거다. 게임플레이어간에 고속통신을 위하여 UDP로 ..
입력과 출력은 프로그램의 흐름이다. 입력을 키보드뿐만아니라 파일로도 할 수 있으며, 출력에도 모니터뿐만 아니라 파일역시 출력의 대상이다. 1. 표준 스트림 특정한 프로그래밍 언어 인터페이스뿐 아니라 유닉스 및 리눅스,윈도 등에서 컴퓨터 프로그램과 그 환경 사이에 미리 연결된 입출력 통로이다. 스트림은 단방향이다. 데이터 스트림은 순차적인 데이터 바이트들을 파일의 끝(EOF)까지 읽는다. 이런 방식으로, 프로그램은 쓸 데이터가 얼만큼 남았는지, 혹은 어떤 식으로 묶여있는지 알 필요 없이 필요한 데이터를 쓸 수 있었다. c언어에서 함수앞에 f가 붙은 함수들은 보통 인자로 FILE *stream을 받는다. 2. 표준입력 입력을 위한 스트림(Standard input, STDIN, 0) 변수는 FILE* std..
구조체의 메모리 저장방식을 알면 멤버변수들을 선언할때 좀 더 메모리를 효율적, 최적화되게 쓸 수 있다. 1. 구조체의 바이트 패딩 바이트패딩이란 멤버 변수를 메모리에서 CPU로 읽을 때 한번에 읽을 수 있도록, 컴파일러가 레지스터의 블록에 맞춰 바이트를 패딩해주는 최적화 작업이다. 만약 컴파일러가 패딩을 하지 않는다면(=최적화를 해주지 않는다면) CPU가 메모리에 다시 접근하면서 성능이 떨어질 것이다. struct x { char a; int b; char c; }; struct x data; 위 구조체를 sizeof(data) 로 찍어보면 6이 나올 것같지만 12가 나온다. 컴파일러는 구조체를 구성하는 멤버들을 가장 크기가 큰 멤버 자료형의 배수가 되도록 정렬한다. 이 정렬을 위해 의미없는 바이트(패딩..
TCP소켓 프로그래밍의 기초 0. 다루는 소켓에 대하여 일반적으로 사용되는 INET(TCP/IP 를 이용한 인터넷 주소 패밀리)와 TCP(데이터 연결지향형, 신뢰성이 높은 Stream) 에 대해서 다룬다. 리눅스(centos7) 환경을 기준으로 다룬다. 이번에도 느낀건데 이런식으로 넘버링하면서 공부하면 뇌에 효율적으로 저장되는거같다.. 1. 소켓이란? 직관적인 예로 전구는 소켓을 이용하여 전기를 공급받는다. 이처럼 컴퓨터도 네트워크에서 데이터를 얻기위해 소켓을 사용할 수 있다. 소켓 프로그램은 서버-클라이언트의 2개의 프로그램으로 쌍을 이룬다. 서버는 서비스를 제공하는 프로그램이고, 클라이언트는 서버에 서비스를 요청하는 프로그램이다. TCP 소켓이란? TCP소켓은 연결지향형이다. 중간에 데이터가 소멸되지..