반응형
SMALL

컴퓨터 안에 프로그램이 여러개가 돌아간다.

컴퓨터가 한번에 하나씩만 처리할 수 잇는데 어떤걸 먼저 해야할지 줄을 세우는 방법

=> 프로세스 스케쥴링

 

크게 두가지 방식!

 

1) 먼저 시작한 애가 다 끝난 다음에 그 다음 동작을 함 => 비선점

2) 누가 먼저 하고 있어도 중간에 더급한 애가 있으면 지금 하던 애 멈추고 자리 뺏어서 그것부터 함 => 선점

 


 

프로세스 도착시간 실행시간
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

🚦 1. FCFS (First Come First Serve, 비선점형) -실행시간 합 - 도착시간 = 대기시간

먼저 온 친구부터 끝까지 놀이기구 타는 방식

P1(0->8) → P2(8->12) → P3(12->21) → P4(21->26)

 

  • P1: 0
  • P2: 8 - 1 = 7
  • P3: 12 - 2 = 10
  • P4: 21 - 3 = 18

📊 평균 대기시간: (0 + 7 + 10 + 18) / 4 = 8.75

 

프로세스 도착시간 실행시간
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

🚦 2. SJF (Shortest Job First, 비선점형)

도착한 친구 중에서 가장 빨리 탈 수 있는 애 먼저!

p1은 제일먼저 도착했으니까 어쩔 수 없는데, P2가 그다음에 가장빠르고, P3보다는 P4가 빠르다.

그래서 p1-> p2 -> p4 -> p3 순서대로 함.

 

    • P1: 0
    • P2: 8 - 1 = 7
    • P4: 12 - 3 = 9
    • P3: 17 - 2 = 15

📊 평균 대기시간: (0 + 7 + 9 + 15) / 4 = 7.75


프로세스 도착시간 실행시간
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

🚦 3. HRN (Highest Response Ratio Next, 비선점형)

매번 대기시간이 긴 친구에게 점수를 주고, 점수가 가장 높은 친구를 선택!

(단, 이 경우, 계산하는 시점이 여러개가 됨.) - 잘 안나올수도?

 

  • 시점 0: P1밖에 없음 → 실행 (0~8)
  • 시점 8: 도착한 친구 P2, P3, P4 있음
    • P2: (8-1 + 4)/4 = 11/4 = 2.75
    • P3: (8-2 + 9)/9 = 15/9 = 1.67
    • P4: (8-3 + 5)/5 = 10/5 = 2.0
      P2 선택 (2.75) → (8~12)
  • 시점 12: P3, P4
    • P3: (12-2 + 9)/9 = 19/9 = 2.11
    • P4: (12-3 + 5)/5 = 14/5 = 2.8
      P4 선택 → (12~17)
  • 마지막으로 P3 → (17~26)

 

  • P1: 0
  • P2: 8 - 1 = 7
  • P4: 12 - 3 = 9
  • P3: 17 - 2 = 15

📊 평균 대기시간: (0 + 7 + 9 + 15) / 4 = 7.75

※ HRN이랑 SJF랑 실행 순서 같을 수도 있어요!

 

 

프로세스 도착시간 실행시간
P1 0 8
P2 1 4
P3 2 9
P4 3 5

 

💨 4. SRT (Shortest Remaining Time, 선점형) - 평균 대기시간이 가장 짧음

남은 시간이 가장 짧은 친구가 항상 먼저! (도중에 뺏을 수 있음)

대기시간 = 종료 - 도착 - 실행시간

  • 0~1: P1
  • 1~5: P2 (4가 더 짧음, 뺏음)
  • 5~10: P4 (5가 짧음)
  • 10~18: P1 (남은 7)
  • 18~27: P3

⏰ 대기시간:

  • P1: 10 - 1 = 9
  • P2: 0
  • P4: 5 - 3 = 2
  • P3: 18 - 2 = 16
📊 평균 대기시간: (9 + 0 + 2 + 16) / 4 = 6.75

 

💨 5. RR (Round Robin, 선점형)

모든 친구가 순서대로 타는데, 시간 제한이 있다.
(타임퀀텀 4초)

  • 0~4: P1 (남은 4)
  • 4~8: P2 (끝남)
  • 8~12: P3 (남은 5)
  • 12~16: P4 (남은 1)
  • 16~20: P1 (끝남)
  • 20~21: P4 (끝남)
  • 21~26: P3 (끝남)

종료 시간:

  • P1: 20
  • P2: 8
  • P3: 26
  • P4: 21

⏰ 대기시간:

  • P1: (20 - 0 - 8) = 12
  • P2: (8 - 1 - 4) = 3
  • P3: (26 - 2 - 9) = 15
  • P4: (21 - 3 - 5) = 13

📊 평균 대기시간: (12 + 3 + 15 + 13) / 4 = 10.75

 

 

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

서브넷마스크  (0) 2025.07.13
화이트박스 테스트 / 블랙박스 테스트  (0) 2025.07.07
정렬 알고리즘  (1) 2025.07.07
페이지 교체 알고리즘  (0) 2025.07.05
결합도/응집도  (0) 2025.07.04
반응형
SMALL

192.18.0.253

 

 

IP는 크게 두부분으로 나뉘어져있다.

  • 앞부분은 ‘동네 이름’ 같은 거 → 네트워크 주소
  • 뒷부분은 ‘집 번호’ 같은 거 → 호스트 주소

 

이 두개를 192.18과 0.253 뭐 이런식으로 쪼개는게 아니라,

특정 기준에 따라 나뉘는데,

이 두개를 나누는 기준이 서브넷 마스크이다.


서브넷마스크는 32개의 0과 1로 된 숫자로 만들어져 있다.

여기서 1은 ‘네트워크 주소’ 영역, 0은 ‘호스트 주소’ 영역을 뜻한다.

 

예를 들어, 기본 서브넷마스크인 255.255.255.0은

 

| 255(11111111) | 255(11111111) | 255(11111111) | 0(00000000) |

| 네트워크 8비트 | 네트워크 8비트 | 네트워크 8비트 | 호스트 8비트 |

 

즉, 앞의 24비트(8*3)는 ‘네트워크 주소’이고, 마지막 8비트는 ‘호스트 주소’이다.

 

즉, 192.18.0 까지는 네트워크 주소이고, 253이 호스트주소이다.

 


서브넷 마스크는 1이면 네트워크 주소, 0이면 호스트 주소인건 맞는데,

서브넷 마스크가 꼭 저렇게 이쁘게 0이 안나올 수 있음.

 

ex) IP:192.168.1.130  + 서브넷마스크: 255.255.255.192

 

255    = 11111111  
255    = 11111111  
255    = 11111111  
192    = 11000000

 

그니까 마지막 192의 32비트 중 앞에 26비트가 1이라 네트워크, 뒤의 6비트가 0이라 호스트이다.

 

총 8자리라서

128  64  32  16  8  4  2  1

 

이렇게 두고 계산하는데, 이 중에 뒤에 6개 비트 빼고 다 네트워크임.

 

여기서 130이 정확히 어디까지가 네트워크이고, 어디까지가 호스트인지를 구분해보자.


 

  • 6개의 호스트 비트 → 2⁶ = 64개의 주소
  • 이 중 맨 앞 = 네트워크 주소,
    맨 끝 = 브로드캐스트 주소
    중간 62개 = 호스트 주소

호스트는 그래서 64개 단위로 끊어진다. -> 서브넷 1개의 크기가 64개임.

 

따라서 130은 이 서브넷 중 어디에 들어가있을텐데, 단위가 64잖아? 단위가 아래와 같음.

 

마지막 옥텟 = 130

64단위로 끊는다면,

  • 0 ~ 63
  • 64 ~ 127
  • 128 ~ 191 ← 130은 여기 속함!

즉 저 구간에 속한다~ 이거고

문제는 대부분

Q. 구간에 속하는게 맞냐? -> 속하는거 맞음 ㅇㅇ

Q. 네트워크주소, 브로드 캐스트 주소가 뭐냐? -> 아래 구한거

Q. 호스트 갯수가 몇개냐?(64개에서 네트워크 브로드캐스트 뺀 62개이다) 이런걸 푸는거다.

 

 

그러니까 64 단위로 나뉘고 130은 맨 마지막 저기에 속함.

그 시작점인 128을 네트워크 주소, 맨 마지막 191을 브로드 캐스트 주소라고 한다.

 

