WEB이란?

컴퓨터를 하다보면 흔히 들리는 말 중 하나가 web browser 이다.

Web browser는 말 그대로 web에 저장되어 있는(엄밀히 말하면 좀 다르지만) 다양한 정보들을 볼 수 있는 application이라 할 수 있다.

web에 저장되어 있다는 말은 약간 더 구체적으로 말하자면 web server에 저장되어 있다는 의미라 할 수 있다.

 

web server는 client의 http 요청을 받아들여 HTML 문서와 같은 웹 페이지를 반환한다.

여기서 HTML 문서, CSS, javascript, 이미지, 파일 등과 같은 즉시 응답 가능한 컨텐츠는 정적 컨텐츠라한다.

정적 컨텐츠는 web server에서 즉시 제공가능하다.

동적컨텐츠의 경우 web server에서 요청 받으면 WAS에게 요청을 넘겨주고 WAS에서 처리한 결과를 전달해준다.

 

자 그럼 WAS는 또 무엇인가?

 

WAS(Web Application Server)

WAS는 web server와 web container가 합쳐진 형태로 web server 단독으로 처리할 수 없는 데이터베이스 조회 혹은 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다.

WAS는 JSP, Servlet 구동 환경을 제공해준다.

 

WAS에 web server가 포함되어 있지만 실제 트래픽 처리에서는 다수의 web server와 WAS를 연결하여 사용한다고 한다.

 

Reference

https://codechasseur.tistory.com/25

 

[Web] 웹 서버와 WAS의 차이를 쉽게 알아보자

서버 개발에 있어서 가장 기초적인 개념인 '웹 서버'와 'WAS(Web Application Servier)'의 차이점을 다뤄보려고 한다. 💡 웹 서버 사전적 정의 "웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML

codechasseur.tistory.com

https://helloworld-88.tistory.com/71

 

[기본] WEB 과 WAS 차이

 WEB, WAS 란? ■ 웹서버(WEB)란? 웹서버는 말그래도 작성된 html페이지 등을 네트워크망에 종속되지 않고, 웹서비스를 할 수 있도록 어플리케이션 - 웹 서버(소프트웨어): 웹 브라우저 클라이언트로

helloworld-88.tistory.com

https://velog.io/@dbfudgudals/was%EB%9E%80

 

was란?

WEB 인터넷을 기반으로 한 서비스, 정보공유 검색 등이 가능URL(주소), HTTP(통신규칙), HTML(내용)SERVER클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터Web Sever인터넷을 기반으로

velog.io

https://velog.io/@ybnr_92/Web-%EC%9D%B4%EB%9E%80

 

Web 이란 ?

웹(web) 월드 와이드 웹(world wide web)의 줄임말로 첫 글자를 따서 WWW라고 부르기도 합니다.Web을 영어 뜻 그대로 풀이하면 "거미줄"이라는 뜻이며, 이는 '세상의 크기만한 거미줄'이라 직역할 수 있

velog.io

 

 

* JSP, Servlet이 뭔지 모름

'Computer Science' 카테고리의 다른 글

동기(Synchronous)와 비동기(Asynchronous)  (0) 2022.03.21
OS(운영체제)  (0) 2022.03.10
백엔드 개발자로서 필요한 CS 지식?  (0) 2022.02.15

면접에서 동기와 비동기에 대한 개념을 물었다는 얘기를 듣고 찾아봤다.

워낙 기본적인 개념이라 그런지 구글링을 하면 좋은 포스팅들이 많이 보였다.

잘 설명된 글들을 읽다보니 실제 업무에서 나도 모르게 적용되어 있는 개념들이었다.

업무에서 사용하는 RSARTE라는 framework도 정리할 겸 연관지어 정리해보려한다.

 

일단 개념적으로 굉장히 헷갈렸던 것이 있다.

동기 Synchronous 라는 말 자체가 "동시 발생하는" 이라는 뜻인데

동기/비동기를 설명한 그림을 보면 비동기를 표현한 그림들에서 작업들이 동시에 일어난다.

출처 : https://goplanit.site/94.%20Synchronous_asynchronous/

여기서 내가 놓쳤던 것은 주어였다. 동시 발생하는 것은 같은 작업을 의미한다.

다시 말해 같은 일이 동시에 일어난다는 것이다.

이 개념을 잘 설명해둔 예가 다음 블로그에 있다.

https://koras02.tistory.com/87

 

동기와 비동기 개념과 차이

데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 알아보고 둘의 차이점을 알아보도록 하겠습니다. 1. 동기(synchronous: 동시에 일어나는) - 동기는 말 그대로 동시에 일어난다는 뜻입니다

koras02.tistory.com

 

은행에서 이체를 할 때 A의 계좌에서 차감되는 작업과 B의 계좌에서 추가되는 작업은 동시에 일어나야한다. 실제와는 조금 다르겠지만 서로의 요청과 응답을 확인한 뒤에 A/B는 동시에 작업을 수행하게 되는 것이다.


