1. 네트워크 전반에 대한 이해

1) 누구를 위한 네트워크인가?

ⓛ 누가 사용하는가?

- 일반 사용자용 : 네트워크에 개인으로 접속

- 기업용 : 회사원, 교내 네트워크 등

 

② 어디에서 사용하는가?

- 가정용 : 네트워크 인프라 부분에 광 회선이나 CATV 등의 액세스 회선을 이용해 사용 → 전자우편, 웹브라우저 등

- 기업용 : 네트워크 인프라 부분에 인터넷 회선만이 아니라 사내 전용 내선 전화망, IP 네트워크망 존재, 거점 간 통신

                → 고성능과 신뢰성이 요구, 고가, 보안 측면의 고려 필요, 법인으로서의 사회성 요구

- 가정용과 기업용의 차이 : 사용자가 이용하는 애플리케이션의 종류, 네트워크의 물리적 규모

 

③ 서비스 프로바이더용 네트워크 (=통신 캐리어 사업자용 네트워크)

- 통신 사업자나 ISP의 네트워크 ex) KT, SKT, LG U+

- 네트워크 형태에서 보면 WAN의 부분이 됨 → WAN 회선을 법인 기업용으로 제공하기 위해 네트워크 구성

- 대표적인 서비스로 IP-VPN이나 광역 네트워크가 있음

- 규모가 크고 고도의 성능과 높은 신뢰성 요구됨

∴ 기업에 통신회선 서비스(WAN)를 제공하기 위해 통신 사업자나 ISP에 의해 구축됨

 

2) 네트워크의 형태

ⓛ LAN과 WAN

- LAN : 회사 건물 내부나 가정 내부의 비교적 작은 범위의 네트워크

- WAN : 멀리 떨어진 LAN 간을 이어주기 위한 것,  보다 광범위하고 규모가 큰 네트워크

             KT나 SKT의 통신 사업자망을 사용하여 구축된 네트워크

- MAN : LAN과 WAN의 중간으로 특정 지역을 담당 ex) 도시형 네트워크(CATV) 등 

 

② 인트라넷(=사내 인트라넷)

- 독립적인 사내 네트워크

- 인터넷 기술을 기업 내 인터넷이 도입하고 정보 공유나 업무 지원에 활용하는 것을 목적으로 구축된 시스템

- 일반적으로 기밀성이 높은 업무 애플리케이션이 사내 인트라넷으로 구성되어 운용됨

 

3) 네트워크의 일반적인 구성

ⓛ 네트워크의 전체 구성 (기업의 예시) 

- 대규모 거점 : 본사와 지사 ex) 서울, 대전, 부산

- 중규모 거점 : 지점  ex) 대구, 울산, 세종, 광주

- 소규모 거점 : 나머지 지역

 

② 소규모 거점 네트워크 : 세 구역 이내의 단순한 네트워크

회선, 라우터, 스위치 등 모두 단독 구성이 일반적

- LAN과 사용자 단말 : 사용자가 작성한 데이터는 OSI나 TCP/IP 프로토콜의 규칙에 따라 네트워크를 사이에 두고 통신

- WAN 회선 : 주로 인터넷 VPN 사용 → 안정성보다 비용 중시

- 스위치 : 레이어2 스위치(L2 스위치)로 구성되는 경우가 대부분 → 단순한 네트워크  

- 라우터 : 반대쪽 라우터와 가상 네트워크의 경로 확립, 외부에서 들어오는 부정 패킷에 대한 방파제 역할

- 보안 : 방화벽 → 안팎으로부터의 패킷에 대해 통과를 허가/거부하는 역할, 소규모 거점에서는 라우터의 기능(패킷 필터링 기능) 안에서 작동시키는 경우가 대부분

- IP 전화 : 소규모 거점에서는 IP 전화기만 설치됨

- 무선 LAN : 무선 LAN 클라이언트(무선 LAN 어댑터를 탑재한 사용자 PC)와 무선 LAN 액세스포인트로 구성

 

③ 중규모 거점 네트워크 : 복수 구역의 이중화 구성을 고려한 네트워크

이중화나 서버룸 확보 등이 고려됨

- WAN 회선 : 네트워크 장애 방지를 위해 이중화 구성(네트워크 장애를 고려한 예비용 구성)을 고려

- 스위치 : 네트워크 구성을 유연하게 변경할 수 있는 VLAN 기능을 가진 레이어2 스위치 필요, 레이어3 스위치를 설치하여 다른 네트워크 간 통신이 가능하도록 함

- 라우터

     - 하나의 라우터로 복수의 WAN 회선을 보유 : 라우터 자체에 장애 발생 시 WAN으로의 전체 통신 불가능

     - 복수의 라우터로 각각의 WAN 회선을 보유 : 회선이나 라우터 자체의 장애 발생 시에도 운용에 영향 X

 

④ 대규모 거점 네트워크 : 여러 구역의 모든 부분에 대한 이중화를 고려한 네트워크

모든 거점을 수용, 센터국이라고도 함

- LAN과 사용자 단말 : 전용 서버룸은 존재하지만, 최근에는 데이터 센터가 그 기능을 가짐

- 스위치 : 대규모 거점에서는 스위치의 이중화도 고려해야 함

- 보안(방화벽) : 네트워크상에 전용 기기로서 도입됨

- IP 전화 : IP 전화기는 물론 음성 서버도 설치됨

    ※ 음성 서버 : 음성 네트워크 전체의 전화번호와 IP 주소의 대응표 관리, IP 전화기 간의 통화 중계 담당

- 무선 LAN : 무선 LAN 컨트롤러 도입 → 설치 장소 관리, 무선 LAN 액세스포인트 간의 전파 간섭에 대한 대비

 

 

2. LAN 초보 입문

1) OSI 기본 참조 모델

① 프로토콜 : 컴퓨터 통신에 필요한 약속을 정한 것

② OSI 기본 참조 모델 : 여러 다른 제조사의 네틍워크 기기 간의 통신이 문제없이 이루어지기 위해 따라야 하는 국제 표준

- 각 계층의 독립성과 전문성을 높여 새로운 기술에 유연히 대응하도록 함

※ PDU(Protocol Data Unit) : OSI 기본 참조 모델 계층별 제어 정보와 데이터에 따라 구성되는 단위

    → 전송계층(세그먼트), 네트워크계층(패킷), 데이터링크계층(프레임)

 

2) LAN

① LAN의 위치

라우터를 기준으로 LAN과 WAN의 경계가 나뉨

 

② LAN의 구성요소

- 대부분 이더넷(물리계층, 데이터링크계층에 대한 규격)으로 구성 

- LAN 카드 : UTP 케이블을 꽂는 곳, 네트워크 인터페이스 카드(NIC)라고도 함

- UTP 케이블 : 두 개의 동선을 꼬아 만든 것을 1페어로 4페어의 선을 묶은 케이블 → 한쪽은 LAN카드, 다른 한쪽은 스위치에 꽂음

     - 다이렉트 케이블 : PC 단말과 스위치 간, 스위치와 라우터 간 접속용으로 사용

     - 크로스 케이블 : 스위치 간이나 라우터와 PC 단말을 직접 연결 시 사용

      ※ 최근에는 구역과 구역을 잇는 백본 부분에 광 케이블을 사용하는 것이 일반적   

- LAN 카드나 네트워크 기기는 읽기 전용 메모리(ROM)를 가지고 있어 고유의 주소를 기록 → MAC 주소

 

③ LAN의 배선

- 바닥 LAN 배선 : 바닥에 깔려있는 카펫을 걷어내면 조립식 패널이 설치되어 있고, 패널 아래에 케이블이 깔려 있음

   → 프리 액세스 영역 : 바닥에 전력, 통신용 배선 및 공기 정화 장치 등의 기기를 수납하는 마루로 배선 작업이 쉬운 구조

- 천장 LAN 배선 : 와이어 프로텍터를 따라 19인치 랙까지 닿을 수 있도록 천장 위에 배선

 

3) IP 주소

① 네트워크 기기에 주소 할당

- IP 주소 : 데이터를 네트워크 기기나 단말에 보내기 위한 식별 정보 → 라우터를 통한 다른 네트워크와 통신 시 필요

     - TCP/IP의 IP 프로토콜로 사용

     - 10진수 표기, 32비트로 구성(네트워크 주소 부분 24비트, 호스트 주소 부분 8비트)

     - 호스트 주소 부분을 전부 0으로 한 것이 네트워크 주소

     - 호스트 주소 개수 계산 시 2를 빼는 이유? 네트워크 주소(0)와 브로드캐스트 주소(255)를 남겨야 하기 때문

 

② IP 주소의 클래스

- 클래스 A~E까지 5개로 나뉘어져 있고, 사용자에게 할당되는 주소는 클래스 A~C

- 클래스 A : 주소 시작이 1~126

     - 맨 앞의 1비트가 0으로 시작

     - 네트워크 주소 부분 8비트, 호스트 주소 부분 24비트

- 클래스 B : 주소 시작이 128~191

     - 맨 앞의 2비트가 10으로 시작

     - 네트워크 주소 부분 16비트, 호스트 주소 부분 16비트

- 클래스 C : 주소 시작이 192~223

     - 맨 앞의 3비트가 110으로 시작

     - 네트워크 주소 부분 24비트, 호스트 주소 부분 8비트

- 클래스 D : 멀티캐스트용 주소 → 사용자의 주소로 할당 불가

- 클래스 E : 실험용 주소 → 사용자의 주소로 할당 불가

 

③ 할당할 수 없는 주소

- 네트워크 주소 : 호스트 주소 부분의 비트가 전부 0