✅ 네트워크 주소 = 192.168.1.128 (맨 앞 주소)

✅ 브로드캐스트 주소 = 192.168.1.191 (맨 뒤 주소)

 

이걸 쉽게 구하는 방법은, AND 연산자를 쓰면 된다.

IP

192     = 11000000  
168     = 10101000  
1       = 00000001  
130     = 10000010

 

서브넷마스크

255     = 11111111  
255     = 11111111  
255     = 11111111  
192     = 11000000

 

이 중 마지막꺼 두개만 AND 연산

 

IP:       10000010  
MASK:     11000000  
AND 연산: 10000000 (= 128)

 

이러면 128이 네트워크인거고 그 구간에 호스트의 갯수인 64를 더한 뒤 -1 하면 그게 브로드캐스트 주소인거임.

 

✅ 네트워크 주소: 192.168.1.128

✅ 브로드캐스트 주소: 192.168.1.191

(191 = 128 + 64 - 1)

 

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

프로세스 스케줄링  (0) 2025.07.15
화이트박스 테스트 / 블랙박스 테스트  (0) 2025.07.07
정렬 알고리즘  (1) 2025.07.07
페이지 교체 알고리즘  (0) 2025.07.05
결합도/응집도  (0) 2025.07.04
반응형
SMALL

화이트박스(소스위주) 블랙박스(기능위주)

항목 화이트박스 테스트 블랙박스 테스트
시점 개발자 관점 사용자 관점
기준 코드 구조 기능 명세
테스트 대상 로직, 경로, 조건 등 기능, 입력/출력
장점 내부 로직 오류 발견 실제 사용자 환경과 유사
단점 전체 기능 테스트 어려움 내부 오류는 찾기 어려움

 


1. 화이트박스 테스트 (White-box Testing) - 기분조루

 

  • 코드 구조, 내부 로직을 이해한 상태에서 테스트
  • 즉, 개발자의 시각에서 프로그램 내부를 들여다보며 테스트
  • 흐름 제어, 조건문, 루프 등을 기준으로 테스트 케이스 설계

 

  • 모든 경로가 한 번 이상 실행되도록 테스트
  • 논리적 오류, 잘못된 분기, 루프 무한 반복 등을 발견

 

 

이름 설명 특징
기초 경로
( Basic Path Testing )
모든 논리 경로를 한 번 이상 실행 Flow Graph 사용, 복잡도 계산 가능
분기 커버리지
( Branch Coverage )
모든 분기(if, switch 등)를 참/거짓 검사 결정 포인트의 흐름을 모두 확인
조건 커버리지
( Condition Coverage )
모든 조건이 참/거짓 모두 되도록 테스트 조건문(if)의 각 분기를 검사
루프 테스트
( Loop Testing )
반복문을 0회, 1회, 여러 번 수행하며 테스트 반복문에서 무한 루프, 경계 오류 검출

2. 블랙박스 테스트 (Black-box Testing) -  동경상원의

  • 내부 구조를 보지 않고, 입력과 출력만으로 테스트
  • 사용자의 시각에서 기능이 잘 작동하는지 확인
  • 요구사항(명세서)대로 기능이 동작하는지 확인
  • 예외 처리, 경계값, 잘못된 입력 등 다양한 상황 테스트

 

 

이름 설명 특징
동등분할
( Equivalence Partitioning )
입력값을 유사한 그룹으로 나눠 대표값만 테스트 입력값을 그룹으로 나누어 테스트 효율 ↑
경계값 분석
( Boundary Value Analysis )
최대/최소값 경계선 근처 값 테스트 에러가 경계에서 자주 발생함
상태전이 테스트
( State Transition Testing )
상태 변화에 따라 동작을 테스트 상태 기반 시스템에 유용 (예: 로그인, ATM)
원인-결과 그래프
( Cause-Effect Graphing )
입력(원인) → 출력(결과)의 관계를 도식화 논리적인 조건 조합 분석에 적합
의사결정 테이블
( Decision Table Testing )
복잡한 조건의 조합을 표로 정리하여 테스트 조건이 많은 경우 체계적 테스트 가능

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

프로세스 스케줄링  (0) 2025.07.15
서브넷마스크  (0) 2025.07.13
정렬 알고리즘  (1) 2025.07.07
페이지 교체 알고리즘  (0) 2025.07.05
결합도/응집도  (0) 2025.07.04
반응형
SMALL

1. 자료구조

자료구조는 선형구조와 비선형구조가 있다.

선형구조는 스택, 큐, 덱, 연결리스트, 배열이 있고,

비선형구조는 트리와 그래프가 있음.

 

 

 

- 스택 (Stack) : BOX를 상상하면 된다. 입구 출구가 한곳이라 마지막에 넣은걸 가장먼저 뺀다.

- 큐(Queue) : 일방통행 도로를 상상하면 된다. 한쪽에 입구, 한쪽에 출구가 있어서 먼저 들어간 차가 먼저 나간다.

- 덱(Deque) : 앙방향 고속도로이다. 입구 출구가 양방향에 각각 있어서 들어갔다 나왔다 자유롭다.

 

스택, 큐, 덱

 

- 연결리스트 : 지하철 노선도. 한방향으로만 가기도 하고, 앞뒤로 이동할 수도 있기도 하고, 2호선처럼 마지막 노드가 다시 처음과 연결된 원형으로 생기기도 한다.

- 트리 : 계층적으로 있는 댓글, 대댓글 구조.

- 힙(Heap) : 우선순위가 높은 것부터 꺼내쓰기 위해 만들어진 트리구조. 가계도를 생각하면 쉽다.

할아버지가 가장 위, 그다음은 아빠, 그다음이 나 -> 이렇게 우선순위가 있고 순서대로 내려감.

완전 이진 트리(Complete Binary Tree) 라는 구조인데, 위쪽, 왼쪽부터 차곡차곡 채우는 형태이다.

상단의 부모가 하단의 자식보다 크다.

 

우선순위 큐 (Priority Queue) : 큐는 기본적으로 일방통행 고속도로라서 먼저 들어온 순서대로 처리된다.

근데, 우선순위 큐는 먼저 온 것이 아니라, "더 중요한 것"을 먼저 꺼내는 구조이다.

ex) 응급실에서 더 위급한 환자부터 치료함.

CPU 프로세스 스케줄링 (우선순위 높은 작업 먼저)




2. 시간복잡도(Time Complexity)

어떤 알고리즘이 얼마나 빨리 실행되는지를 나타내는 지표.

=> "입력 데이터의 크기(n)가 커질수록, 이 알고리즘은 얼마나 느려질까?"

 

 

ex) 반복문을 한다고 치자.

- 친구가 3명이면 3번 출력, 친구가 100명이면 100번 출력 → 이건 입력 수(n)에 비례하므로 O(n)

- n이 10이면 10 × 10 = 100번, n이 100이면 100 × 100 = 10,000번 → 이건 O(n²)

 

즉, ‘O’ 표기 (빅오 표기법, Big-O Notation) 이라는건데, "어느정도까지 걸릴 수 있다!"를 의미한다.

알고리즘은 빨라야 좋은건데, O 의 숫자는 반복횟수 등등을 따진다. 이건 숫자가 클수록 성능이 안좋다는 것.

 

  • 총 n × n = n²번 실행 → O(n²)
  • 배열을 절반씩 잘라가며 찾는 방식,비교 횟수는 대략 log₂(n)번 → O(log n)

 


3. 정렬 알고리즘

 

정렬(Sorting)은 데이터를 일정한 순서대로 나열하는 작업을 말하며, 오름차순 / 내림차순 등이 주로 사용된다.

알고리즘 비교방식 시간 복잡도(평균) 특징
선택 정렬 비교 기반 O(n²) 가장 작은 값을 선택해서 앞으로 보냄
버블 정렬 비교 기반 O(n²) 인접한 값끼리 비교해서 큰 값을 뒤로 보냄
삽입 정렬 비교 기반 O(n²) 앞에서부터 정렬된 상태로 삽입
퀵 정렬 분할 정복 O(n log n) 기준값(Pivot)을 정해서 분할
병합 정렬 분할 정복 O(n log n) 나눠서 정렬 후 병합
힙 정렬 트리 기반 O(n log n) 최대 힙 or 최소 힙을 활용

 

- 삽입정렬, 선택정렬, 버블정렬은 페이지 부재 수를 구할 줄 알아야함.