RSARTE에 대해서 자세히 설명하기는 어렵지만 RSARTE에서 정의된 각각의 capsule은 독립적인 flow를 가지고 있으며 이는 logical thread라고 볼 수 있다.

이 flow 내부에는 state라는 것이 존재하며 각 state 사이를 transition하는 event를 정의할 수 있다.

state는 정의된 tirgger event가 발생하지 않으면 다음 state로 transition될 수 없다.

 

예를 들면

A flow에서 B flow로 B class에 저장된 data를 요청한다. : request message를 보냄

A flow의 a state에서 멈추고 기다린다.

B flow에서 요청된 request message를 보고 data를 저장해서 confirm message를 보낸다.

A flow에서 a state에서 confirm message를 받고 data를 handling하고 b state로 넘어간다.

 

RSARTE는 기본적으로 event-driven 방식이기 때문에 state를 넘어갈 때 보통 request message를 보낸다.

그리고 응답이 오면 다음 state로 넘어가는 방식이다.

응답을 기다리기 때문에 동기 방식이라고 생각했었는데 위 블로그의 설명된 개념으로 보면 비동기 방식의 예와 비슷하다.

블로그를 보고 다시 생각해보니 A flow와 B flow는 다른 thread이고 다른 작업을 하고 있기 때문에 비동기가 맞는 것 같다. 다만 헷갈렸던 이유는 블럭/논블럭 개념 때문이었다.

 

여기서 A flow의 a state에서 아무 일도 하지 않고 기다리고 있다는 것을 블록 상태라고 한다.

그렇다면 위 예는 비동기/블록 방식으로 구현되어 있는 것이다.

만약 a state에서 응답을 기다리지 않고 다른 작업이 수행된다면 논블록 상태라고 할 수 있다.

 

위에서 언급한 은행 이체 예도 마찬가지이다. A의 계좌가 B의 계좌에 이체 요청을 하고 다른 입금이나 송금 작업을 하지 못한다면 블록 상태이고 다른 작업을 수행하고 있다면 논블록 상태라고 할 수 있다.

 

이 글이 동기/비동기 개념과 블록/논블록 개념을 잘 설명해두었다.

https://okky.kr/article/442803

 

블럭/논블럭, 동기/비동기를 별거 아닌 개념이라고 생각했지만 이 글의 댓글을 보면서 이 기본적인 개념에서도 다양한 의견들이 있구나 싶었다.

 

'Computer Science' 카테고리의 다른 글

[네트워크] WEB과 WAS  (0) 2022.04.09
OS(운영체제)  (0) 2022.03.10
백엔드 개발자로서 필요한 CS 지식?  (0) 2022.02.15

운영체제란?

일반적으로 알고있는 운영체제로서의 의미는 하드웨어에 설치되어 사용자 및 다른 application들을 연결해주는 역할을 한다.

여기서 이 연결해주는 역할이란 컴퓨터의 자원관리(메모리 관리, 프로세스 관리), 입출력, 파일 관리 등을 말한다.

 

운영체제하면 주로 나오는 용어들이 몇가지 있는데 그 중 내가 제일 헷갈렸던 두 가지가

multi programming과 multi tasking이다.

두 용어의 단순한 의미는 다음과 같다.

 

Multiprogramming

  • 메모리에 여러 프로그램이 동시에 올라가는 방식
  • 프로세서가 입출력 작업의 종료를 대기할 동안 하나의 프로세서에서 다른 프로그램을 수행할 수 있도록 하는 것

Multitasking

  • 하나의 프로그램이 끝나기 전에 다른 프로그램이 시작 가능
  • 여러 개의 task를 시간 분할하여 수행하여 동시에 여러 task가 수행되고 있는 것처럼 작업하는 것

이렇게 봐서는 사실 무슨 개념인지 정확하게 와닿지 않았다.

그 중에 아래 블로그의 예시를 보고 이해했다.

https://baked-corn.tistory.com/3

 

Multiprogramming의 예로 어떤 프로그램이 중간에 파일을 읽어야 다음 코드로 넘어갈 수 있다면 CPU는 연산을 하다가 파일을 읽어와야 하는데 이 때 읽어오는 시간이 오래걸리는 경우 CPU는 파일을 모두 읽을 때까지 할일이 없어진다.

그래서 이 때 CPU가 다른 프로그램을 연산하는데 이용할 수 있도록 하는 기법을 multiprogramming이라고 한다.


프로세스와 쓰레드의 차이

https://mangkyu.tistory.com/92?category=761303

Process

프로세스는 메모리에 올라가서 실행되고 있는 프로그램의 단위? 인스턴스 라고 한다.

각각의 프로세스는 운영체제로부터 독립된 메모리 영역을 할당받아 다른 프로세스 자원에 접근할 수 없고 프로세스끼리 통신하기 위해 IPC를 사용해야 한다.