- 브로드캐스트 주소 : 호스트 주소 부분의 비트가 전부 1

   ※ 브로드캐스트 : 네트워크 내의 불특정 다수에게 패킷을 동시에 전달하는 것

       → 통신 상대를 지정할 수 없을 때 사용, 여러 프로토콜이나 애플리케이션을 사용하는 경우에 발생

 

④ 특수 용도의 주소

- 루프백 주소 : 주소의 시작이 127인 것, 네트워크 상에서 자기 자신을 나타내는 인터페이스 또는 그 주소

     → 루프백 주소용으로 예약되어 있으므로 일반 사용자에게 주소로 할당할 수 없음 (일반적으로 127.0.0.1)

- ping 127.0.0.1 : 자신의 PC의 TCP/IP가 활성화되어 있는지 확인 가능 장애 원인 파악에 호라용

 

⑤ 서브넷마스크 : 클래스에 따른 네트워크 수와 호스트 수의 불균형 해결

- 하나의 네트워크로 수많은 단말을 관리하는 것은 불가능

- IP 주소 클래스의 호스트 주소 부분 중 몇 비트를 서브넷으로 할지 지정

ex) 128.1.64.0/18 : 클래스 B이므로 네트워크 16비트, 호스트 16비트 

       /18이므로 서브넷 부분이 2비트이고, 00 01 10 11 즉 4개의 서브넷으로 관리 가능, 호스트 부분은 14비트가 됨

      → 128.1.0.0 / 128.1.64.0 / 128.1.128.0 / 128.1.192.0, 할당할 수 있는 호스트 주소 개수는 2^14 - 2

- 네트워크가 늘어나면 하나의 서브 네트워크 아래에 할당할 수 있는 주소의 수는 그만큼 줄어든다.

 

⑥ 공인 주소(조직 외)와 사설 주소(조직 내)

- 공인 주소 : 전 세계 어디서도 중복되지 않도록 IANA라는 단체가 관리

- 사설 주소 : 외부와 접속하지 않는 네트워크는 임의의 주소 사용 가능

     - 클래스 A : 10.0.0.0 ~ 10.255.255.255

     - 클래스 B : 172.16.0.0 ~ 172.31.255.255

     - 클래스 C : 192.168.0.0 ~ 192.168.255.255

- 실제 네트워크 환경에서는 공인 주소와 사설 주소를 변환하는 기능을 가진 라우터나 방화벽 등이 주소 변환 시행

- 소규모의 경우 라우터가 하우팅 기능과 함께 주소 변환을 하기도 함

- 대규모의 경우 전용 방화벽을 통해 주소 변환 역할을 함

 

4) IPv6

① 개요

- IPv4(32비트)의 주소 고갈 문제에 대처하기 위해 고안

- 128비트로 구성 → 사용 가능한 주소가 무한대에 가까움

 

② IPv6 주소 표기

- 16비트별로 구분하여 16진수로 적음

- 구분 문자는 :(콜론)

- 네트워크 주소 부분에 해당하는 부분을 프리픽스라고 하여 그 길이를 /의 뒤에 씀

 

③ IPv6 주소의 생략 기법

- 각 블록의 앞에 연속되는 0은 생략 가능

- 0000은 0으로 표현

- 연속되는 0의 블록은 1회에 한하여 ::로 바꿀 수 있음

 

 

3. WAN 초보 입문

1) WAN이란?

① 외부와의 접속

- 멀리 떨어진 LAN이나 내선 전화망을 상호 연결하기 위한 광범위 대규모 네트워크 

 

② 누가 운용, 관리하고 서비스를 제공하는가?

- 국가에 통신 사업자 등록 및 신고를 한 전기 통신 사업자

- 대표적으로 KT, SKT, LGU+

- 사용자는 특정 서비스 요금을 전기 통신 사업자에게 지불하고 WAN 회선을 사용

 

③ 네트워크의 연속성을 고려한 WAN 구성

- 네트워크의 규모나 사용자가 늘어날수록 네트워크의 연속성을 고려한 WAN 구성이 필요

    → 이중화 구성 : 통상 운용에서 사용하는 회선에 장애 발생 시 백업 회선을 통해 통신 가능

- 통상 운용 WAN : 광역 이더넷망, IP-VPN망 → 보안 측면이나 통신의 신뢰성 고려

- 인터넷 VPN : 비용 측면의 장점을 가졌으나 보안 측면과 통신의 안전성에 대한 불안 요소가 남아있음

 

2) WAN에서의 등장인물

① 건물 내 장치 (액세스라우터) : WAN에 연결하기 위한 라우터

- LAN과 WAN의 패킷을 전달하는 역할

- 액세스 라우터 = WAN 라우터(기업용) = 브로드밴드 라우터(가정용)

- 소규모 거점용 라우터 : 랙의 작은 공간에 설치 가능, 크기가 작아 장애 발생 시 찾을 수 없는 경우가 발생하므로 잘 관리해야 함

 

② 회선 종단 장치 : WAN과 LAN의 전송 방식 변환

- 책임 경계를 명확히 하는 것이 중요 (어디까지가 WAN인가? 건물 내 장치의 WAN쪽 인터페이스까지가 WAN)

- 통신 사업자의 WAN 회선을 사내 네트워크에 연결하기 위해서는 종단 장치가 필요 

- 대표적인 회선 종단 장치 : ONU(가장 많이 사용), 모뎀, TA, DSU

- ONU(전기 신호와 광 신호 변환) : 광케이블(WAN쪽), UTP케이블(LAN쪽), 라우터

 

③ 액세스 회선 : WAN의 회선

- WAN의 중계국까지 접속하는 회선 → 통신 사업자로부터 제공

- 대표적인 액세스 회선 : 광 회선, 전용선, CATV(케이블TV)

 

④ WAN 중계망 : 액세스포인트 사이를 중계

- 고속도로의 인터체인지 역할 

 

3) WAN 회선 서비스

① 통신 사업자가 제공하는 통신망 : 다거점 간 통신에 적합 → 기업용

- IP-VPN망 : 통신 사업자가 자비로 구축한 폐쇄 IP망 

     - 중규모부터 대규모 거점 네트워크에서 이용

     - 보안이 중시되는 네트워크에서 이용

     - 통신 품질이 요구되는 네트워크에서 이용

※ 인터넷 VPN : 인터넷 상에서 구현된 VPN → 인터넷망에 가상적인 전용선망을 만들어 내는 기술

     - 저렴한 비용으로 구축 가능

     - 소규모부터 중규모 거점 네트워크에서 이용

     - 다점포에서 이용

- 광역 이더넷망 : 거점 사이는 각 네트워크로 연결되어 있지만, 마치 하나의 LAN처럼 네트워크 구성 가능

     - IP 상의 다양한 라우팅 프로토콜 설정 가능

     - 라우팅 정보 관리 등 운용면에서 복잡

     - 네트워크의 중요도가 높아 고도의 설정이 필요한 환경에 적합

 

② 인터넷망 

- 법인과 일반 사용자가 함께 사용

- 비용 절감을 중시하는 경우에 선택

- 보안 측면에서 취약하므로 각자 보안 대책을 세워야 함

 

 

4. 스위치 초보 입문

※ 각 기기의 역할과 기기의 설정을 이해하는 것이 중요하다.

1) 리피터 허브와 브릿지

① CSMA/CD 방식 : 허브가 케이블에 데이터를 보내기 위한 규칙

- 허브(=리피터 허브) : PC나 네트워크 기기 등의 단말에서 LAN 케이블을 한곳에 모아 통신 데이터를 중계하기 위한 기기 → OSI 1계층

- CS(Carrier Sense) : 항상 귀기울인다. → 항상 전송로 상의 모든 신호를 듣고 있어 다른 단말이 전송로를 사용하고 있는지 확인

- MA(Multiiple Access) : 누구라도 송신할 수 있다. → 송신하고 싶은 단말은 통신하지 않는 것이 확인된 모든 단말에 언제든 송신 가능

- CD(Collision Detection) : 충돌을 검출한다. → 충돌 발생 시 데이터가 손실되므로 정상적인 정보를 다시 보내기 위해 충돌을 검출해야 함

 

② 콜리전 도메인 : CSMA/CD 방식에서 데이터 손실이 발생하는 범위

- 콜리전 도메인 안에서는 한 번에 일대일 통신만 가능 → A가 B에게 송신하는 동안 다른 단말은 데이터 송신 불가

- 2000년대 이후 네트워크 환경 변화로 허브만으로는 액세스 제어 불가 (충돌 문제 발생)

- 하나의 콜리전 도메인 안에 여러 대의 단말이 존재하는 것이 문제   콜리전 도메인을 작게 나누어 포함된 단말을 줄이면 될 것

    → 스위치와 브릿지에서 구현 가능 (OSI 2계층)

 

③ 콜리전 도메인을 분할할 수 있는 브릿지

- 브릿지의 필터링 기능 : 프레임 내의 MAC 주소를 평가하여 그 프레임을 브릿지를 넘어 중계할 것인지 판단하는 기능

    → 네트워크 간의 부릴요한 데이터 송신 억제, 충돌 발생 방지

- 필터링 기능의 구조와 역할

     - MAC 주소 테이블을 참조하여 필터링 처리 실시 

     - MAC 주소 테이블 : 송신측의 MAC 주소, 수신 포트를 연결한 정보

     - 네트워크를 넘어가지 못하도록 함 

         수신한 프레임 중 목적지 MAC 주소가 수신한 포트 자체에 연결되어 있을 경우 의미가 없으므로 프레임 파기

     - 트래픽을 정리하고 LAN의 중계 역할을 함

        → 목적지 MAC 주소가 수신 포트 이외의 특정 포트에 연결되어 있을 경우 프레임을 해당 특정 포트에서만 송출

 