- 삽입, 선택, 버블은  평균과 최악 모두 시간 복잡도 O(n²)

- 이외에 퀵정렬, 병합정렬, 힙정렬 은 시간복잡도 계산 또는 단답형으로 뭘 설명하는건지 알 수 있어야함.

 

1. 삽입정렬 - 이미 정렬된거에 껴넣음

1회전) 1, 2번째 비교 후 정렬

2회전) 3번째 항목을 1번과 2번과 각각 비교한 뒤 끼워넣는다.

3회전) 4번째 항목을 1,2,3번과 각각 비교 후 껴넣는다.

...

 

2. 선택정렬 - 가장 작은걸 해당 위치로 보냄.

1회전) 1-2, 1-3,1-4, 1-5 비교해서 작은걸 1자리로 보냄.(딱 가장 작은 1개만 보내는것)

2회전) 2-3, 2-4, 2-5 비교해서 작은걸 2자리로 보냄.

3회전) 3-4, 3-5 비교해서 작은걸 3자리로 보냄

4회전) 4-5 비교해서 작은걸 보냄.

 

3. 버블정렬 - 버블 두개씩 비교 교체

1회전) 1-2, 2-3, 3-4, 4-5 훑어서 각각 작은순서대로 교체

2회전) 1-2, 2-3, 3-4 훑어서 교체

3회전) 1-2, 2-3 훑어서 교체

4회전) 1-2 훑어서 교체

 

4. 퀵정렬

기준값(Pivot)을 정하고, 작은 값은 왼쪽 / 큰 값은 오른쪽으로 나눔. (반 나누는건 아님. 기준값을 기준으로 하니까.)

트리가 아래로 가듯이 계속 반복한다.

평균 시간 복잡도 O(nlog₂n)이고, 최악 시간 복잡도 O(n²)

 

5. 병합정렬

데이터를 반을 나눈 뒤 또 절반을 쪼개고 또 절반을 쪼개고 해서 한개씩만 남으면

정렬 후 합치고 + 정렬 후 합치고 + 정렬 후 합치고...

분해했다가 재조립하는거.  O(n log n)

 

6. 힙정렬

힙은 완전 이진 트리 형태의 가계도 형태이다.

상단의 부모는  자식보다 값이 당연히 커야해서, 최댓값을 맨 위에 둔다.

여기서 포인트는 값이 추가되거나 삭제되었을 때 정렬되는 방식인데, 상위 값과 비교해서 바꾸는 식으로 진행한다.

 

"전이진트리" 나오면 힙정렬이다.

평균 및 최악 시간 복잡도 O(nlog₂n)

 

 ex) 

        연우(50)
       /       \
   소윤(40)   지민(20)
   /     \       /
수지(35) 하늘(25) 민호(10)

 

 

만약 여기서 연우(50)가 빠졌다. 그럼 어떻게 되냐면

 

        민호(10)         ← 임시 루트
       /       \
   수지(35)   소윤(40)
   /     \     
지민(20) 하늘(25)

 

일단  맨 밑에 있는 민호(10)랑 바꾼 뒤에 재구성을 해본다.

재구성은 어떻게 하냐면, 민호(10) - 소윤(40)이랑 비교 (소윤은 자식이 없으니까 패스)

 

        소윤(40)
       /       \
   수지(35)   민호(10)
   /     \     
지민(20) 하늘(25)

 

그럼 소윤(40)이 올라감.

그다음 또 최상단에 있는 소윤(40)을 빼본다.

 

        하늘(25)       ← 임시 루트
       /       \
   수지(35)   민호(10)
   /     
지민(20)

 

또 맨 아래에 있는 하늘(25)를 빼서 비교. 수지(35)와 비교한다.

 

        수지(35)
       /       \
   하늘(25)   민호(10)
   /     
지민(20)

 

이런식으로 하면 소윤(40)도 순서대로 빠진거임.

 

이런식으로 맨 아래꺼를 뽑아서 최상단 노드와 교체하는 식으로 하면 크기 순서대로 뽑을 수 있음.

 

[50, 40, 35, 25, 20, 10]

 

 

그럼 이렇게 뽑히는 것.

 

 

Q. 다음 중 시간 복잡도가 가장 좋은 정렬 알고리즘은?

=> 복잡도가 좋다 = 성능이 좋다. 이름부터가 빠른 [퀵 정렬]이 가장 좋음.

 

Q.  평균복잡도 문제)퀵정렬의 평균 시간 복잡도는?

=> 퀵 정렬은 보통 반씩 나눠서 정렬하니까, 대략 n번 반복 × log n번 나누는 거라서 O(n log n)

최악이  O(n²)입니다.

 

Q. 같은 값의 순서가 바뀌지 않는 정렬은 뭐가 있나?

=> 병합정렬. 데이터를 반씩 쪼개고 마지막에 합치는거라서, 같은 값이면 안바뀜.

 

Q. 안정정렬이 아닌 것?

=> 선택정렬. 선택정렬은 가장 작은 값과 자리를 교환하는데 같은게 나와도 교환한다.


Q. 퀵 정렬에서 기준이 되는 피벗을 잘못선택하면 어떻게될까?

=> 최악의 시간복잡도. 만약 한쪽에 치우쳐서 해봐. 그럼 겁나 오래걸리는거임. 반반이 아니니까.

 

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

서브넷마스크  (0) 2025.07.13
화이트박스 테스트 / 블랙박스 테스트  (0) 2025.07.07
페이지 교체 알고리즘  (0) 2025.07.05
결합도/응집도  (0) 2025.07.04
디자인패턴  (3) 2025.07.02
반응형
SMALL

페이지 교체 알고리즘(Page Replacement Algorithm)

운영체제가 가상 메모리(Virtual Memory)를 관리할 때 사용하는 기법 중 하나이다.
프로세스는 전체 프로그램 중 일부 페이지만 메모리에 올려서 실행되는데, 메모리가 꽉 찼을 때 새로운 페이지를 넣으려면 기존 페이지 중 하나를 교체(제거)해야 함.
이때 어떤 페이지를 제거할지 결정하는 기준이 바로 페이지 교체 알고리즘.

 


 

  • 페이지 부재(Page Fault): 필요한 페이지가 메모리에 없어서 디스크에서 가져오는 상황
  • 참조 비트(Reference Bit): 페이지가 최근에 사용되었는지를 나타내는 플래그

 

알고리즘명 요약 설명
FIFO (First-In, First-Out) 선입선출(가장 먼저 들어온 페이지 제거) 가장 먼저 들어온 페이지를 먼저 제거함. 오래된 걸 내보냄. 단순하지만 효율은 낮음.
LRU (Least Recently Used) 가장 오랫동안 사용하지 않은 페이지 제거 가장 최근에 사용되지 않은 페이지를 제거. 현실적이고 효율적이나 구현 복잡
LFU (Least Frequently Used) 가장 적게 사용된 페이지 제거 사용 횟수가 가장 적은 페이지를 제거. 자주 쓰는 페이지는 남김
OPT (Optimal) 최적 알고리즘(미래에 가장 늦게 쓸 페이지 제거) 앞으로 가장 오랫동안 사용되지 않을 페이지를 제거. 이론적으로 가장 좋은 알고리즘이지만 미래 예측이 필요해 실제 구현 불가
NRU (Not Recently Used) 최근에 사용되지 않은 페이지 제거 최근 사용 여부(참조 비트) 기준으로 페이지를 분류해 제거.
Second Chance (Clock) 기회 부여 알고리즘 FIFO 개선형. 참조 비트로 사용 여부를 보고 다시 기회를 주는 방식. 시계바늘처럼 회전하며 검사

 

 

Q. 페이지 부재 수 계산

❓ 요청 순서: 7, 0, 1, 2, 0, 3, 0, 4

프레임 수: 3개 / 알고리즘: FIFO

초기 상태: 프레임 비어있음

 

 

  • FIFO : 선입선출이라 맨 앞에꺼 밀어냄.
  • LRU : 최근꺼 남기고 오래된거 비우는거라서 겹치는게 들어오면 최신으로 업데이트. 그 후 오래된거 밀어냄.
  • LFU :  기본적으로 오래된거 비우는건 똑같은데, 겹치는게 들어오면 위에 작게 숫자 쓰고, 다른게 들어오면 숫자 적은것 + 오래된거 밀어냄.

 

이렇게 3개가 주로 나올꺼다.

 