*IPC : Inter-Process Communication, 커널에서 제공하는 프로세스 간 통신 기술

 

Thread

위 블로그에 잘 그려진 multithread process에 대한 그림이 있다.

쓰레드는 프로세스 내에서 stack을 할당 받고 각각의 쓰레드는 code, data, heap 영역을 공유한다.

이 말은 쓰레드끼리는 통신이 쉽고 자원 관리하기에 용이하다는 장점이 있다.

하지만 하나의 쓰레드가 문제가 생기면 전체 프로세스가 영향을 받는다.

여러 쓰레드가 하나의 자원에 동시에 접근하는 경우 자원 공유의 문제가 발생할 수 있다.

 

여담으로 이 자원 공유의 문제에 대해서 LINE에서 만든 개발자 유튜브에서 흥미로운 영상을 본적이 있다.

함수형 언어에 대한 내용이었는데 본인도 회사에서 erlang이라는 함수형 언어를 사용하고 있어서 무슨 내용일지 궁금해서 보게 되었다.

함수형 언어는 어떤 값을 함수를 실행해서 변환된 결과 값이 나오고 이를 연쇄적으로 호출해서 최종 결과를 유도한다고 한다.

사실 erlang을 처음 배울 때도 느꼈지만 글이나 말로 설명하기는 매우 힘들고...

아무튼 함수형 언어의 정의가 중요한 것은 아니고...

함수형 언어의 특징으로 변수가 한번 바인드(할당)되면 변경이 불가능 하다는 것인데(Immutablility) 이를 이용해서 multithread 환경에서 위와 같이 자원 공유 문제를 원천적으로 배제할 수 있다는 장점을 얘기했는데

erlang의 목적 혹은 함수형 언어의 목적이 이런 것이었나? 한번 생각해보게 되었다.

회사에서 erlang을 동시성 프로그램 작성을 위해 사용하는 것이 아니기 때문에 erlang을 사용하긴 하지만 굉장히 한정적인 기능만을 사용하고 있다는 것을 다시 깨닫게 되었다.


code, data, heap, stack영역은 메모리 공간을 표현하는 용어로서

low memory 코드 영역 부터 high memory 스택 영역으로 불린다.

http://www.tcpschool.com/c/c_memory_structure

 

위 블로그에 관련 그림과 함께 각 영역에 대한 설명이 있다.

공부를 위해 다시 한번 정리하면..

 

코드 영역

실행할 프로그램의 코드가 저장(기계어)되는 영역이다. 컴파일 타임에 결정되며 중간에 코드가 수정될 수 없도록 read-only로 지정되어 있다.

 

데이터 영역

코드에서 선언한 전역 변수 혹은 정적 변수(static) 등이 저장되는 공간이다. 전역변수 또는 static 변수 값을 참조한 코드는 컴파일 하고 나면 데이터 영역의 주소값을 가르키도록 한다. 전역변수는 변경 될 수도 있으므로 이 영역은 read-write로 지정되어 있다.

 

heap 영역

runtime에 결정되는 영역으로 사용자가 동적할당(ex. malloc)을 통해 heap 영역의 메모리를 사용할 수 있다.

heap 영역은 사용자가 할당 및 해제하는 메모리 영역이기 때문에 memory leak이 발생하지 않도록 메모리 관리가 필요하다.

 

stack 영역

지역 변수와 매개 변수 리턴값 등이 저장되는 영역으로 컴파일 타임에 크기가 결정된다. 저장되는 것들을 보면 알 수 있듯이 함수 호출과 관련된 메모리 영역으로 함수의 호출과 함께 할당되고 함수의 호출이 완료되면 소멸한다.

함수 호출에 할당이 되지만 크기는 컴파일 타임에 결정되기 때문에 재귀함수가 너무 깊게 호출되거나 함수가 너무 많은 지역 변수를 가지고 있는 경우 stack overflow 에러가 발생할 수 있다.

현재 C++로 기지국 장비에 올라가는 SW를 개발하고 있지만 다른 도메인으로 점프를 하고 싶은 생각이 들어 공부를 시작했다.

컴퓨터공학을 전공하지 않았기 때문에 정말 맛보기로만 배웠던 CS 지식들을 정리해보고자 한다.

 

정리에 앞서 공부할 CS 분야들을 먼저 분류하면 다음과 같다.

 

- 자료구조

- 알고리즘

- 데이터베이스

- 네트워크

- 운영체제

 

가장 문제되는 부분은 운영체제... 학부 때 강의조차 없었던 걸로 기억한다.

알고리즘은 코딩테스트 준비를 하며 항목을 추가할 생각이다.

'Computer Science' 카테고리의 다른 글

[네트워크] WEB과 WAS  (0) 2022.04.09
동기(Synchronous)와 비동기(Asynchronous)  (0) 2022.03.21
OS(운영체제)  (0) 2022.03.10

+ Recent posts