2) 먼저 스위치의 기본을 이해하자

① 허브와 스위치

- 허브 : 장비 자체가 콜리전 도메인

     - 가지고 있는 모든 포트에게 데이터 송신

     - 수신한 데이터 신호를 전달할 뿐, 일대일 통신만 가능하여 매우 비효율적

- 스위치, 브릿지 : 각 포트가 콜리전 도메인

     - 장치 내부에 MAC 주소 테이블을 가져 필터링 처리 가능

     - 학습된 MAC 주소의 프레임은 특정 포트에만 송신되고, 다른 포트에는 영향을 주지 않음

     

② 브릿지에서 스위치로

- 프레임 분석과 전송 처리를 브릿지는 소프트웨어에서, 스위치는 하드웨어에서 함에 따라 큰 성능 차이 발생

- 스위치 : 전용 반도체 칩인 ASIC으로 프레임 처리 → 처리속도 빠름

 

③ 스위치의 포인트

- 레이어2 스위치 : 단말이 송신한 프레임을 받으면 그 프레임에 쓰여 있는 목적지(MAC주소)를 조사하여(MAC주소 테이블 정보 비교) 그 목적지가 접속되어 있는 포트에만 프레임 전송

- 접속하고 있는 단말의 MAC 주소나 접속 포트 등의 정보를 자동 학습하고 MAC 주소 테이블에 저장하여 적절한 포트에 프레임 전송

- 각 포트는 전이중 통신 → 송신과 수신이 동시에 이루어짐

위와 같이 스위치를 사용하면 그룹별로 콜리전 도메인이 분할되어 A 내에서 통신이 이루어질 때 B, C 내에서도 통신이 가능하다.

- 초기 스위치는 장치 자체가 브로드캐스트 도메인

     - 목적지 MAC주소가 브로드캐스트 주소(모든 단말을 나타냄)로 되어 있는 브로드캐스트 프레임에 대해서는 모든 포트로 전송

     - L2 스위치에서는 스위치 전체가 하나의 브로드캐스트 도메인

- MAC 주소 학습 프로세스

     - 스위치 가동 직후에는 MAC 주소테이블에 주소 등록 X

     - 데이터가 들어오면 프레임의 출발지 MAC 주소가 MAC 주소 테이블에 등록되어 있는지 확인 (등록되지 않았다면 등록)

     - 프레임의 목적지 MAC 주소가 MAC 주소 테이블에 등록되어 있는지 확인

       (등록되어 있다면 해당 포트에만, 등록되지 않았다면 모든 포트에 프레임 전송)

 

3) 조직개편, 당신이라면 어떻게 처리할까? (VLAN)

① VLAN과 브로드캐스트 도메인

- VLAN : 하나의 물리적인 네트워크를 복수의 논리적인 네트워크로 분할하는 기술 → 브로드캐스트 도메인 분할 가능

- 브로드캐스트 도메인 : 브로드캐스트 프레임이 도달하는 범위로 라우터를 넘지 않고 직접 통신할 수 있는 범위

- VLAN의 장점

     - 네트워크의 구성을 간단히 변경할 수 있음

     - 조직에 맞춰 네트워크를 분할함으로써 보안을 강화할 수 있음

     - 브로드캐스트에 의한 네트워크 대역폭 소비를 줄일 수 있음

- 포트 VLAN (=정적 VLAN) : 각각의 포트를 어떤 VLAN에 소속시킬지 고정적으로 설정

- 동적 VLAN : 스위치 포트에 접속한 사용자의 정보를 보고 VLAN을 동적으로 설정

 

② 트렁크 링크로 하나의 케이블에 여러 VLAN 프레임을 사용

- 트렁크 링크 : 여러 VLAN의 트래픽을 전송하기 위한 스위치 간 접속 전용 링크

- 태그 : 트렁크 링크를 통과시키는 프레임에 들어 있는 해당 프레임이 속해 있는 VLAN을 식별하기 위한 정보

    → ISL과 IEEE802.1Q라는 두 가지 규격이 있음 (식별 정보 첨가 및 제거)

 

③ VLAN 간의 통신

- L2 스위치만으로는 같은 VLAN에 속한 단말들만 트렁크 링크를 통한 통신 가능

- 다른 VLAN 호스트 간의 통신을 위해서는 라우팅 기능을 가진 장치 필요 → L3 스위치, 라우터

 

4) 여러 가지 스위치 종류

① 레이어3 스위치 : IP 기능

- L2스위치 + 라우팅 기능

- 여러 VLAN에 IP 주소를 할당하고 라우팅할 수 있음

- 전용 칩(ASIC)으로 하드웨어 처리가 이루어져 기존 라우터보다 빠른 패킷 전송 가능

 

② 레이어4~7 스위치 : 네트워크 부하를 분산하는 로드 밸런서

- 로드 밸런서 기능 : 부하분산 기능, 상태 확인 기능, 세션 유지 기능

 

※ 웹서버에서 응답 속도가 느려졌다는 문제는 다음 두 가지 원인을 생각할 수 있다.

- 네트워크 인프라 전체에 발생한 문제인가? → 1~3계층에서 발생한 문제

- 웹 서버 자체의 문제인가? → 웹서버 자체를 교체하거나 로드밸런서 기술을 도입해야 함

 

5) 이중화로 네트워크의 신뢰성을 높인다

① 스위치 본체의 이중화 : 운용에서 사용하는 스위치 이외에 예브 스위치를 준비해 두는 운용 방법

- 스위치 본체에 장애 발생 시 : 예비 스위치로 전환, 백업 경로를 통해 통신

- 스위치 포트나 LAN 배선에 장애 발생 시 : 예비 통신 경로로 자동 전환, 백업 경로를 통해 통신

- 이중화 실현 기술 : 스패닝 트리 프로토콜 + BPDU

 

② 스위치 단일 구성

- 스위치 본체, 포트, LAN 배선 중 장애 발생 시 외부와 구역 간 통신 불가 → 동일한 구역의 사용자 간 통신만 가능

- 이중화에 비해 저렴하지만, 신뢰성이 떨어짐

 

③ 스패닝 트리 프로토콜을 사용하지 않는 이중화 방법이 메인

- 스패닝 트리 프로토콜 문제점 : 대역의 반이 낭비되고 설계나 운용이 복잡함

- 최근 기업 네트워크에서는 스택 접속 + 링크 어그리게이션의 이중화 기술이 주로 사용됨

- 스택 접속 : 여러 대의 스위치를 논리적으로 한 대의 장체로서 인식하는 기능

- 링크 어그리게이션 : 여러 회선을 묶어 하나의 링크로 만드는 방법

 

 

5. 라우터 초보 입문

1) 네트워크 전체에서의 라우터 위치 

① 소규모 거점에서의 라우터는 가장 중요한 기기

- 소규모 거점에서의 라우터는 멀티 플레이어 : 네트워크 연결뿐만 아니라 방화벽, VPN 기능까지 담당

 

② 중/대규모 거점에서의 라우터는 네트워크 간의 다리 역할에 치중

- 다른 네트워크를 연결해 주는 것에 치중, 외부 전용(다른 거점의 네트워크)으로 특화됨

- 내부 전용(거점 내 네트워크)은 L3 스위치가 담당

 

2) 라우터의 역할과 기본 원리 

① 라우터

- WAN과 LAN의 경계선에 위치

- OSI 제 3계층에 해당 → IP 주소를 기반으로 라우팅 처리

※ 브릿지, 스위치 : 물리 주소인 MAC 주소를 기반으로 처리

 

② 라우팅

- 라우터는 자신이 가지고 있는 라우팅 테이블 상의 정보를 가지고 패킷을 라우팅함

- 라우팅 테이블

     - 목적지의 네트워크 주소

     - 목적지의 네트워크로 패키을 보내기 위한 자신의 인터페이스

     - 목적지의 네트우어크에 패킷을 보낼 때의 다음 라우터 주소

     - 목적지의 최적 경로를 선택하기 위한 값

- 정적 라우팅 방식 : 네트워크 관리자가 라우팅 정보를 하나하나 등록하는 방식

     - 라우터나 네트워크 전체에 부하를 주지 않음

     - 운용 후의 유지보수가 어려움

     - 소규모 네트워크에 적합

- 동적 라우팅 방식 : 라우팅 정보를 다른 라우터에서 자동으로 받아오는 방식

     - 라우팅 프로토콜(라우터 간에 라우팅 정보를 교환하기 위한 전용 프로토콜) 사용

     - 라우터나 네트워크 자체에 부하가 발생

     - 대표적인 라우팅 프로토콜 : RIP, OSPF, BGP4 등

 

③ 라우팅 프로토콜

- 디스턴스 벡터 알고리즘 : 인접한 라우터끼리 라우팅 정보 학습

     - 대표적인 프로토콜 : RIP (Routing Information Protocol) : 홉 수가 적은 경로를 제일 짧은 경로로 판단하여 패킷을 중계하는 방법

        ※ 홉(Hop) : 라우터 한 대를 지나는 것

     - RIP 단점 : 최대 15홉 라우터밖에 전송하지 못함 → 대규모 네트워크에서는 적합하지 않음

- 링크 스테이트 알고리즘 : 라우터 자체가 접속해 있는 네트워크에 대한 정보를 특정 범위 내에 있는 모든 라우터에 통지하고, 다른 라우터의 링크 상태를 수신한 라우터는 그 정보를 기반으로 학습하고 라우팅 테이블을 생성

     - 대표적인 프로토콜 : OSPF (Open Shortest Path First)

     - 네트워크를 계층 구조화하여 서브넷 마스크에 사용할 수 있음 → 대규모 네트워크에 적합

     - 링크 정보 데이터베이스를 가지고 각 링크에 할당된 비용에서 최적 경로(링크 비용이 최솟값)를 계산

