티스토리 뷰
개발 환경
java 21.0.4 2024-07-16 LTSJava(TM) SE Runtime Environment (build 21.0.4+8-LTS-274)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.4+8-LTS-274, mixed mode, sharing)
Tomcatv 10.1
EclipseVersion: 2024-06 (4.32.0)Build id: 20240606-1231
REST(Representational State Transfer, 표현 상태 전이)은
웹 기반 애플리케이션에서 사용되는 소프트웨어 아키텍처 스타일입니다.
주로 웹 서비스를 설계할 때 활용되며, HTTP 프로토콜을 기반으로 클라이언트와 서버 간의 통신을 효율적으로 설계하는 데 도움을 줍니다.
REST의 주요 특징
1. 무상태성(Statelessness)
서버는 클라이언트의 이전 요청에 대한 정보를 저장하지 않으며, 각 요청은 독립적으로 처리됩니다.
모든 필요한 정보는 요청 자체에 포함되어 있어야 합니다.
2. 클라이언트-서버 구조(Client-Server Architecture)
클라이언트와 서버는 독립적으로 동작하며, 요청과 응답을 통해 데이터를 주고받습니다.
3. 리소스 기반(Resource-Based)
REST는 데이터(리소스)를 URI(Uniform Resource Identifier)로 식별하며,
이 리소스들은 JSON, XML 등 다양한 형식으로 표현되어 클라이언트와 서버 간에 전달됩니다.
4. 표준화된 인터페이스(Uniform Interface)
HTTP 메서드(GET, POST, PUT, DELETE 등)를 통해 클라이언트와 서버가 통신합니다.
예를 들어, `GET`은 데이터를 조회하고, `POST`는 새로운 데이터를 생성하는 데 사용됩니다.
5. 캐시 가능성(Cacheability)
클라이언트는 서버의 응답을 캐시할 수 있으며, 이를 통해 성능을 향상시킬 수 있습니다.
REST의 장점
- 확장성: 클라이언트와 서버 간의 의존성이 낮아 확장이 용이합니다.
- 일관성: 표준 HTTP 프로토콜을 사용해 다양한 환경에서 일관되게 동작합니다.
- 유연성: 다양한 데이터 형식을 사용할 수 있어 유연한 응용이 가능합니다.
pom.xml
<!--https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.1</version>
</dependency>
RestfulController.java
package com.rest.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.rest.model.MemberVO;
@RestController
@RequestMapping("/restful/*")
public class RestfulController {
@GetMapping("/rest")
public MemberVO rest() {
MemberVO memberVO = new MemberVO();
memberVO.setId("아이디");
memberVO.setName("name");
return memberVO;
}
@GetMapping("/restList")
public List<MemberVO> restList() {
List<MemberVO> memberList = new ArrayList<MemberVO>();
memberList.add(new MemberVO().setId("new id").setName("new name"));
memberList.add(new MemberVO().setId("new id454").setName("new name6767"));
return memberList;
}
@GetMapping("/restMap")
public Map<Integer, MemberVO> restMap() {
Map<Integer, MemberVO> map = new HashMap<Integer, MemberVO>();
map.put(1, new MemberVO().setId("new id22").setName("new name32323"));
map.put(2, new MemberVO().setId("new id64656").setName("new name08980"));
return map;
}
@GetMapping("/restPathVariable/{rowNumber}")
public MemberVO restPathVariable(@PathVariable("rowNumber") int rowNumber) {
Map<Integer, MemberVO> map = new HashMap<Integer, MemberVO>();
map.put(1, new MemberVO().setId("new id111").setName("new name111"));
map.put(2, new MemberVO().setId("new id222").setName("new name222"));
return map.get(rowNumber);
}
@PostMapping("/restRequestBody")
public void restRequestBody(@RequestBody MemberVO memberVO) {
System.out.println(memberVO.toString());
}
@GetMapping("/restResponseEntity")
public ResponseEntity<List<MemberVO>> responseEntity() {
List<MemberVO> memberList = new ArrayList<MemberVO>();
memberList.add(new MemberVO().setId("my id").setName("my name"));
return new ResponseEntity<List<MemberVO>>(memberList, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
호출
http://localhost:8080/restful/rest
// {"id":"아이디","name":"name"}
http://localhost:8080/restful/restList
// [{"id":"new id","name":"new name"},{"id":"new id454","name":"new name6767"}]
http://localhost:8080/restful/restMap
// {"1":{"id":"new id22","name":"new name32323"},"2":{"id":"new id64656","name":"new name08980"}}
http://localhost:8080/restful/restPathVariable/1
// {"id":"new id111","name":"new name111"}
NormalController.java
package com.rest.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/normal/*")
public class NormalController {
@GetMapping("/requestBody")
public String requestBody() {
return "requestBody";
}
@GetMapping("/responseBody")
@ResponseBody
public Map<String, Object> responseBody() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", "new id");
map.put("name", "new Name");
return map;
}
}
requestBody.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
function callRestful() {
const data = { id:"some id", name:"정훈" };
$.ajax({
url : '/restful/restRequestBody', // AJAX 요청을 처리할 URL
type : 'POST',
contentType : "application/json",
data : JSON.stringify(data),
success : function() { },
error : function(error) {
console.log("Error: " + error);
}
});
}
</script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" value="데이터 전송" onclick="callRestful()" />
</body>
</html>
호출
http://localhost:8080/normal/requestBody
// some id, 정훈
- Total
- Today
- Yesterday
- 스프링 프레임워크(spring framework)
- REST API
- await
- java.sql
- 특정 문자를 기준으로 자르기
- 진수 변환
- jstl(java standard tag library)-core
- java web-mvc
- 스프링 시큐리티(spring security)-http basic 인증
- 메이븐(maven)
- 스프링 시큐리티(spring security)
- jsp 오픈 소스
- 상품 등록
- 문자 자르기
- 제품 등록
- 스프링 프레임워크(spring framewordk)
- 표현 언어(expression language)
- jstl(java standard tag library)
- 람다식(lambda expression)
- java-개발 환경 설정하기
- React
- java 키워드 정리
- System.Diagnostics
- In App Purchase
- system.io
- 인텔리제이(intellij)
- MainActor
- error-java
- .submit()
- nl2br
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |