데브옵스(DevOps)란,

소프트웨어의 개발(Development)운영(Operations)의 합성어로서, 개발(Dev)팀과 운영(Ops)팀이 협업하여, 더 빠르고 신뢰성있는 릴리즈 파이프라인을 구축하는 문화입니다. 데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 합니다. 

 

등장 배경

기존에는 개발 조직과 운영 조직이 구분되어 있어 둘 사이에 사일로 효과가 발생했습니다.

  • 사일로 효과: 조직 부서들이 서로 다른 부서와 담을 쌓고 내부 이익만을 추구하는 현상을 일컫는 말. 곡식 및 사료를 저장해두는 굴뚝 모양의 창고인 사일로(silo)에 빗대어 조직 장벽과 부서 이기주의를 의미하는 경영학 용어로 사용된다. https://terms.naver.com/entry.naver?docId=2066351&cid=50305&categoryId=50305

개발조직은 새로운 기능을 개발해 출시하는 것을 목표로 하기에 새로운 것을 만들어 내려 하고,

운영조직은 소프트웨어가 안정적으로 돌아가는 것을 중시하기에 변화를 싫어하고 배포를 가능한 적게 하고싶어 하기에, 둘의 목표가 상충되었습니다.

또한 시간이 지날수록 소프트웨어 개발 환경과 운영 환경이 상이하게 변해감에 따라 개발조직에서는 잘 동작하는 프로그램이 운영조직으로 넘어가 배포를 하면 문제가 생기는 경우도 발생 하였습니다(실행 환경의 비일관성 문제 발생).

이에 두 조직의 사일로 효과를 없애고 개발-배포-운영-모니터링까지 전체를 하나의 프로세스로 유기적으로 연계함으로써, 지속적인 배포와 높은 소프트웨어 품질을 유지하기 위한 개발 방법론이나 문화인 '데브옵스'가 탄생하게 됩니다.

 

데브옵스의 목적

  • 소프트웨어 개발 라이프사이클을 짧게 단축 (작은 단위로 빠르게 개발 > 테스트 > 통합 > 빌드 > 배포 > 피드백을 받게 함)
  • 개발&운영 단계를 연계하여 지속적인 배포와 높은 소프트웨어 품질의 유지

 

데브옵스 툴체인

소프트웨어 개발 라이프사이클의 각 단계별 or 여러 단계를 통합하여 자동화 함으로써 데브옵스를 실천하는데 도움을 줍니다. 아래는 단계 구분과, 단계별 사용되는 툴의 예 입니다.

  • 계획: 이 단계는 비즈니스 가치 및 요구사항을 정의하는 데 도움이 됩니다. 샘플 툴로는 알려진 문제를 추적하고 프로젝트 관리를 수행하는 데 도움이 되는 Jira 또는 Git가 있습니다.
  • 코딩: 이 단계에는 소프트웨어 설계 및 소프트웨어 코드 생성이 포함됩니다. 샘플 툴로는 GitHub, GitLab, Bitbucket 또는 Stash가 있습니다.
  • 구축: 이 단계에서는 소프트웨어 빌드 및 버전을 관리하고 자동화된 툴을 사용하여 코드를 컴파일하고 패키징하여 향후 제품 릴리즈에 제공합니다. 소스 코드 저장소 또는 패키지 저장소를 사용합니다. 이러한 저장소는 제품 릴리즈에 필요한 "패키지" 인프라 역할도 합니다. 샘플 툴로는 Docker, Ansible, Puppet, Chef, Gradle, Maven 또는 JFrog Artifactory가 있습니다.
  • 테스트: 이 단계에서는 최적의 코드 품질을 보장하기 위해 지속적인 테스트(수동 또는 자동)를 수행합니다. 샘플 툴로는 JUnit, Codeception, Selenium, Vagrant, TestNG 또는 BlazeMeter가 있습니다.
  • 배포: 이 단계에는 제품 릴리즈를 운영 단계로 관리, 조정, 예약 및 자동화하는 데 도움이 되는 툴이 포함될 수 있습니다. 샘플 툴로는 Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker 또는 Jira가 있습니다.
  • 운영: 이 단계에서는 운영 중인 소프트웨어를 관리합니다. 샘플 툴로는 Anabilities, Puppet, PowerShell, Chef, Salt 또는 Otter가 있습니다.
  • 모니터링: 이 단계에서는 운영 환경의 특정 소프트웨어 릴리즈에서 발생하는 문제에 대한 정보를 식별하고 수집합니다. 샘플 툴로는 New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios 또는 Slack이 있습니다.