- 패스 벡터 알고리즘

 

④ 일치하는 라우팅 정보가 없을 때 할당되는 경로

- 기본 경로 : 라우팅 테이블 내에 일치하는 라우팅 정보가 없을 때 패킷을 파기하지 않고 미리 설정해 둔 경로로 패킷을 보낼 수 있음

 

⑤ 다른 LAN 간의 접속

- 라우터는 네트워크를 분할하는 기기인 동시 분할한 네트워크를 연결하는 역할도 담당

- 라우터에 의해 분할된 네트워크에는 각각 다른 네트워크 주소가 할당됨

 

3) 라우터에도 종류가 있다

① 서비스 프로바이더용 네트워크

- 대표적인 통신 서비스 : 광역 이더넷, IP-VPN

- 코어 라우터 : 엣지 라우터에서 온 데이터를 통신 사업자망 안에서 중계

- 엣지 라우터 : 통신 사업자망 안과 고객의 구내 네트워크 연결

- 대용량 데이터, 고속 처리 요구, 고사양, 고비용

 

② WAN 네트워크

- 고객의 거점 간을 연결하기 위한 역할 담당

- 액세스 라우터 (=커스터머 엣지 라우터)

 

③ 구내에서의 라우터 → 레이어3 스위치

- 대규모 거점 네트워크, 중/소규모 거점 네트워크, 서버 팜에서 사용

 

④ 그 외의 라우터 종류

- 여러 프로토콜을 사용할 수 있는 멀티 프로토콜 라우터(기업용)

- 액세스 라우터(소규모 거점 네트워크용)

 

4) 레이어3 스위치와의 차이점 

① L3 스위치와의 차이

- 라우터 : 패킷 전송을 소프트웨어적으로 처리 → CPU와 메모리가 연계하여 소프트웨어에 패킷 전송 

- L3 스위치 : 패킷 전송을 하드웨어적으로 처리 → ASIC라고 불리는 전용 칩으로 하드웨어 처리 → 빠름

 

② 라우터는 VPN이나 NAT/NAPT 기능(주소 변환) 지원

- WAN이나 인터넷 연결에 특화된 기능을 가지고 있음

- VPN 기능을 사용하여 안전한 네트워크 실현

- NAT/NAPT 기능을 사용하여 일대다 주소 변환 실현

- PPPoE 기능을 사용하여 인터넷 접속 서비스에 이용 ex) 플렛츠광

 

5) 라우터를 효과적으로 사용하기 위해서는

① 패킷 필터링

- 네트워크 계층의 데이터 단위인 패킷의 헤더에 들어 있는 정보를 기반으로 필터링 처리 실행 → 간단한 보안 기능 

② 이중화

- 중/대규모 거점 네트워크의 경우 라우터의 이중화로 신뢰성을 높이는 것이 가장 중요한 과제

- 이중화 종류

     - 여러 대의 라우터가 각각의 WAN 회선을 보유 : WAN 회선은 다른 통신 사업자에서 빌리는 것이 철칙

     - 한 대의 라우터로 여러 WAN 회선을 보유 : 신뢰성은 조금 떨어지지만 비용 측면에서 이점

         WAN 회선 자체에 장애 발생 시 백업 경로의 회선을 통해 통신 가능, but 라우터 자체에 장애 발생 시 모든 통신 불가능

 

 

6. 보안 초보 입문

1) 네트워크 보안 접근 방법

① 네트워크 보안

- 보안 전체의 시점 

     - 무엇을 보호할까? 하드웨어/소프트웨어

     - 무엇으로부터 보호할까? 외부로부터/내부로부터

- 네트워크 외부에서의 시점

- 네트워크 내부에서의 시점

 

2) 무엇으로부터 보호할까? 외부 범행의 대표 예

① 부정 침입 : 각종 업무 서버나 인증 서버, 중계 서버, 리소스(하드디스크, CPU) 등에 허가받지 못한 계정으로 접속하는 것

② 정보 도청 : 도청기를 사용하여 기밀 자료를 빼냄 

③ 스푸핑 : 부정으로 얻은 다른 사람의 정보를 이용하여 남용하는 것

④ DoS 공격 : 네트워크나 서버, 호스트 같은 단말로 대량의 데이터를 보내는 행동 → 정상적인 처리 불가능

⑤ 컴퓨터 바이러스 : 데이터나 시스템 자체를 파기하는 악질적인 것도 있음

 

3) 외부 범행의 대책

→ 외부로부터 액세스하지 못하게 만든다 → DMZ(Demilitarized Zone, 비무장지대)

① 방화벽 : 사내 네트워크와 외부 네트워크의 경계, 접속점으로 데이터의 입출력 제어, DMZ를 만들기 위해 반드시 필요한 기기

- 사내 네트워크 (=신뢰 네트워크)

- 외부 내트워크 (=신뢰할 수 없는 네트워크)

- DMZ 

 

② 방화벽의 주요 기능

- 액세스 제어 (필터링) : 악의적인 부정 액세스로부터 사내 네트워크 보호

     - 사내 → 외부 : 사내에서 허락된 애플리케이션 패킷만 통과

     - 외부 → 사내 : 사내에서 허가된 애플리케이션으로 사내 네트워크에서 외부 네트워크로 송신되었다가 다시 돌아오는 패킷만 통과

     - 외부 → DMZ : 공개 서버의 애플리케이션 패킷만 통과

     - DMZ → 외부 : 공개 서버의 애플리케이션에 송신되었다가 다시 돌아오는 패킷만 통과

- 주소 변환 : 사설 주소와 공인 주소를 변환함으로써 사내 IP 주소를 감추는 역할

- 로그 수집 : 부정 액세스에 대한 원인 분석

 

③ 방화벽의 한계

- 컴퓨터 바이러스 : 방화벽 도입만으로 막을 수 없음

     - 바이러스 대비 전용 네트워크 어플라이언스 제품 도입 → 보안 어플라이언스 

- 사내 네트워크로부터의 공격 : 방화벽 자신을 경유하지 않는 통신에 대해서는 제어 불가능

 

4) 무엇으로부터 보호할까? 내부 범행에 대비

→ 외부와 내부의 차이점은 침입할 때 인터넷망을 경유하여 방화벽을 통과하느냐 하지 않느냐의 차이

① 부정 침입 : 부정 단말이 기업 내 LAN에 직접 액세스하고 무단으로 침입

② 정보 도청

③ 스푸핑

④ 정보 유출

⑤ 컴퓨터 바이러스

 

5) 내부 범행의 대책

① 사용자 인증 : 사용자 ID나 비밀번호를 사용한 인증 방식

     - 인증 서버를 통한 인증 : 사용자 정보를 일원 관리하는 인증 서버를 통해 단말 요청 시 저장된 사용자 정보를 이용하여 인증하는 방법

     - 네트워크 기기를 통한 인증(로컬 인증) : 네트워크 기기(라우터, 스위치) 자체가 가지고 있는 인증 데이터베이스로 인증하는 방법

 

② 정보 데이터 암호화 : 중요한 정보를 암호화하고 정보 자체에 액세스 컨트롤하는 것

      → 기밀 정보를 제3자에게 도난당하는 사태를 방지하기 위해 데이터(파일)를 암호화하는 것이 가장 효과적 

 

③ 물리 보안 : 서버룸의 출입 허가를 명확히 하고, 비허가자의 침입을 막아야 함

     - 제 1관문 [종합 접수] : 사전 등록 여부 확인 후 등록 정보가 있다면 보안카드를 받아 플랩 게이트로 이동

     - 제 2관문 [플랩 게이트] : 건물 내로 들어가기 위해 접수처에서 받은 보안 카드로 인증

     - 제 3관문 [카드 리더] : 관내로 들어가기 위해 보안 카드를 출입문 카드 리더에 인증

     - 제 4관문 [카드 리더(각 구역)] : 원하는 구역에 들어가기 위해 보안 카드 인증, 서버룸 입실 시 지문 인증, 서버룸은 제한된 인원만 가능,

                                                         작업에 필요한 것 이외에는 서버룸에 반입할 수 없음

     - 제 5관문 [랙 잠금] : 랙의 자물쇠를 열고 관리하고 있는 기기를 이용해 작업 

 

5) 고도화 네트워크 활용에 대응

① 방화벽에서 UTM으로

- UTM (Unified Threat Management) : 방화벽과 VPN 기능을 기반으로 안티 바이러스, 부정 침입 방지, 웹 콘텐츠 필터링과 같은 여러 보안 기능을 통합하여 일언 관리할 수 있는 장치

- 한 대에 여러 보안 기능을 집약하여 설정이나 관리 작업 단순화

- 도입 간단, 저비용으로 구현 가능

- 한 대에 여러 기능이 집약  성능 및 확장성 높음

 

② 애플리케이션 제어 시대로

- 애플리케이션의 필요와 불필요의 판단은 사용자와 조직에 따라 다름

     - 네트워크 상에서 어떤 애플리케이션이 사용되고 있는가?

     - 네트워크의 어떤 장소에서 많은 대역이 사용되고 있을까?

     - 어떤 나라에서 들어오는 트래픽일까?

     - 어떤 애플리케이션을 허가해야 하는가?

 

③ 차세대 방화벽

- 웹 애플리케이션의 가시화와 제어 가능

- 웹을 허가한 상태에서 같은 포트를 사용하는 웹 애플리케이션의 식별과 제어 가능

 

④ 차세대 방화벽 특징

- IP 주소뿐만 아니라 사용자나 그룹(조직) 단위로 구별 가능

- 포트 번호나 프로토콜이 아닌 애플리케이션으로 식별 가능

