🎯 Computer Science에 대해 정리합니다.


📗 Today I Learned

컴퓨터 통신망 기초

디지털 통신

아날로그(Analog) 신호

  • 자연 상태에서 나타나는 연속적인 값을 정보로 표현
  • 예: 전화(유선), FM 라디오
  • 신호가 연속적이며, 잡음에 취약하고 신호 손실이 발생할 수 있음

디지털(Digital) 신호

  • 0과 1의 조합으로 부호화된 신호로 정보를 표현
  • 예: 이동전화, IPTV
  • 잡음에 강하며, 신호 지연 및 손실에 대해 보완 가능
  • 자가 오류 정정 기법 도입 가능
  • 매체 다중화로 대역폭 활용도 향상
  • 정보 암호화 용이

데이터 전송 방식의 분류

직렬 전송(Serial Communication)

  • 데이터를 1비트씩 순차적으로 전송
  • 전송선 하나 사용
  • 예: USB 케이블

병렬 전송(Parallel Communication)

  • 여러 비트를 동시에 전송
  • 여러 전송선 사용
  • 예: 컴퓨터 내부 버스, 프린터 케이블

동기식 전송(Synchronous Transmission)

  • 타이밍 제어 신호와 데이터 신호를 동기화하여 전송
  • 고속 통신에 유리

비동기식 전송(Asynchronous Transmission)

  • 하나의 통신선을 이용해 제어 비트와 데이터 비트를 전송
  • 하드웨어 비용이 낮음

데이터 전송 방식의 추가 분류

전송 방향에 따른 분류

  • 단방향(Simplex): 한 방향으로만 데이터 전송 가능
    • 예: 방송, 키보드 입력, 화면 출력
  • 반이중(Half Duplex): 양방향 전송 가능하지만 동시에 전송 불가
    • 예: 팩스, 무전기
  • 전이중(Full Duplex): 동시에 양방향 데이터 전송 가능
    • 예: 전화, 일반 데이터 네트워크

회선 접속 방식에 따른 분류

  • 점대점(Point-to-Point): 두 장치가 전용 회선으로 연결
    • 예: 블루투스
  • 다지점(Multipoint): 하나의 통신 회선에 여러 장치 연결
    • 예: 이더넷

망 구성 범위에 따른 분류

  • LAN(Local Area Network): 근거리 통신망
    • 집, 사무실, PC방 등 단일 네트워크 구성
  • MAN(Metropolitan Area Network): 도시 지역 통신망
    • 여러 LAN을 연결한 도시 단위 네트워크
  • WAN(Wide Area Network): 광역 통신망
    • 근거리 통신망을 벗어난 넓은 지역을 커버
    • MAN들이 모여 WAN을 구성



OSI 7-계층 모델과 프로토콜

OSI 7계층 모델

  • 표준 프로토콜을 사용하여 다양한 시스템이 통신할 수 있도록 국제표준화기구(OSI)에서 제정한 개념 모델
  • 7계층: Application, Presentation, Session, Transport, Network, Data Link, Physical
  • 각 계층은 자신의 기능에 맞는 프로토콜을 사용하며, 계층 간 독립적으로 동작

계층 1: Physical (물리 계층)

  • 전기적, 기계적, 기능적 특성에 따라 데이터 전송을 담당
  • 전송 매체: Coaxial, Fibre Optic, UTP, Radio 등
  • 리피터(Repeater): 동일 LAN 상에서 거리를 연장하거나 접속 시스템의 수를 증가시키기 위해 사용
    • 신호의 감쇠, 잡음 등에 의한 신호 훼손 방지
  • 신뢰성 있는 데이터 전송을 위해 프레임 단위로 오류 검출 및 흐름 제어 담당

  • 스위칭 허브(Switching Hub): 연결 장치 간 스위칭 역할, LAN을 여러 병렬회선 형태로 세그먼트화

  • 브리지(Bridge): 복수의 LAN을 서로 연결, 전체 네트워크의 노드 수 및 거리 확장

  • 이더넷과 와이파이

    • 이더넷(Ethernet, IEEE 802.3)
      • 모든 장치는 고유의 MAC 주소를 가짐
      • 데이터 전송 시 충돌(collision) 감지 및 제어
      • 유선 네트워크의 대표적 표준
    • 와이파이(Wi-Fi, IEEE 802.11)
      • 이더넷과 동일한 형태의 MAC 주소 사용
      • 2.4GHz, 5GHz 주파수의 무선 통신 이용
      • 무선 네트워크의 대표적 표준

