포스트

[TIL] 스프링 입문 - Gradle과 HTTP 기초

Spring 입문 수강 내용을 바탕으로 Gradle 빌드, 서버 실행, API 테스트 흐름을 정리한 TIL입니다.

For the English version of this post, see here.
[TIL] 스프링 입문 - Gradle과 HTTP 기초

오늘 한 것

  • Spring 입문 수강

오늘 배운 것

Gradle이란

Gradle build 자동화 시스템 build: 작성한 소스 코드를 실행 가능한 결과물로 만드는 과정

  • Gradle 통해 build 하게 되면, libs 폴더에 실행 가능한 .jar 파일이 만들어진 것을 확인할 수 있다.

build.gradle Gradle 기반의 build 스크립트

  • 소스코드 빌드나 라이브러리 의존성을 쉽게 관리 가능
  • Groovy 언어로 작성할 예정 (Groovy나 Kotlin으로 작성 가능)
  • dependencies에 필요한 라이브러리를 작성한다. -> Gradle이 해당 라이브러리들을 Maven Repository라는 외부 저장소에서 다운로드 해온다.
  • 외부 라이브러리 폴더에서 Gradle이 가져온 라이브러리들을 확인할 수 있다.

서버란

네트워크 여러 컴퓨터와 장비가 서로 연결돼 정보를 주고 받을 수 있게 도와주는 기술

  • 서로 정보를 주고 받기 위해서 IP 주소, 서브넷 마스크, 게이트웨이 등의 정보를 설정하고, 네트워크 프로토콜을 이용해 통신을 하게됨

Velog image

  • 사용자는 브라우저를 이용해** 서버**에 정보를 요청하고 응답 받음

IP 주소 사용자의 요청이 해당 서버에 정확하게 도달할 수 있게 제공되는 정보

  • 네트워크망에서 컴퓨터를 식별하기 위한 위치 주소 ex) 택배: 주소(IP) = 192.168.., 받는 사람(포트) = 8080 (주소 속 많은 사람들 중 받는 사람 1명 = 포트)

Velog image

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

  • 브라우저에 URL을 입력하여 어떠한 페이지를 요청했을 때, HTTP의 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 전달해주는 역할을 함

API (application programming interface) 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의

  • 서로 다른 애플리케이션이 약속한 방식의 API 요청을 수행하면 정해진 결과물을 반환함 interface: 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고 받는 경우 접점이나 경계면

RESTful API (Representational State Transfer(REST)) API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처

  • REST 아키텍처 스타일을 따르는 API REST: 복잡한 네트워크에서 통신을 관리하기 위한 지침
  • 쉬운 말로, 서버의 api가 적절하게 http를 준수하며 잘 설계되어있으면 RESTful 하게 설계되어있다고 함

Velog image

  • 해당 API에 적절하게 위 사진과 같은 HTTP 메서드를 사용했다면, RESTful 하게 설계했다고 볼 수 있다.

  • Web Server의 2가지 역할
    1. 정적인 콘텐츠, 이미 완성돼있는 HTML과 같은 문서를 브라우저로 전달함
    2. 브라저로부터 ‘로그인하여 MyPage를 요청’과 같은 동적인 요청이 들어왔을 때, 웹 서버 자체적으로는 처리하기 어렵게 때문에 해당 요청을** WAS에 전달**함

      WAS (Wep Application Server) ex) Apache, Nginx

  • 웹 서버와 똑같이 HTTP 기반으로 동작
  • WAS를 사용하면 다양한 로직을 수행하는 프로그램을 동작시킬 수 있음 ex) Tomcat, JBoss

Velog image

Apache Tomcat Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리를 효율적으로 해줄 수 있음 Tomcat 동적인 처리를 할 수 있는 웹 서버를 만들기 위한 웹 컨테이너