OPT는 애매한게, 가장 최적임과 동시에 가장 현실성이 떨어짐.

미래에 가장 늦게 사용될 애를 없애는건데 그걸 어캐앎?

(앞으로 가장 오랫동안 사용되지 않을 페이지를 미리 알고 교체 ->  이론적으로 최소한의 페이지 부재 수를 보장)

단, 비교문제는 나올 수 있음. 무조건 FIFO, LRU, LFU 보다 성능이 가장 좋을꺼임.

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

화이트박스 테스트 / 블랙박스 테스트  (0) 2025.07.07
정렬 알고리즘  (1) 2025.07.07
결합도/응집도  (0) 2025.07.04
디자인패턴  (3) 2025.07.02
HDLC 프로토콜  (0) 2025.07.01
반응형
SMALL

1. 응집도(Cohesion)

  • 정의: 한 모듈(클래스, 함수 등) 내의 구성 요소들이 서로 밀접하게 관련되어 하나의 목적을 수행하는 정도를 의미한다.
  • 목표: 모듈 내 기능들이 얼마나 밀접하게 연관되어 있는가
  • 좋은 응집도: 모듈은 하나의 명확한 목적만 수행하며, 내부 요소들이 강하게 연관되어야 한다.
  • 응집도 수준 (좋음 → 나쁨) : 기순통절시논우
응집도 종류 설명
기능적 응집(Functional Cohesion) 한 모듈이 딱 한 가지 기능만 수행한다(가장좋음)
순차적 응집(Sequential Cohesion) 작업이 순서대로 이어지는 기능들의 모임
통신적 응집(Communicational Cohesion) 여러 기능이 같은 데이터를 공유해서 처리
절차적 응집(Procedural Cohesion) 미리 정해진 절차대로 실행되는 기능들의 집합
시간적 응집(Temporal Cohesion) 비슷한 시간에 같이 실행되는 기능들이 모임
논리적 응집(Logical Cohesion) 비슷한 종류 기능들을 한 모듈에 묶음 (관계 약함)
우연적 응집(Coincidental Cohesion) 아무 관련 없는 기능들이 뒤섞여 있음 (가장 나쁨)

 

 

2. 결합도(Coupling)

  • 정의: 한 모듈이 다른 모듈과 얼마나 강하게 연결되어 있는지를 나타낸다.
  • 목표: 모듈 간 의존성이 낮아야 유지보수와 확장성이 좋다.
  • 좋은 결합도: 결합도가 낮아야 한다 (즉, 모듈 간 의존성이 적고 독립적일수록 좋음)
  • 결합도 수준 (나쁨 → 좋음) : 내공외제스자
결합도 종류 설명
내용 결합(Content Coupling) 한 모듈이 다른 모듈 내부를 직접 변경함 (최악)
공통 결합(Common Coupling) 여러 모듈이 같은 전역 데이터를 공유함
외부 결합(External Coupling) 모듈들이 외부 규칙이나 데이터 형식으로 연결됨
제어 결합(Control Coupling) 한 모듈이 다른 모듈에 제어 정보를 넘김
스탬프 결합(Stamp Coupling) 큰 데이터 덩어리를 통째로 넘기지만 일부만 사용
자료 결합(Data Coupling) 필요한 데이터만 정확히 전달함 (가장 좋음)

 

 

 

  • 응집도(좋은 순서): 기(능) → 순(차) → 통(신) → 절(차) → 시(간) → 논(리) → 우(연)
  • 결합도(나쁜 순서): 내(용) → 공(통) → 외(부) → 제(어) → 스(탬프) → 자(료)

 

응집도가 높을수록, 결합도가 낮을수록 품질이 좋다.

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

정렬 알고리즘  (1) 2025.07.07
페이지 교체 알고리즘  (0) 2025.07.05
디자인패턴  (3) 2025.07.02
HDLC 프로토콜  (0) 2025.07.01
네트워크 이해하기(2)  (1) 2025.07.01
반응형
SMALL

암기 방식은

 

생성

앱빌팩프싱

 

구조

어브컴데페플프

 

행위

체커인이메메옵스스템비


디자인패턴이란?

소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 일반적인 해결책들.

 

여기서 말하는 "디자인" 이란 CSS 등으로 이루어진 웹페이지의 디자인이 아니라,

시스템을 구성하는 코드들의 구조를 일정한 형태로 만들어 재사용하기 편하게 만든 일정한 패턴이라고 보면 된다.

따라서 언어가 꼭 정해져있지는 않다. 말 그대로 구조적인 문제에 따른 해결책을 말함.

 

비슷한 느낌으로, 알고리즘문제를 해결하기 위한 절차나 방법을 단계적으로 설명하는 "요리법"이라면,

패턴은 결과 및 기능은 제시하지만 구현 단계나 순서는 사용자가 결정하는 "청사진"에 가깝다.

 

ex1) 공통 테마를 설정했다고 치자.

웹페이지의 설정 관리 객체를 생성할 시, 모든 컴포턴트들은 이 설정 관리 객체를 다같이 쓸 수 있어야하며, 설정 관리 객체는 1개만 생성되어야 한다. 즉, new를 똑같은걸 못하게 하는게 "싱글톤 패턴"임.

 

ex2) 햄버거 만들어야 한다.

-> "빵-고기-치즈-토마토-빵" 순서로 조립하면 햄버거가 됨!

이 순서를 만드는 레시피를, "빌더 패턴" 이라고 함.

 

이런식으로 개발 중 생기는 문제에 대해서 수정할 수 있는 "정답과 비슷한" 방법 or 좋은 방법이 있는 것.

 

디자인 패턴은 발전하면서 여러개가 생겨나게 되었고, 그러면서 분류를 할 필요성이 생겼다.

따라서 디자인 패턴의 종류는 크게 3가지.

 

  • 생성 패턴 : "어떻게 만들까?" -> 공장에서 뭔가 '만드는' 느낌
  • 구조 패턴 : "어떻게 연결할까?" -> 블록처럼 '조립'하는 느낌
  • 행위 패턴 : "어떻게 행동하지?" -> 배우처럼 '행동'하는 느낌

 

만들 때 어떻게 하면 좋게 만들 수 있을지를 고민하는 경우가 있고,

구조적으로 서로 다른 것들을 어떻게 연결하고 구성하면 좋을지 고민하는 경우가 있고,

어떤 일이 생기면, 어떻게 동작하는지 등 어떠한 행동을 고민하는 경우가 있다.

 

  • 생성 패턴 : 기존 코드의 재활용과 유연성을 증가시키는 객체 생성 메커니즘들을 제공
  • 구조 패턴 : 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명
  • 행동 패턴 : 객체 간의 효과적인 의사소통과 책임 할당을 처리

 

하나씩 알아보자.


 

1. 생성 패턴

앱빌팩프싱

패턴 이름 설명 비유/예시
추상 팩토리 (Abstract Factory) 관련된 여러 물건을 세트로 만들기 라이트테마, 다크테마 변경 시 버튼, 배경, 입력창 등 세트로 바뀌어야 함.
빌더 (Builder) 조립식으로 차근차근 만들기 HTTP 요청 만들기 - .url(), .header() 등등 하나씩 쌓아서 완성시킴
팩토리 메서드 (Factory Method) 어떤 걸 만들지는 "결정만" 맡김 자동차 공장에서 차 종류만 고르기.
버튼을 만드는 공장은 따로 있고, 버튼 종류가 맥인지 윈도우인지만 정보를 보내준다.
프로토타입 (Prototype) 기존 걸 복사해서 새로 만들기 복사기처럼 똑같은 사본 만들기.
게임에서 몬스터 100마리가 필요하면 하나 만들어놓고 복사해서 쓰면 된다.
싱글턴 (Singleton)
딱 하나만 만들고 계속 재사용 교장선생님 한 명만 존재.
로깅을 하는 Log4j의 경우 로그를 출력하는 객체인데, 얘는 여러개면 안되고 딱 한개만 만들어서 재사용한다.

 

생성은 세트로, 차근차근 조립해서, 공장에 맡기고, 사본을 만들어서 하나만 만든다.

 

2. 구조 패턴

어브컴데페플프

