본문 바로가기
내일배움캠프(Sparta)/Spring

[Spring] Gradle / Server / HTTP

by mmm- 2023. 10. 31.

Gradle

: build 자동화 시스템

  • Gradle을 사용하면 자바의 소스코드를 실행 가능한 JAR 파일로 만들어 줌
  • 작성한 java 코드를 설정에 맞게 자동으로 build를 해줌.

 

build.gradle

: gradle 기반의 build 스크립트

  • 스크립트를 작성하면 소스코들를 build하거나 라이브러리들의 의존성을 쉽게 관리 가능
  • Groovy나 Kotlin 언어로 작성 가능
  • 라이브러리 관리
    • 개발하면서 필요로 하는 외부 라이브러리들을 dependencies 부분에 작성하면 Gradle이 해당 라이브러리들을 Maven Repository 라는 외부 저장소에서 자동으로 다운로드 함.
  • 라이브러리들 간에 충돌이 나지 않고 쉽게 관리할 수 있게끔 도와줌
  • gradle이 가져온 외부 라이브러리들은 왼쪽 Project의 External Libraries에서 확인 가능

네트워크

: 여러 대의 컴퓨터 또는 장비가 서로 연결되어 정보를 주고 받을 수 있는 기술

  • 컴퓨터나 라우터, 스위치, 허브 등의 장비들이 각각의 역할을 수행하면서 정보를 주고받음.
  • 서로 정보를 주고 받기 위해서는 IP주소, 서브넷 마스크, 게이트웨이 등의 정보를 설정하고 네트워크 프로토콜을 이용해 통신을 하게 됨.

 

  • 사용자는 브라우저를 이용해 서버에 정보를 요청하고 전달받음
  • 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요.
    이 때 사용자의 요청이 해당 서버에 정확하게 도달할 수 있게 제공되는 정보가 바로 IP 주소
  • 네트워크 상에서의 데이터 송/수신은 해당 주소를 기준으로 이루어짐

Server

: 사용자가 요청을 했을 때 해당 요청에 대한 응답을 수행하는 프로그램

  • 서버의 종류
    • 애플리케이션 서버 / 카탈로그 서버 / 통신 서버 / 컴퓨팅 서버 / 데이터베이스 서버 / 팩스 서버 / 파일 서버 / 게임 서버 / 메일 서버 / 미디어 서버 / 인쇄 서버(프린트 서버) / 사운드 서버 / 프록시 서버 / 웹 서버

 

Web Server

 

: 인터넷을 통해 HTTP를 이용해 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터

 

웹 서버의 기본 동작 원리

웹 서버의 기본 동작 원리

  1. 클라이언트는 브라우저를 통해 서버에 HTTP 요청
  2. 서버는 해당 요청을 승인하고, 그 결과를 HTTP Response에 담아 브라우저에 전달
  3. 브라우저는 서버에게 전달받은 데이터를 사용해 웹사이트는 그려냄
  • 브라우저가 웹서버에 요청할 때는 항상 GET 메서드로 요청

 

API (Application Programming Interface)

: 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정리한 것

  • 개발자는 다른 Application이 Programming 방식으로 Application과 통신할 수 있도록 API를 표시하거나 생성해야 됨.

 

RESTful API

: API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처

  • REST라는 용어는 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 하나의 지침으로 만들어짐. 

 

REST API

: 아키텍처 스타일을 따르는 API

 

REST 웹 서비스

: REST 아키텍처를 구현하는 웹 서비스


Web Server

: 브라우저에서 URL을 입력해 페이지를 요청했을 때 HTTP의 요청을 받아들여 정적인 콘텐츠(ex; HTML)를 사용자에게 전달해주는 역할

 

역할

  • 정적인 콘텐츠를 브라우저로 전달
  • 브라우저로부터 동적인 요청(ex; mypage 요청)이 들어왔을 때 웹서버 자체적으로 처리하기 어렵기 때문에 해당 요청을 WAS에 전달해야 함.

종류

  • Apache
  • Nginx

 

WAS(Web Application Server)

: 웹 서버와 똑같이 HTTP 기반으로 동작

  • 웹서버에서 할 수 있는 기능 대부분을 WAS에서도 처리 가능
  • WAS를 사용하S면 다양한 로직들(로그인, 회원가입, 게시물 조회, 정렬 등)을 수행하는 프로그램 동작시킬 수 있음

종류

  • Tomcat
  • JBoss

Tomcat

: 동적인 처리를 할 수 있는 웹 서버를 만들기 위한 웹 컨테이너

 

Apache Tomcat

: Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리를 효율적으로 해줄 수 있음.

  • 웹서버랑 WAS를 합쳐놓은 것

 

  1. 클라이언트에서 서버에 요청을 하게 되면 웹서버가 받음.
  2. 정적인 콘텐츠만 전달하면 되겠다고 판단이 되면 웹서버에서 바로 HTML 전달
  3. 동적인 콘텐츠를 다뤄야겠다고 판단이 되면 WAS(Web Container, Servlet)에게 동적인 처리를 맡김
  4. 내부적으로 처리가 이뤄지고 그 결과 값을 다시 반환

