* CRUD란?
Create, Read, Update, Delete의 약자이다. 대부분의 시스템에 적용되는 개념으로 데이터 관리, 클라이언트와 서버간의 통신에 관한 시스템을 만들 때 사용된다.
* RESTful API에서의 CRUD
CRUD | HTTP METHOD |
Create | POST |
Read | GET |
Update | PUT |
Delete | DELETE |
ex) 글 작성(C) / 글 조회 (R) / 글 수정(U) / 글 삭제 (D)
* SpringBoot에서의 구현 방식
우선 데이터는 json방식으로 전달한다.
{
"name" : "이치지",
"job" : "교사"
}
- Controller
- Model
- Repository
- Service
위와같은 구조로 이루어진 코드를 살펴보자
TestController.java
@RestController
@RequestMapping("/test-api")
@RequiredArgsConstructor
public class TestController {
private final TestService testService;
//POST는 암호화가 됩니다.
@PostMapping("/test")
public TestResponse create(@RequestBody Test test) {
Test ret = testService.create(test);
//가져온 ID와 네임 추가
return new TestResponse(ret.getId(),ret.getName());
}
//http 레벨에서 get은 암호화가 안되어있다.
@GetMapping("/test")
public TestResponse read(@RequestParam long id) {
Optional<Test> ret = testService.read(id);
// Null에서 Id나 name을 가져올 수 없기 때문에 500Error 발생.
// .orElse(null) 이거 대신에 위처럼 Optional<Test> 사용
return ret
.map(it -> new TestResponse(it.getId(),it.getName()))
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Entity not found"));
// Error:500을 Error:404로 바꿔서 보이게하기
}
@PutMapping("/test")
public TestResponse update(@RequestBody Test test) {
Optional<Test> ret = testService.update(test);
return ret
.map(it -> new TestResponse(it.getId(),it.getName()))
.orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Entity not found"));
}
@DeleteMapping("/test")
public void delete(@RequestParam long id) {
testService.delete(id);
}
}
TestService.java
@Service
@RequiredArgsConstructor
public class TestService {
private final TestRepository testRepository;
public Test create(Test test) {
// Test test = new Test();
test.setAge(10);
test.setSex("test sex");
//h2 DB에 저장
return testRepository.save(test);
//h2-console을 통해 보면되니 이거 안슴 (/resources/application.yaml)
// List<Test> ret = testRepository.findAll();
}
public Optional<Test> read(long id){
return testRepository.findById(id);
}
public Optional<Test> update(Test test) {
return testRepository
.findById(test.getId())
.map((savedTest) ->{
savedTest.setName(test.getName());
savedTest.setEmail(test.getEmail());
return testRepository.save(savedTest);
});
}
public void delete(long id) {
testRepository.deleteById(id);
}
}
Test.java / TestResponse.java / TestRepository.java는 생략했다.
위 코드를 실행시키고 https://localhost8080/test 를 브라우저로 접속하면 자동으로 GET요청이 수행된다. 그 외의 POST, PUT, DELETE요청을 수행하기 위해서는 프론트엔드에서 작업을 해주거나 테스트만을 목적으로 할 경우 POSTMAN을 이용해 api테스트를 해볼 수 가 있다.
이번에는 간단하게 json형태의 데이터를 저장, 불러오기, 수정, 삭제 할 수 있는 RESTful api를 작성한 것이다. 이런 형태를 기반으로 백엔드의 시스템이 동작한다고 알면 편할 것이다.
'알쓸지식' 카테고리의 다른 글
[백엔드] RESTful API란? (0) | 2024.11.24 |
---|---|
[OS] 프로세스 스케줄링 (2) : 스케줄링 종류 (1) | 2024.11.23 |
[OS] 프로세스 스케줄링 - (1) 프로세스와 그 스케줄링 방법 (3) | 2024.11.22 |
클라우드 플레어... 이게 뭐지? (1) | 2024.09.13 |
GitHub Colab에서 만든 파이썬 파일 업로드시키기 (4) | 2024.09.08 |