- 애플리케이션과 함께 통과하는 위협이나 중요 데이터를 실시간으로 감지 및 방어 가능

- 애플리케이션의 우선순위 결정 가능

- 사용자의 애플리케이션 이용 상황의 가시화와 액세스 제어 실현 가능

 

⑤ 차세대 방화벽 동작

- 식별 : 특징 1, 2

- 분류 : 각 기업에서 결정한 보안 정책에 따라 이루어짐

- 제어 : 특징 3, 4, 5

 

※ 표적형 공격 : 기존에 알려진 공격과는 다른 명확한 목적을 가지고 이루어지는 사이버 공격, 기존의 보안 대책으로는 대응 불가

    → 표적형 공격 대책 보안 어플라이언스 

         - 탭 모드 : 웹 클라이언트로부터 프록시 서버에 흐르는 웹 통신을 복사해 표적형 공격 대책 보안 어플라이언스로 통신 해석

         - 인라인 모드 : 웹 클라이언트로부터 프록시 서버의 사이에 기기를 설치하여 이를 통과하는 웹 통신 감시

 

 

7. VoIP 초보 입문

1) VoIP의 기초 지식

①②③④⑤

 

 

2) IP 전화의 구성 요소

①②③④⑤

 

 

3) VoIP 시그널링 프로토콜 

①②③④⑤

 

4) 음성 품질 기초 지식

①②③④⑤

 

 

 

8. 무선 LAN 초보 입문

1) 무선 LAN이란?

①②③④⑤

 

 

2) 무선 LAN의 구조

①②③④⑤

 

 

3) 무선 LAN의 보안

①②③④⑤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'네트워크캠퍼스 > NETWORK' 카테고리의 다른 글

4주차  (0) 2024.02.12
3주차  (0) 2024.02.01
포트포워딩 실습  (0) 2024.01.26
2주차  (0) 2024.01.26
모두의 네트워크  (0) 2024.01.22

1. 포트

- 컴퓨터끼리 정보를 교환하기 위해 사용하는 가상의 논리적인 접속장소

- TCP/IP 사용 시 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용

- 포트번호를 통해 대상 IP 기기의 특정 애플리케이션 서버에 접속할 수 있도록 알려주어야 함

- 사용 가능한 포트번호는 0~65,535

※ IANA (Internet Assigned Numbers Authority) : 인터넷 할당 번호 관리기관

    → IP 주소, 최상위 도메인 등을 관리하는 단체

 

1) Well-known port : 0~1,023 

- 시스템 사용 번호 슈퍼유저 권한 필요

- 잘 알려진 특정 애플리케이션 사용을 위해 IANA에서 할당한 번호

- 강제적으로 지정된 것이 아니라 다른 용도로 사용될 수 있음

 

2) Registered port : 1,024 ~ 49,151 

- IANA에 의해 할당되고 관리됨

- 특정 프로토콜이나 애플리케이션에서 사용하는 번호

- 슈퍼유저 권한 필요 X

- 강제적으로 지정된 것이 아니라 다른 용도로 사용될 수 있음

- 대표적인 포트번호 

  • 1433 (MSSQL) : MS에서 제공하는 SQL을 사용하기 위한 포트
  • 3306 (MYSQL) : RDBMS를 사용하기 위한 포트
  • 3389 (원격 접속) : 윈도우 원격 접속을 하기 위한 포트
  • 8080 (HTTP 대체) : HTTP 포트(80)를 대체하기 위한 포트

- 그 외 등록된 포트 

1080 SOCKS 프록시
1194 OpenVPN
1900 SSDP, UPnP 장치 검출 서비스
3479 플레이스테이션 네트워크
3690 Subversion
5228 구글 안드로이드 메시징 프로토콜
5353 Multicast DNS
6379 Redis 서비스
9100 네트워크 프린팅 프로토콜
17500 Dropbox LanSync 프로토콜

 

3) Dynamic port : 49,152 ~ 65,535 

- 개인 또는 사용자 정의 서비스로 임시 할당되는 포트

- 사용 시 동적으로 할당되는 동적 포트로 서버가 클라이언트를 식별할 때 사용

- 특정 용도가 지정되어 있지 않고, 어느 프로그램에서나 사용가능한 포트

- netstat 명령어로 사용 중인 동적 포트 확인 가능

 

 

2. 암호화, 복호화

1) 암호화 : 평문을 암호문으로 변환하는 과정

① 단방향 암호화 

- 암호화는 수행하지만, 절대로 복호화가 불가능함 → 해킹이 되어도 복호화가 힘든 것이 특징

- 대표적인 방식 : 해시함수

    → 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환시켜주는 함수

    → 입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환

    →  동일한 값이 입력되면 언제나 동일한 출력값을 보장

    →  대표적인 해시함수 : MD, SHA 등

- MD (Message Digest function 95) 알고리즘 

    → MD2 : 8비트 컴퓨터에 최적화

    → MD4, MD5 : 32비트 컴퓨터에 최적화

    → MD5는 MD4의 확장판으로 속도는 느리지만 데이터 보안성이 더 뛰어남

- SHA (Secure Hash Algorithm)

    → 160비트의 값을 생성하는 해시 함수로 MD4가 발전한 형태

    → MD5보다 조금 느리지만 좀 더 안전함

    → SHA1 : 가장 많이 쓰이는 SHA 해시함수, 충돌쌍 문제(두 데이터에 대한 해시 결과값이 같은 것) 발생

    → SHA2 : SHA1을 대체하는 해시암호, 데이터의 무결성(데이터 수정 혹은 조작 가능성) 파악 가능, 보편적으로 사용

         - SHA-256 : 블록체인에서 가장 많이 채택됨, 속도가 빠르고 안정성이 높음

         - SHA-512 : 512비트 해시 값 생성, 길이 확장 공격에 대해 취약

 

② 양방향 암호화

- 암호화와 복호화 모두 가능 → 재사용성이 있는 정보

- 데이터를 인가된 사용자만 볼 수 있도록 하기 위한 장치

- 대칭키 방식과 비대칭키 방식으로 나눠짐

 

2) 복호화 : 암호문을 평문으로 변환하는 과정

 

 

3. 대칭키(=비공개키) 암호 

- 암호화와 복호화에 사용하는 키가 동일한 암호화 방식 

- 송수신자는 서로 공유된 대칭키(=공통키)를 가지고 통신

- 키 크기가 상대적으로 작고 내부 구조가 단순하여 시스템 개발 환경에 용이하고 속도가 빠름

- 동일한 키를 공유해야 하기 때문에 키 관리의 어려움이 있고, 잦은 키 변경이 있는 경우 불편함을 초래함

- 부인방지기능을 제공할 수 없음

※ 대표 알고리즘

① DES 

- IBM에서 개발하고 미국에서 국가 표준 암호 알고리즘으로 지정한 대칭키 암호 알고리즘

- 평문을 64비트로 나누고 56비트 키를 이용하여 다시 64비트의 암호문을 만들어 내는 알고리즘

- 블록 암호 기법으로 16 단계의 Feistel Network를 거쳐 암호화 수행

Feistel Network

- 안전성은 주로 S-box들에 의존(혼돈 효과), 각 S-box는 6비트를 4비트로 매핑

- 키 사이즈가 작아 현실적인 시간 안에 키 복구 공격이 가능

 

② 3DES

- DES 알고리즘을 3중으로 만들어 DES를 보완한 암호 알고리즘

- 암호화-복호화-암호화 방법으로 암호화 진행

- 암호화 강도는 DES 알고리즘의 2배 → 컴퓨터 발전 속도에 비해 만족할 만한 수준이 아니어서 오래 사용되지 못함

 

③ AES

- 128비트 블록 암호 기법

- 128, 192, 256 비트를 지원하는 암호화 키 사이즈

- 트리플DES보다 안전하고 효율적인 알고리즘

- SPN(Substitution-Permutation Network, 대입 치환)을 사용하여 암호화하는 방법

예시) 64비트 블록, 8비트 S-box

입력을 쪼갠 상태에서 동시에 라운드 진행이 가능, 즉 병렬연산이 가능하다는 장점이 있다.

 

④ SEED

- 전자상거래, 금융, 무선통신 등에서 전송되는 중요한 정보를 보호하기 위해 순수 국내 기술로 개발한 128비트 블록의 암호화 알고리즘

- 국내에서 개발된 많은 암호 프로그램과 보안 솔루션에서 사용됨

 

⑤ IDEA

- 128비트 암호키 사용

- 64비트 평문을 8라운드를 거쳐 64비트 암호문으로 만드는 방식

- 모든 연산이 16비트 단위로 이루어지도록 하여 16비트 프로세스에서 구현 용이

- 주로 키 교환에 쓰임

 

⑥ RC5

- 비교적 간단한 연산으로 빠른 암호화와 복호화 기능 제공

- 모든 하드웨어에 적합

- 입출력, 키, 라운드 수가 가변인 블록 알고리즘

- 32, 64, 128비트 키가 사용되며 속도는 DES의 약 10배

 

 

4. 비대칭키(=공개키) 암호

- 암호화(공개키)와 복호화(개인키)에 사용하는 키가 다른 암호화 방식 

- 송수신자 모두 한쌍의 키(공개키, 개인키)를 갖게 됨

- 공개키 : 모든 사람이 접근 가능한 키

- 개인키(=비밀키) : 각 사용자만이 갖고 있는 키

- 공개키는 따로 키 교환이나 분배를 할 필요가 없어 키 관리에 어려움이 없으나 개인키로만 복호화가 가능하여 속도가 느림

- 공개된 공개키가 진짜 공개키 주인의 것인지 확인할 방법이 없어 중간자 공격에 취약

