서버 개발하기에 앞서 Spring을 시작하는 방법에는 2가지가 있다
2번째 방법인 새로운 프로젝트를 만들기 위해서는 http://start.spring.io 에 접속한다. 우선, 주로 사용하는 빌드 툴로 Gradle, Maven이 있는데(Ant 라는 것도 있는데 아주 옛날거라 잘 사용하지 않는다)최근에는 Gradle을 많이 사용하여 Gradle로 선택하겠다.
언어는 Java로, SpringBoot 버전은 최신 버전인 3.2.5를 사용하겠다.(시간이 지나면서 버전은 계속 업그레이드 된다)
Packaging은 스프링부트의 경우 톰캣이 내장되어 있기 때문에 Jar을 선택한다. 우측에 의존성을 추가할 수 있는데 여기서 의존성이란 프로젝트에서 사용하는 라이브러리/프레임워크를 의미한다.
Generate를 클릭하면 압축 파일이 다운로드 되고 이 파일을 개발툴에서 열어서 실행하면 된다.
나는 강의를 바탕으로 공부할 것이기 때문에 강의에서 미리 만들어둔 프로젝트를 사용할 예정이다.
라이브러리란?
개발 시 미리 만들어져 있는 기능을 가져다 사용하는 것
ex) 요리할 때 시장에 판매하는 재료를 사는 것에 비유할 수 있음
프레임워크란?
개발 시 미리 만들어져 있는 구조에 코드를 가져다 끼워넣는 것
ex) 요리 강좌에 참석해서 요리하는 것(여기서 요리나 조리도구는 전부 세팅되어 있다)
intellij를 실행하여 압축된 파일을 실행하면 main 메서드가 있는 클래스에 다음과 같이 @SpringBootApplication 에너테이션이 추가되어 있다.