패턴 이름 설명 비유/예시
어댑터(Adapter) 두개의 시스템을 맞춰주는 어댑터 필요 콘센트 어댑터.
옛날 시스템과 새 시스템이 있는데 모든 코드를 바꿀수 없으니 중간에 바꿔주는 어댑터 함수가 호환을 맞춰줌. 
브리지(Bridge) 기능과 구현을 분리하여 각각 독립적으로 확장 가능하게 함 리모컨(기능)과 TV(구현) 분리.
TV 종류도 많고 리모컨 종류도 많을 때, TV 종류별 동작을 따로 선언해놓고 리모컨은 하나로 해두면 TV 종류가 추가되어도 리모컨은 하나로 쓸 수 있음. 
컴포지트(Composite) 개별 객체와 복합 객체를 동일하게 다루도록 트리 구조로 구성(반복적으로 중첩 가능) 파일-폴더 구조, 댓글-답글 구조.
답글 하나 삭제하는거랑, 댓글을 삭제할 때 하위 답글까지 전부 삭제되게 하는거랑 동일하게 동작하도록 한다.
데코레이터(Decorator) 기존 객체의 기능을 수정하지 않고 동적으로 기능 추가 커피에 시럽 추가, 옷 위에 자켓 입기.
기능을 외부에서 감싸며 덧붙여서 선택적으로 추가 가능.(꾸미기처럼) 그래서 기존 코드가 안바뀌고 신규 코드 추가만 됨.
퍼사드(Facade) 사용자가 복잡한 내부를 몰라도 되도록 간단한 인터페이스로 묶어서 제공 호텔 프론트, 통합 고객지원 센터.
startApp 안에는 DB연결, 캐시초기화, 로그설정 등이 들어있음. 
플라이웨이트(Flyweight) 공통된 데이터를 공유하여 메모리 절약 게임 캐릭터 공통속성은 공유, 변하는 위치값만 따로 관리
이름, 색깔, 직업 이런건 공통함수 하나에 할당, 변하는 위치좌표값만 그때그때 받아서 사용
프록시(Proxy) 실제 객체에 접근하기 전에 대리자 역할을 수행 보호자 확인, 가상 로딩 화면.
이미지처럼 불러오는데 시간이 오래걸리는 객체를 처음에 임시이미지로 대체하고(미리보기 이미지), 필요할 때 나중에 실제로 로딩함.

구조는 두개 연결해서, 도구와 구현을 분리 후, 묶음을 하나로 쳐서, 리본을 달아주고, 숨겨서, 공통된거 뽑아쓰고, 대신 뭘 해준다.

 

3. 행위 패턴

체커인이메메옵스스템비

패턴 이름 설명 비유/예제
책임 연쇄 패턴
(Chain of Responsibility)
누가 처리할지 몰라서 차례차례 다음 사람한테 물어보는 구조 고객센터에서 챗봇이 답변하다가 모르면 상담원 연결버튼을 띄움
명령 패턴 (Command) 버튼마다 직접 동작을 연결하면 비효율적이고 기능도 1개밖에 안되니 명령 객체에 연결해서 다양한 동작을 할 수 있게 함 리모컨 버튼 = TV 켜기, 끄기 등 명령을 담아둠.
행동 여러개를 캡슐화해서 한번에.
해석기 패턴 (Interpreter) 문장이나 기호를 읽고 해석하는 구조. 문법 규칙 등을 클래스로 정의해서 해석 계산기나 구구단 읽기 : "2 × 3"을 해석해서 6으로 만듦
정규표현식) 패턴을 해석
반복자 패턴 (Iterator) 리스트를 하나씩 꺼내보는 구조
while문이나 forEach 같이 하나씩 꺼내는거.
줄 서 있는 친구들을 번호표 순서대로 부름.

중재자 패턴 (Mediator) 여러사람이 직접 말 안하고 중간 사람을 통해서만 이야기함.
직접 소통하면 관계가 얽히고 복잡하니 중간다리 하나 넣는거.
친구들 사이에 반장이 끼어 중간에서 말 전달.
비행기 조종사들이 직접 얘기하면 충돌 위험
→ 공항 관제탑(Mediator)이 중간에서 모든 비행기에게 지시

어댑터는 안맞는 두개를 호환
메멘토 패턴 (Memento) 객체의 이전 상태를 저장했다가 필요할 때 복원할 수 있도록 하는 패턴 게임 저장/불러오기, Ctrl+Z 되돌리기.
캡슐화 유지하면서 복원 가능
저장/복원 전문
관찰자 패턴 (Observer) 상태가 바뀔 때마다 모든 옵저버(구독자)에게 알려줘야 할 때 자동으로 알려주는 패턴 유튜브 구독하면 새 영상이 올라올 때 알림 받음
상태 패턴 (State) 상태에 따라 다르게 행동을 if문 등으로 선언하면 복잡하니,각 상태를 별도의 클래스로 만들고 상태에 따른 행동을 캡슐화해서 객체가 상태를 바꾸면 행동도 자동으로 바뀌도록 하는 패턴 TV가 꺼져 있으면 전원 버튼 누르면 켜지고, 켜져 있으면 꺼짐
전략 패턴 (Strategy) 다양한 방법 중에 하나를 골라서 사용함.
각기 다른 전략을 만들고 필요할 때 선택하자.
내비게이션에서 길 찾기 방법을 “빠른 길”, “짧은 길”, “고속도로 우선” 등으로 선택
템플릿 메서드 패턴
(Template Method)
전체 순서는 정해져 있고, 세부만 바꿀 수 있음.
작업 일부 단계만 다르고 나머지는 똑같을 때
라면 끓이기 순서는 같지만, 스프는 입맛대로 바꿈.
게임 진행 흐름은 같지만 캐릭터마다 행동이 다름
방문자 패턴 (Visitor) 객체 여러 종류의 요소가 있는데 요소마다 다른 연산을 해야할 때, 객체를 변경하지 않고 연산을 분리해서 새로운 연산을 쉽게 추가함. 동물원에 간 사람이 호랑이 보고 무섭다, 토끼는 귀엽다 다르게 반응함.
동물원 수정 없기 각 동물(요소)별로 다른 반응을 추가

행위는 다음사람 시키고, 명령 하나로 여러개를 하고, 규칙을 정하고, 반복해서, 중간사람이, 복원하고, 구독자한테 알려주고, 상태별로 다르게 해주는데, 특정 전략이, 기본 템플릿에서 조금만 바뀌는데, 동물원가서 동물별로 감상평을 말한다.

 

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

페이지 교체 알고리즘  (0) 2025.07.05
결합도/응집도  (0) 2025.07.04
HDLC 프로토콜  (0) 2025.07.01
네트워크 이해하기(2)  (1) 2025.07.01
네트워크 이해하기(1)  (0) 2025.07.01
반응형
SMALL

HDLC(High-level Data Link Control)는 데이터를 정확하고 신뢰성 있게 양쪽 장치 간에 전송하기 위해 만든 프로토콜.

데이터링크 계층(2계층) 에서 작동하며, 주로 모뎀, 라우터, 위성 통신 같은 직접 연결된 장치 사이에서 많이 사용됨.

 

데이터링크 계층에서 동작하는만큼,데이터를 비트 단위로 전송한다.

클럭 신호에 맞춰 일정한 속도로 통신하며(속도조절), 오류를 감지하고 재전송하는 역할을 한다.

 

 

HDLC 프레임 구조

 

HDLC 는 데이터를 프레임(데이터 덩어리) 단위로 전송함.

프레임은 아래와 같이 생겼다.

 

[Flag] [Address] [Control] [Information] [FCS] [Flag]

 

  • Flag : 프레임의 시작과 끝을 알림 (항상 01111110)
  • Address : 누가 받는지 (수신 장치 주소)
  • Control : 무슨 용도의 프레임인지 (데이터/응답/제어 등)
  • Information : 실제 데이터 내용
  • FCS : 오류 검출용 (CRC 방식 사용)

 

HDLC의 프레임 종류

HDLC 프레임은 3가지 종류가 있다. 위의 Control에서 프레임을 보낼 때 용도별로 나뉨. 

  • I-정보 프레임(Information) 실제 데이터를 담은 프레임
  • S-감독 프레임(Supervisory) 흐름 제어, 오류 응답 등 상태 알림
  • U-비번호 프레임(Unnumbered) 연결 설정, 해제, 초기화 같은 제어용 프레임

 

HDLC는 어떤 방식으로 대화할까?

