1. EchoServer
EchoServer는 클라이언트로부터 데이터를 받고, 그 데이터를 그대로 클라이언트에게 돌려보내는 간단한 서버이다.
주로 네트워크 테스트나 프로그래밍 학습 목적으로 사용된다.
💡 주요 특징
- 단순 반복
클라이언트로부터 받은 메시지를 수정 없이 바로 반환한다. - 테스트 용도
네트워크 연결 확인, 소프트웨어 동작 테스트에 유용하다. - 프로토콜 지원
TCP 또는 UDP 프로토콜 위에서 동작할 수 있다.
💡 동작 원리
- 서버 소켓 생성
지정된 포트(예: 8080)에서 클라이언트의 연결 요청을 기다린다. - 클라이언트 연결 수락
accept() 메소드를 사용하여 클라이언트의 연결 요청을 수락하고, 소켓을 생성한다. - 데이터 읽기 및 쓰기
클라이언트로부터 데이터를 읽어 들인 후, 동일한 데이터를 클라이언트에게 다시 전송한다. - 데이터 전송 종료
클라이언트가 연결을 끊을 때까지 이 과정을 반복한다.
💻 예시 코드
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) {
int port = 8080; // 서버가 리슨할 포트 번호
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("EchoServer is listening on port " + port);
// 서버가 종료될 때까지 무한 루프로 클라이언트의 연결 요청을 받음
while (true) {
Socket clientSocket = serverSocket.accept(); // 클라이언트의 연결 요청을 기다림
System.out.println("New client connected");
// 클라이언트와 데이터를 주고받기 위한 입출력 스트림을 생성
InputStream input = clientLientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
OutputStream output = clientSocket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
// 클라이언트로부터 한 줄을 읽어 동일한 데이터를 그대로 클라이언트에게 보냄
String text;
while ((text = reader.readLine()) != null) {
System.out.println("Received from client: " + text);
writer.println(text); // 받은 메시지를 그대로 클라이언트에게 전송
}
}
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
ex.printStackTrace();
}
}
}
2. Thread Pool
쓰레드 풀은 미리 일정 개수의 쓰레드를 생성하여 관리하는 기법이다.
이렇게 생성된 쓰레드들은 작업을 할당받기 위해 대기 상태에 있게 되는데, 작업이 발생하면 대기 중인 쓰레드 중 하나를 선택하여 작업을 수행한다. 작업이 완료되면 해당 스레드는 다시 대기 상태로 돌아가고, 새로운 작업을 할당받을 준비를 한다. 쓰레드 풀을 사용하면 스레드 생성 및 삭제에 따른 오버헤드를 줄일 수 있으며, 특정 시점에 동시에 처리할 수 있는 작업의 개수를 제한할 수 있다. 이를 통해 시스템의 자원을 효율적으로 관리하고 성능을 향상시킬 수 있다.
💡 주요 특징
- 성능 향상
미리 생성된 스레드를 재사용하여 스레드 생성 및 소멸 비용을 절감한다. - 자원 관리
활성 스레드의 최대 개수를 제한하여 자원을 효율적으로 사용할 수 있다. - 작업 관리
실행 대기 중인 작업을 큐에 저장하고, 스레드가 사용 가능해질 때 작업을 할당한다.
💡 구현 방법
- 스레드 풀 생성
정해진 수의 스레드를 갖는 스레드 풀을 생성한다. - 작업 큐
실행할 작업을 큐에 추가한다. - 작업 처리
스레드 풀의 스레드가 순차적으로 작업을 가져와 실행한다. - 스레드 재사용
작업 처리 후 스레드를 종료하지 않고 다음 작업을 기다린다.
[JAVA] 쓰레드 풀(Thread Pool): 개념, 장점, 사용 방법, 코드 예시 (feat. Baeldung)
💋 쓰레드 풀의 필요성 서버는 동시에 여러 사용자가 접속할 수 있습니다. 자바에서는 스레드를 운영 체제의 자원으로 사용합니다. 우리가 스레드를 계속해서 만들면, 운영 체제의 자원이 빨리
engineerinsight.tistory.com
- 출처 : engineerinsight
Thread Pool 이해하기 | 허원철의 개발 블로그
Process: 운영체제에서 하나의 어플리케이션
heowc.dev
- 출처 : heowc
3. HTTP Server
웹 서버란 하드웨어, 소프트웨어 두 가지 측면으로 구분할 수 있다.
- 웹 서버(하드웨어)
- 웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터이다.
- 컴포넌트 파일에는 HTML, Images, CSS, JavaScript가 존재한다.
- 컴포넌트 파일을 인터넷을 통해 클라이언트에 전달한다.
- 웹 서버(소프트웨어)
- 사용자가 어떻게 호스트 파일들에 접근하는지를 관리한다.
- 웹 서버는 주소 HTTP 프로토콜을 사용하여 클라이언트의 요청을 처리 및 응답한다.
즉, 웹 서버란 HTTP 프로토콜을 이용하여 클라이언트의 GET, POST 등의 메소드를 활용한 요청을 서버에 전달하고 이를 서버라는 또 다른 컴퓨터가 그 요청을 처리하여 다시 클라이언트에게 전달해 주는 작업이라고 생각하면 된다.
웹 서버(Server)의 기초 개념
지금까지 두 번의 프로젝트를 진행하면서 모두 백엔드 위주로 프로젝트를 진행하였다. 왜냐하면 클라이언트가 요청하는 사항을 내가 구축한 서버가 제대로 서비스를 제공하는 것이 너무 재밌
velog.io
- 출처 : IKU_JO
웹 서버란 무엇일까? - Web 개발 학습하기 | MDN
여기서 우리는 웹 서버가 무엇인지, 어떻게 동작하는지, 왜 중요한지를 알아볼 것입니다.
developer.mozilla.org
- 출처 : developer.mozilla
4. Web Server와 Was
Web Server는 HTTP 프로토콜을 이용해 클라이언트(주로 웹 브라우저)의 요청을 받아 정적 콘텐츠(HTML 파일, 이미지, CSS, JavaScript 등)를 제공하는 서버이다. 웹 서버의 주요 목적은 파일을 저장하고 전달하는 것으로, 복잡한 비즈니스 로직 처리보다는 빠른 콘텐츠 전달에 중점을 둔다.
💡 예시
- Apache HTTP Server
- Nginx
- Microsoft Internet Information Services (IIS)
WAS는 동적인 콘텐츠를 처리하기 위해 사용되는 서버이다. 클라이언트의 요청에 따라 서버 측에서 실행되는 애플리케이션을 통해 요청을 처리하고 그 결과를 클라이언트에게 전송한다. WAS는 데이터베이스 조회, 다양한 로직 처리와 같은 동적인 작업을 처리할 수 있으므로 복잡한 비즈니스 요구사항을 구현할 수 있다.
💡 예시
- Apache Tomcat
- JBoss
- WebSphere
- Oracle WebLogic
📍 차이점
1️⃣ 기능적 차이
- Web Server
주로 정적 콘텐츠를 처리하고, 클라이언트 요청에 빠르게 응답하는 것이 목적이다.
프로세스가 간단하고 리소스 사용이 적다. - WAS
복잡한 비즈니스 로직과 데이터베이스 처리가 가능하여 동적 콘텐츠를 생성하고 관리한다.
리소스 사용이 상대적으로 많고 처리 시간이 길 수 있다.
2️⃣ 용도 및 활용
- Web Server
간단하고 반복적인 문서 요청에 적합하다. 빠른 로딩 시간과 효율적인 정적 컨텐츠 관리를 위해 사용된다. - WAS
사용자의 입력과 상호작용에 따라 다르게 반응해야 하는 애플리케이션에 필요하다.
예를 들어, 온라인 쇼핑, 인터넷 뱅킹, 데이터베이스 관리 시스템 등이 이에 해당한다.
💡 함께 사용하는 이유
실제 운영 환경에서는 웹 서버와 WAS를 함께 사용하는 경우가 많다. 웹 서버가 정적 콘텐츠를 처리하고, WAS는 동적인 콘텐츠 처리를 담당하면서 각각의 장점을 살릴 수 있다. 또한, 웹 서버는 부하 분산 및 리버스 프록시 역할을 통해 WAS 앞에서 보안과 트래픽 관리 역할을 수행하기도 한다.
[Web] 웹 서버와 WAS의 차이를 쉽게 알아보자
서버 개발에 있어서 가장 기초적인 개념인 '웹 서버'와 'WAS(Web Application Servier)'의 차이점을 다뤄보려고 한다. 💡 웹 서버 사전적 정의 "웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML
codechasseur.tistory.com
- 출처 : codechasseur
5. Apache Server
Apache HTTP Server, 일반적으로 Apache라고 불리는 이 웹 서버는 전 세계에서 가장 널리 사용되는 웹 서버 소프트웨어 중 하나이다. 1995년에 출시된 이후로, 다양한 운영 체제에서 구동 가능한 무료 오픈 소스 소프트웨어로 자리 잡았다. Apache는 HTTP 프로토콜을 기반으로 클라이언트의 요청을 처리하며, 주로 정적인 콘텐츠(HTML 파일, 이미지, CSS, JavaScript 파일 등)를 제공하는 데 사용된다.
💡 주요 특징
- 모듈화
Apache는 모듈화 된 구조를 가지고 있어, 사용자가 필요에 따라 다양한 기능을 추가하거나 제거할 수 있다.
예를 들어, 보안, URL 재작성, 프록시 기능 등의 모듈을 추가할 수 있다. - 확장성
대규모 트래픽을 효과적으로 처리할 수 있도록 설계되었다. - 플랫폼 독립성
유닉스, 리눅스, 매킨토시 서버, 윈도우 서버 등 다양한 운영 체제에서 구동된다. - 커뮤니티 지원
강력한 오픈 소스 커뮤니티의 지원을 받으므로, 지속적인 업데이트와 보안 패치가 이루어진다.
6. Apache Tomcat
Java 서블릿과 JSP(JavaServer Pages)를 실행하기 위한 오픈 소스 웹 서버 겸 서블릿 컨테이너이다.
Tomcat은 WAS(Web Application Server)의 기능을 제공하며, 동적인 웹 페이지와 Java 애플리케이션을 서버에서 실행할 수 있도록 한다. Java EE 스펙을 부분적으로 구현하고 있으며, 많은 Java 개발자들에 의해 사용된다.
💡 주요 특징
- 경량성
Tomcat은 풀 스택 Java EE 서버보다 가볍고, 간단한 웹 애플리케이션에 적합하다. - Java 서블릿과 JSP 지원
Java 기반의 웹 개발에 필수적인 서블릿과 JSP를 실행할 수 있는 환경을 제공한다. - 통합환경 제공
다른 Apache 프로젝트와 잘 통합되며, 개발 및 테스트 환경을 위한 좋은 플랫폼을 제공한다. - 구성과 관리의 용이성
간단한 XML 파일과 웹 기반 관리 도구를 통해 서버를 손쉽게 구성하고 관리할 수 있다.
📍 Apache Server와 Apache Tomcat의 차이점
- 용도
Apache HTTP Server는 주로 정적 콘텐츠를 제공하는 웹 서버로 사용되는 반면,
Apache Tomcat은 Java 서블릿과 JSP를 실행하는 WAS로 사용된다. - 콘텐츠 처리
Apache는 정적 파일을 처리하는데 최적화되어 있지만, 동적 콘텐츠를 처리하기 위해서는 추가 모듈이나 다른 WAS와 연동해야 한다. 반면, Tomcat은 내부적으로 Java 애플리케이션의 동적 콘텐츠를 처리할 수 있다. - 프로그래밍 언어 지원
Apache는 PHP, Perl 등 다양한 프로그래밍 언어를 지원하는 반면, Tomcat은 Java 기술 스택에 특화되어 있다.
Apache HTTP Server? Apache Tomcat? 서버 바로 알기
Spring Boot 을 공부하면서 어떻게 구성이 되어있는지도 공부를 하게 되었습니다. 전체적인 흐름은 Client 로부터 받은 HTTP 요청을 알맞게 처리하여, Controller 로 넘겨주게 됩니다. 이때, 해당 기능을
tecoble.techcourse.co.kr
- 출처 : tecoble.techcourse
[개발 기본 지식] WEB(아파치)과 WAS(톰캣) 차이
대체 아파치는 뭐고 톰캣은 뭐야...? 입사 후 제일 못 알아들었던 개발 툴에 대하여
velog.io
- 출처 : lemon
7. Meta Tag
Meta 태그는 HTML 문서의 헤드 섹션에 위치하며, 문서의 메타데이터를 정의하는 태그이다.
이 정보는 브라우저나 검색 엔진에 의해 사용된다. 메타데이터 (MetaData) 웹페이지에 대한 정보(사이트에 대한 설명, 키워드 등)를 위해 만들어진 데이터검색엔진 등에 제공하기 위해 데이터를 해당 정보가 누락되면 검색엔진 입장에서 해당 페이지가 어떤 정보를 담고 있는지 알 수 없게 된다. 메타 태그 HTML 문서 내에 메타데이터를 제공하는 역할을 한다.
💡 주요 특징
- SEO 최적화
description, keywords 등의 메타 태그를 통해 검색 엔진 최적화를 도모할 수 있다. - 문서 정보 제공
author, charset, viewport 등의 태그로 문서의 기본 정보를 제공한다.
[HTML] meta 태그란
HTML을 작성할 때 ` 안에는 항상 ` 가 들어간다. 일상적으로 사용하다 보니 이 태그가 왜 들어가는지, 어떤 역할을 하는지에 대해 정확히 알지못하고 지나가게 되는 경우가 많은 것 같다. `` 태그란
velog.io
- 출처 : jwww
'에이콘아카데미 회고 > 5회차) 자바기반 풀스택 개발자 양성과정' 카테고리의 다른 글
CSS) 31번째 회고 (0) | 2024.05.15 |
---|---|
HTML) 30번째 회고 (0) | 2024.05.13 |
JAVA) 28번째 회고 (0) | 2024.05.09 |
JAVA) 27번째 회고 (0) | 2024.05.09 |
JAVA) 26번째 회고 (0) | 2024.05.07 |