본문 바로가기

코딩/Software Architecture

[소프트웨어 아키텍처] MVC Pattern & OSI 7 Layer

우테코 2주 차 문제를 풀다 MVC Pattern을 알게 되어 공부하고 문제에 적용해봤습니다.

추가적으로 소프트웨어 아키텍처를 살펴보다 네트워크의 구조가 궁금해져 OSI 7 Layer에 대한 내용도 추가했습니다.

 

 

<MVC Pattern : 소프트웨어 아키텍처 중 하나. Model, View, Controller 를 분리해 코딩하는 방식으로, 유지보수가 편해지는 코드 구성 방식.>

 

- MVC의 구성

Model: 데이터와 관련 부분. 비즈니스 로직을 수행해 데이터를 처리함

View: 사용자에게 보여지는 부분. 데이터의 시각화

Controller: Model 과 View를 이어주는 부분. 데이터의 흐름 제어

 

- MVC의 흐름

1. User가 필요한 기능 Controller에 요청

2. 요청을 받은 Controller가 적절한 Model에게 비즈니스 로직 수행 맡김

3. Model은 수행 결과를 다시 Controller에게 줌

4. Controller는 알맞은 View를 선택해 화면을 출력하도록 함

 

- MVC의 장점

구성요소들의 재사용 : 사용 환경이 변경될 때 (앱 --> 웹) Model은 그대로 사용하면서 View, Controller만 변경해 구현 가능

중복 코딩 제거

각 요소들에 집중

 

- MVC의 단점

코딩이 거대해지면 Controller가 너무 커지며, 중복 코드 발생

DB 접근 시 주체가 조금 애매해짐 (Controller가? Model이?)

이를 해결하고자 5-layer로 세분화함.

 

-MVC 코딩 방법

1.  Model 에는 Controller와 View 관련 코드가 있으면 안 된다.

2.  View 에는 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 된다

3. View 가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보이는 데이터만 받는다.

4. Controller는 Model과 View관련 코드가 있을 수 있다.

5. View는 Controller로부터 Model의 데이터를 받아야 한다.

 

* 5-layer

1. Presentation Layer

2. Control Layer

3. Business Logic Layer

4. Service / Domain

5. Persistance Layer

 

<OSI 7 Layer: Layered 아키텍처를 따르며, 네트워크 시스템의 구조를 설명하는 아키텍처 중 하나.>

 

1. Physical Layer

두 대의 컴퓨터에서 신호를 주고받을 때, 디지털 신호를 아날로그 신호로 바꿔서 전송함.

이유: 컴퓨터를 연결한 전선은 특정 Hz의 주파수만 전송 가능한데, 디지털 신호는 0~무한 Hz를 가지기 때문에 아날로그로 바꿈

이때 아날로그 -> 디지털 변환 : encoder  /  디지털 -> 아날로그 변환 : decoder를 통해 진행

구현 : 하드웨어적으로 구현되어 있음. (PHY 칩)

 

* 컴퓨터와 컴퓨터 연결하는 방법

컴퓨터 - 컴퓨터 연결 시 스위치라는 허브? 에 여러 대의 컴퓨터를 연결함. 연결된 더미를 하나의 네트워크라 부를 수 있음

스위치의 역할: 데이터의 목적지를 파악해 특정 컴퓨터에 데이터를 전송함

라우터: 스위치 - 스위치를 연결 즉 서로 다른 네트워크에 속한 컴퓨터끼리 통신 가능하게 해주는 장비

스위치 장비가 라우터의 역할도 하며 서로다른 네트워크를 연결해 주기도 함.

인터넷 : 전 세계의 컴퓨터들이 스위치, 라우터를 통해 계층구조로 연결되어 있는 것

 

2. Data-Link Layer

같은 네트워크에 있는 여러 대의 컴퓨터들이 데이터를 주고받기 위해 필요한 모듈

데이터의 앞 뒤에 특정 비트열을 붙여 보내 데이터의 시작, 끝을 파악 (Framing)

Framing은 Data-Link Layer에 속하는 작업들 중 하나

구현 : 하드웨어적으로 구현되어 있음. (RAN 카드)

 

3. Network Layer

더 많은 컴퓨터 사이의 통신. 수많은 네트워크들의 연결(inter-network) 속에서 어딘가에 있는 목적지 컴퓨터로 데이터 전송

 --> IP 주소를 이용해 길을 찾고(routing), 상위 혹은 하위 라우터에게 데이터를 넘겨주는 것 (forwarding)

만약 우리가 네이버에 있는 컴퓨터로 데이터를 보낼 때, 데이터 앞에 IP주소를 붙여서 보내게 됨.

IP 주소 아는 방법: DNS를 통해 도메인 주소를 IP주소로 변환함!

패킷: IP 주소 + Data

컴퓨터는 패킷을 라우터(스위치)에 보냄

라우터는 패킷을 해석해 주소가 위치한 라우터까지 보냄 (라우터가 주소를 해석하는 방법은 따로 공부 필요)

 구현: 운영체제의 커널에 소프트웨어적으로 구현되어 있음.

 

4. Transport Layer

프로세스: 실행 중인 프로그램

포트 번호: 하나의 컴퓨터에서 동시에 실행되고 있는 프로세스들이 서로 겹치지 않게 가져야 하는 정수 값

1. 데이터를 받고자 하는 프로세스들은 포트 번호(Port Number)를 가지고 있음.

2. 송신자는 데이터를 보낼 때 수신자 컴퓨터에 있는 프로세스의 포트번호를 붙여서 보냄

컴퓨터는 받은 데이터를 프로세스들에게 나눠주려 함. 이때 어떤 데이터를 무슨 프로세스에게 줘야 할지 알기 위한 모듈

즉 포트 번호를 사용해 도착지 컴퓨터의 최종 도착지인 프로세스까지 데이터가 도달하게 하는 모듈

구현: 운영체제의 커널에 소프트웨어적으로 구현되어 있음.

 

* Session Layer, Presentation Layer

현대의 인터넷은 OSI 모델이 아니라, TCP/IP 모델을 따르고 있음.

OSI Model의 5,6,7번 Layer(Session, Presentation, Application Layer)는 TCP/IP Model의 5번 Layer(Application Layer)로 합쳐짐! 현대 가장 많이 쓰이는 TCP/IP 모델에 따라 나머지 3개 Layer는 Application Layer 1개로 설명.

 

5. Application Layer

TCP/IP 소켓 프로그래밍 : 운영체제의 Transport Layer에서 제공하는 API를 활용해 통신 가능한 프로그램을 만드는 것.

+ 자신만의 Application Layer 인코더와 디코더를 만들 수 있다.

클라이언트& 서버 패러다임

HTTP: 대표적인 Application Layer 프로토콜