서버(Server)

하드웨어적인 부분에서의 서버는 정적 파일들이 제공되거나, 서버 애플리케이션이 실행되는 컴퓨터를 의미하며, 소프트웨어적인 부분에서의 서버는 앞서 얘기한 정적 파일을 제공하거나, 서비스를 제공하는 애플리케이션 그 자체를 의미한다.
- 사용자의 요청을 받고, 이에 따른 응답과 데이터를 보내주는 역할을 수행한다.
- 서비스를 제공하는 컴퓨터 내의 프로그램을 의미한다.
- 이러한 프로그램(소프트웨어)이 실행되는 컴퓨터(하드웨어) 역시 서버라고 불린다.
- 내 컴퓨터 또한 누군가에게 데이터를 보내주면 서버가 될 수 있다.
서버의 종류
웹서버 ⭐️

클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹페이지를 있는 그대로 반환하는 서버이며 이 웹페이지에는 그림, CSS, JS를 포함하며, 이런 파일들을 정적 파일이라고 부르고 이런 파일을 브라우저에 그대로 전달하는 역할을 해서 정적 웹 서버라고 불린다.
웹서버 종류 : Apache2, lighttpd, Nginx 등
웹 애플리케이션 서버(Web Application Server) ⭐️

웹서버와 마찬가지로 웹페이지를 전달하는 역할을 하기도 한다. 하지만 WAS의 핵심 역할은 웹페이지를 구성하는 동적인 컨텐츠를 생성하거나 업데이트하는 비즈니스 로직을 수행할 수 있게 한다.
웹 애플리케이션의 특징
- 웹페이지를 구성하는 동적인 요소를 생성하는 서버 사이드 코드가 구동될 수 있는 프로그래밍 언어적 런타임 혹은 소프트웨어 엔진 제공한다.
- 웹 애플리케이션 서버의 클라이언트는 애플리케이션 그 자체가 될 수도 있고, 웹 서버나 다른 웹 애플리케이션 서버, 데이터베이스 서버가 될 수도 있다. 따라서 웹 애플리케이션 서버를 사용한다면 경우에 따라 다양한 형태의 아키텍처가 생성될 수 있다.
웹 애플리케이션 종류 :톰캣, JEUS, IBM WebSphere 등
데이터베이스 서버
사용자가 데이터베이스에 연결할 수 있도록 해주며, 데이터베이스는 사용자 정보나 사진, 동영상 등에 대한 정보를 담고 있는 서버입니다.
데이터베이스 서버의 종류 : MySQL, MongoDB, Oracle 등
프록시 서버
리소스를 요청하는 클라이언트와 응답으로 리소스를 전달하는 서버 사이에 중계 역할을 하는 서버를 의미하며, 어디에 위치하느냐에 따라 포워드 프록시와 리버스 프록시로 나누어지며, 이러한 프록시 서버가 수행하는 기능으로는 보안, 캐시, 로드밸런싱 등이 있습니다.
웹 서버 vs 웹 애플리케이션 서버
웹서버

웹서버는 보통 HTTP 요청과 응답만을 처리하고, 다음 그림과 같이 클라이언트와 웹서버 간에 상호작용이 이루어진다.
웹 애플리케이션 서버