Spring

  • 2004년에 1.0 등장. 오래되고 강력한 프레임워크
  •  IoC/DI, AOP, PSA 와 같은 강력한 핵심 기능들을 가지고 있음.
  • 핵심기능들을 사용하려면 많은 설정들이 필요한데 이런 불편함을 해결하기 위해 2014년에 등장한 것이 바로 SpringBoot

 

SpringBoot

  • 기존의 (스프링)XML 설정대신, 자바의 annotation 기반의 설정을 적극적으로 사용하고 있기 때문에 간편하게 설정 가능
  • 개발에 필요한 설정 정보들 중 일반적으로 많이 사용하는 설정을 Default 값으로 설정해 따로 설정하지 않아도 전부 자동으로 설정해줌. 
  • 외부 라이브러리나 하위 프레임워크들의 의존성 관리가 굉장히 쉬워짐. 
    (스프링부트 등장 전에는 라이브러리 간의 버전을 전부 다 맞췄지만, 이것의 등장으로 자동으로 다 호환을 맞춤)
  • 내장 Apache Tomcat (스프링 부트의 가장 강력한 점)
    스프링 ➡️ 직접 이것을 다운받아 직접 삽입해줬어야 했음.
    스프링부트 ➡️ 기본적으로 Starter Web Dependencies 를 설정하면 자동으로 내장형 Apache Tomcat을 제공해줌.

 

Postman

: API 개발을 빠르고 쉽게 구현할 수 있도록 도와주는 소프트웨어 플랫폼

  • API에 맞춰 HTTP 요청을 서버에 보내고 응답을 확인해봐야 서버가 제대로 동작하는지 확인 가능한데 이 작업을 간편하게 할 수 있도록 도와주는 플랫폼 중 하나

실습해보기

➡️ Hello World! 를 출력하는 API 를 만들어보고 테스트

@RestController
public class HelloController {

    @GetMapping("/api/hello")
    public String hello() {
        return "Hello World!";
    }
}

 

Postman에서 API 테스트 결과


HTTP

: 데이터를 주고 받는 양식을 정의한 통신 규약 중 하나

  • 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이는 통신 규약
  • 대부분의 웹 서버가 HTTP 를 기반으로 정해준 규칙에 맞게 데이터를 주고 받음
  • 약속이 된 구조로, 어떤 브라우저에서 요청이 오더라도 HTTP의 구조는 모두 동일  

 

어떻게 HTTP로 데이터를 주고 받을 수 있을까?

  1. 브라우저는 서버에게 자신이 원하는 페이지 혹은 데이터를 request
  2. 서버는 브라우저가 요청한 페이지의 것의 유무를 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 response
  3. 브라우저는 전달받은 데이터를 기반으로 브라우저에 그려줌

 

status 코드

  • 주로 페이지 이동, redirection 등에 사용

1XX ➡️ 주로웹 브라우저와 같은 클라이언트가 서버와의 연결 상태를 확인하기 위한 용도로 사용

200  ➡️ HTTP요청이 성공적으로 처리되었음을 나타냄.

3XX ➡️ 클라이언트가 추가적인 조치를 취해야 함을 나타냄.

4XX ➡️  클라이언트에 오류가 있음을 나타냄. 클라이언트의 잘못된 요청 혹은 인증 오류 등에 사용 
                (404는 요청한 것을 서버에서 찾을 수 없음을 의미)

5XX ➡️ 서버 내부에서 오류가 발생했음을 의. 주로 서버의 오류나 서버의 과부하 등에 사용됨

 

HTTP 메서드

  • GET : 어떠한 resource를 얻을 때 사용
  • POST : 웹서버에 어떤 데이터를 게시할 때 사용 (회원가입, 게시글 작성 등)
  • DELETE
  • PUT

👉 상황에 맞게 HTTP 메서드를 사용하면 RESTful 하게 구현한 것

 

 

Headers (추가데이터, 메타데이터)

  • 브라우저가 어떤 페이지를 원하는지
  • 요청 받은 페이지를 찾았는지
  • 요청 받은 데이터를 성공적으로 찾았는지
  • 어떤 형식으로 데이터를 보낼지

 

Payload (Body, 실제 데이터)

  • 서버가 응답을 보낼 때에는 항상 Payload를 보낼 수 있음
    클라이언트가 요청을 할 때도 Payload 보낼 수 있음
    GET method 제외하곤 모두 Payload를 보낼 수 있음 (GET 메서드는 HTTP Body가 존재하지 않음)
 

[Protocol] HTTP 정리

HTTP : HyperText Transfer Protocol의 약자로, 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜 TCP/IP를 이용하는 응용 프로토콜 HTTP의 특징 client-server 구조 무상태 프로토콜

mstudy-recode.tistory.com


용어 정리

  • build 
    : 
    작성한 소스 코드를 실행 가능한 결과물로 만드는 일련의 과정
  • Maven Repository
    : 라이브러리들을 모아둔 저장소
  • 라이브러리
    : 기능들이 모여있는 코드의 묶음
  • IP 주소
    : 거대한 네트워크 망에서 컴퓨터를 정확하게 실벽하기 위한 위치 주소
  • Interface
    : 사용자가 기계를 쉽게 동작시키는데 도움을 주는 하나의 시스템 (하나의 약속)
  • 통신규약
    : 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속