이더넷의 다중 접근 제어 (CSMA/CD)

  • CSMA/CD(Carrier-Sense Multiple Access with Collision Detection)는 유선 이더넷에서 사용하는 다중 접근 제어 방식
    • 노드(호스트)는 데이터 전송 전에 회선이 사용 중인지 점검
    • 회선이 사용 중이면 임의의 시간만큼 기다린 뒤 다시 시도
    • 회선이 사용 중이 아니면 데이터 전송 시작
    • 데이터 전송 중 충돌이 검출되면 충돌 발생 사실을 모든 노드에 통보
    • 충돌이 발생하면 임의의 시간 동안 대기 후 다시 시도 (exponential backoff)

무선 랜의 다중 접근 제어 (CSMA/CA)

  • CSMA/CA(Carrier-Sense Multiple Access with Collision Avoidance)는 무선 랜(와이파이)에서 사용하는 다중 접근 제어 방식
    • RTS(Request To Send)와 CTS(Clear To Send)를 이용해 한 쌍의 노드 사이에만 데이터 전송이 이루어지도록 함
    • 채널이 비어 있는지 확인하고, 비어 있으면 RTS를 보내고 CTS를 받으면 데이터 전송
    • 충돌을 피하기 위한 사전 조치(avoidance)에 중점

흐름 제어 (Flow Control) – 슬라이딩 윈도우 프로토콜

  • 송신측은 각 프레임에 순차 번호(sequence number)를 매김
  • 순차 번호 및 오류 검출 코드를 프레임에 포함해 순서대로 전송
  • 수신측은 각 프레임에 대한 응답(ACK)을 프레임으로 회신
  • 슬라이딩 윈도우: 송신측이 응답을 받지 않고도 연속해 전송할 수 있는 프레임 개수 제한
  • 응답을 받지 못한 프레임은 재전송

오류 검출 (Error Detection)

  • 패리티 비트(Parity Bit)
    • 가장 간단한 오류 검출 코드
    • 데이터의 1의 개수가 짝수(짝수 패리티) 또는 홀수(홀수 패리티)가 되도록 1비트 추가
    • 단일 비트 오류 검출 가능, 2비트 이상 오류는 검출 불가
  • 체크섬(Checksum)
    • 여러 데이터 블록의 합을 이용해 오류 검출
    • 송신측은 데이터 블록의 합을 계산해 체크섬으로 전송 데이터에 추가
    • 수신측은 받은 데이터의 합을 계산해 체크섬과 비교, 불일치 시 오류로 간주
    • 여러 비트의 오류 검출에 사용, 하지만 완벽하지는 않음



IP 네트워크와 주소지정

프로토콜과 프로토콜 스택

  • 프로토콜(Protocol)
    • 서로 다른 컴퓨터 사이에 데이터를 주고받기 위한 약속
    • 하드웨어, 데이터 표현 방식 등이 다를 수 있으므로 표준 프로토콜을 정해 “규약”을 따름
    • 주소 지정, 데이터 흐름 제어, 연결 제어, 캡슐화, 다중화 방식 등을 규정
  • 프로토콜 스택(Protocol Stack)
    • 여러 계층의 프로토콜이 쌓여서 복잡한 통신을 지원
    • 이메일 메시지에 보낸 사람/제목 포함, 특정 파일 지정, 여러 컴퓨터의 매체 공유, 장비 연결 방식 등 다양한 통신 문제를 계층별로 해결

OSI 모델과 인터넷 프로토콜

  • OSI 7계층 모델
    • Application, Presentation, Session, Transport, Network, Data Link, Physical 계층으로 구성
  • 인터넷 프로토콜 스택
    • Application, Transport(TCP/UDP), Internet(IP), Link(Device Driver) 등으로 단순화
  • 캡슐화(Encapsulation)
    • 각 계층에서 데이터에 헤더를 추가하며 하위 계층으로 전달
    • 실제 전송 시, 하위 계층부터 상위 계층 순서로 헤더가 붙음

