인프런 올인원 자바 스프링 강의를 학습 목적으로 정리하여 포스팅합니다.
그렇기에 자세한 코드에 대해서는 포스팅하지 않습니다.
section1. 생애 최초 API 만들기
1-2 ~ 1-4 내용
2. @SpringBootApplication과 서버
어노테이션(@~~)은 마법같은 일을 자동으로 해준다.
ex) SpringBootApplication은 spring을 실행시킬 때 필요한 설정들을 자동으로 해준다.
서버란 무엇인가
어떠한 기능을 제공하는 프로그램
혹은 그 프로그램을 실행시키고 있는 컴퓨터
기능은 요청을 받아 제공하는 것
사람이 바로 컴퓨터에 요청할 수는 없으니 인터넷을 거쳐 요청을 한다.
3. 네트워크란 무엇인가
컴퓨터별 123.1.22.19 와 같은 고유 주소(IP)가 있다.
데이터를 받는 컴퓨터
도메인이름 | spring.com |
IP | 244.66.51.9 (256을 넘지 않음) |
port | 3000 |
* Domain Name : IP 주소는 외우기 어려우니 쉽게 이름을 붙힌 것. 이런 체계를 DNS라 부름
* port : IP라는 주소에 사는 프로그램
즉, IP 주소에서 3000번 포트를 사용하는 프로그램이 데이터를 받는다.
4. HTTP와 API란 무엇인가
HTTP (Hyper Text Transfer Protocol) : 데이터 전송 표준
GET/portion?coloe=red&count=2
Host: spring.com:3000
- Host : HTTP 요청을 받는 컴퓨터와 프로그램 정보 ex) spring.com:3000
- HTTP Method : HTTP 요청을 받는 컴퓨터에게 요청하는 행위 (데이터를 달라(GET))
- path : HTTP 요청을 받는 컴퓨터에게 원하는 자원 ex) /portion
- 구분기호 ex) ? 와 &
- query : 원하는 조건. ex) color=red 와 count=2
POST/oak/leather 첫째줄 : 메소드 패스 쿼리 + (HTTP 버전)
Host: spring.com:3000 둘째줄 : 헤더 ( 여러 줄 가능)
한 줄 띄기
오크가죽정보 바디 ( 여러 줄 가능)
- HTTP Method : HTTP 요청을 받는 컴퓨터에게 요청하는 행위 (저장하라(POST))
- Host
- path : ex) /oak/leather
- body : 실제 저장할 정보. ex) 오크가죽정보
- 행위인 POST와 자원인 /oak/leather 는 HTTP 요청을 보내기 전에 미리 약속해야 한다.
HTTP Method
- GET : 데이터를 달라, query
- POST : 데이터를 저장하라, body
- PUT : 데이터를 수정하라, body
- DELETE : 데이터를 삭제하라, query
Client-Server 구조
- Client : 요청을 하는 컴퓨터
- Server : 요청을 제공하는 컴퓨터
요청을 제공할 때 보내는 응답에 들어가는 숫자 (상태 코드)는 매우 다양하다. ex) 404, 200 등
응답에는 바디를 사용해서 추가 정보를 담을 수도 있다.
// 응답 ex)
HTTP/1.1 200 OK 첫째줄 : 상태코드
Content-Type: application/json 여러 줄 : 헤더
한 줄 띄기
{ 여러 줄 : 바디
"name": "A",
"age": null
}
API (Application Programming Interface)
정해진 약속을 하여, 특정 기능을 수행하는 것
URL (Uniform Resource Locator)
ex) http://spring.com:3000/portion?color=red&count=2
- http: <- 사용하고 있는 프로토콜 (HTTP)
- :// <- 구분기호
- spring.com:3000/ <- 도메인이름:포트, 도메인 이름은 IP로 대체 가능하다.
- portion <- 자원의 경로 (path)
- ? <- 구분기호
- color=red&count=2 <- 2개의 쿼리 (추가정보)
5. GET API 개발하고 테스트하기
API 개발하기 전에 해야할 것 ㅡ> API 명세(spec)
- HTTP Method
- HTTP Path
- 쿼리 (key와 value)
- API의 반환 결과
@RestController
: 주어진 class를 controller로 등록한다.
* controller : API 진입 지점
@GetMapping("~")
: 아래 함수를 HTTP Method가 GET이고 HTTP path가 ~인 API로 지정한다.
@RequestParam
: 주어진 쿼리를 함수 파라미터에 넣는다.
DTO(Data Trasfer Object)
: 데이터를 전달하는 객체
ex) 파라미터에 변수가 아닌 객체가 들어가는 경우
6. POST API 개발하고 테스트하기
JSON(JavaScript Object Notation)
: 객체 표기법, 즉 무언가를 표현하기 위한 형식
- POST에서 Body로 데이터를 받을 때 사용
- 중괄화{} 안에 key : value 형태로 저장
- JSON의 value에는 다른 JSON이 올 수 있으며 List 형식도 저장 가능하다.
@PostMapping("~")
: 아래 함수를 HTTP Method가 POST이고 Path가 ~인 API로 만든다.
@RequestBody A
: HTTP Body로 들어오는 JSON을 A 객체로 바꾼다.
7. 유저 생성 API 개발
- Integer는 null 표현 가능. int는 불가능
8. 유저 조회 API 개발과 테스트
- controller에서 getter가 있는 객체를 반환하면 JSON이 되어 결과 반환을 JSON으로 할 수 있다.
Fruit 객체 클래스
public class Fruit{
private String name;
private long price;
public Fruit(String name, long price){
this.name = name;
this.price = price;
}
publc String getName(){
return name;
}
public long getPrice(){
return price;
}
}
main 클래스
@GetMapping("/fruit")
public Fruit getFruit(){
return new Fruit("사과", 1000L);
}
강의 듣다가 생긴 궁긍즘 해결 공간
1. DTO는 최초 객체 생성 이후 필드(속성)이 변경될 일이 없다.
2. GET API에서 사용되는 DTO의 경우, POST와 달리 생성자를 통해서 값이 바인딩 되기 때문에 GET은 생성자가 필요하고 POST은 생성자가 필요없다.
- POST는 생성자 대신 @RequestBody 어노테이션을 통해 바인딩 된다.
'JAVA > [인프런] 스프링 강의들' 카테고리의 다른 글
[ 서버 개발 올인원 패키지] 5. 책 요구사항 구현하기 (0) | 2023.02.26 |
---|---|
[ 서버 개발 올인원 패키지] 4. 생애 최초 JPA 사용하기 (0) | 2023.02.24 |
[ 서버 개발 올인원 패키지] 3. 역할의 분리와 스프링 컨테이너 (0) | 2023.02.22 |
[ 서버 개발 올인원 패키지] 2. 생애 최초 Database 조작하기 (0) | 2023.02.22 |
[서버 개발 올인원 패키지] 0. 자바를 공부하기 전 알아두면 좋을 것들 (0) | 2023.02.18 |