관련 글:

https://life-coding.tistory.com/64

 

[DevOps] 데브옵스 관련 툴 모음 & 요약

데브옵스에서 사용되는 툴들 모음 & 간략한 요약 Jira (지라) Atlassian 사에서 개발한 이슈 추적 제품이며 버그 추적, 이슈 추적, 프로젝트 관리 기능을 제공하는 소프트웨어이다. https://en.wikipedia.org

life-coding.tistory.com

 

참고:

https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4

https://en.wikipedia.org/wiki/DevOps

https://www.netapp.com/ko/devops-solutions/what-is-devops/

 

'개발 > 방법론,디자인패턴' 카테고리의 다른 글

[DevOps] 데브옵스 관련 툴 모음 & 요약  (0) 2022.08.23

폼을 전송하기 전에, 자바스크립트에서 특정 작업을 수행 후 전송여부를 결정하고 싶을 때가 있다.

  • JavaScript에서 validation을 한 후, 유효한 경우에만 전송을 허용 한다던가
  • 사용자에게 질의 후 응답 여부에 따라 폼 전송을 할지/말지 결정 한다던가

가능한 방법은 여러가지가 있겠지만, 아래 두 가지만 알아보도록 하겠다.

 

1. form의 onsubmit 이벤트 활용

onsubmit은, form 태그 안에서 form전송을 하기 전에 입력된 데이터의 유효성을 체크하기 위해 사용하는 이벤트이다.

onsubmit='return false' 이면 전송을 하지 않고 / onsubmit='return true' 이면 폼 전송을 한다.

 

아래와 같이 onsubmit에 특정 함수 결과를 리턴하도록 정의해주면, 함수의 리턴 결과에 따라 폼 전송을 막거나/허용할 수 있다.

onsubmit="return validateForm(this.form);"

 

form의 submit 버튼이 눌리면 > onsubmit 에 명시한 함수가 먼저 호출되고 > 그 함수 리턴값에 따라 전송 여부가 결정되는 것이다.

함수 안에서 validation을 하고 문제 없으면 true를 리턴해서 폼 전송을 허용하고, 그렇지 않으면 false를 리턴해서 전송을 막으면 된다.

<script type="text/javascript">
function validateForm(form) {
    if (confirm('폼의 값을 전송할까요?')==1) 
    {
        return true;
    }
    return false;
}
</script>

<form onsubmit="return validateForm(this.form);">
  <p>
    <label for="mail">
      <span>Please enter an email address:</span>
      <input type="email" id="mail" name="mail" required minlength="8">
      <span class="error" aria-live="polite"></span>
    </label>
  </p>
  <button>Submit</button>
</form>

 

2. form의 submit 이벤트에 eventListener 등록

html 코드를 건드릴 필요 없이, javascript에서 addEventListener를 통해 해당 form의 submit 이벤트 발생 시 실행할 함수를 등록할 수도 있다.

 

submit 이벤트가 발생하면 > submit 이벤트에 등록한 함수가 먼저 호출되고 > 함수 실행이 완료된 후 폼 전송이 진행된다.

이 때, 함수 안에서 폼 전송여부를 컨트롤 할 수 있다.

  • 전송을 중지하고 싶은 경우 : 함수 안에서 event.preventDefault();를 호출하면 폼 전송이 이루어지지 않는다.
  • 그 외의 경우엔, 함수 실행이 끝난 후 자동으로 폼이 전송된다.
<script type="text/javascript">
const form = document.getElementsByTagName('form')[0];
form.addEventListener('submit', function (event) {
    if (confirm('[event] 폼의 값을 전송할까요?')==0) 
    {
        alert('전송을 중지합니다.');
        // 이벤트를 취소해서 폼 전송을 막음
        event.preventDefault();
    }        
});
</script>

<form>
  <p>
    <label for="mail">
      <span>Please enter an email address:</span>
      <input type="email" id="mail" name="mail" required minlength="8">
      <span class="error" aria-live="polite"></span>
    </label>
  </p>
  <button>Submit</button>
