네트워크 여러개의 컴퓨터 또는 장비가 서로 연결되어서 정보를 서로 주고받을수 있게 도와주는 기술
클라이언트와 서버 사용자는 브라우저를 이용해 서버에 정보를 요청하고 응답을 받는다 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요함 >> IP
IP 네트워크에서 사용자를 식별하기위한 위치 주소 네트워크 상의 데이터 송수신은 IP주소를 기준으로 이루어지고있ㅇ므 주소와 포트번호를 기준으로 전송함
웹 서버의 동작 HTTP Request로 웹서버에 요청한다 웹서버는 요청을 승인하고 서버에서 데이터를 받아온다 받아온 데이터로 웹사이트를 갱신한다 기본적으로 브라우저가 웹서버에 무언가 요청을 할때는 get 메서드로 요청한다
API 다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙 애플리케이션이 약속한 방식으로 요청을 하면 정해진 방식으로 응답한다.
RESTFUL API API 작동 방식에 대한 조건을 부과하는 아키텍처이다 REST 아키텍처를 따르는 API를 REST API라고 한다 API가 적절하게 http를 준수하며 설계되어있으면 RESTful하다 라고할수있다. >> API리소스 식별자를 중복없이 고유하게 만들고, 적절하게 메서드를 사용했다면.. RESTful하다.
GET : 리소스 요청 POST : 리소스 전송 PUT : 리소스 업데이트
웹서버 브라우저에 URL을 입력하여 사용자에게 페이지를 요청했을때 정적인 콘텐츠를 전달해준다면 그것은 Web Server이다
웹 서버의 역할은 정적인 콘텐츠(이미 완성된 html), 동적인 요청(사용자에 맞게 페이지 세팅)이 들어왔을때 요청을 WAS에 전달한다
아파치 톰캣 웹서버와 WAS를 합쳐놓은것이다.
스프링과 스프링부트의 차이점 스프링 프레임워크는 자바 기반의 프레임워크이며 AOP, IoC/DI 등과 같은 핵심기능이 있다. 다만 많은 XML설정이 필요했다
그 불편한점을 개선하기 위해 spring boot가 등장했다.
스프링 부트는 스프링의 xml설정 대신 어노테이션 기반의 설정을 사용하여, 간편하게 기능을 설정할 수 있었다 스프링 부트는 내장 아파치 톰캣이 있어, 서버를 따로 설정하지않아도 테스트 및 실행이 가능하다
포스트맨 api개발을 빠르고 쉽게 구현할 수 있도록 도와주는 소프트웨어이다. api를 보내고 응답을 확인해야지 서버가 제대로 동작하는지 확인 할 수 있는데 서버에서 받은 응답을 확인하는 방법중 하나가 postman이다
포스트맨으로 api를 실습해보자 간단한 HelloController를 만들어본다
@RestController
public class HelloController
{
@GetMapping("/api/hello")
public String hello() {
return "Hello World";
}
}
클래스 위에 RestController 어노테이션을 부착해주고
api를 던져볼 메서드에 getMapping을 하며, api링크를 보여준다.
프로젝트를 실행하고
workspace의 new
http를 눌러준다
위의 창 같이 나오면 되는데
프로젝트를 실행하게되면 localhost:8080포트로 연결이 되게 되며 아까 우리가 작성한 부분에서 getMapping 어노테이션을 보면된다. getMapping이라는것은 get으로 매핑한다는 뜻이고 괄호한에있는건 주소이다
그래서 우리가 localhost:8080주소에서 /api/hello경로를 요청하게되면, 우리가 작성한 hello world가 뜨게되는것이다.
http란? 데이터를 주고 받는 양식을 정의한 통신규약이다.
어떻게 주고받을까? request와 response의 개념이 존재함 사용자는 서버에게 자신이 원하는 페이지를 request(요구)함 서버는 원하는 페이지를 확인한후 해당 페이지의 데이터를 실어 응답(response)해준다
http의 요청 방식 메서드 get : 어떤 리소스를 얻을때 사용한다 post : 데이터를 게시할때 사용한다 (회원가입, 게시글 작성, 댓글 작성)
헤더 브라우저가 어떤 페이지를 원하는지 요청 받은 페이지를 찾았는지 요청 받은 데이터를 성공적으로 찾았는지 어떤 형식으로 데이터를 보낼지
payload http body라고도 한다. get메서드를 제외하고 payload를 보낼 수 있다
서버 응답 방식 100 : 클라이언트가 요청을 계속 해도된다는뜻 200 : 성공 300 : 리다이렉션 400 : 클라이언트의 요청이나 권한이 없을때 500 : 서버의 오류나 과부하가 걸렸을때
헤더 서버가 추가적으로 보낸 응답
테스트 내가 작성한 프로그램이 원하는대로 흘러가는지 테스트 해봐야함
블랙박스 테스트 소프트웨어 구조나 동작원리를 모르는 상태에서 사용자의 입장에서 검사하는 방법
개발자 테스트 개발자가 테스트 코드를 작성하여 테스트 할 수 있다. 자동화 도 가능하다
스프링은 junit 프레임워크를 사용하여 단위 테스트를 진행할 수 있다.
보시다시피 dependencies에 적용되어있다.
Junit으로 테스트 해보기 아래 간단한 계산기 예제를 가져와보자.
public class Calculator {
public Double operate(double num1, String op, double num2) {
switch (op) {
case "*":
return num1 * num2;
case "/":
if (num2 != 0) {
return num1 / num2;
} else {
return null;
}
case "+":
return num1 + num2;
case "-":
return num1 - num2;
default:
throw new IllegalArgumentException("잘못된 연산자입니다.");
}
}
}
실행은 main 테스트는 test패키지에서 실행된다.
생성은 위와같이 오른쪽 클릭이나 alt insert
요기서 사실 게터와 세터, 생성자도 만들수있슴 ㄹㅇ루 편함
근데 지금은 테스트를 해보는 단계니까 test를..
자동으로 똑같은 경로에 만들어주는것을 알 수 있다.