HDLC는 통신하는 방식에 따라 3가지 모드를 지원한다.

  • NRM (Normal Response Mode) : 주 장치(Master)만 먼저 말할 수 있고, 종 장치(Slave)는 응답만 가능
  • ABM (Asynchronous Balanced Mode) : 양쪽 장치가 서로 대등하게 말할 수 있음
  • ARM (Asynchronous Response Mode) : 종 장치도 자발적으로 말할 수 있음 (거의 안 씀)

현재 가장 널리 쓰이는건 ABM이며, 서로 대등하게 주고받기가 가능함.

 

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

결합도/응집도  (0) 2025.07.04
디자인패턴  (3) 2025.07.02
네트워크 이해하기(2)  (1) 2025.07.01
네트워크 이해하기(1)  (0) 2025.07.01
객체지향 설계 5대 원칙(SOLID)  (4) 2025.06.25
반응형
SMALL

네트워크를 이해하기 위해서는 아래 내용을 알아야 한다.

 → 어떻게 보낼까? → 누구한테 보낼까? → 어떻게 동기화할까? → 주소는 어떻게 쓸까?

 

1. 컴퓨터가 어떻게 데이터를 주고받는지?

 => 정보 전송 방식, 통신 방법, 데이터 전송 타이밍 방식

 

2.  네트워크 구조와 계층

 => OSI 7계층, TCP/IP 4계층, 각 계층의 역할

 

3. 주소 체계와 라우팅

 => IP 주소(IPv4 / IPv6), 서브넷 마스크, MAC 주소, 라우팅

 

4.  전송 방식과 프로토콜

 => 데이터 전송 대상에 따른 분류, 프로토콜 흐름제어방식, 전송오류 제어방식, 오류검출방식, 실제로 쓰이는 프로토콜 종류

 

5.  네트워크 장비와 보안

 => 네트워크 연결장치, 보안 및 주소 변환 장치, 암호화 된 통신 구현


3. 주소 체계와 라우팅

 => IP 주소(IPv4 / IPv6), 서브넷 마스크, MAC 주소, 라우팅

 

✅  IP 주소(IPv4 / IPv6)

IP 주소란, 네트워크상에서 컴퓨터, 스마트폰, 서버 등 모든 장비의 주소. 실제 데이터를 보낼 때 ‘누구에게 보내는지’ 알려주는 역할.

 

1) IPv4

  • 32비트 (총 약 43억 개 주소 가능)  예: 192.168.0.1
  • 4개의 10진수로 구분 (각각 0~255)
11000000.10101000.00000000.00000001 → 192.168.0.1
  • 한계: 주소 부족 → 사설 IP/ NAT 사용
  • 표준 문서: RFC 791

 

2) IPv6

  • 128비트 (주소 개수 거의 무한: 약 340언더시긴틸리언)
예) 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 콜론(:)으로 구분된 16진수 8쌍
  • 장점: 주소 고갈 문제 해결, 보안/라우팅 효율 향상
  • 표준 문서: RFC 8200

 

IPv4 갯수로는 한계가 있어서 사실상 무제한에 가까운 IPv6로 점진적 전환중이다.

 

IP 주소만으로는 이 컴퓨터가 어디 소속인지 알 수 없다.

항상 서브넷 마스크와 쌍으로 봐야 어디까지가 네트워크 주소인지, 어디까지가 호스트 주소인지 구분할 수 있음.

 


✅  서브넷 마스크 (Subnet Mask)

서브넷 마스크란, IP 주소를 '네트워크 주소'와 '호스트 주소'로 나누는 기준선이다.

 

Q. 왜 굳이 IP주소와 서브넷 마스크로 나눠서 해야하나? 그냥 IP 하나로 표현하면 안되나?

-> 보안 때문이 아니라 '네트워크 구조와 효율성' 때문임.

 

인터넷 초기엔 전세계 모든 ip를 고정된 크기의 '덩어리(클래스)'로 나누는 클래스 기반 IP 체계(Classful IP Addressing) 를 사용했다.

ip 주소 앞 비트로 분류해서 크기별로 나눠둠.

클래스 : 전 세계에 IP 주소를 나눠주는 기관(예: IANA)이 "IP 주소를 크기별로 몇 종류(Class)"로 나눠서 배정하자고 함. 덩어리로 쪼개놓고 요청하면 크기에 맞는걸 준다는거임.

 

클래스 시작비트 대표 ip범위 네트워크 비트 호스트 수 용도
A 0xxx 1.0.0.0 ~ 126.255.255.255 앞 8비트 (/8) 약 1,670만 아주 큰 조직 (국가, 대기업)
B 10xx 128.0.0.0 ~ 191.255.255.255 앞 16비트 (/16) 약 6만 5천 중간 규모 조직 (대학, 연구소)
C 110x 192.0.0.0 ~ 223.255.255.255 앞 24비트 (/24) 254 소규모 조직, 가정
D 1110 224.0.0.0 ~ 239.255.255.255 - - 멀티캐스트용
E 1111 240.0.0.0 ~ 255.255.255.254 - - 실험용 (예약)

 

쉽게 설명해서 D랑 E 제외 A,B,C 클래스만 있다는 것임.

크기별로 보자면 C(254개) / B(65,534개) / A(1,670만개) → 중간단위 없다.

만약에 600명 정도의 중소기업이라고 치자. 600개의 컴퓨터가 있으면 그 컴퓨터마다 IP를 할당해줘야함. 그래서 ip주소를 신청했다.

C클래스(254개)로는 택도 없으니 B클래스를 쓴다고 치자. 그럼 6만 5천개 중 600개만 쓰면 나머지 6만 4천개가 낭비인거임.

 

 

Q. if 서브넷 마스크 없이 고정된 방식만 있다면?

- 주소가 낭비됨 : 작은 회사도 무조건 254개의 ip를 써야함.

- 주소 계획이 딱딱해짐 : 회사 600명이라고 하면 필요한 만큼만 나눠서 쓸 수 없음.(비효율적)

 

=> 그래서 등장한 것이 CIDR (Classless Inter-Domain Routing) 이다.

IP 주소 낭비를 줄이기 위해 고정된 클래스 구조를 없애고, 슬래시(/)와 숫자를 붙여 서브넷 마스크를 표시한다.

예) 192.168.0.0/24

/24는 IP 주소에서 처음 24비트를 네트워크 부분으로 사용한다는 의미다.

 

 

 

ex) 회사가 1000개의 IP 주소가 필요하면?

=> 192.168.0.0/22 -> 이 서브넷은 2^(32-22) = 2^10 = 1024개 IP 주소를 제공.

 

CIDR 덕분에 여러 네트워크를 하나의 라우팅 엔트리로 묶는 슈퍼넷팅(Supernetting)이 가능해졌다.

예를 들어, 192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24를 192.168.0.0/22 하나로 묶어 라우팅 가능.

 

✅  MAC 주소 (Media Access Control Address)

MAC 주소는 네트워크 인터페이스 카드(NIC)에 할당된 고유 식별자다. 48비트(6바이트) 길이의 하드웨어 주소로, 네트워크 내 장치를 식별한다. => 네트워크에 연결된 기기들(컴퓨터, 프린터, 스마트폰 등) 마다 붙어있는 '이름표' 같은 것.

흔히 16진수 12자리(6쌍)로 표현됨.

ex) 00:1A:2B:3C:4D:5E 또는 00-1A-2B-3C-4D-5E

 

데이터를 서로 교환할 때 누구한테 줄지 식별하기 위한 이름표이다. 같은 네트워크 안에서는 MAC 주소를 보고 알아봄.

IP 주소는 인터넷 세상의 주소라면, MAC 주소는 네트워크(우리 동네)에 할당된 주소라 훨씬 좁은 범위.(데이터링크 - 2계층)

 

 

✅  라우팅 (Routing)

네트워크 간에 데이터 패킷을 전달하는 과정. 데이터를 출발지에서 목적지까지 최적의 경로로 보내는 일련의 작업.

=> 길 안내자. 우리동네(내 컴퓨터끼리)에서 길찾으면 MAC주소를 보고, 다른동네(다른 네트워크)에서 길찾으면 IP를 보고 인터넷 세상에서 어디로 가야할지 안내해줌.

 

 

같은 LAN에 있는 두 컴퓨터는 MAC 주소로 서로 데이터를 주고받는다.

그러나 다른 네트워크에 있는 컴퓨터끼리는 라우팅 과정을 거쳐 IP 주소를 기반으로 통신한다.

 