- 부인방지기능을 제공할 수 있음 (전자서명 기법)

※ 대표 알고리즘

① RSA

- 비대칭 알고리즘 중 가장 많은 지지를 받으며 오늘날 산업 표준으로 사용

- 매우 큰 정수의 소인수분해가 난해하다는 점을 이용한 암호 알고리즘

    • 두 개의 큰 소수 p, q를 랜덤하게 생성

    • gcd(𝑒,𝜙 𝑛 ) = 1을 만족하는 공개키 e 생성

    • 𝑒 ⋅ 𝑑 = 1 𝑚𝑜𝑑(𝜙 𝑛 ) 이 되는 개인키 d 생성

 

② ElGamal

- 이산대수문제가 어렵다는 것에 기반한 공개키 암호 시스템

- RSA와 다르게 같은 메시지에 대해 암호화할 때마다 서로 다른 암호문이 생성됨

- 디지털 서명, 키 교환 등에 사용될 수 있지만 속도가 가장 느리다는 단점

 

③ 타원곡선 암호(ECC)

- RSA를 대체할 차세대 공개키 암호기술

- 짧은 키로도 동일한 암호 성능을 가져 컴퓨터 성능이 낮아도 암호 성능을 유지할 수 있음

- 무선 환경과 같이 전송량과 계산량이 상대적으로 열악한 환경에 적합

 

 

5. HTTPS가 어떻게 암호화된 통신을 할 수 있는가?

1) HTTPS (Hypertext Transfer Protocol Secure)

- 웹에서 이루어지는 통신을 정의한 프로토콜

- TCP 프로토콜의 일종인 HTTP에 보안 기능을 추가, 즉 암호화된 TCP(TLS)를 사용하여 통신

- 기본적으로 443 포트를 사용함

- HTTPS 프로토콜을 사용하기 위해서는 인증기관(CA)으로부터 SSL 인증서를 발급받아야 함

 

2) SSL과 TLS : HTTPS의 원천 기술, 안전한 계층을 웹 통신에 추가하는 방식

- SSL (Secure Socket Layer)

- TLS (Transport Layer Security) : SSL의 개선 버전, 대부분 TLS 사용

→ 위 기술을 수행하기 위해 웹 서버에 SSL/TLS 인증서를 설치해야 함

 

3) SSL 인증서 발급 과정

① 서버 : 서버의 공개키와 비밀키 생성

② 서버 → CA : 인증서를 발급하기 위해 아래의 정보들을 전달

                          - 생성한 서버의 공개키

                          - 서버의 각종 정보

③ CA : 서버로부터 받은 정보와 공개키를 담아 SSL 인증서 발급

④ CA : 발급한 인증서를 암호화하기 위해 CA의 공개키와 비밀키 생성 → CA의 비밀키를 이용해 SSL 인증서 암호화

⑤ CA → 서버 : 암호화한 SSL 인증서를 다시 서버에 전달

 

4) SSL Handshake

- 서버와 클라이언트가 주고받을 데이터의 암호화 알고리즘 결정

- 서버와 클라이언트가 주고받을 데이터의 암호화를 위한 동일한 대칭키를 얻음

먼저, HTTPS는 TCP 기반의 프로토콜이기 때문에 SSL Handshake에 앞서 연결을 생성하기 위해 TCP 프로토콜의 3-way handshake를 수행한다. 위 그림에서 노란색 부분이 SSL Handshake 과정이다.

 

① Client Hello : 클라이언트에 해당하는 브라우저가 웹 서버에 접속

▷ 접속 시 전송하는 패킷 내용

    - 브라우저가 사용하는 SSL 혹은 TLS 버전 정보

    - 브라우저가 지원하는 암호화 방식 모음 (Cipher Suite)

       ※ cipher suite : 보안의 궁극적 목표를 달성하기 위해 사용하는 방식을 패키지 형태로 묶어놓은 것

    - 브라우저가 순간적으로 생성한 임의의 난수

    - SSL 핸드쉐이크가 완료된 상태라면 그때 생성된 세션 아이디

    - 기타 정보

 

② Server Hello : 서버는 클라이언트에 응답

▷ 접속 시 전송하는 패킷 내용

    - 브라우저의 암호화 방식 정보 중 서버가 지원하고 선택한 암호화 방식 

    - 서버의 공개키가 담긴 SSL 인증서 (CA의 비밀키로 암호화되어 발급된 상태)

    - 서버가 순간적으로 생성한 임의의 난수

    - 클라이언트 인증서 요청 (선택사항)

 

③ Client : 서버의 SSL 인증서가 올바른지 확인

- 내장된 CA 공개키로 암호화된 인증서를 복호화 → 정상적으로 복호화되었다면 CA가 발급한 것이 증명됨

- 등록된 CA가 아니라면 브라우저 경고를 보냄

▷ 접속 시 전송하는 패킷 내용

     - Certificate : Server와 SSL 인증서 내용이 들어 있음

     - Server Key Exchange : Certificate 내의 SSL 인증서에 서버의 공개키가 없는 경우 서버가 직접 전달함을 의미

     - Server Hello Done : server가 행동을 마쳤다는 의미

 

④ Client : premaster secret 생성

- 브라우저는 자신이 생성한 난수와 서버의 난수를 사용하여 premaster secret 생성

- Client Key Exchange : 웹 서버 인증서에 딸려온 웹사이트의 공개키로 premaster secret을 암호화하여 서버로 전송

 

⑤ Server : premaster secret 복호화

- 서버는 비밀키로 브라우저가 보낸 premaster secret 값을 복호화

- 이를 사용하여 브라우저와 만들어진 연결에 고유한 값을 부여하기 위한 세션키 생성

- 세션키를 통해 브라우저와 서버 사이에 주고받는 데이터를 암/복호화

 

⑥ Client / Server : SSL Handshake를 종료하고 HTTPS 통신 시작 

- Change Cipher Spec : 클라이언트가 SSL Handshake의 완료를 알림

- 이후의 HTTPS 통신은 대칭키 방식 사용

 

 

6. Telnet으로 아무 웹페이지나 http 요청 보내보기

먼저, telnet으로 www.google.com 에 80번 포트로 연결을 진행했다.

GET / HTTP/1.1 명령을 통해 GET 방식으로 HTTP 요청을 보내보면 위와 같은 정보를 확인할 수 있다. 

 

1) HTTP Request

- 서버에 대한 요청을 의미

- HTTP 구조에서 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 함

 

▷ Request 구성요소

METHOD PATH HTTP_VERSION
HTTP_HEADERS

MESSAGE_BODY

 

① Method : 서버에 요청 시 수행하고자 하는 동작을 나타냄

    - OPTIONS : 요청하는 리소스가 허용하는 메소드 목록 반환

    - HEAD : GET 메소드와 동일, Response의 Body 부분은 받지 않고 Header만 받음

    - GET : 리소스 요청 ex) 게시물/프로필 보기, 이미지 등

    - POST : 특정 리소스 생성 및 데이터 추가를 위해 값을 제출할 때 사용 ex) 게시물/프로필 생성 등

    - PUT : 특정 리소스의 내용을 보낸 값으로 설정 ex) 생성/업데이트 등

    - PATCH : 특정 리소스의 내용 중 보낸 값의 key만 변경 ex) 게시글 업데이트 등

    - DELETE : 특정 리소스 삭제 ex) 게시물 삭제 등

    - TRACE : 요청받은 값을 Response의 Body로 다시 클라이언트에게 되돌려줌

 

② Path : 사용자가 서버에 요청하는 웹 리소스의 경로

 

③ Version : HTTP의 버전

 

④ Header : 서버에 추가 정보를 전달하는 데이터 부분, 사용자와 서버가 상호작용하기 위한 정보

                   ex) 사용자 데이터의 처리 방식 및 형식, 사용자를 식별하기 위한 쿠키 정보 등

    -  Host : 데이터를 보내는 서버의 주소

    -  Cookie : 사용자를 식별하기 위해 사용하는 정보

    -  User-Agent : 사용자가 사용하는 프로그램의 정보

    -  Referer : 페이지 이동 시 이전 URI의 정보

    -  Content-Type : 사용자가 전달하는 데이터의 처리 방식과 형식, 사용자와 서버 간의 데이터 처리 방식이 일치해야 함

 

⑤ Body : 사용자가 입력한 데이터가 서버에 전달 시 나오는 데이터를 담는 부분

 

2) HTTP Response

- 사용자의 요청에 대한 서버의 응답을 의미

- HTTP 구조에서 각각의 줄은 CRLF로 줄 바꿈이 이루어져야 함 

 

▷ Response 구성요소

HTTP_VERSION STATUS_CODE REASON_PHRASE
HTTP_HEADERS

MESSAGE_BODY

 

① Version : HTTP의 버전

 

② Status Code : 사용자의 요청에 대한 서버의 처리 결과

    - 200번 영역 : 사용자의 요청에 대한 서버의 처리가 성공하였음을 나타냄

       º 200 OK

       º 201 Created

     - 300번 영역 : 사용자가 요청한 리소스가 다른 경로로 변경된 경우

       º 301 Moved Permanently

       º 302 Found

     - 400번 영역 : 사용자가 서버에 요청하는 구조 또는 데이터가 잘못되었음을 나타냄

       º 400 Bad Request

       º 403 Forbidden 

       º 404 Not Found 

       º 405 Method Not Allowed

     - 500번 영역 : 서버의 에러와 관련된 영역

       º 500 Internal Server Error

       º 503 Service Unavailable

 