인터넷 주소 체계

  • IP 주소는 4바이트(32비트)로 구성, 각 바이트는 점으로 구분
  • 클래스별 구조
    • Class A: 1~126, subnet mask 255.0.0.0, NET ID 1바이트, HOST ID 3바이트
    • Class B: 128~191, subnet mask 255.255.0.0, NET ID 2바이트, HOST ID 2바이트
    • Class C: 192~223, subnet mask 255.255.255.0, NET ID 3바이트, HOST ID 1바이트
    • Class D: 224~239, 멀티캐스트 주소
    • Class E: 240~254, 예약

CIDR (Classless Inter-Domain Routing)

  • 주소지정 방법의 제한 완화 및 효율적 라우팅을 위해 고안(IETF, 1993)
  • CIDR 표기법
    • 네 부분의 십진수 IP주소 + 슬래시(/) + 0~32 이하 정수
    • 슬래시 뒤 숫자는 netmask에서 상위 몇 비트를 네트워크 주소로 사용하는지 의미
    • 예: 172.18.0.0/24 → 24비트가 네트워크 주소, 나머지 8비트가 호스트 주소
    • 할당 가능한 IP 주소 범위: 172.18.0.1 ~ 172.18.0.254

포트(Port)와 소켓(Socket)

  • 하나의 IP 주소에도 여러 개의 포트가 연결될 수 있음
  • 포트는 네트워크에서 각 애플리케이션(서비스)을 구분하는 논리적 번호
  • IP 주소와 포트 번호의 조합(IP:Port)이 하나의 소켓을 구성
    • 예시: 192.168.0.1:8080
    • 소켓 = IP 주소 + 포트 번호
  • 클라이언트와 서버가 통신할 때 각자의 소켓(IP+Port)로 연결
    • 예: 클라이언트(IP1:5000) → 서버(IP2:80, 웹서버), 서버(IP2:25, 메일서버)
  • 대표적인 well-known port
프로토콜TCPUDP
FTP20, 21
SSH22
Telnet23
SMTP25
DNS5353
HTTP80
POP3110
NTP123123
IMAP4143
HTTPS443
DHCP 67, TFTP 69, SNMP 161

TCP

TCP 연결 설정과 데이터 전송

  • TCP는 신뢰성 있는 연결 지향형 프로토콜
  • 연결 설정(3-way handshake):
    1. 클라이언트가 서버에 SYN 패킷 전송(연결 요청)
    2. 서버가 SYN+ACK 패킷으로 응답(연결 수락)
    3. 클라이언트가 ACK 패킷 전송(연결 확립)
  • 데이터 전송 시 각 패킷에는 순서번호(Seq)와 확인응답번호(Ack)가 포함
  • 송신 측이 데이터를 보내면, 수신 측이 ACK로 응답
  • 신뢰성 있는 데이터 전송을 위해 각 패킷에 대한 확인과 재전송이 이루어짐

TCP 전송 오류 제어

  • 송신 측이 데이터를 전송한 후, 일정 시간 내에 ACK를 받지 못하면 타임아웃 발생
  • 타임아웃 시 해당 데이터(Seq=31 등)를 재전송
  • 수신 측이 ACK로 정상 수신을 알리면, 송신 측은 다음 데이터 전송
  • 중복 ACK, Go-back-N, 순서 제어 등 다양한 오류 제어 기법 사용

TCP 연결 해제

  • 연결 해제는 4-way handshake로 진행
    1. 한쪽에서 FIN 패킷 전송(연결 해제 요청)
    2. 상대가 ACK로 응답
    3. 상대도 FIN 패킷 전송(연결 해제 동의)
    4. 처음 요청자가 ACK로 응답(연결 종료)
  • 데이터가 모두 전송된 후, 양쪽에서 순차적으로 FIN과 ACK를 주고받으며 연결을 안전하게 종료

UDP

