일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- handling
- container
- ifdef
- 정보처리기사
- 백준
- Docker
- 필기
- sizeof()
- strlen()
- 10989
- 에라토스테네스의 체
- 자식
- fgets()
- endif
- Kafka
- struct
- 구조체
- fread()
- 카운팅 정렬
- fork
- Wait
- half-close
- pack
- scanf()
- fwrite()
- 1929
- signal
- EOF
- 2025
- DEBUG
- Today
- Total
목록전체 글 (33)
팥빵 먹으면서 코딩하는 블로그

도메인 이름(Domain Name)과 DNS 서버도메인 이름"영문"으로 표현되는 계층적 주소 체계 방식Human-readable addressIP주소를 대신해서 사용하는 서버의 주소 : www.google.com도메인 이름은 IP 주소로 변환이 된 이후, 서버에 접속이 가능함 -> 도메인이 있음에도 접속하려면 IP가 필수적으로 필요하므로.각 나라마다 존재하는 Network Information Center에서 관리한국은 KRNIC 담당Domain Name System(DNS)IP주소와 / 도메인 이름 사이에서 / 변환을 수행하는 시스템경북대 DNS 서버: 155.230.10.2DNS 서버도메인 이름을 IP 주소로 변환해주는 서버www.google.com > 해당 IP 주소로 변환DNS는 일종의 분산 데이..

일방적인 연결 종료의 문제점close() 함수의 기능소켓의 완전한 소멸을 의미소켓이 소멸되므로, 더이상의 입출력은 불가능상대방의 상태에 상관없이 일방적인 종료상대의 호스트의 데이터 송수신이 아직 완료되지 않은 상황이면, 문제 발생 가능성 증가half-close 기법일방적인 소켓 종료로 인해 발생되는 문제점 보완 소켓의 half-closeHalf-close입력 또는 출력 스트림 중 하나만 종료시키는 방법일반적을 half-close라고 하면, 출력 스트림만 종료하는 것을 의미한다.입력 스트림은 여전히 돌아가고 출력 스트림만 종료되므로, 전달할 데이터는 이미 소켓의 버퍼에 저장되어 있어서 연결이 끊겨도 flush() 되어서 전달이 된다.종료를 원한다는 것은, 더 이상 전송할 데이터가 존재하지 않는 상황따라서 ..

구조체 정렬이기종 시스템간 데이터 송수신구조체 정렬 방식구조체 내부에서 가장 큰 데이터 타입의 배수로 필드를 정렬이렇게 되면 메모리 낭비 및 네트워크 대역폭 손실을 초래한다.Zero padding: 0으로 채워진 데이터(낭비된 데이터)하지만 변수의 위치를 바꿈으로써 padding값을 줄일 수 있다.구조체 변수들의 가장 위에서부터 내려가며 변수의 maximum byte값을 적용한다.따라서 변수의 작은 값부터 큰 값까지 정렬하여 변수의 위치를 정하는 게 가장 효율적이다. 구조체 정렬 방법: #pragma packpack 지시자코드 상에서 pack 이후에 위치한 구조체의 정렬 방식을 지정한다.한마디로, 구조제의 바이트 정렬 값을 지정#pragma pack(push, 정렬 바이트수)정렬 바이트 수로 구조체를 정..

UDP 소켓의 특성과 동작원리UDP 소켓 데이터 송수신Flow control이 없음UDP 소켓은 SEQ, ACK과 같은 메세지를 전달하지않음단, 그러므로 데이터 전송이 빠름연결 설정과 연결 해제 과정이 없음단, (안전성보다) 성능이 우선시 될 때 UDP를 사용한다.송수신하는 데이터의 양은 작으면서 빈번한 전송이 필요한 경우 UDP가 훨씬 효율적TCP를 쓰든 UDP를 쓰든 IP는 반드시 거친다.패킷 전송에 있어 UDP와 IP의 역할 : 목적지를 찾기 위해서 IP를 거친다.UDP 소켓에서 port 번호 참조해서 최종 응용 프로그램에 전달한다.이건 TCP도 마찬가지UDP HeaderTCP와 달리 Source port와 Destination port번호밖에 없다. 이 두 가지를 가지고 응용 프로그램에 데이터를 ..

TCP 프로토콜 스택TCP/IP 프로토콜 스택인터넷 기반의 데이터 송수신을 목적으로 설계된 스택7계층으로 세분화 되며, 4계층으로 표현함 [ Application 계층 ] │ │[ TCP 계층 ] [ UDP 계층 ] └――――┬――――┘ [ IP 계층 ] │ [ LINK 계층 ] TCP/UDP 소켓의 프로토콜 스택 비교TCP 소켓의 스택 Flow -> sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);UDP 소켓의 스택 Flow -> so..
이 과정은 kafka가 정상적으로 동작하는지 테스트하는 용으로 수행되었다. 테스트는 아래와 같은 명령어 사용을 시작으로 한다.root로 root권한을 얻을 수 있고(사용하지 않아도 무방하다), kafka-0은 kafka의 이름이다.docker exec -it --user root kafka-0 /bin/bash # 1. 현재 실행 중인 컨테이너 중단 및 제거 docker-compose down # 2. 변경된 docker-compose.yml을 기반으로 새로 빌드 및 실행 docker-compose up --build -d topic 생성하기일단 메세지를 보낼 토픽을 만들어 보기로 했다.$ bash# cd /opt/kafka/bin$ bash# kafka-topics.sh --create --zookee..
이걸로 몇 시간을 배렸다... 그래도 해결은 했으니까.. 일단 처음에 vscode에 자바 프로젝트를 만들 때, java version을 25를 사용했다.(모든 일의 원흉)왜 그때는 25가 release된 지 오래됐다고 생각했는지 모르겠는데 gradle 8.13버전이 java 25를 호환하지 않는단 걸 간과하고 일을 저질러 버렸다... ㅋㅋ 그렇게 java 25버전으로 gradle 파일이 만들어지고.. 어ㅠ휴 일의 시작 : 문득 어제 코드를 컴파일하려고 했는데 빌드가 안된다. 오류를 보니 현재 gradle이 java 25를 찾을 수 없다는데 그렇다면 버전을 21로 낮추면 되는 일 아닌가? 그래서 jdk를 21로 변경하고 환경변수도 바꿔줬다. 그리고 다시 빌드를 시도했는데 또 안된다. 이번에도 gradle이..
의문) docker-compose up -d로 실행한 컨테이너는 어떻게 종료해야 할까컨테이너는 그냥 놔둬도 되지만, 불필요한 리소스 사용을 피하려면 종료하는 것이 좋다.현재 컨테이너 내에서 Kafka를 실행하고 있음을 감안 컨테이너를 꺼야 하는 이유불필요한 리소스 소모Kafka와 같은 서비스는 계속 실행되며 CPU, RAM을 사용한다.Docker 컨테이너가 백그라운드에서 실행 중이라 모니터링 없이 방치될 수도 있다.포트 충돌 가능성Kafka는 9092 포트를 사용한다.다음 번 실습할 때 이미 해당 포트가 사용 중이라 실행 오류가 발생할 가능성이 있다.Docker 용량 관리컨테이너가 계속 실행되면 로그 파일이 쌓이고 디스크 공간 차지. 실습 종료 후 컨테이너 정리하는 방법1) 컨테이너 정지 (일시 중지)d..