0C 개발일지

Spring Boot 본문

Spring

Spring Boot

0C 2024. 8. 7. 18:19
  • 로컬 프로그램 실행
public class Main {
	public static void main(String[] args) {
    	System.out.println("Hello");
    }
 }

static ->  객체 생성 없이 호출 가능

 

  • 원격 프로그램 실행
@Controller // 1. 프로그램 등록
public class Hello {
	@RequestMapping("/hello") // 2. URL 과 main()을 연결
    public void main() {
    	System.out.println("Hello");
    }
}

 

예) http://111.222.33.44:8080/hello

  • static이 없다?   객체 생성이 필요하다는 의미이지만,

하지만 스프링이 자동으로 객체를 생성 해주기 때문에,

인스턴스 메서드도 URL과 연결되서 다른 컴퓨터에서 호출 될 수 있다.

 

  • start.spring.io

  • 압축 풀고 인텔리제이에서 열기

 

클라이언트와 서버

  • 클라이언트(client) : 서비스를 요청하는 애플리케이션(or 컴퓨터)
  • 서버(server) : 서비스를 제공하는 애플리케이션(or 컴퓨터)

 

  • 웹 애플리케이션 서버(WAS) : 웹 애플리케이션을 서비스하는 서버

 

HTTP 요청 부터 응답까지의 과정

웹 서버에 요청하기 전에 IP주소와 포트번호로 TCP/IP 연결을 맺어야 한다.

1. DNS 서버에 도메인의 IP를 조회한다.

2. 웹브라우저와 웹서버간의 TCP 연결을 맺는다.

3. 웹브라우저가 웹서버에 HTTP 요청을 보낸다.

4. 웹서버는 웹브라우저에게 HTTP 응답을 보낸다.

5. TCP 연결을 끊고, 웹브라우저는 HTTP 응답(주로 HTML)을 보여준다. 

 

 

  • IP(Internet Protocol) : IP 주소를 이용한 전송 프로토콜. 비연결 기반.
  • TCP(Transfer Control Protocol) : 패킷 전송을 제어. 연결 기반
  • HTTP(Hyper Text Transfer Protocol) : 텍스트 프로토콜

 

원격 프로그램에 데이터 전달하기

HttpServletRequest - HTTP 요청 정보를 제공

 

http://111.222.33.44.:8080/ch2/requestinfo 요청 

@Controller
public class RequestInfo {
    @RequestMapping("/requestInfo")
    public void main(HttpServletRequest request) {
    //...
    System.out.println("request.getMethod()="+request.getMethod());
    System.out.println("request.getProtocol()="+request.getProtocol());
    System.out.println("request.getScheme()="+request.getScheme());
    //...

 

HttpServletRequest의 메서드

?year=2021&month=10&day=1

 

String year = request.getParameter("year");

String month = request.getParameter("month");

String day = request.getParameter("day");

 

Enumeration enum = request.getParameterNames();

Map paramMap = request.getParameterMap(); // Key 와 Value 형태로 저장

 

String[] yearArr = request.getParameterValues("year"); // 이름이 모두  같을 때

Enumeration enum = request.getParameterNames();

Map paramMap = request.getParameterMap();

 

// 년월일을 입력하면 요일을 알려주는 원격 프로그램
@RestController
public class YoliTeller {
    @RequestMapping("/getYoil")
    public String main(HttpServletRequest request) {

        String year = request.getParameter("year");
        String month = request.getParameter("month");
        String day = request.getParameter("day");

        System.out.println("year= " + year);
        System.out.println("month= " + month);
        System.out.println("day= " + day);

        return "Monday";
    }

}

 

  • HTTP 요청 방법 - GET(읽기), POST(쓰기)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>
    <a href="http://localhost:8090/getYoil?year=2024&month=8&day=7">요일을 알고 싶으면 클릭</a>
</p>
<p>
<form action="http://localhost:8090/getYoil" method="get">
    <input type="text" name="year">년<br>
    <input type="text" name="month">월<br>
    <input type="text" name="day">일<br>
    <input type="submit" value="보내기">
</form>
</p>
</body>
</html>

링크 클릭시

 

  • GET,  POST 차이
GET POST
서버의 리소스(파일, 프로그램 실행 결과 등)를 가져오기 위해 설계 서버에 데이터를 올리기 위해 설계됨
Query String 을 통해 데이터 전달(소용량) 전송 데이터 크기의 제한이 없음(대용량)
URL에 데이터 노출되므로 보안에 취약 데이터를 요청 메시지의 body에 담아 전송
데이터 공유에 유리 보안에 유리, 데이터 공유에는 불리
예) 검색엔진에서 검색단어 전송에 이용  예) 게시판에 글쓰기, 로그인, 회원가입 

 

POST 데이터 값 개발자 도구에서 network > payload 에서 볼 수 있음

 

1. URL 직접 입력 - GET

2. <a> - GET

3. <form> GET, POST 가능하나 GET이 디폴트  

 

 

프로토콜(protocol)이란?

서로간의 통신을 위한 약속, 규칙

주고 받을 데이터에 대한 형식을 정의한 것

 

HTTP(Hyper Text (HTML) Transfer Protocol)이란?

  • 단순하고 읽기 쉽다 - 텍스트 기반의 프로토콜
  • 상태를 유지하지 않는다(stateless) - 클라이언트 정보를 저장하지 않는다.
  • 확장 가능하다. - 커스텀 헤더(header) 추가 가능

HTTP 메시지 - 응답 메시지

상태코드 의미
1xx Informational
2xx Suceess
3xx Redirect
4xx Client Error
5xx Server Error

 

HTTP 요청과 응답

 

바이너리 파일 : 문자와 숫자가 저장되어 있는 파일

-> 데이터를 있는 그대로 읽고 쓴다

텍스트 파일 : 문자만 저장되어 있는 파일

-> 숫자를 문자로 변환 후 쓴다.

 

파일 종류 쓰기 읽기
바이너리 문자 -> 문자
숫자 -> 숫자
문자 -> 문자
숫자 -> 숫자
텍스트 문자 -> 문자
숫자 -> 문자
문자 -> 문자

 

MIME(Multipurpost Internet Mail Extensions)

텍스트 기반 프로토콜에 바이너리 데이터 전송하기 위해 고안

HTTP의 Content-Type 헤더에 사용. 데이터의 타입을 명시

타입 설명 MIME 타입 예시(타입/서브타입)
text 텍스트를 포함하는 모든 문서 text/plain, text/html, text/css, text/javascript
image 모든 종류의 이미지 image/bmp, image/webp
audio 모든 종류의 오디오 파일 audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video 모든 종류의 오디오 파일 video/webm, video/ogg
application 모든 종류의 이진 데이터 application/octetstream, application/pkcs12, 
application/vnd.mspowerpoint,
application/xhtml+xml, apllication/xml,
application/pdf 

 

'Spring' 카테고리의 다른 글

스프링 배치(Spring Batch)란  (0) 2024.08.12
스프링 공부 - DI, AOP  (0) 2024.05.16