데이터그램 분실

  • 송신지(source)에서 4, 3, 2, 1 순서로 데이터그램(패킷)을 전송
  • 네트워크를 거치며 중간 라우터에서 3번 데이터그램이 분실
  • 수신지(destination)에는 4, 2, 1번 데이터그램만 도착
  • UDP는 데이터그램 분실에 대한 복구 기능이 없으며, 순서 번호 기능도 없어 분실 여부를 자체적으로 확인할 수 없음
  • 데이터그램 분실은 네트워크 혼잡, 버퍼 오버플로 등 다양한 원인으로 발생할 수 있음
  • 이미지 image.png

데이터그램 도착 순서 변경

  • 송신지에서 4, 3, 2, 1 순서로 데이터그램을 전송
  • 서로 다른 경로를 통해 데이터그램이 전달되면서, 일부 데이터그램이 먼저 도착
  • 수신지에서는 2, 1, 4, 3 순서로 데이터그램이 도착
  • UDP는 데이터그램의 도착 순서를 보장하지 않으며, 순서가 바뀌어 도착하는 경우도 발생
  • 순서 보장이 필요한 경우 응용 프로그램 레벨에서 별도의 순서 번호 처리 및 재정렬이 필요
  • 이미지 image.png

네트워크 주소의 종류와 의미

IP 주소

  • 네트워크 상에서 각 컴퓨터(호스트)를 식별하는 논리적 주소
  • 예시: 173.168.16.11
  • 네트워크 통신에서 목적지와 출발지를 지정할 때 사용

루프백(Loopback) 주소

  • 자신의 컴퓨터를 가리키는 특수한 IP 주소
  • 예시: 127.0.0.1 (localhost)
  • 네트워크 장치를 거치지 않고, 내부적으로 자기 자신과 통신할 때 사용
  • 소프트웨어 테스트, 개발 환경 등에서 활용

MAC 주소

  • 네트워크 인터페이스 카드(NIC)에 할당된 고유한 물리적 주소
  • 예시: 28:05:FF:58:31:05
  • 데이터 링크 계층에서 장치 식별에 사용
  • 제조사에서 하드웨어적으로 부여, 전 세계에서 유일



소프트웨어공학이란 무엇인가?

소프트웨어공학(Software Engineering)

  • 학문적 의미
    • 높은 품질의 소프트웨어를 효율적으로 개발하는 방법을 탐구하는 학문/연구 분야
  • 실천적 의미
    • 소프트웨어를 제품화함에 있어서 적용할 수 있는 품질보증 및 개선 활동을 규정하는 프로세스
  • IEEE 정의
    • “The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software”
    • “Multi-person construction of multi-version software”

소프트웨어의 품질

  • 중요 임무를 수행하는 시스템
    • 인명 손실이나 재해 등 큰 위험이 소프트웨어 결함에서 비롯될 수 있음
    • 예: 화성탐사로봇의 priority inversion 문제
  • 일반적인 시스템
    • 소프트웨어 결함은 비즈니스에 큰 타격을 줄 수 있음
    • 예: 민감정보 유출, 제품 리콜, 서비스 다운타임으로 인한 고객 유실 등

소프트웨어 품질 보증의 어려움

  • (제조업과 달리) 검증을 위한 프로토타입 제작과 양산 단계를 구별하기 어려움
    • 소프트웨어는 개발활동이 곧 생산활동
  • 코드의 변경과 개선이 끊임없이 일어남
    • 형상을 달리하며 지속적으로 진화하는 시스템
  • 통제된 공정을 적용하기 어려움
    • 많은 개발자들이 제품 코드에 접근할 필요
    • 잦고 유연한 릴리스(딜리버리 퍼포먼스)가 비즈니스 경쟁력에 직결