</form>

1. 수정된 파일의 차이점 보기

git diff filename

2. 수정된 파일 히스토리 보기

git log --follow -p -- filename

3. 누가 어느 부분을 수정했는지 보기

git blame filename

4. 커밋 내용만 보기

git log --follow filename

1. 불필요한 플러그인 줄이기

- 불필요한 플러그인은 비활성화 후 삭제하기

- 가벼운 플러그인 사용하기

 

2. 파일 사이즈 줄이기

- 이미지 압축

- 전체 파일 개수/사이즈 줄이기

 

3. 소프트웨어 최적화

1) Web Server

 

2) php

- APCOPcache 적용

* OPcache

- 실행한 PHP의 컴파일된 코드를 바이너리로 메모리에 캐싱해 결과값을 더 빠르게 얻을 수 있게 하는 역할을 함.

- php 5.5 버전 이상부터는 기본 탑재되어 적용됨

- 적용 확인 방법 : phpinfo.php 페이지에 접속해서, Zend OPcache 항목을 찾아 적용여부 확인 가능

 

3) MySQL/MariaDB

- 쿼리 최적화, 인덱스 생성 등

 

4. 캐싱

1) 캐시 플러그인

* W3 TOTAL CACHE

서버사이드/클라이언트 사이드 성능 향상을 위해 아래 기능들 사용 가능 (설정에 따라.. 프리미엄 기능은 비용 발생할 듯)

- 페이지 캐싱

- 파일 최소화 : HTML, CSS, JavaScript에서 불필요한 문자 삭제

- 데이터베이스 캐싱

- 헤더 설정 : entity tag, cache-control, expires

- CDN

 

2) 서버측 캐시

- Alternative PHP Cache(APC)

- Varnish Cache 

 

3) 브라우저 캐싱

- 정적인 파일이 수정되지 않았으면, 서버에서 받아오지 않고 브라우저에 캐싱된 파일 사용

 

5. 컨텐츠 오프로딩

컨텐츠를 여러 서버에 분산시키는 것

- CDN 사용 (Content Delivery Network)

- js, 동영상 등 리소스 일부를 다른 서버에 분산시킴

 

6. 압축

- gzip 

 

7. 데이터베이스 튜닝

 

8. 하드웨어 업그레이드

- RAM 추가

- 하드디스크를 SSD로 교체

 

9. 서버 추가

 

참고 : https://wordpress.org/support/article/optimization/#Content_Offloading

'개발 > 워드프레스' 카테고리의 다른 글

[WordPress] 워드프레스 로딩 시퀀스  (0) 2022.06.09

1. 디렉토리가 비어있는지 체크

Qt 5.9 이후부터는 QDir 클래스의 isEmpty() 함수로 체크 가능하다.

QString directoryPath = "C:\Directory";
QDir dir(directoryPath);
if (dir.isEmpty())
	qDebug() << directoryPath << " is Empty!";
else
	qDebug() << directoryPath << " is not Empty!";

 

2. 디렉토리 안 파일 개수 카운팅

QDir 클래스의 count() 함수로 카운팅 가능하다.

다만, .(현재폴더) ..(부모 폴더) 두개가 자동으로 포함되어 카운팅 되기 때문에, 이들을 빼주어야 한다.

QString directoryPath = "C:\Directory";
QDir dir(directoryPath);
dir.setFilter( QDir::AllEntries | QDir::NoDotAndDotDot ); // 현재, 부모 폴더 빼주기
qDebug() << directoryPath << " contains << dir.count() << " files.";

워드프레스 사이트에 접속 시(브라우저에서 url 호출 시), 워드프레스에서 일어나는 일련의 작업들을 간략히 정리한 가이드

 

첫 로딩 파일

사용자인 경우 : index.php (별로 하는 일 없음. 상수 정의하고 wp-blog-header.php를 로딩함)

어드민인 경우 : wp-admin/index.php

 

wp-blog-header.php

3가지 일을 함

- wp-load.php를 로딩 : wordpress 환경 전체를 셋업함

- wp() 함수 실행 : wp-includes/functions.php 안에 존재, query를 로딩함

