- 프로그램의 확장성을 높이기 위해서 백단과 프론트단을 분리해서 개발함.
back-end(자바. dao, service, controller) -----> 스프링 부트 프로젝트
-- 모델 구현 (데이터 처리와 기능 제공)
-- 이 기능을 웹, 모바일 등 다양한 앱에서 사용
-- 처리한 결과를 JSON 형태로 제공. -> POSTMAN으로 확인할 수 있다.
front-end(뷰단. html, javascript(ajax, jquery => vue, react), css....) ------> 다이나믹 웹 프로젝트
- 서로 상의한 값만 주고 받으면 됨. 서로 신경 안써도 됨!!
GET, POST -> form 태그 또는 ajax로 보냄
나머지 태그들은 ajax로 값 보내기~
- application.properties 만 설정하면 되고, pom.xml은 그냥 두면 됨.
1. URI 기본규칙
URI는 정보의 자원을 표현해야 한다.
resource는 동사보다는 명사(동작 이름X)를, 대문자보다는 소문자 & - (하이픈)를 사용한다.
resource의 스토어 이름으로는 복수 명사를 사용해야 한다.
한 개 검색 / 수정 / 삭제 url 끝에 id(pk)를 추가한다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)으로 표현한다.
- HTTP Method나 동사표현이 URI에 들어가면 안된다.
:id와 같이, 변하는 값은 하나의 특정 resource를 나타내는 고유값이어야 함.
- 흔히 하는 실수는 URI에 자원에 대한 행위를 넣는 것.
uri 로 동작을 예측할 수 있기 때문에 보안상 좋지 않다.
==> 전송방식으로 구분하도록 만든다.
==> session 보다 token으로 상태를 유지하도록 한다. (stateless : 상태 유지 안함)
잘못된 사례 | 올바른 사례 |
GET /chatrooms/get/:id POST /chatrooms/create GET /chatrooms/delete/:id POST /chatrooms/update/:id |
GET /chatrooms => 전체검색 (복수 형태) GET /chatrooms/:id =>id로 하나 검색 POST /chatrooms => 추가DELETE /chatrooms/:id =>삭제 PUT /chatrooms/:id =>전체수정 |
HTTP Method | 주로 쓰는 Method |
GET | 조회 (받겠다) |
POST | 리소스 생성 (보내겠다) |
PUT | 리소스 전체 갱신(놓겠다/넣겠다) |
PATCH | 리소스 부분 갱신(붙이겠다) |
DELETE | 리소스 삭제 (지정한 서버의 파일을 삭제하겠다) |
HTTP | CRUD | URI |
POST | 리소스 생성 | /resources |
GET | 전체 리소스 조회 | |
특정 리소스 조회 | /resources/:id |
|
PUT | 리소스 전체 수정 | |
PATCH | 리소스 일부 수정 | |
DELETE | 특정 리소스 삭제 |
2. POSTMAN
백단은 백단만 만들어도 된다.
뷰를 만들지 않아도 POSTMAN(크롬 확장프로그램)으로 테스트해 볼 수 있다~~
(1) POSTMAN 확장프로그램 설치
1. 확장프로그램 마켓 들어가기
2. Tabbed Postman 추가하기
3. 아이콘 눌러서 실행하기
4. 코드 테스트하기
# port
server.port=8081
# oracle set
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=hr
spring.datasource.password=hr
#encoding
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true
#jpa
spring.jpa.generate-ddl=true
spring.jpa.database=oracle
spring.jpa.show-sql=true
@RestController // rest api는 그냥 controller 라고 쓰면 안됨~
@CrossOrigin(origins = "*") // 요청받을 ip 지정. *는 ip 상관없이 모든 요청 받겠다는 뜻.
@RequestMapping("/rest-test")
public class RestApiController {
// ex) /rest-test/3
@DeleteMapping("/{num}") // { } : url과 같이 전송한 값 -> @PathVariable
public Map delete(@PathVariable("num") int num) {
Map map = new HashMap();
boolean flag = true;
try {
// DB 연동을 안해서 받은 값을 그대로 넣어준 것.
map.put("del num", num);
} catch (Exception e) {
flag = false;
}
map.put("flag", flag);
return map;
}
}
https://intheham.tistory.com/103