소프트웨어 개발 프로세스 성숙 모델

  • 소프트웨어 개발 조직의 역량을 가능한 한 객관적이고 정량적으로 평가하는 모델
  • 대표적 모델:
    • CMMI (Capability Maturity Model Integrated)
      • 미국 국방부 주도로 1980년대 중반 개발, 현재까지 수천 개 기업이 평가/인증
      • 5단계 성숙도 모델:
        1. Initial (초기): 프로세스 없음, 예측/통제 불가
        2. Managed (관리됨): 프로젝트별 프로세스, 일정/비용/품질 관리
        3. Defined (정의됨): 조직 전체 표준 프로세스 수립, 프로세스 테일러링, 교육
        4. Quantitatively Managed (정량적 관리): 품질·성과·효율 등 정량적 측정 및 통제
        5. Optimizing (최적화): 지속적 개선, 혁신, 데이터 및 피드백 기반 개선
    • SPICE (Software Process Improvement and Capability dEtermination)
      • ISO/IEC 15504에 따라 규정, 프로세스 개선과 조직 평가 모델로 활용
    • 비교
      • ISO 9001, Ford Q1 등 품질경영 및 품질보증 국제규격과 비교 가능

소프트웨어 개발 및 유지관리 프로세스

  • 개발방법론: 구조적, 정보공학적, 객체지향적, 컴포넌트 위주 등 다양한 프로세스 모델 존재
  • 형상관리: 소스코드를 포함한 구성요소의 변경 통제, 기록, 추적
  • 단계별 산출물 관리: 각 프로세스 단계별 필수 산출물의 제작, 검수, 유지관리
  • 요구사항 관리: 고객 요구 및 제약사항을 이해, 명확화, 개발 및 납품 프로세스 관리
  • 테스트 및 검증: 단위/통합/인수 테스트 등 품질보증 위한 조직 및 절차 규정

소프트웨어 개발(및 품질관리)의 중요 측면

  • 도구 및 프로세스의 선택/절차 고도화보다, 설계/개발/테스트/배포/운영에 참여하는 조직원의 마음가짐이 더 중요
  • 규정된 절차와 지침 준수(귀찮더라도)
  • 점진적 개선을 위한 활동에 적극 참여
  • 모범사례(Best Practice)로부터 교훈, 조직에 맞는 프로세스 채택 및 발전, 신뢰성과 경제성 확보 노력



폭포수 모델과 애자일 모델

소프트웨어 개발방법론

  • 시스템 개발을 위해 어떤 방법을 선택할지 결정해야 함
  • 널리 알려진 접근법으로는 폭포수(waterfall) 모델, 애자일(agile) 모델이 있음
  • 공통 요소가 많지만, 무엇보다도 개발조직의 특성 및 환경에 맞게 조정/재정의하여 적합한 방법을 택하는 것이 중요
    • 프로젝트의 환경이나 제약사항을 고려해 기존 방법론의 한계를 극복하려는 노력이 필요

폭포수(Waterfall) 모델

  • 1960~1970년대에 제안된 가장 단순하고 고전적인 소프트웨어 개발 모델
  • 요구사항(Requirements) → 설계(Design) → 구현(Implementation) → 검증(Verification) → 유지보수(Maintenance) 순서로 단계별로 진행
  • 각 단계가 끝나야 다음 단계로 넘어가며, 이전 단계로의 loopback(피드백)도 일부 허용
  • 장점: 문서화가 잘 되어 있어 유지보수와 인수인계에 유리, 명확한 요구사항과 계획이 있을 때 적합
  • 단점: 요구사항 변경에 유연하게 대응하기 어렵고, 개발 도중 변경이 많거나 불확실성이 큰 프로젝트에는 부적합

애자일(Agile) 모델

  • 변화에 유연하게 대응하고, 반복적·점진적으로 소프트웨어를 개발하는 방법론
  • 애자일 선언문(Manifesto for Agile Software Development)
    • Individuals and interactions over processes and tools
    • Working software over comprehensive documentation
    • Customer collaboration over contract negotiation
    • Responding to change over following a plan
  • 유연하고 가벼운 조직적 움직임, 민첩한 대응을 중시
  • XP(extreme programming), Scrum, Kanban 등 다양한 실천적 방법론 포함

스크럼(Scrum)

  • 애자일 방법론의 대표적 실천 방법
  • Product Backlog(전체 요구사항) → Sprint Planning(스프린트 계획) → Sprint Backlog(스프린트 목표) → Sprint(개발 주기, 보통 2~4주) → Daily Scrum(매일 짧은 미팅) → Increment(완성된 결과물) → Sprint Review(스프린트 검토) → Sprint Retrospective(회고)로 반복
  • Dev(개발자), SM(스크럼 마스터), PO(프로덕트 오너) 등으로 구성된 자율적 팀이 중심
  • 반복적 개발과 피드백을 통해 점진적으로 제품을 완성

