[인프런 워밍업 클럽 Study] 백엔드 1주차 발자국
학습 내용 요약
<의존성>
프로젝트에서 사용하는 라이브러리 혹은 프레임워크
<라이브러리>
프로그래밍에서 미리 만들어진 기능을 가져다가 사용하는 것
ex) 김치찌개를 만드는 상황에서, 처음부터 배추를 직접 재배하여 김치를 담근 후 만들 수도 있고, 마트에서 김치를 사서 만들 수도 있음. 후자의 경우가 라이브러리를 사용하는 경우와 유사하다고 할 수 있음.
<프레임워크>
프로그래밍에서 미리 만들어져 있는 구조에 코드를 가져다 끼워넣는 것
ex) 김치찌개를 만드는 상황에서, 여러 재료들을 사서 만들 수도 있고, 원데이 클래스에 가서 선생님이 시키는 대로 만들 수도 있음. 후자의 경우가 프레임워크를 사용하는 경우와 유사하다고 할 수 있음.
<서버>
어떠한 기능을 제공하는 프로그램, 그리고 그 프로그램을 실행시키고 있는 컴퓨터
누군가의 요청이 있어야 기능을 제공할 수 있음.
<네트워크>
이세계 ↔ 현실세계
택배 시스템 ↔ 네트워크
집 ↔ 컴퓨터
(주소) B부족 감자동 곰로 13번길 2 ↔ (IP) 244.77.51.9
(집주소 별칭) 파란집 ↔ (도메인 이름) spring.com
(택배를 정말 받는 사람) 둘째 ↔ (port) 3000
<HTTP>
HyperText Transfer Protocol
Protocol : 표준, 약속
<HTTP 요청에 대한 규칙>
GET /portion?color=red&count=2
Host: spring.com:3000
POST /oak/leather
Host: spring.com:3000
오크가죽정보
GET
,POST
"HTTP Method"
HTTP 요청을 받는 컴퓨터에게 요청하는 행위
ex) GET : 데이터를 달라, POST : 저장하라
GET, POST, PUT, DELETE 등...
Host: spring.com:3000
HTTP 요청을 받는 컴퓨터와 프로그램 정보
/portion
,/oak/leather
"Path"
HTTP 요청을 받는 컴퓨터에게 원하는 자원
?
,&
구분기호
color=red
,count=2
"Query"
key와 value로 구성
자원의 세부 조건
오크가죽정보
"Body"
실제 저장할 오크 가죽 정보
행위와 자원은 HTTP 요청을 보내기 전에 약속해야 한다
<다양한 HTTP Method>
GET : 데이터를 달라, 쿼리
POST : 데이터를 저장하라, 바디
PUT : 데이터를 수정하라, 바디
DELETE : 데이터를 삭제하라, 쿼리
<API>
Application Programming Inteface
정해진 약속을 하여, 특정 기능을 수행하는 것
<HTTP 요청 문법>
POST /oak/leather
Host: spring.com:3000
오크가죽정보
POST /oak/leather
: 메소드 패스 쿼리Host: spring.com:3000
: 헤더 (여러줄 가능)중간에 한 줄 띄기
오크가죽정보
: 바디 (여러 줄 가능)
<URL>
<http://spring.com:3000/portion?color=red&count=2>
Uniform Resource Locator
http
사용하고 있는 프로토콜
://
,?
구분 기호
spring.com:3000
도메인 이름
포트, 도메인 이름은 IP로 대체 가능하다
/portion
자원의 경로 (Path)
color=red&count=2
추가정보 (Query)
<HTTP 응답>
서버 : 요청에 대한 응답을 제공(serve)한 컴퓨터
클라이언트 : 요청을 한 컴퓨터
상태 코드
200 OK
300 Moved Permanently
404 Not Found
500 Internal Server Error
그외 등등…
응답에는 추가 정보(바디)를 담을 수도 있음.
ex) 200 OK, 빨간 포션 2개
HTTP 응답 역시 요청과 구조가 동일함
HTTP/1.1 200 OK Content-Type: application/json { "name": "A", "age": null }
첫째 줄 - 상태코드
여러 줄 - 헤더
한 줄 띄기
여러 줄 - 바디
<Controller (GetMapping)>
@RestController
public class CalculatorController {
@GetMapping("/add")
public int addTwoNumbers
(
@RequestParam int number1,
@RequestParam int number2
)
{
return number1 + number2;
}
}
Controller
API의 입구
@RestController
Class를 Controller로 등록하는 어노테이션
@GetMapping("/add")
아래의 함수를 HTTP Method가 GET이고 HTTP path가 /add인 API로 지정하는 어노테이션
@RequestParam
주어지는 쿼리를 함수 파라미터에 넣는 어노테이션
<DTO>
public class CalculatorAddRequest {
private final int number1;
private final int number2;
public CalculatorAddRequest(int number1, int number2) {
this.number1 = number1;
this.number2 = number2;
}
public int getNumber1() {
return number1;
}
public int getNumber2() {
return number2;
}
}
Data Transfer Object
데이터를 외부에서 서버 안 Controller로 전달(request)하거나 서버 밖으로 응답(response)하는 역할
<JSON>
{
"name": "AAA",
"age": 99,
"house": {
"address": "대한민국 서울",
"hasDoor": true,
"dogs": ["코코", "초코"]
}
}
JavaScript Object Notation
웹 통신에서 객체를 표기하는 기법
JSON 표기는 중괄호가 양 끝에 있음
중괄호 안에 ”key”: value 로 표기
‘속성’ 각각은 쉼표로 구분
<Controller (PostMapping)>
@PostMapping("/multiply")
public int multiplyTwoNumbers
(
@RequestBody CalculatorMultiplyRequest request
)
{
return request.getNumber1() * request.getNumber2();
}
@PostMapping(”/multiply”)
아래 함수를 HTTP Method가 POST이고 Path가 /multiply인 API로 지정하는 어노테이션
@RequestBody
HTTP Body로 들어오는 JSON을 CalculatorMultiplyRequest 로 바꿔줌
과제
<1. Annotation>
https://smkim-create-server.notion.site/1-Annotation-c343593b07a54d4793cf98f851eb696a
처음에는 어노테이션이라는 것이 앞에 골뱅이가 달리고 뒤에 단어가 적혀있는 것으로만 막연하게 이해하고 있었는데, 이 과제를 통하여 어노테이션에 대한 정의(코드에 대한 부가 정보를 제공하는 메타 데이터)와 역할(코드에 대한 설명과 컴파일러 명령 등을 표현) 및 어노테이션을 사용함으로써 얻을 수 있는 효과(개발자 입장에서 더욱 편리하고 가독성 높은 개발이 가능), 그 외 각종 어노테이션의 종류에 대해 알 수 있었다.
커스텀 어노테이션을 만들 수 있다는 것을 이 강의를 통하여 처음 알 수 있었는데, 얼마 전에 진행했던 프로젝트에서 강의에서 배운 내용을 토대로 하여 커스텀 어노테이션을 만들어 사용하도록 함으로써 더욱 편리하게 DB에 저장된 유저의 정보를 불러오게 하여 팀원들의 개발 효율성을 더욱 높힐 수 있었다.
<2. API>
https://smkim-create-server.notion.site/2-API-be6842d43aa84b348a5e0c6d4fa32877
강의에서 배운 각종 API들과 Controller 및 DTO의 개념을 종합하여 과제를 해결하였다.
흔히 setter 사용을 지양하라는 말이 있는데, 과제 해결의 편의를 위하여 부득이하게 setter를 사용하여 값을 받았다. setter를 사용하지 않고 들어오는 값을 받을 수 있는 방법에 대해 좀 더 고민해봐야 될 것 같다.
<3. Lambda>
https://smkim-create-server.notion.site/3-Lambda-6c8726c1cce546faa9270af2a593bef6
자바의 람다식이 함수형 프로그래밍을 지원하기 위해 등장하였다는 배경에 대해 알게 되었고, 람다식을 사용함으로써 얻을 수 있는 장점, 익명 클래스(클래스 선언과 객체 생성을 동시에 하는 이름 없는 클래스)에 대해서도 알 수 있었다.
<회고>
막연하게 알고 있었던 개념에 대해서 한번 더 정리할 수 있어서 좋았다.
과제를 해결할 때, 가능하면 공식 문서를 위주로 하여 참고할 수 있도록 해야겠다.
댓글을 작성해보세요.