4.  전송 방식과 프로토콜

 => 데이터 전송 대상에 따른 분류, 프로토콜 흐름제어방식, 전송오류 제어방식, 오류검출방식,  실제로 쓰이는 프로토콜 종류

 

✅  데이터 전송 대상에 따른 분류

누구에게 보낼 것인가? 상황에 맞게 데이터를 다른 방식으로 보내면 더 빠르고 정확하고 네트워크도 아끼면서 통신할 수 있음.

 

전송방식 설명 예시 왜?
유니캐스트(Unicast) 1:1 전송, 한 사람에게만 보냄 이메일 보내기, 카카오톡 1:1 대화, 유튜브 보기 나만 보거나 듣는 정보니까, 다른 사람에게는 안 가도록!
브로드캐스트(Broadcast) 1:전체 전송, 모두에게 보냄 DHCP 요청(인터넷 주소 달라고 외치기), ARP 요청(누구 MAC 주소야?) 누가 응답할지 모르니까, 전체에게 한번에 물어보기
멀티캐스트(Multicast) 1:특정 그룹에게만 보냄 IPTV 시청, 온라인 강의 듣기, Zoom 같

 

반응형
LIST

'[ 정보처리기사 ]' 카테고리의 다른 글

디자인패턴  (3) 2025.07.02
HDLC 프로토콜  (0) 2025.07.01
네트워크 이해하기(1)  (0) 2025.07.01
객체지향 설계 5대 원칙(SOLID)  (4) 2025.06.25
정보보안침해공격  (6) 2025.06.25
반응형
SMALL

네트워크는 두 개 이상의 장치가 데이터를 주고받을 수 있도록 연결된 구조를 의미한다.

쉽게 말해, 컴퓨터 간의 소통을 가능하게 해주는 연결망.

그리고 인터넷은 가장 큰 규모의 네트워크이다.

 

네트워크를 이해하기 위해서는 아래 내용을 알아야 한다.

 → 어떻게 보낼까? → 누구한테 보낼까? → 어떻게 동기화할까? → 주소는 어떻게 쓸까?

 

1. 컴퓨터가 어떻게 데이터를 주고받는지?

 => 정보 전송 방식, 통신 방법, 데이터 전송 타이밍 방식

 

2.  네트워크 구조와 계층

 => OSI 7계층, TCP/IP 4계층, 각 계층의 역할

 

3. 주소 체계와 라우팅

 => IP 주소(IPv4 / IPv6), 서브넷 마스크, MAC 주소, 라우팅

 

4.  전송 방식과 프로토콜

 => 데이터 전송 대상에 따른 분류, 프로토콜 흐름제어방식, 전송오류 제어방식, 오류검출방식, 실제로 쓰이는 프로토콜 종류

 

5.  네트워크 장비와 보안

 => 네트워크 연결장치, 보안 및 주소 변환 장치, 암호화 된 통신 구현

 

항목 설명 왜 필요한가? / 언제 쓰이나?
🔹 정보 전송 방식(단방향/반이중/전이중) 데이터가 한쪽만, 번갈아, 동시에 오갈 수 있는 방식 장비 간 통신 흐름 설계예: 무전기(반이중), 전화(전이중)
🔹 통신 방식(유선/무선, 회선/패킷) 물리적 경로: 유선 vs 무선- 논리적 흐름: 회선 교환 vs 패킷 교환 물리적 연결 방식 선택예: 고속 통신은 유선 + 패킷 교환
🔹 동기/비동기 전송 데이터를 정해진 시간에(동기) or 필요할 때마다(비동기) 전송 실시간성 판단예: 화상통화(동기), 키보드 입력(비동기)
🔹 직렬/병렬 전송 1비트씩 전송 vs 여러 비트를 동시에 전송 거리와 속도에 따라 선택예: USB(직렬), 내부 버스(병렬)
🔹 고정 길이 패킷 항상 같은 크기의 데이터 블록으로 전송 예측 가능한 처리 속도 확보예: ATM 네트워크
🔹 에러 검출/수정(패리티, CRC 등) 전송 중 생긴 오류를 잡거나 고치는 방법 데이터 신뢰성 보장예: CRC는 네트워크, 저장장치에서 활용
🔹 IPv4 / IPv6 인터넷 주소 체계: 32비트 vs 128비트 인터넷 연결의 기반IPv6는 주소 고갈 해결용
🔹 캐스팅 방식(유니, 멀티, 브로드, 애니캐스트) 데이터를 누구에게 보낼지를 결정 트래픽 최적화와 효율 설계예: 방송은 멀티캐스트, DNS는 애니캐스트

 

 

하나씩 뜯어봐야 한다.

 


1. 컴퓨터가 어떻게 데이터를 주고받는지?

 => 정보 전송 방식(단방향/반이중/전이중), 통신 방법(유선vs무선/회선vs패킷), 데이터 전송 방식

 

 

✅ 정보 전송 방식 (Transmission Mode)

 => 데이터를 한 장치에서 다른장치로 어떻게 보내느냐?(한방향, 교대 양방향, 동시 양방향)

방식 방향 동시 전송 여부 예시
단방향 (Simplex) 한 방향만 라디오, TV
반이중 (Half-Duplex) 양방향 (교대로) 무전기
전이중 (Full-Duplex) 양방향 전화, 화상회의

 

네트워크 장비(케이블, 무전기, 라우터 등)는 전송 방식에 따라 설계 방식이 달라진다.

단방향은 한쪽만 보낼 수 있고, 반이중이면 전환 회로가 필요하며, 전이중이면 두 채널이 필요함.

이렇게 전송 방식에 따라 설계가 달라지는 이유는 비용, 효율, 안정성 최적화를 위해서이다.

 

만약 모든 장비를 전이중으로 하면 모든 장비가 송신 회선과 수신 회선을 갖춰야 한다.

이 회선을 갖추는 것 자체가 비용이 든다. 또한 설계 자체도 복잡해짐.

또한 무조건 전이중으로 하면 네트워크 폭주(트래픽 폭발) 현상이 생길 수 있다.

 

그리고 효율과 안정성 면에서도 정보 전송 방식을 나누는게 좋다.

라디오 방송국에 경우, 그냥 전송만 하면 되니까 단방향으로 만드는 것이고

무전기는 한쪽에서 끝!을 선언해야 다른쪽에서 말할 수 있게 만들었다.

전이중보다 단순한 구조로, 그리고 명확한 통신 흐름이 되도록 설계된 것이다.

 

 

✅ 통신 방법

 => 데이터를 어떻게 전달하고, 어떻게 처리하여 보내는지?

 

1) 물리적 방식 따라 - 유선 vs 무선

구분 유선 통신 무선 통신
매체 케이블, 광섬유 등 전파, 마이크로파 등
장점 신호 안정성, 속도 높음 이동성, 설치 용이
단점 설치 복잡, 비용 높음 간섭/보안에 취약
예시 LAN 케이블, 광케이블 Wi-Fi, LTE, Bluetooth

ex) 유선은 더 빠르고 안정적이지만 설치가 어렵고, 무선은 간편하지만 보안에 취약할 수 있다.

 

 

2) 논리적 방식에 따라 - 회선 vs 패킷

항목 회선 교환 패킷 교환
연결 방식 연결 먼저 확보 → 데이터 전송 →
종료 후 연결 해제
데이터를 작은 조각(패킷) 으로 쪼개 전송.
각 패킷은 독립적으로 경로를 찾아
목적지 도착 후 다시 조립
실시간
연결성
우수
(전용 선로가 잡혀 끊기지 않음)
상대적으로 낮음
(패킷 유실되면 재전송 필요)
효율성 낮음
(대기시간도 회선 점유)
높음
(공유 자원 사용)
사용 예 전화, PSTN 인터넷, 이메일, 웹

ex) 전용 선로를 따서 거기로 데이터를 보낼수도 있고, 데이터를 쪼개서(패킷) 독립적으로 보낼수도 있다.

 

전화의 경우, 통화 연결음을 생각하면 상대와 연결되기 전까까지도 회선이 연결되어 있다.

웹페이지의 경우, 한번에 로딩되는게 아니라 부분적으로 정보가 받아진다.

 

 

✅데이터 전송 방식

=> 데이터를 전송할 때 송신자와 수신자가 어떤 방식으로 데이터를 주고받을지?

 

1) 타이밍에 따라 - 동기 vs 비동기