- template-loader.php : 어떤 템플릿이 불려야 할지 결정함

 

wp-load.php

- wp-config.php를 체크해서 환경 설정을 계속함

- 마지막에 wp-settings.php 로딩하여, 실제 setup process를 진행함

 

wp-settings.php

아래 3개 파일 로딩함

- load.php (wp-includes 폴더 안에 존재) : 워드프레스가 필요한 첫 함수들 제공

- default-constants.php  (또한 wp-includes 폴더 안에 존재): 상수들 정의

- version.php  (이것도 wp-includes 폴더 안에 존재): 버전 정보 정의

 

functions.php, wp classes, plugin api

- compat.php : 옛날 php 버전 지원

- functions.php : 사이트 운영을 위한 기본적인 함수들

- class-wp.php :  쿼리 빌드

- class-wp-error.php : 에러 트래킹

- plugin.php : 액션, 필터 훅을 위해 필요한 함수들 제공

- mo.php : 번역 지원

 

Database class와 cache 설정

- require_wp_db() 와 wp_start_object_cache() 함수가 호출됨 (load.php 에서) : 데이터베이스 연결과 캐싱에 필요한 작업들 수행

 

default-filters.php

- 수많은 action과 filter 들을 설정함

 

multisite startup

- 멀티사이트가 설정된 경우, 필요한 작업들을 함

 

기본 로딩 마지막

- 워드프레스의 메인 함수 로딩이 끝났음

- 하지만 아직 워드프레스의 모든 기능이 사용 가능한 것은 아님(플러그인 등)

 

대부분의 워드프레스 로딩

- 긴 require 리스트를 로딩하면서 워드프레스의 코어 기능들을 위한 함수를 모두 로딩함

 

필수 플러그인 로딩

- 일반 플러그인 로딩 전, 필수 플러그인 로딩을 먼저 함

 

기본 taxonomies 와 post type

- Post, Page, Attachment, Category, Tag,… 등의 기본 taxonomies 와 post type 정의

 

Global object 생성

- wp, wp_query 등의 글로벌 object 생성하고 현재 쿼리 유지함

 

테마 선택

- 활성화된 테마를 체크하고, 테마의 functions.php 파일 로딩함

 

init hook

- init 훅에 걸린 액션들을 수행함

- 이 훅을 사용하는 플러그인과 테마들을 로딩함

 

wp_loaded hook

- 멀티사이트라면, wp_loaded 훅에 걸린 액션들을 수행 함

 

WP()

- 이 시점에는, 워드프레스의 모든 코어 함수들이 사용 가능함 (wp-includes/functions.php에 존재)

- url을 체크하고, 필요한 쿼리를 빌드하고 페이지에 필요한 데이터를 가져옴

 

template-loader.php

- 어떤 템플릿이 로딩되어야 하는지 체크함 

- template_redirect 체크

- http head request 체크

- robot이나 rss-feed, trackback인지 체크

- 위의 셋 중 하나가 아니면, 가능한 템플릿 리스트를 훓으면서 조건에 맞는 템플릿 선택함 > 현재 테마에 템플릿이 있는지 체크 > 있으면 $template 변수에 저장됨

- 매칭되는게 없으면, 기본 index 템플릿이 변수에 저장됨

- 마지막 filter (template_include) 불리고 결과가 브라우저에 표시됨

 

참고

https://medium.com/@dendeffe/wordpress-loading-sequence-a-guided-tour-e077c7dbd119

'개발 > 워드프레스' 카테고리의 다른 글

[워드프레스] 사이트 최적화  (0) 2022.07.02

우리나라 인터넷 서비스 주요 제공 업체는 SK, LG, KT가 있다.

 

SK 광 인터넷을 설치 하는 경우를 예를 들어 보면, 기사가 와서 아래 것들을 설치해 주고 간다.

1. 모뎀

2. 유무선 공유기

3. Nugu 스마트 스피커

이 중 스마트 스피커는 인터넷을 하는 것과 상관이 없고... 실제로는 모뎀과 공유기가 기능을 담당한다.

 

모뎀

1. 정의