WAS서버에서는 데이터를 동적으로 처리하기 위해 DB 조회, 여러 개의 트랜잭션 관리, 비지니스 로직 처리 등의 기능이 요구되며 사용자의 요청에 의해 다르게 보일 수 있는 웹사이트의 인터랙티브 부분을 처리한다.
정적 웹사이트 vs 동적 웹사이트
정적 웹사이트
- 웹서버에 이미 저장된 html문서를 전송하는 웹페이지이다.
- 사용자는 서버에 저장된 데이터가 변경되지 않는 고정된 웹페이지이다.
- 모든 사용자는 같은 응답의 결과를 웹페이지에 요청하고 응답받는다.
- 내용이 변하지 않고 고정적이다.
- 서버가 일하지않는다.
장점
- 요청한 파일만 전송하면 되기 때문에 속도가 빠르다.
- 호스팅 서버를 구축하는데에 비용이 적게 든다.
- 백업, 복원이 쉽다.
즉, 비교적 가벼운 데이터들을 웹으로 다루다 보니 속도가 빠르고 라이트 한 점이 장점이다.
단점
- 저장된 정보만 보여주기때문에 서비스가 한정적이다.
- 오직 읽는 행위만 할 수 있다.
- 추가, 수정, 삭제 등 작업을 서버에서 직접 다운로드하여 편집 후 업로드로 수정해줘야 하기 때문에 관리가 힘들다.
동적 웹사이트
- 요청 정보를 처리한 후에 제작된 html문서를 클라이언트에게 전송하는 웹페이지다.
- 사용자는 상황, 시간, 요청 등에 따라 달라지는 웹페이지이다.
- 같은 페이지라도 사용자마다 다른 웹페이지를 서버에 요청하고 받을 수 있다.
- 서버가 일하면 동적웹이다.
장점
- 다양한 정보를 조합하여 웹페이지를 제공하고 서비스가 다양하다.
- 웹사이트 구조에 따라 추가, 수정, 삭제를 사용자측에서 가능하기 때문에 관리가 쉽다.
- 관리가 쉬워서 전체적인 사이트 운영비용이 절감될 수 있다.
단점
- 웹페이지를 전달하기 전에 처리하는 작업이 필요하기 때문에 상대적으로 느리다.
- 웹서버외에 추가적으로 처리를 위한 어플리케이션서버가 필요하기 때문에 추가비용 발생한다.
- 백업, 복원이 상대적으로 어렵다.
출저)
https://velog.io/@dnflekf2748/%EC%84%9C%EB%B2%84%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C
빌드와 언어별 빌드 도구
프레임워크
소프트웨어 개발을 쉽게 만들어주기 위해 필요한 도구, 규약의 집합체이며 프레임워크는 대부분 빌드 도구를 지정한다.
프레임워크를 통해 만들고자 하는 소프트웨어의 기본 골격이 제공된다.
백엔드 웹 애플리케이션 개발용 프레임워크
- Spring (Java, Kotlin)
- Django (Python)
- Express (JavaScript)
프론트엔드 웹 애플리케이션 개발용 프레임워크
- React 및 관련 라이브러리 (JavaScript)
- Vue.js, Svelte (JavaScript)
모바일 및 데스크탑 애플리케이션 개발용 프레임워크
- Flutter (Android, iOS 등)
- .NET Framework (Windows)
- Apple 운영체제 기본 Native 프레임워크 Cocoa (macOS), Cocoa Touch (iOS)
- 안드로이드 기본 Native 프레임워크 (Android)
빌드
프로그램의 소스 코드를 독립적인 아티팩트(artifact)로 변환하는 과정이다.
JavaScript 기반의 React 생태계

React 프레임워크를 사용하는 경우 create-react-app 또는 next.js 와 같은 프레임워크를 사용한다.
- node.js 개발 환경 준비
- 프로젝트 폴더로 이동
- package.json 파일이 있는지 확인합니다
- 의존성 (dependency) 설치
- npm install 명령 입력
- 빌드
- npm run build 명령 입력
- 빌드 결과물 확인
- build 폴더 확인
- React는 프론트엔드 웹 애플리케이션이므로 결과물로는 HTML, CSS, JS 파일을 포함합니다.
- 이후 이 파일들을 nginx 등에서 정적 호스팅할 수 있습니다.
의존성 설치 후 빌드하지 않고, 바로 애플리케이션을 실행하기 위해서는 npm run start 등의 명령어를 사용할 수 있습니다. 마찬가지로, 애플리케이션에 단위 테스트가 제공된다면, 애플리케이션의 테스트를 위해 npm run test 명령어를 사용합니다. 각 프로젝트에서 사용하는 package.json 파일이 어떻게 구성되어 있느냐에 따라 달라질 수 있습니다.
Java/Kotlin 기반의 Spring Boot 생태계 (Gradle)

Java/Kotlin 애플리케이션을 빌드하면 JVM(자바 런타임) 위에서 실행되는 war 파일이 아티팩트로 생성됩니다. 빌드 도구를 이용해 이를 실행할 수도 있습니다. Spring 및 Spring Boot 생태계에서는 대표적인 빌드 도구가 두가지(maven, Gradle)가 있습니다. 그 중에서 여기서는 Gradle 위주로 간략하게 흐름을 설명합니다.
- 자바 개발 환경(JDK, OpenJDK가 대표적) 준비
- gradle 설치
- 프로젝트 폴더로 이동
- 빌드
- gradlew build 명령 입력
자바 애플리케이션은 실행을 위해서 빌드가 필수적입니다. 따라서, 빌드 후에 실행을 위해서 gradlew bootRun 명령을 통해 애플리케이션의 실행이 가능합니다. 그밖에 gradle tasks를 이용해 gradle에서 사용할 수 있는 다양한 태스크를 확인할 수 있습니다.
'TIL' 카테고리의 다른 글
| 21일차 발표 (0) | 2022.05.16 |
|---|---|
| 21일차 네트워크 기초 (0) | 2022.05.16 |
| 14일차 REST API (0) | 2022.05.04 |
| 13일차 HTTP (0) | 2022.05.03 |
| 12일차 Git과 버전 관리 시스템 (0) | 2022.05.02 |