스크럼 방식의 장단점

  • 장점
    • 반복 주기(스프린트)마다 실행 가능한 제품을 만들어 사용자와 충분히 의견을 교환할 수 있음
    • 데일리 미팅(스탠드업)을 통해 팀원들 사이에 빠른 협조와 조율이 가능
    • 스프린트 단위의 제품 개발을 통한 업무 집중 환경 조성
    • 프로젝트 진행 현황을 모니터링하고 신속하게 목표와 결과 추정, 변화 시도가 가능
  • 단점
    • 스프린트가 끝날 때마다 실행 가능 또는 테스트 가능한 제품을 만들어야 하므로 추가 작업 소요
    • 데일리 스크럼 미팅에 매우 짧은 시간 제한이 설정되어 있음(15분)
    • 프로세스 품질 평가가 어려움(회고의 중요성이 부각)



짝 프로그래밍(Pair Programming)

  • 하나의 워크스테이션(컴퓨터, 키보드, 마우스 등)에서 두 명이 함께 코드 개발
    • Driver & Navigator 역할 분담
    • 주니어-시니어로 짝을 구성하면 지식 공유 측면에서 효율이 높다는 연구 결과가 있음
  • 개발 비용이 두 배 증가하는가?
  • 개발 효율이 두 배 이상 증가 가능한가?

코드 리뷰, 리팩토링과 클린 코드

코드 리뷰 (Code Review)

  • 개발자가 작성한 코드를 다른 개발자가 정해진 방법을 통해 검토하는 일
  • 소프트웨어의 품질을 향상, 보장하기 위한 중요한 활동
  • 형태: 상급자 검토, 집단 검토, 동료 검토 등
  • 종류: 코드 규칙 검사, 실패 검출, 워크스루(walk through) 등

좋은 코드란

  • 의도된 기능을 올바르게 수행한다고 해서 반드시 좋은 코드가 되는 것은 아님
    • 컴퓨터에게 좋은 코드 vs 사람에게 좋은 코드 구분 필요
  • 코드는 기능적 역할뿐만 아니라 외관(모습)도 중요
    • 소프트웨어는 살아 있는 개체처럼 요구사항 변화와 코드 변경이 반복됨
    • 클린 코드를 작성하려는 습관 필요
  • 코드의 형태적 명확성
    • 문법적 형식: 코딩 규약 준수 여부, 올바르고 명확한 문법 사용
    • 구문 의미적 형식: 같은 결과를 내는 코드라도 더 명확하게 의도를 드러내는 코드가 더 좋음

코드 인스펙션 (Code Inspection)

  • 3~6명 정도의 관련자들이 개발 과정에서 적당한 준비를 한 후 모여 결함을 찾기 위한 집중적 검토 모임
  • 인스펙션은 한 번에 최대 두 시간, 하루에 두 번씩으로 제한하는 것이 권장됨
  • 참가자들은 Moderator, Reader, Inspector, Recorder 등으로 역할을 분담
  • 오류를 찾기 위한 목적에 집중할 수 있도록 모두가 노력
  • 오류 발견 및 수정을 가능한 한 빠른 단계에서 하려는 노력(비용 절감, 생산성 향상)
  • Level of formality(형식성 수준)에 따라 Informal → Walkthrough → Technical Review → Inspection 순으로 공식적

코드 인스펙션에서 주의할 점

  • 오류를 발견하기 위한 목적이므로, 토론은 짧고 간단하게
  • Moderator는 논의가 본질에서 벗어나지 않도록 미팅 목적을 상기시킴
  • 오류 발견과 제거가 목적이지 개발자 비판이나 질책이 아님
    • 개인적 공격이나 비판은 절대 삼가야 함
  • 오류를 조기에 발견하고 제거하기 위한 공동의 노력임을 기억
    • 평가나 과시의 자리가 아님
profile
🌱개발 기록장

0개의 댓글