항목 동기 전송(sync) 비동기 전송(Async)
설명 정해진 시간에 맞춰서 데이터를 보냄 (미리 약속한 타이밍 있음) 필요할 때마다 데이터를 보냄 (타이밍 약속 없이)
데이터 단위 블록 단위(많은 양) 문자/바이트 단위(적은 양)
시간 기준 있음(Clock 신호) 없음
제어 비트 없음 있음 (Start/Stop bit)
장점 빠르고 효율적
연속적인 데이터에 적합(영상)
구조가 단순하고 비용이 저렴
짧고 간헐적인 통신에 적합(문자)
단점 장비 간 타이밍 동기화가 필요함 (복잡하고 비쌈)
짧고 간헐적인 데이터엔 비효율적
오버헤드가 많아 느림
데이터가 일정하게 오지 않아 처리가 어려움
예시 네트워크 이더넷, 고속 통신 키보드 입력, 시리얼 포트

 

2) 데이터 보내는 양에 따라 - 직렬 vs 병렬

항목 직렬 전송 병렬 전송
전송 방식 1비트씩 차례대로 한줄로 여러 비트를 한번에 동시에 여러줄로
회선 수 적음 (1~2개) 많음 (8, 16개 등)
속도 순서대로 하나씩이라 느림 한꺼번에 여러줄로 보내서 빠름
안정성 간섭 적고 안정적 거리가 멀면 선의 타이밍이 달라지는 신호간섭(지터) 문제 발
거리 장거리 적합 단거리 적합
예시 USB, LAN 내부 버스, 프린터 포트

 

 


2.네트워크 구조와 계층

 => OSI 7계층, TCP/IP 4계층, 각 계층의 역할

 

✅  OSI 7계층

7 응용 계층(Application Layer)
6 표현 계층(Presentation Layer)
5 세션 계층(Session Layer)
4 전송 계층(Transport Layer)
3 네트워크 계층(Network Layer)

2 데이터 링크 계층(DataLink Layer)

1 물리 계층(Physical Layer)

 

https://heannim-world.tistory.com/198

 

OSI 7계층 모델 정리

컴퓨터 전원을 켠다.켜고나서 내부의 프로그램을 실행해서 쓸 수도 있지만 보통은 인터넷을 연결해서 정보를 검색하고, 메일을 주고받고, 데이터를 교환한다. 컴퓨터가 각자의 집이라고 할 때,

heannim-world.tistory.com

 

✅  TCP/IP 4계층

OSI 7계층 모델이 1984년 공식화 되기 전에, 1970년대 후반 미국 국방부(DARPA)에서 시작된 실질적인 모델이다.

미국 국방부는 다양한 컴퓨터끼리 통신이 가능한 네트워크를 만들고자 했지만, 당시 제조사마다 통신 방식이 제각각이라 상호호환이 불가능했다. 따라서 이를 위해 표준으로 만든 것 TCP/IP 프로토콜 스택이다.

 

TCP/IP = "Transmission Control Protocol / Internet Protocol"
→ 인터넷 통신의 가장 핵심적인 두 프로토콜을 이름으로 딴 모델

 

OSI 7계층 모델 = TCP/IP보다 늦게, 더 정교하고 계층적으로 나누기 위해 만들어진 설명용 모델.

 

기존엔 회선을 고정해서 데이터를 주고받았는데(회선 교환방식), 이게 누가 사용하는 동안에는 다른 사람들이 못쓰고, 비싸고 효율이 떨어지는 단점이 있었음.

그해서 미국 국방부에서는 군대에서 쓰기 위해 [최초의 패킷 기반 네트워크] 인 ARPANET 를 개발하여 사용하고 있었다.

(패킷 기반 네트워크 : 정보를 작은 조각(패킷) 단위로 쪼개서 주고 받는 방식으로 만든 최초의 네트워크)

 

문제는 제조사마다 시스템이 다르고, 여러 컴퓨터에 각자 다른 네트워크 기술들이 등장하기 시작하면서 장비마다 신뢰성이 떠러지고 흐름 제어 방식도 제각각이라 연결이 어렵게 되었음. 따라서 이걸 해결하기 위해 1973년 "보편적인 통신 규칙"인, TCP가 등장했다.

 

초기에 TCP 는 단일 프로토콜이었다. 즉, 패킷으로 쪼개고, 순서 붙이고, 주소 찾아서, 전송하는 모든 동작을 다했음.

이렇게 되니 TCP가 너무 무겁다는 피드백을 받게 되어, "전송은 TCP에게, 경로 설정은 IP에게"와 같이 역할을 분담하게 되었다.

원래는 TCP 안에 "주소 지정 및 경로 설정"하는 기능까지 통합되어 있었는데, 당시에는 네트워크 수가 많지 않아 구조가 단순했었지만 갈수록 복잡성이 증가하면서 IP라는 주소 체계를 만들게 된 것.

 

최초의 공식 표준 IP는 1981년 IPv4(Internet Protocol version 4) 라는 이름으로 공식 발표되었다.

최초로 널리 쓰인 인터넷 주소 체계로, 전 세계 컴퓨터에 고유 주소를 부여하기 위한 기본 규칙이다.

2진수 32자리로 구성되며, 10진수로 표현 시 4개의 숫자로 구분된다.(192.168.0.1)

간단하고 빠르지만, 주소 수가 한정되어 있어 IPv6가 후속으로 등장했다.

 

 TCP/IP가 4단계 모델로 먼저 등장을 했고, 그 후 이론적으로 정리된 모델이 OSI 7계층 모델이다.

따라서 실제 네트워크를 만들거나 분석할 때에는 TCP/IP 모델을 기준으로 보게 된다.

 

계층 핵심역할 주요 프로토콜
4. Application Layer (응용 계층) 사용자가 사용하는 어플리케이션과 직접 연결 HTTP(웹), FTP(파일전송), DNS(도메인->IP), SMTP(이메일), DHCP(IP주소 자동 할당) 등
3. Transport Layer (전송 계층) 데이터에 따라 신뢰성/속도 조절
어떻게 보낼지? port 번호를 통한 응용 구분
TCP(신뢰성 보장), UDP(신뢰성x 빠르게)
2. Internet Layer (인터넷 계층) 주소 지정과 라우팅
데이터를 목적지까지 전세계 어디든 전달
IP (IPv4/IPv6), ICMP(핑), ARP(MAC 주소 찾기), IGMP (IPv4 멀티캐스트 관리)
1. Network Interface Layer
(네트워크 인터페이스 계층)
실제 전송(물리적 신호 전송)
하드웨어 장비를 통해실 제 비트를 전송
Ethernet, Wi-Fi

 

실제로 계층별로 문제가 생기면 어떻게 확인할까?

 

Q. 웹사이트 접속이 안된다!

 

  • 1계층(물리): 랜선 뽑힘? 와이파이 연결돼 있음? 네트워크 장비가 문제인가?
  • 2계층(IP): ipconfig → IP 주소 제대로 있음? 게이트웨이가 일치함?(네트워크 내부설정) DNS에서 오류남?
  • 3계층(TCP): ping google.com → 통신이 잘 되는지? 데이터가 유실된건지? 응답 와? ping 8.8.8.8은?
  • 4계층(응용): curl https://google.com → 웹 서버가 살아 있나? 앱이 잘 동작하나?

 

이런식으로 순차적인 테스트를 통해 원인 계층을 찾아볼 수 있음.

 

 

✅  주요 프로토콜 설명

- ICMP(Internet Control Message Protocol) : 네트워크에서 문제 상황을 알려주는 메시지 전용 프로토콜. IP계층(3계층)에서 동작하며, 오류나 상태정보를 알려주는 도우미 역할.

- ping : 상대방 컴퓨터(서버)가 살아있는지 확인하는 명령어.  ICMP를 사용해서 상대방에게 작은 패킷(핑 요청)을 보내고 응답이 오면 "접속 가능", 안 오면 "접속 불가"로 판단한다.

- DNS (Domain Name System) : 사람이 기억하기 쉬운 도메인 주소를 숫자 IP 주소로 바꿔주는 시스템. 응용계층에서  IP 주소가 필요하니까, 요청해서 받아온다.  (단, 주소를 바꿔주기만 할 뿐, 주소 자체를 전달하거나 라우팅하지 않기 때문에 응용계층에 속함)

 

 

반응형
LIST
반응형
SMALL

+ Recent posts

반응형
LIST