ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기혁이의 아장아장 백엔드 도전기] 2화, 어떤 것을 어떻게 만들게 될까?
    백엔드 도저언 2020. 12. 16. 16:19

    첫 번째 스텝으로 백엔드 직군의 역할은 무엇인지에 대하여 파악해야할 것이며

    두 번째 스텝으로 백엔드의 전체적인 구조에 대하여 알고 있어야 하며

    세 번째 스텝으로 어떤 언어들이 있고 각 언어, 프레임워크들이 어떤 특징을 갖고 있는지 알아야 하며

    마지막으로 내게 필요한 언어와 프레임워크를 통하여 실습하며 점점 고도화를 진행하면 좋을 것 같다.

     

    첫 번째 스텝으로 백엔드 직군은 무엇을 의미하는지와 역할에 대하여 알아보았다.

    오늘은 백엔드의 전체적인 구조를 파악하며, 어떤 작업들을 진행해야하는지 전체적인 그림을 그려보자.

     

    다행히 리서치 하는 중 리디북스 서버 스택 소개라는 좋은 글이 있었다. 이 글을 기반으로 힌트를 얻어가보면 좋을 것 같다.

    Proxy, Apache, Ngnix, Node.js, ElasticSearch, MariaDB, Redis 정도는 어디서 들어본 적이 있는 것들이였다.

    2번 째 레이어는 서버를 의미하는 것 같고, 3번째 레이어는 MariaDB도 그렇고 전체적으로 DB로써의 역할을 수행하는 것 같다.

     

    서버


    웹서버 (참고)

    하드웨어 측면

    • 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터이다. (HTML, CSS, JS 등)
    • 웹서버는 인터넷에 연결되어 웹에 연결된 다른 기기들이 웹 서버의 데이터를 주고 받을 수 있도록 한다.

     

    소프트웨어 측면

    • 사용자가 파일들에 어떻게 접근하는지 관리한다.
    • HTTP서버는 URL과 HTTP의 소프트웨어 일부이다.

     

    출처 : https://developer.mozilla.org/

     

     간단하게 현재 수준에서 정리하고 넘어가자면, 웹 서버는 웹 페이지를 클라이언트로 전달하는 역할을 수행한다. 물론, 이런 공통 기능 외 여러가지 기능들이 지원 되고 사용 되고 있는 것으로 보인다. 하지만, 나 같은 뉴비는 모두 챙기려다 아무것도 챙기지 못하게 될 수 있으니 여기까지만 알아보자.

     

    출처 : netcraft Web-Survey 2020-11

     위키를 보니 웹서버의 시장 구조 자료가 2013년 것이여서 직접 찾아보았다. 과거에는 아파치 50% 이상 IIS 16%, nginx 15% 점유율을 갖고 있었는데. 현재는 ngnix가 34%의 점유율로 1위를 달리고 있었다. 추후, nginx가 어떻게 점유율을 늘려갔는지에 대하여 조사해볼 필요가 있을 것 같다.

     


    + 이후 추가 (참고)

    웹서버

    웹서버는 기능은 두 가지 정도로 나누어 볼 수 있다.

     

    [정적]

    • 정적인 콘텐츠 제공
    • WAS(Web Application Server)를 거치지 않고 바로 자원을 제공한다.

     

    [동적]

    • 동적인 콘텐츠 제공을 위한 요청을 전달 하는 역할
    • 클라이언트 요청(Reqeust)을 WAS에게 보내고, WAS가 처리한 결과를 다시 클라이언트에게 응답(Response)한다.

     

    처음 웹서버를 이해할 때는 단순히 웹페이지에 대한 자원을 저장하고, 반환하는 역할을 수행하는줄 알았는데. 이렇게 이해하기 보다는 전달자로 이해하는 것이 좋을 것 같다. 결국 정적 페이지도 DB에서 꺼내주는 역할을 수행하고, 정적인 것 외, 동적 콘텐츠의 경우 WAS에게 이 사실을 알려주는 역할을 한달까?

     

    WAS

    WAS란 우리가 흔히 알고 있는 백엔드의 업무가 담겨 있는 곳 같다. 사전적 정의로는 DB조회나 다양한 로직 처리를 요구하는 동적인 콘텐츠를 제공하기 위한 서버를 뜻한다.

    • HTTP를 통하여 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어이다.
    • 웹 컨테이너, 서블릿 컨테이너라고도 불리운다.
    • WAS = Web Server + Web Container
    • 웹 서버의 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시 되었다.
      • 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용 된다.
      • 결국 웹서버의 효율을 위해 생겨난 개념 같다. (웹서버가 먼저 나오고 그 다음 WAS 라는 개념이 나왔겠지?)
    • 현재는 WAS가 갖고 있는 웹서버도 정적인 콘텐츠를 처리하는데 성능상 큰 문제가 없다.
    • DB 접속 기능, 여러 개의 트랜잭션 관리 기능, 비즈니스 로직 수행이 주 업무이다.
    • Tomcat, JBoss, Jeus, Web Sphere 등이 있다.

     


    웹 API (참고)

    API(Application Programming Interface)는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체 역할을 수행한다. 비슷한 맥락이지만 웹 서비스에서 API란 서버에 어떠한 요청을 하였을 때, 그에 맞는 응답을 줄 수 있는 Endpoint를 Web을 통하여 노출한 것이다. 여기서 EndPoint를 관리하는 API 서버로 이해하면 될 것 같다.

    • 프리모아 API 요약 : '기본적으로 API를 사용하면 어플리케이션을 통한 쌍방 통신이 가능합니다. 사람들이 API에 대해 정의를 내릴 때 종종 일반화하는 듯하는 모습도 많이 보여줍니다. API의 실질적 정의는 공공 웹 기반 API는 데이터 반환 시스템으로 JSON이나 XML과 유사한데 API는 데이터베이스나 서버로 분류되지 않으며 서버의 접근 포인트를 관리하는 코드입니다.'

    출처 : 프리모아

    그렇다면 웹 API는 어떤 역할을 수행하게 될까?

     

    (1) API는 서버와 데이터베이스에 대한 출입구 역할을 한다

    • 접근 권한에 따라 데이터를 제공해줄 수 있다.

     

    (2) API는 모든 접속을 표준화한다.

    • API는 모든 접속을 표준화하기 때문에 디바이스, 환경에 관계 없이 동일한 응답 값을 얻을 수 있다.

     

    대표적인 방법론으로 SOAP API, REST API가 있다.

    출처 : 위시켓

    express(node.js)를 활용하여 구성할 수도 있고, spring(Java)를 활용할 수 있다. 딱히, 언어의 제약이 있지 않고 방법론만 추구한다면 되는 것 같다. 다만, express, spring, flask(python)등이 친숙한 것을 보니 대중적인 것은 이것들인 것 같다.

     

    데이터베이스


    사전적 의미 (참고)

     데이터베이스란 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미합니다. 데이터베이스는 보통 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 데이터와 DBMS는 연관된 어플리케이션들과 함께 '데이터베이스 시스템'으로 일컬어지며, 더 짧게는 '데이터베이스'라고 통칭되기도 합니다.

    오늘날 운용되는 가장 공통적인 유형의 데이터베이스 내 데이터는 일반적으로 일련의 표 안에 행과 열로 모델링되며, 이는 프로세싱과 데이터 쿼리 작업을 더 효율적으로 실행하기 위함입니다. 이로써 데이터는 쉽게 액세스, 관리, 수정, 업데이트, 제어, 체계화될 수 있습니다. 대부분의 데이터베이스는 데이터 작성 및 쿼리 작업에 구조화 질의 언어(SQL)를 사용합니다.

     

    데이터 베이스의 종류

    데이터 베이스는 크게 관계형 데이터베이스(RDB)와 NoSQL로 나누어진다.

     

    관계형 데이터베이스(RDB)

    • 가장 많이 사용 되는 데이터베이스로 행과 열로 표현되는 테이블간의 관계를 나타낼 때 사용된다. SQL을 통하여 관리 및 접근이 가능하다.
    • RDB의 종류로 Oracle, MySQL(Oracle) / MS-SQL(Microsoft) / DB2, Infomix(IBM) / Maria DB(Sun Microsystems) / Derby(Apache) / SQLite(Opensource)등이 있다.

     

    NoSQL(Not Only SQL)

    • NoSQL은 RDB의 특성 뿐만 아니라 다른 특성도 지원하는 데이터베이스를 의미한다.
    • 대용량, 데이터 분산 처리에 용이하고, 유여한 데이터 모델링이 가능하다.
    • NoSQL Document방식에는 MongoDB(MongoDB Inc.), CouchDB(Apache)가 있다.
    • NoSQL Key-Value방식에는 Redis, Memchached등이 있다.
    • NoSQL Big Table DB에는 HBase, Cassandra, Hypertable, ScyllaDB등이 있다.

     

     

    결론


     이번에는 커다란 백엔드의 구조에 대한 그림을 머리속에 넣고 싶었다. 그래서 처음 잡은 공부 방향에서 이해가 되지 않아 해매다가 결국 WAS라는 개념을 알게 되면서 어느정도 정리가 된 것 같다.

     

    예상과 같이 웹 서버는 다양한 구조를 갖을 수 있다.

    하지만, 대부분 Client → Web Server → WAS → DB형태를 나타내게 되며, 보통 서비스 로직을 작성하는 부분을 WAS라 말한다. 그리고 Web Server에서는 보통 정적인 페이지에 대한 응답을 해주게 된다. WAS에 Web Server 기능도 함께 포함 시킬 수 있다. 하지만, 기능을 분리 하기 위하여 그렇게 하지 않았다. (최근에는 성능은 비슷하다고 한다.)

     

    아무쪼록 이정도의 그림만 그리고, 다음 스텝으로 남어가야겠다.

    댓글

Developer RyuK