[인프런 워밍업 클럽 Study] 백엔드 1주차 발자국

[인프런 워밍업 클럽 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

오크가죽정보
  • GETPOST

    • "HTTP Method"

    • HTTP 요청을 받는 컴퓨터에게 요청하는 행위

    • ex) GET : 데이터를 달라, POST : 저장하라

    • GET, POST, PUT, DELETE 등...

  • Host: spring.com:3000

    • HTTP 요청을 받는 컴퓨터와 프로그램 정보

  • /portion/oak/leather

    • "Path"

    • HTTP 요청을 받는 컴퓨터에게 원하는 자원

  • ?&

    • 구분기호

  • color=redcount=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

  • 자바의 람다식이 함수형 프로그래밍을 지원하기 위해 등장하였다는 배경에 대해 알게 되었고, 람다식을 사용함으로써 얻을 수 있는 장점, 익명 클래스(클래스 선언과 객체 생성을 동시에 하는 이름 없는 클래스)에 대해서도 알 수 있었다.

 

<회고>

  • 막연하게 알고 있었던 개념에 대해서 한번 더 정리할 수 있어서 좋았다.

  • 과제를 해결할 때, 가능하면 공식 문서를 위주로 하여 참고할 수 있도록 해야겠다.

 


 

댓글을 작성해보세요.