0C 개발일지
Spring Boot 본문
- 로컬 프로그램 실행
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 |