Header : 사용자와 상호작용하기 위한 데이터를 담는 부분

                   ex) 웹브라우저에서 서버의 응답 데이터를 처리하는 방식 및 형식에 대한 정보, 서버에서 사용자를 식별하기 위한 쿠키 정보 등 

    - Date : 메세지 생성 일자

    - Connection : Server/Client 간의 연결 옵션

    - Content-Type : 서버의 응답 데이터를 웹 브라우저에서 처리할 방식과 형식

    - Content-Length : 서버가 사용자에게 응답해주는 데이터의 길이

    - Expires : 리소스가 지정된 일시까지 유효함을 나타냄

    - Server : 서버가 사용하는 소프트웨어의 정보

    - Allow : 허용되는 Method 목록을 사용자에게 알려줄 때 사용

    - Location : 300번 영역의 응답 코드 사용 시 변경된 웹 리소스의 주소를 나타냄

    - Set-Cookie : 사용자에게 쿠키를 발급할 때 사용

    - Accept-Ranges : 부분 요청에 지원을 알리기 위해 서버에 의해 사용되는 표식

    - Vary : 캐시된 응답을 향후 요청들에서 오리진 서버로 새로운 요청 헤더를 요청하는 대신 사용할 수 있는지 여부를 결정

    - Transfer-Encoding : 사용자에게 entity를 안전하게 전송하기 위해 사용하는 인코딩 형식 지정

 

④ Body : 서버가 사용자에게 응답하는 데이터를 담는 부분

'네트워크캠퍼스 > NETWORK' 카테고리의 다른 글

4주차  (0) 2024.02.12
네트워크 쉽게, 더 쉽게  (0) 2024.02.01
포트포워딩 실습  (0) 2024.01.26
2주차  (0) 2024.01.26
모두의 네트워크  (0) 2024.01.22

1. Spring MVC

1) 개념

- 스프링 프레임워크의 하나로 웹 애플리케이션을 개발할 대 사용하는 프레임워크

- Model-View-Controller 아키텍처를 따르며 이를 통한 웹 애플리케이션의 각각의 역할을 분리하여 개발하고 유지보수할 수 있음

 

2) 주요 컴포넌트

① DispatcherServlet 

- 스프링 MVC의 핵심 컴포넌트

- 클라이언트의 요청을 받아들이고 적절한 핸들러에게 요청 전달

- 컨트롤러에서 반환된 결과를 HTTP 응답으로 변환하여 클라이언트에게 반환

② HandlerMapping

- DisptcherServlet이 클라이언트 요청을 받았을 때 요청을 처리할 핸들러(Controller)를 찾아줌

③ Controller

- 클라이언트의 요청을 처리하고, 요청에 대한 비즈니스 로직을 실행하여 결과 반환

④ ViewResolver

- Controller에서 반환한 결과를 보여줄 View를 찾아주는 역할

⑤ View

- Controller에서 반환한 결과를 실제로 화면에 출력하는 역할

 

3) 실행 흐름

① 클라이언트 요청이 DispatcherServlet으로 들어온다.

DispatcherServlet은 HandlerMapping을 이용하여 어떤 Controller가 요청을 처리할지 결정한다.

③ 선택된 Controller는 클라이언트의 요청에 대한 비즈니스 로직을 실행하고, 결과를 반환한다.

④ Controller가 반환한 결과는 ViewResolver를 통해 적절한 View로 변환된다.

⑤ 변환된 View는 클라이언트에게 응답으로 반환된다.

 

4) 구성 요소

① Model : Controller에서 생성된 결과를 담는 객체 → View에서 출력할 데이터를 담아서 전달

② View : Controller에서 생성된 Model을 출력하기 위한 템플릿 역할

③ Controller : 클라이언트의 요청을 받아 Model 객체를 생성하고, 생성된 Model을 View에 전달

 

'네트워크캠퍼스 > SPRING' 카테고리의 다른 글

Request Handling  (0) 2024.02.05
REST API  (0) 2024.02.01
Spring Core 모듈  (0) 2024.01.31
SOLID 원칙  (0) 2024.01.31
스프링 프레임워크  (0) 2024.01.31

먼저, 해당 폴더에서 CLI 창 열어주고 init으로 초기화 (.git 폴더 생성)

config로 깃허브 계정 연결

깃허브에서 레포지토리 생성

레포지토리 생성 후 해당 주소 복사

remote로 origin이라는 이름의 원격 저장소 추가

add와 commit, push 진행

Settings에서 Default branch 설정 가능

clone할 때는 마지막에 . 붙여서 현재 디렉토리에 받아주기

받아올 때마다 git pull 원격저장소명으로 풀해주기 

 

'네트워크캠퍼스 > GIT, GITHUB' 카테고리의 다른 글

git-flow  (0) 2024.02.20
풀 리퀘스트  (0) 2024.02.20
.gitignore 파일의 필요성  (0) 2024.01.12
  (0) 2024.01.12
클론  (0) 2024.01.11

1. Spring Core

→ 스프링 프레임워크의 기본적인 기능 담당

→ IoC 컨테이너와 DI 컨테이너를 제공하여 객체지향적인 설계를 촉진하고, 애플리케이션의 유연성과 확장성을 향상시킴

위 그림과 같이 애너테이션을 붙이는 방법만으로 객체 A에서 필요한 객체를 직접 생성하는 방식이 아닌 스프링 컨테이너에서 받아오는 방식으로 코드를 작성할 수 있게 된다.

 

1) IoC (Inversion of Control) 컨테이너

- 객체 생성과 관리 담당

- 빈(Bean) 객체 생성, 의존성 주입(DI) 수행

- 빈의 생명주기 관리

- XML, 애너테이션, 자바 설정파일을 사용하여 빈의 구성 정의

 

2) DI (Dependency Injection) 컨테이너

- 빈 객체간의 의존성 관리

- 런타임 시 빈들의 의존성 주입

- 인터페이스와 구현체 간의 느슨한 결합 가능하게 함

- 생성자 주입, Setter 주입 등 다양한 방법 제공  

 

3) AOP (Aspect Oriented Programming)

- Aspect Oriented Programming을 지원

- 메서드 호출 전/후 등 특정 시점에서 공통적인 로직을 수행할 수 있도록 함

- 애너테이션을 활용하여 간편하게 할 수 있음

 

4) 유틸리티 클래스 및 기능

- 스프링 프레임워크에서 자주 사용되는 유틸리티 클래스 제공

- 프로퍼티 파일을 읽어들이는 등의 기능 지원 

 

 

2. 의존성 주입 (Dependency Injection)

1) 필드 주입 (Field Injection)

→ 의존성 주입을 받을 객체의 필드에 @Autowired 어노테이션을 붙여 의존성 주입을 받는 방법

public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    // ...
}

코드 길이가 짧아 간편하지만, 테스트 코드 작성이 어렵고 DI 컨테이너에서 빈을 교체할 수 없어 유연성이 떨어짐

 

2) 수정자 주입 (Setter Injection)

→ 의존성 주입을 받을 객체의 Setter 메서드에 @Autowired 어노테이션을 붙여 의존성 주입을 받는 방법

public class UserServiceImpl implements UserService {

    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

선택적인 의존성 주입이 가능하여 유연하게 사용할 수 있지만, Setter 메서드를 public으로 열어두어야 하고, 객체 생성 후 의존성 주입이 완료되어야 하므로 일부 속성이 null일 수 있음

 

3) 생성자 주입 (Constructor Injection)

→ 의존성 주입을 받을 객체의 생성자 파라미터에 @Autowired 어노테이션을 붙여 의존성 주입을 받는 방법

public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // ...
}

불변성을 보장하고, 생성자를 통해 필수적인 의존성을 주입받기 때문에 객체 생성 시점에 의존성 주입이 완료되어 NullPoiinterException 등의 문제가 발생할 가능성이 적음

 

∴ 생성자 주입을 사용하자!

→ 객체 생성 시점에 필요한 의존성을 완전히 제공하고, 불변성을 유지하는 클래스를 구현할 수 있으며 의존성이 변경되는 경우에도 유연하게 대처할 수 있기 때문에 생성자 주입을 사용하는 것이 안전하다.

 

 

3. Spring Core 모듈 주요 애너테이션

@Component 스프링의 컴포넌트 스캔 기능을 사용하여 빈으로 등록하고자 하는 클래스에 사용
@Autowired 자동 주입을 위한 애너테이션으로 스프링 컨테이너가 해당 타입에 맞는 빈을 자동으로 주입
@Qualifier 여러 개의 빈이 등록되어 있을 때 어떤 빈을 주입할지 선택
@Controller 스프링 MVC에서 컨트롤러 역할을 하는 클래스에 사용
@Service 비즈니스 로직을 처리하는 서비스 클래스에 사용
@Repository 데이터베이스와 관련된 작업을 처리하는 DAO 클래스에 사용
@Configuration 자바 기반의 스프링 설정 클래스에 사용
@Bean @Configuration 클래스에서 스프링 빈을 직접 등록하기 위한 애너테이션
@Scope 빈의 범위를 지정하기 위한 애너테이션
singleton, prototype, request, session, global session 등이 있음
@Value 프로퍼티 값을 주입하기 위한 애너테이션
스프링의 PropertyPlaceholderConfigurer를 통해 값을 가져올 수 있음

 

'네트워크캠퍼스 > SPRING' 카테고리의 다른 글

Request Handling  (0) 2024.02.05
REST API  (0) 2024.02.01
Spring MVC 모듈  (0) 2024.02.01
SOLID 원칙  (0) 2024.01.31
스프링 프레임워크  (0) 2024.01.31

1. SOLID 원칙

1) SRP (Single Reponsibility Principle) : 단일 책임 원칙

한 클래스는 단 하나의 책임을 가져야 하고, 클래스가 변경되어야 하는 이유는 단 하나의 이유여야 한다.

public class User {
    private String username;
    private String password;
    
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public boolean isValid() {
        // 유효성 검사
        return true;
    }
    
