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를 이용해 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터
웹 서버의 기본 동작 원리
- 클라이언트는 브라우저를 통해 서버에 HTTP 요청
- 서버는 해당 요청을 승인하고, 그 결과를 HTTP Response에 담아 브라우저에 전달
- 브라우저는 서버에게 전달받은 데이터를 사용해 웹사이트는 그려냄
- 브라우저가 웹서버에 요청할 때는 항상 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를 합쳐놓은 것
- 클라이언트에서 서버에 요청을 하게 되면 웹서버가 받음.
- 정적인 콘텐츠만 전달하면 되겠다고 판단이 되면 웹서버에서 바로 HTML 전달
- 동적인 콘텐츠를 다뤄야겠다고 판단이 되면 WAS(Web Container, Servlet)에게 동적인 처리를 맡김
- 내부적으로 처리가 이뤄지고 그 결과 값을 다시 반환
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!";
}
}
HTTP
: 데이터를 주고 받는 양식을 정의한 통신 규약 중 하나
- 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰이는 통신 규약
- 대부분의 웹 서버가 HTTP 를 기반으로 정해준 규칙에 맞게 데이터를 주고 받음
- 약속이 된 구조로, 어떤 브라우저에서 요청이 오더라도 HTTP의 구조는 모두 동일
어떻게 HTTP로 데이터를 주고 받을 수 있을까?
- 브라우저는 서버에게 자신이 원하는 페이지 혹은 데이터를 request
- 서버는 브라우저가 요청한 페이지의 것의 유무를 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 response
- 브라우저는 전달받은 데이터를 기반으로 브라우저에 그려줌
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가 존재하지 않음)
용어 정리
- build
: 작성한 소스 코드를 실행 가능한 결과물로 만드는 일련의 과정 - Maven Repository
: 라이브러리들을 모아둔 저장소 - 라이브러리
: 기능들이 모여있는 코드의 묶음 - IP 주소
: 거대한 네트워크 망에서 컴퓨터를 정확하게 실벽하기 위한 위치 주소 - Interface
: 사용자가 기계를 쉽게 동작시키는데 도움을 주는 하나의 시스템 (하나의 약속) - 통신규약
: 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
[Spring] Jackson / Path Variable / Request Param (1) | 2023.11.02 |
---|---|
[Spring] 데이터를 Client에 반환하는 방법 (0) | 2023.11.02 |
[Spring] Controller / 정적 페이지 / 동적 페이지 (0) | 2023.11.02 |
[Spring] Spring MVC / Front Controller (1) | 2023.11.01 |
[Spring] 테스트 코드 / Lombok / application.properties (1) | 2023.11.01 |