Spring 프레임워크 AOP, IoC/DI 등과 같은 핵심 기능을 가짐

  • 하지만, 핵심 기능 사용 위해서 아주 많은 xml 설정들이 필요함 -> 불편함 개선 위해 SpringBoot 등장 SpringBoot 기존의 xml 설정 대신, Java의 어노테이션 기반 설정 사용
    • 외부 라이브러리와 프레임워크 간 각각의 버전들의 호환성을 직접 확인할 필요가 없어짐
    • 내장 Apache Tomcat
      • starter-web dependency를 설정하면 자동으로 내장형 Apache Tomcat을 제공해줌

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

  • API 즉, 약속에 맞춰 HTTP 요청을 서버에 보내고 응답을 확인하는 작업을 간편하게 할 수 있도록 도와줌

새 컨트롤러 생성 후 새 컨트롤러 생성 후 | 어플리케이션 실행(main) 어플리케이션 실행(main) | Postman 통해 확인 가능 Postman 통해 확인 가능 | 내장 Tomcat은 자동으로 8080 포트로 서버가 실행됨 내장 Tomcat은 자동으로 8080 포트로 서버가 실행됨 —|—|—|—|

HTTP란

HTTP (HyperText Transfer Protocol) 데이터를 주고 받는 양식을 정의한 “통신 규약” 중 하나 통신 규약: 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속

Velog image

  • HTTP에서는 언제나 Request,** Response** 라는 개념이 존재한다.
    1. 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)
    2. 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response) / 없다면 없는 페이지에 대한 데이터 반환
    3. 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려줌
  • 개발자 도구 -> 네트워크 탭 -> Header 탭 General, Request Header, Response Header

HTTP 상태 코드(Status Code) 상태 코드를 통해서 브라우저와 서버간의 요청, 응답 과정에서 발생할 수 있는 상황들을 표현할 수 있음

  • General에서 확인 가능
  • 첫 번째 자리 숫자는 상태 코드의 분류를 나타내는 용도로 사용됨
    1. 1xx (Informational)
    2. 2xx (Successful)
    3. 3xx (Redirection)
    4. 4xx (Client Error)
    5. 5xx (Server Error)
  • 나머지 두 자리는 세부적인 정보를 나타냄
  • 개발자 도구 -> 네트워크 탭 -> Response 탭
    • 서버에서 브라우저로 반환해준 웹 페이지를 그려주기 위한 데이터 -> HTML 형태, 사람이 이해할 수 있도록 그려짐

HTTP의 구성요소 Velog image

  • Method (호출/요청 방식)
    • GET: 어떤 리소스를 얻을 때 사용
    • POST: 웹 서버에 데이터를 게시할 때 사용하는 게 일반적
    • 그외 DELETE 등의 여러 요청 방식 존재
  • Header (추가 데이터, 메타 데이터)
    • 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받음
      • 브라우저가 어떤 페이지를 원하는지, 요청 받은 페이지를 찾았는지, 요청 받은 데이터를 성공적으로 찾았는지, 어떤 형식으로 데이터를 보낼지
  • Payload (데이터, 실제 데이터)
    • GET method를 제외하곤 서버와 클라이언트(브라우저)가 응답과 요청을 할 때, 모두 Payload를 보낼 수 있음

학습하며 겪었던 문제점 & 에러

  • 문제 & 에러에 대한 정의 별거 아니지만, 실습하면서 만든 폴더 안에 Git 저장소를 만들었는데 IntelliJ에서 연결이 안됐다. 실습 파일을 생성하면서 Git을 동시에 생성하였다.
  • 해결 방법 VCS(버전 관리) -> 버전 관리 통합 -> Git 선택
  • 새롭게 알게 된 점 IntelliJ(GUI)에서 이 프로젝트가 Git으로 관리되는지 따로 알아야 하기 때문에 VSC 연결을 통해 알려주는 과정이 필요한다는 것을 알게되었다.

내일 학습 할 것

  • Spring 입문 완강
  • 알고리즘 1문제
  • 회고 / 복습