정보 전달(주로 디지털 정보)을 위해 신호를 변조하여 송신하고 수신측에서 원래의 신호로 복구하기 위해 복조하는 장치를 말한다. 주로 컴퓨터 정보통신을 위한 주변기기로 많이 사용한다. 변조를 하는 이유는 전송선에 디지털 신호를 바로 보내면 신호 전달이 잘 되지 않기 때문이다. 데이터가 같은 비트로 연속되면 전송특성상 신호 전달에 문제가 발생하므로 전송선의 특성에 맞추어 변조한다.

모뎀은 아날로그/디지털 변환기의 일종으로 컴퓨터의 디지털 신호를 아날로그 신호로 바꾸어 전송하고, 아날로그 신호를 받아 디지털 신호로 읽어낸다. 좁은 의미에서는 개인용 컴퓨터와 전화선을 이어주는 주변기기이다.

 

2. 실제

SK 광 인터넷이 모뎀으로 연결된다. (가정 또는 사무실 네트워크로 유입되는 인터넷 트래픽의 첫 번째 연락 지점이다.)

모뎀은 동축 케이블 또는 전화 케이블, 또는 광 케이블을 사용하여 인터넷 서비스 제공 업체의 네트워크에 연결한다.

즉 모뎀을 통해 SK 인터넷 망을 이용할 수 있게 된다.

 

공유기

1. 정의

Home Router. 가정용 및 소기업에서 사용하는 소용량 라우터를 말한다. 기기에 따라서는 Wi-Fi 칩셋과 안테나를 더해 AP 기능까지 하기도 한다.

공유기의 가장 기본적인 기능은 ISP(인터넷 회사)에서 할당해 주는 하나의 IP를 이용하여 여러 대의 컴퓨터 인터넷에 접속할 수 있도록 해 주는 것이다. 한편, 여러 대의 컴퓨터에서 인터넷을 사용하려면 ISP에서 공인 IP 주소를 여러 개 할당받는 게 원칙이다. 그런데 ISP에서는 추가 IP마다 돈을 내도록 강요하기 때문에, 'IP를 하나만 사용해서 여러 대 컴퓨터가 인터넷을 할 수 없을까'라는 고민 끝에, 라우터의 NAT 기능과 게이트웨이, 허브 및 네트워크 관리 도구를 통합하여 나온 물건이 인터넷 공유기이다.

 

2. 실제

공유기로 사설 로컬 네트워크(LAN)을 구성하여 여러 컴퓨터에서 인터넷 접속이 가능하도록 해준다.

뎀이 공유기에 연결 되어 있고, 공유기에 컴퓨터가 연결(무선 또는 유선) 되어 인터넷 사용이 가능해진다. 

즉, 집안의 컴퓨터나 휴대폰은 허브 역할을 하는 공유기에 접속해 사설 IP를 할당받아 사용하게 되고, 공유기는 모뎀에 연결되어 모뎀에 부여된 IP로 네트워크에 연결이 된다. (공유기가 LAN과 WAN 사이의 중계역할을 한다.)

컴퓨터 -> 공유기 -> 모뎀 -> 인터넷 망 연결

 

참고

https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8E%80

https://namu.wiki/w/%EC%9D%B8%ED%84%B0%EB%84%B7%20%EA%B3%B5%EC%9C%A0%EA%B8%B0

https://ithub.tistory.com/260

'네트워크' 카테고리의 다른 글

인터넷, 컴퓨터 네트워크, OSI 7계층  (0) 2022.05.12

인터넷이란,

컴퓨터로 연결하여 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.[1]

 

컴퓨터 네트워크란,

 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다. 컴퓨터 네트워크에서 컴퓨팅 장치들은 노드 간 연결(데이터 링크)을 사용하여 서로에게 데이터를 교환한다. 이 데이터 링크들은 유선, 광케이블과 같은 케이블 매체, 또는 와이파이와 같은 무선 매체를 통해 확립된다.

네트워크 계층은 OSI 모델로 구분될 수 있다.

 

영역별 컴퓨터 네트워크 종류

근거리 통신망(LAN)

근거리 통신망, 로컬 영역 네트워크(영어: local area network, LAN), 구내 정보 통신망은 네트워크 매체를 이용하여 집, 사무실, 학교 등의 건물과 같은 가까운 지역을 한데 묶는 컴퓨터 네트워크이다.[1]

