본문 바로가기

분류 전체보기

[effective STL] 항목 10 : 할당자(allocator)의 일반적인 사항과 제약 사항 정리- 할당자를 템플릿으로 만든다. 템플릿 매개 변수에는 메모리를 할당하고자 하는 객체의 타입을 나타내는 T를 사용한다,- 포인터와 레퍼런스라는 typedef 타입을 제공하되, 항상 포인터는 T*, 레퍼런스는 T&- 할당자에는 객체별 상태를 절대로 주지 않는다. 일반적으로, 할당자는 비정적 데이터 맴버를 가질 수 없다.- 할당자의 allocate 멤버 함수에는 필요한 객체의 개수를 매개 변수로 넘긴다.(바이트 수가 아님) 이 함수는 T* 포인터(포인터라는 typedef 타입을 통해) 반환(비록 T 객체는 아직 생성되지 않았지만)한다.- 표준 컨테이너(연관 컨테이너)에서 필요로 하는 rebind라는 중첩 템플릿을 꼭 제공한다. 더보기
[서버] 홀펀칭 서론P2P에서 Peer들 간의 통신을 하기 위해서 서로의 IP, Port에 패킷을 전송하면 된다.But! 우리는 방화벽의 NAT(Network Address Translation)을 거치게 된다.NAT안에서는 통신이 되지만 서로 다른 NAT에서는 그 안에만 존재하는 가상 IP기 때문에 당연히 통신이 되지 않는다. NAT의 종류도 여러가지다.Full Cone NAT, Restricted Cone NAT, Port Restricted Con NAT, Symmetric NAT 홀펀칭1. 사설(Private) IP로 패킷을 전송해본다.2. 안되면 공인(Public) IP로 패킷을 전송해본다.3. 안되면 Relay Server로 패킷을 전송해 전송을 맡긴다. (릴레이 서버는 패킷을 중계해주는 서버이다. 클라이언트.. 더보기
[서버] nagle 알고리즘 정의IP 네트워크에서 데이터는 몇 곂의 헤더로 캡슐화되어 목적지로 전해진다.이 헤더들의 용량도 제법 크고, 적은 데이터를 보내게 되면 배보다 배꼽이 커진다!! 보낼 수 있는 데이터를 바로 패킷으로 만들지 않고 가능한 모아서 더 큰 패킷으로만들어 한번에 보내면 효율적으로 전송할 수 있다. 네이글 알고리즘은 이것을 실제로 구현한 네트워크 전송 알고리즘이다. 동작원리네이글 알고리즘 수도코드 123456789101112#define MSS "maximum segment size"if there is new data to send if the window size >= MSS and available data is >= MSS send complete MSS segment now else if there is u.. 더보기
scaffold generator 사용해보기 Post 모델 생성1rails generate scaffold Post title content:textcs 해당 제너레이터로 모델을 만든다.title과 content 두 개의 속성으로 만들겠다는 의미다.여러 리소스 모듈이 생성되고 연관 템플릿이 형성된다. rake 명령으로 데이터베이스 테이블 생성1rake db:migratecs 생성 후 확인1rake db:migrate:statuscs db:rollback 명령 하면 마이그레이션을 취소할 수 있다. sqlite 들어가보기1bin dbcs 간단히 확인도 함 해보고.. 결과이렇게 간단히 포스트가 가능한 웹페이지가 만들어지다니............................................... 더보기
Sqlite cheat sheet 더보기
[서버] UDP 패킷 손실에 대하여 참고http://stackoverflow.com/questions/10355626/udp-packet-size-and-packet-losses 서론패킷 손실이 언제 일어나는지에 대해 알아보았다.패킷이 손실되는 이유는 대부분 검색 결과에선 송신측에서는패킷을 보내기만 하는데 수신측 버퍼가 해당 패킷을 받을 준비가 되지 않았을 때라고 한다. 큰 사이즈 패킷을 UDP로 보낼 때 문제점TCP는 해당 패킷을 전송할때 스트림 형태로 해당 패킷에시퀀스를 붙여 보내 오지 않은 패킷은 재요청하고 패킷을 조립한다. 하지만 UDP는 이러한 동작이 없다,그리고 이더넷단에서 MTU가 있기때문에 63K의 UDP 패킷을 보내도1500byte의 사이즈로 47+ 개 정도로 분할되어 전송이 된다.그렇기 때문에 해당 조각 중에 하나라도 받.. 더보기
[서버] TTL Time to live컴퓨터나 네트워크에서 데이터의 유효 기간을 나타내기 위한 방법이다.TTL은 계수기, 타임스탬프 형태로 데이터에 포함된다. 정해진 유효기간이 지나면 데이터는 폐기된다.컴퓨터 네트워크에서 TTL은 패킷의 무한 순환을 방지하는 역할을 한다.어플리케이션에서 TTL은 캐시의 성능이나 프라이버시 수준을 향상시키는 데에 사용되기도 한다. mac terminal에서 ping localhost IP 패킷IP에서 TTL은 8비트 크기의 필드다. IPv4 헤더에서 TTL은 20 옥텟 중 8번째 옥텟.IPv6 헤더에서 40 옥텟 중 8번째 옥텟이다. TTL의 최대값은 단일 옥텟의 최대값에 해당하는 255이다.권장되는 초기 값은 64. TTL 값은 IP 데이터그램이 인터넷 시스템 내에 존재할 수 있는 시간.. 더보기
TCP Max Packet 서론프로토콜에서 데이터 단위를 PDU(Protocol Data Unit)라 하는데계층마다 단위는 다르게 부른다. 물리계층 - 비트데이터계층 - 프레임네트워크계층 - 패킷, 데이터그램전송계층 - 세그먼트 패킷의 크기란?TCP segment의 크기를 의미한다. MTU?MTU는 Maximum Transmission Unit의 약자다. 하나의 프레임이나 패킷이한번에 전송 가능한 데이터의 크기를 말한다. 일반적으로 이더넷을 사용할 때 MTU는 1500바이트이다.TCP, IP나 어플리케이션에서 가능한 데이터를 의미한다.이더넷의 해더와 트레일러는 제외한다. 1500바이트는 보통 20바이트씩 각 IP, TCP 헤더를 제외하면 1460바이트다. RFC1323에 정의된 Timestamp 옵션이 사용하면TCP 헤더는 12바.. 더보기