@SpringBootApplication은 스프링을 실행시키기 위해 자동으로 설정을 세팅시켜주는 에너테이션이다.
main 메서드에 SpringApplication.run은 서버를 실행시켜주는 기능을 한다. 앞으로 서버를 실행시키려면 이 코드를 실행시키면 된다.
여기서 서버는 무슨 의미일까?
Serve(제공하다) + er -> 제공해주는 것을 의미하는데 기능을 제공해준다는 의미다. 예를 들어, 회원가입 기능이나 정보를 가져오는 기능 등을 말할 수 있다.
어떠한 기능을 제공해주는 프로그램이라고 생각하면 된다. 그러면 기능을 제공하기 위해서는 선행적으로 요청을 해야한다. 회원가입 기능을 나한테 달라는 등의 요청이 필요하다. 사람한테는 말로 요청하면 되지만 컴퓨터한테는 어떻게 요청을 할까?
인터넷을 사용하여 요청하면 된다.
컴퓨터에 요청을 하기 위해서 네트워크를 사용해야 한다.
컴퓨터의 주소로 IP를 사용하는데 234.12.45.2 port:3000 이런 식으로 IP가 부여되어 있다. 사람이 외우기에는 너무 어려운 방식이기 때문에 외우기 쉬운 도메인 주소를 사용할 수 있다. 네이버에 들어가고 싶을 경우 naver.com이라고 주소창에 입력하여 접속할 수 있는데 이때 naver.com이 도메인 주소이다.(Domain Name System, DNS라고도 한다)
네트워크에서 HTTP, API가 많이 사용되는데 이게 무슨 의미일까?
쉽게 생각하면 HTTP는 운송장, API는 어떠한 기능이라고 생각하면 쉽다
택배를 보내는 경우를 생각해보자. 택배를 보내기 위해서는 운송장이라는 표준이 필요하다. 그렇지 않으면 제각각 다른 방식으로 주소를 적을 수 있기 때문이다.
인터넷에서도 데이터를 주고 받기 위한 "표준"이 필요한데 그게 바로 HTTP(HyperText Transer Protocol)인 것이다.
*protocol : 표준, 약속
HTTP 요청의 예시로 빨간 포션 2개를 내놓으라는 운송장을 보낸다고 생각해보자
ex1)
Get/portion?color=red&count=2
Host : spring.com:3000
이 예시에서 하나하나 구성요소를 살펴보자
우선 가장 처음에 있는 Get은 무슨 의미일까?
HTTP Method라고 하는데 HTTP 요청을 받는 컴퓨터에게 요구하는 행위를 의미한다.
Get, Post, Put, Delete 등이 있는데 Get은 데이터를 달라고 요구하는 것을 말한다.
/portion은 요청을 받는 컴퓨터에게 원하는 자원으로 HTTP Path라고 부른다.
?와 &는 구분기호로 사용되고 color와 red는 자원의 세분 조건으로 Query라고 부른다.
Host는 말그대로 요청을 받는 컴퓨터이고 뒤에 3000은 port 번호로 프로그램 정보를 말한다.
HTTP Method/HTTP Path?Query1&Query2
Host : Domain.com:port
- HTTP Method : 요청을 받는 컴퓨터에게 요구하는 행위
- HTTP Path : 요청을 받는 컴퓨터에게 원하는 자원
- Query : 자원의 세부 조건
- Host : 요청을 받는 컴퓨터
- Port : 프로그램 정보
데이터를 내놓으라는 요구말고 내가 데이터를 줄테니 저장하라고 요구하는 것도 가능하다.
ex2) POST/oak/leather
이번 예시는 오크 가죽을 넘겨주고 이를 저장하라는 의미로 작성해보았다. 이때 오크 가죽에 대한 정보도 추가적으로 넘겨줘야 하는데 이를 Body라고 부른다.(Query와는 다름)
HTTP Method마다 자원 세부조건에 사용되는 방법이 다르다.
다양한 HTTP Method
GET : 데이터를 달라, Query
POST : 데이터를 저장해라, Body
PUT : 데이터를 수정하라, Body
DELETE : 데이터를 삭제해라, Query
이제 HTTP 요청의 구조를 자세하게 알아보자.
Request 구조
HTTP 요청하는 메세지로 크게 3부분으로 나뉜다.
Method/Path/Query
Header
한 줄 띄기
Body
Method/Path/Query는 위에서 언급한 HTTP Method/HTTP Path?Query1&Query2 라고 할 수 있다.
Header는 Host : Domain.com:3000처럼 요청받는 컴퓨터를 넣으면 된다.
Body의 경우 사용하지 않는(또는 Body가 없는) Request가 많다. Get이나 Delete Method의 경우 Body를 사용하지 않고 Query를 사용한다. Body는 해당 Request의 실제 내용으로 Key : Value 형식으로 작성한다.
{
"number1" : 10,
"number2" : 20
}
Response 구조
HTTP 요청이 있으면 응답도 있는 것이 당연하다. Client가 특정 기능을 요청하면 Server가 이를 수신 후 응답을 하고 Client가 응답을 수신하는 구조로 HTTP 응답이 이루어진다.
Status
Header
한 줄 띄기
Body
어떤 사이트에 들어가다가 404NotFound라는 메시지를 본 적이 있을 것이다. 300, 404, 500처럼 응답에 들어가는 숫자가 있는데 이를 Status 즉, 상태코드라 한다.
API란 Application Programming Interface의 약자로 정해져 있는 약속을 의미한다. 회원가입 기능을 달라고 요청을 할 경우 "회원가입 기능"이 준비되어 있어야 한다. 이 회원가입 기능을 API라고 하며 정해진 약속을 하여 특정 기능을 수행한다.
내용 정리
- 웹을 통한 컴퓨터 간의 통신에는 HTTP라는 표준화된 방식이 있음
- HTTP 요청은 HTTP Method와 HTTP Path가 핵심
- HTTP 요청 시 데이터를 전달하기 위한 방법은 Quert와 Body
- HTTP 응답은 상태코드가 핵심
- Client와 Server는 HTTP를 주고 받으며 기능을 동작하는데 이때 정해진 규칙을 API라고 함