    public void save() {
        // 데이터 저장
    }
}

위 클래스는 사용자 정보를 나타내는 클래스이고, 유효성 검사와 데이터 저장은 사용자 정보와 직접적인 연관이 없는 작업이므로 단일 책임 원칙에 어긋난다. → 클래스를 더 작은 단위로 분리하여 단일 책임을 부여하는 것이 바람직하다.

public class User {
    private String username;
    private String password;
    
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
}

public class UserValidator {
    public boolean isValid(User user) {
        // 유효성 검사
        return true;
    }
}

public class UserDAO {
    public void save(User user) {
        // 데이터 저장
    }
}

위와 같이 클래스를 분리하여 User 클래스는 사용자 정보만 관리하고, 유효성 검사와 데이터 저장은 각각 다른 클래스에서 담당한다.

→ 코드의 유지보수성이 증가하고, 다른 기능을 추가하거나 변경할 때 영향을 최소화할 수 있다.

 

2) OCP (Open-Closed Principle) : 개방-폐쇄 원칙

→ 기존 코드를 변경하지 않으면서 기능을 확장할 수 있도록 설계해야 한다.

public interface Shape {
    double calculateArea();
}

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

public class Rectangle implements Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public double calculateArea() {
        return width * height;
    }
}

public class AreaCalculator {
    public double calculateArea(Shape[] shapes) {
        double totalArea = 0;
        for (Shape shape : shapes) {
            totalArea += shape.calculateArea();
        }
        return totalArea;
    }
}

shape 인터페이스는 다양한 도형의 면적을 계산하기 위한 공통 기능을 정의하고, Circle과 Rectangle 클래스는 각각 원과 사각형의 면적을 계산하는 구체적인 기능을 구현한다.

AreaCalculator 클래스는 입력받은 여러 도형의 면적을 모두 더해 총 면적을 계산하는 역할을 하고, 이때 shape 인터페이스를 구현한 어떤 도형 클래스도 입력받을 수 있다. 이로 인해 새로운 도형 클래스가 추가되더라도 AreaCalculator 클래스는 수정할 필요 없이 기존의 동작을 그대로 유지할 수 있다.

 

3) LSP (Liskov Substitution Principle) : 리스코프 치환 원칙

→ 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다. 자식의 일은 부모의 일보다 작거나 같아야 한다.

    즉, 자식클래스가 부모클래스의 인스턴스 대신 사용될 때 언제나 정상적으로 작동해야 한다.

public class PrintPositiveNum {
    private int num;

    public PrintPositiveNum(int num){
        this.num = num;
    }
    public getNum(){
        if(this.num <= 0){
                throw new RuntimeException("0 이하는 출력 불가능!!!");
        }
        return this.num;
    }
}

public class PrintNum extends PrintPositiveNum {
    @Override
    public getNum(){
        return this.num;
    }
}

public class Client{
    public static void main(String[] args){
        PrintPositiveNum obj = new PrintPositiveNum(1);
        //PrintPositiveNum obj = new PrintNum(-1); // 이 경우 위반
        obj.getNum();
    }
}

위 코드에서 PrintPositiveNum은 부모클래스로 양수만 화면에 출력 가능, 자식클래스인 PrintNum은 모든 범위의 숫자 출력 가능

Client 클래스에서 양수를 주는 경우 어떤 타입이 들어와도 실행가능하지만, 음수나 0의 경우 클라이언트측 코드를 수정해야만 함

부모가 수행가능한 범위 내에서만 오버라이딩을 해야 클라이언트측 코드를 고칠 필요가 없어진다는 것이 리스코프 치환 원칙의 핵심

 

4) ISP (Interface Segregation Principle) : 인터페이스 분리 원칙

→ 인터페이스는 클라이언트에 특화되어야 하고, 클라이언트가 사용하지 않는 메서드는 포함하지 않아야 한다.

public interface Shape {
    double calculateArea();
    double calculateVolume();
}

public class Rectangle implements Shape {
    private double width;
    private double height;

    public double calculateArea() {
        return width * height;
    }

    public double calculateVolume() {
        throw new UnsupportedOperationException();
    }
}

public class Cube implements Shape {
    private double width;
    private double height;
    private double depth;

    public double calculateArea() {
        return 2 * (width * height + width * depth + height * depth);
    }

    public double calculateVolume() {
        return width * height * depth;
    }
}

Shape 인터페이스는 도형의 면적과 부피를 계산하는 두 가지 메서드를 정의하는데, Rectangle 클래스는 면적만 가능하고 부피를 계산할 수 없기 때문에 ISP를 위반한다. 즉, 클라이언트는 Shape 인터페이스를 구현한 모든 클래스에서 부피 계산 메서드를 사용해야 하기 때문에 불필요한 의존성이 발생된다.

public interface Area {
    double calculateArea();
}

public interface Volume {
    double calculateVolume();
}

public class Rectangle implements Area {
    private double width;
    private double height;

    public double calculateArea() {
        return width * height;
    }
}

public class Cube implements Area, Volume {
    private double width;
    private double height;
    private double depth;

    public double calculateArea() {
        return 2 * (width * height + width * depth + height * depth);
    }

    public double calculateVolume() {
        return width * height * depth;
    }
}

위와 같이 클라이언트가 자신이 사용하지 않는 메서드에 의존하지 않도록 인터페이스를 작게 분리해야 한다.

 

5) DIP (Dependency Inversion Principle) : 의존 역전 원칙

→ 상위 수준 모듈은 하위 수준 모듈에 의존하지 않아야 하고, 추상화는 구체적인 사항에 의존하지 않아야 한다.

    ① 고차원 모듈은 저차원 모듈에 의존해서는 안 된다.

    ② 추상화는 세부사항에 의존해서는 안된다.

public class RedLight {
    public void turnOn() {
        System.out.println("Red Light turned on");
    }
}

public class Switch {
    private RedLight light;
    
    public Switch() {
        this.light = new RedLight();
    }
    
    public void flip() {
        if (light != null) {
            light.turnOn();
        }
    }
}

위 코드에서 Switch 클래스는 RedLight 클래스를 직접 생성하고 사용하므로 Switch 클래스가 Redlight 클래스에 의존하게 된다.

만약 RedLight 클래스를 BlueLight 클래스로 변경한다면 Switch 클래스도 변경해야 하는 문제가 발생한다.

public interface Light {
    void turnOn();
}

public class RedLight implements Light {
    @Override
    public void turnOn() {
        System.out.println("Red Light turned on");
    }
}

public class Switch {
    private Light light;
    
    public Switch(Light light) {
        this.light= light;
    }
    
    public void flip() {
        if (light!= null) {
            light.turnOn();
        }
    }
}

위 코드에서 Switch 클래스는 Light 인터페이스를 통해 RedLight 클래스와 의존 관계를 맺는다. 이렇게 함으로써 RedLight 클래스에 변경이 생긴다고 해도 Switch 클래스는 영향을 받지 않는다.

'네트워크캠퍼스 > SPRING' 카테고리의 다른 글

Request Handling  (0) 2024.02.05
REST API  (0) 2024.02.01
Spring MVC 모듈  (0) 2024.02.01
Spring Core 모듈  (0) 2024.01.31
스프링 프레임워크  (0) 2024.01.31

1. 스프링 프레임워크

1) 스프링 프레임워크란?

- 자바 언어를 위한 오픈소스 경량급 애플리케이션 프레임워크

- 도메인 객체를 다루기 위한 포괄적인 프로그래밍 및 테스트를 위한 가벼운 솔루션 제공

- IoC(Inversion of Control)와 AOP(Aspect Oriented Programming)를 적용한 경량 컨테이너로 구성

  → 객체의 생명주기와 의존성 관리 해결 및 프로그래머가 비즈니스 로직에 집중할 수 있도록 도움

- 여러 모듈로 구성되어 있으며 필요한 모듈만 선택하여 사용 가능

- 대표적인 모듈 : 스프링 코어, 스프링 MVC, 스프링 데이터 등

- 다양한 개발 환경과 통합이 가능하다는 장점

- 대규모 애플리케이션에서도 유지보수가 용이하고, 테스트 코드 작성이 쉬움

 

2) 스프링 프레임워크를 구성하는 대표적인 모듈

① Spring Core : 스프링 프레임워크의 핵심 모듈, IoC와 DI 기능 제공

② Spring MVC : 웹 개발 시 사용, MVC 패턴을 기반으로 웹애플리케이션 구성

③ Spring JDBC : JDBC를 사용하기 쉽도록 간단한 인터페이스 제공

④ Spring ORM : ORM 프레임워크를 사용하기 쉽도록 지원

⑤ Spring Security : 보안을 쉽게 구현할 수 있도록 지원 → 인증, 권한, 인가 등의 보안 기능

⑥ Spring Test : 테스트를 쉽게 작성할 수 있도록 지원, JUnit과 연동하여 작성 가능

⑦ Spring Data : 데이터 액세스를 지원하는 모듈

 

☆ 스프링 프레임워크는 강력한 객체지향 프로그램을 만들기 위한 도구이다.

- SOLID 원칙을 엄격하게 준수

- 다형성, 캡슐화, 추상화 등을 활용하여 결합도를 낮추고 유연하고 확장성 있는 코드 작성

- 코드의 가독성과 유지보수성, 확장성, 재사용성 높여 개발 생산성 향상

'네트워크캠퍼스 > SPRING' 카테고리의 다른 글

Request Handling  (0) 2024.02.05
REST API  (0) 2024.02.01
Spring MVC 모듈  (0) 2024.02.01
Spring Core 모듈  (0) 2024.01.31
SOLID 원칙  (0) 2024.01.31

+ Recent posts