컴퓨터시스템기사 필기 10 — 네트워크 프로그래밍 구현 (소켓·TCP·UDP·스크립트)
3과목 [3-3] 네트워크 프로그래밍 구현 파트입니다.
TCP 소켓 시퀀스는 매 회차 출제되는 최빈출 주제예요.
TCP vs UDP ⭐⭐⭐
| 구분 | TCP | UDP |
| 연결 방식 | 연결 지향 (3-way handshake) | 비연결형 |
| 신뢰성 | 순서·재전송 보장 | 보장 안 함 |
| 속도 | 느림 | 빠름 |
| 헤더 | 복잡 (SYN/ACK/FIN 플래그) | 단순 (포트/길이/체크섬) |
| 용도 | HTTP, FTP, 이메일 | DNS, 스트리밍, VoIP |
⚠️ "UDP는 신뢰할 수 있는 전송을 보장한다" → 오답! (TCP의 특징)
⚠️ "UDP 헤더에 플래그 비트 존재" → 오답! (TCP 헤더에만 있음)
TCP 소켓 시퀀스 ⭐⭐⭐ (매 회차 출제!)
[서버]
socket() → bind() → listen() → accept() → read()/write() → close()
[클라이언트]
socket() → connect() → read()/write() → close()
각 함수 역할:
socket() — 소켓 생성
bind() — 주소·포트 결합 (서버만)
listen() — 연결 대기 상태 진입
accept() — 연결 수락, 새 소켓 반환
connect() — 서버에 연결 시도 (클라이언트만)
기출 문제
Q. TCP 서버 소켓 함수 호출 순서는?
A. socket() → bind() → listen() → accept()
UDP 소켓
연결 개념 없음 → listen()/accept()/connect() 없음
socket() 이후 바로 sendto()/recvfrom() 사용
상대 주소를 매번 지정해서 데이터그램 전송
I/O 멀티플렉싱 ⭐⭐
여러 소켓/파일 디스크립터를 동시에 감시하는 기법이에요.
select()
→ 여러 파일 디스크립터 동시 감시
→ 소켓 전용이 아닌 범용 함수
→ 타임아웃 설정 가능
⚠️ "소켓 전용 함수" → 오답!
poll()
→ select() 개선, 감시 개수 제한 없음
epoll()
→ 리눅스 커널 2.6부터 지원
→ 고성능, stateful 방식
→ 리눅스 전용 비표준 함수
→ 레벨 트리거/엣지 트리거 모두 지원
⚠️ "최대 2048개만 감시" → 오답! (개수 제한 없음)
기출 문제
Q. 리눅스 커널 2.6부터 지원되는 고성능 I/O 멀티플렉싱 함수는?
A. epoll()
프로세스/스레드
fork() vs exec()
fork()
→ 현재 프로세스를 복제해 자식 프로세스 생성
→ 부모: 자식 PID 반환 / 자식: 0 반환
→ COW 최적화 (쓰기 시점에 실제 복사)
exec()
→ 현재 프로세스 이미지를 새 프로그램으로 교체
→ 성공 시 원래 코드로 돌아오지 않음
→ 셸: fork() 후 자식에서 exec() 실행
pthread API ⭐⭐
pthread_create() — 스레드 생성
pthread_join() — 스레드 종료 대기 + 자원 회수
pthread_detach() — 스레드 분리 (자동 자원 회수)
pthread_cancel() — 스레드 취소
⚠️ "pthread_detach = 스레드 종료" → 오답! (분리가 정확)
⚠️ "pthread_detach = 스레드 감시" → 오답! (분리가 정확)
조건 변수:
pthread_cond_wait() 호출 시 → 뮤텍스 잠근 상태로 호출!
⚠️ "해제된 상태로 호출" → 오답!
배리어:
pthread는 pthread_barrier_t로 배리어 제공
⚠️ "pthread에서 배리어 제공 안 함" → 오답!
뮤텍스 데드락 방지:
pthread_mutex_trylock() — 잠금 시도, 실패 시 즉시 반환
pthread_mutex_timedlock() — 시간 제한 후 포기
PTHREAD_MUTEX_ERRORCHECK — 이중 잠금 시 에러 반환
⚠️ "pthread_mutex_lock() 사용" → 데드락 방지 아님!
IPC (프로세스 간 통신)
PIPE — 단방향, 부모-자식 관련 프로세스만 사용 가능
FIFO — 명명 파이프, 관련 없는 프로세스도 사용 가능
공유 메모리:
shmget() — 공유 메모리 생성 (IPC ID 반환)
shmat() — 공유 메모리 부착 (주소 공간에 연결)
shmdt() — 공유 메모리 분리
⚠️ "shmat으로 공유 메모리 생성" → 오답! (생성은 shmget)
메시지 큐:
msgsnd() — 메시지 전송
msgrcv() — 메시지 수신
IPC_NOWAIT — 큐 가득 찬 경우 즉시 에러 반환 (논블로킹)
프로세스 메모리 구조 ⭐⭐
텍스트(Text) — 실행 코드
데이터(Data) — 전역변수·정적변수
힙(Heap) — 동적 할당 (malloc/calloc/realloc)
스택(Stack) — 리턴 주소, 로컬 변수
⚠️ "리턴 주소/로컬 변수 = 힙" → 오답! (스택)
⚠️ "동적 할당 공간 = 스택" → 오답! (힙)
OSI 7계층 / TCP-IP ⭐
OSI 3계층(네트워크) 프로토콜 = IP
⚠️ FTP/TELNET = 7계층(응용계층), IP 아님
ARP — IP 주소로 MAC 주소 알아내는 프로토콜
TCP_NODELAY — 네이글 알고리즘 해제
→ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, ...)
스크립트 언어
Python — 범용 스크립트, AI/데이터 분야
Shell Script — 리눅스 자동화, bash 기반
JavaScript — 웹 스크립트, Node.js로 서버도 가능
Perl, Ruby — 텍스트 처리, 웹 개발
💡 실무에서는?
epoll은 대규모 네트워크 서버(수만 개 동시 접속)에서 핵심이에요. 실제 보안 솔루션에서 이벤트 처리에 epoll을 쓰고, 스레드 풀로 분산 처리하는 구조가 일반적이에요. TCP_NODELAY는 실시간 패킷 분석 도구에서 지연 최소화를 위해 필수로 설정해요.
핵심 정리
✅ TCP 서버: socket→bind→listen→accept
✅ 클라이언트: socket→connect
✅ UDP = 비연결형, 신뢰성 보장 안 함
✅ "UDP=신뢰성보장" → 오답!
✅ select() = 범용 (소켓 전용 아님!)
✅ epoll = 커널2.6부터, 개수제한없음, 리눅스전용
✅ pthread_detach = 분리 (종료/감시 아님!)
✅ 조건변수 = 뮤텍스 잠근 상태로 호출
✅ shmget=생성 / shmat=부착 (순서 중요!)
✅ 힙=동적할당 / 스택=리턴주소·로컬변수
✅ OSI 3계층=IP / ARP=IP→MAC 변환
다음 편에서는 디지털 논리회로 — 카르노맵·플립플롭으로 이어갑니다!
반응형
'자격증 정복 > 컴퓨터시스템기사' 카테고리의 다른 글
| 컴퓨터시스템기사 필기 09 — 프로그래밍 언어 활용 (C언어·객체지향·BNF) (0) | 2026.08.14 |
|---|---|
| 컴퓨터시스템기사 필기 08 — 자료구조 활용 (스택·큐·트리·정렬·해싱) (0) | 2026.08.14 |
| 컴퓨터시스템기사 필기 07 — 컴퓨터 구조 응용 (병렬처리·Flynn분류·클라우드컴퓨팅) (0) | 2026.08.12 |
| 컴퓨터시스템기사 필기 06 — 컴퓨터 기억 및 입출력장치 (캐시·DMA·인터럽트·채널) (0) | 2026.08.11 |
| 컴퓨터시스템기사 필기 05 — 컴퓨터 프로세서 및 명령어 (레지스터·ALU·파이프라인·Flynn분류) (0) | 2026.08.10 |