이와 대조적으로, 광역 통신망(WAN)은 더 넓은 지역 범위를 아우를뿐 아니라 일반적으로 전용선 또한 동반하기도 한다.

이더넷 와이파이는 근거리 통신망에 사용하기 위해 흔히 쓰이는 기술 2가지이다.

광역 통신망(WAN)

넓은 지리적 거리/장소를 넘나드는 통신 네트워크 또는 컴퓨터 네트워크이다. 광역 통신망은 종종 전용선과 함께 구성된다.[1]

사업, 교육, 정부 기관들은 광역 통신망을 사용하여 세계의 다양한 지역의 직원, 학생, 고객, 구매자, 공급자에게 데이터를 중계한다. 본질적으로 이러한 방식의 전기통신은 장소에 관계없이 날마다 비즈니스가 효율적으로 수행될 수 있도록 도와준다. 인터넷은 광역 통신망으로 간주될 수 있다.[2]

그 밖의 관련 통신망은 영역에 의해 구분되는데, 개인 통신망(PAN : 방 단위), 근거리 통신망(LAN : 건물 단위), 캠퍼스 통신망(CAN : 캠퍼스 단위), 도시권 통신망(MAN : 도시 단위)이 있다.

 

OSI 7계층 (OSI 모형, Open Systems Interconnection Reference Model)

국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층이라고 한다.

목적

이 모델은 프로토콜을 기능별로 나눈 것이다. 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공한다. '프로토콜 스택' 혹은 '스택'은 이러한 계층들로 구성되는 프로토콜 시스템이 구현된 시스템을 가리키는데, 프로토콜 스택은 하드웨어나 소프트웨어 혹은 둘의 혼합으로 구현될 수 있다. 일반적으로 하위 계층들은 하드웨어로, 상위 계층들은 소프트웨어로 구현된다.

계층 기능

계층 1: 물리 계층

물리 계층(Physical layer)은 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다. 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다. 다양한 특징의 하드웨어 기술이 접목되어 있기에 OSI 아키텍처에서 가장 복잡한 계층으로 간주된다.

 

계층 2: 데이터 링크 계층

데이터 링크 계층(Data[3]link layer)은 포인트 투 포인트(Point to Point) 간 신뢰성있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아 내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공한다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 

  • 프레임에 주소부여(MAC - 물리적주소)
  • 에러검출/재전송/흐름제어

계층 3: 네트워크 계층

네트워크 계층(Network layer)은 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션(segmentation/desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행한다. 라우터가 이 계층에서 동작하고 이 계층에서 동작하는 스위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.

  • 주소부여(IP)
  • 경로설정(Route)

계층 4: 전송 계층

전송 계층(Transport layer)은 양 끝단(End to end)의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 시퀀스 넘버 기반의 오류 제어 방식을 사용한다. 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결 기반(connection oriented)이다. 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다. 가장 잘 알려진 전송 계층의 예는 TCP이다.

종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며, 기능은 오류검출 및 복구와 흐름제어, 중복검사 등을 수행한다.

  • 패킷 생성(Assembly/Sequencing/Deassembly/Error detection/Request repeat/Flow control)

계층 5: 세션 계층

세션 계층(Session layer)은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.

통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.

  • 통신을 하기 위한 세션을 확립/유지/중단 (운영체제가 해줌)

계층 6: 표현 계층

표현 계층(Presentation layer)은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 예를 들면, EBCDIC로 인코딩된 문서 파일 ASCII로 인코딩된 파일로 바꿔 주는 것이 표현 계층의 몫이다.

  • 사용자의 명령어를 완성및 결과 표현.
  • 포장/압축/암호화

계층 7: 응용 계층

응용 계층(Application layer)은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다. 응용 서비스의 예로, 가상 터미널(예를 들어, 텔넷), FTP 등이 있다.

  • 네트워크 소프트웨어 UI 부분
  • 사용자의 입출력(I/O)부분

 

참고:

https://ko.wikipedia.org/wiki/%EA%B7%BC%EA%B1%B0%EB%A6%AC_%ED%86%B5%EC%8B%A0%EB%A7%9D

https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7
https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
https://ko.wikipedia.org/wiki/%EA%B4%91%EC%97%AD_%ED%86%B5%EC%8B%A0%EB%A7%9D
https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

+ Recent posts