코드네임 :
☁️ 토이 프로젝트 - Swagger 연결 📋 본문
https://ramincoding.tistory.com/m/entry/Frontend-스웨거swagger-API-사용하는-방법-feat-리액트
[Frontend] 스웨거(swagger) API 사용하는 방법 (feat. 리액트)
[Frontend] 스웨거(swagger) API 사용하는 방법 (feat. 리액트) 프론트엔드 개발자로써 첫 회사에 들어가자마자 스웨거 API 링크를 받았다. 멋사에서 프로젝트할 때 서버리스로 Firebase 만 써본 입장에서
ramincoding.tistory.com
연결할때 참고할 것!
HTTP
클라이언트(사용자)와 서버간에 요청(Request)와 응답(Response)메시지를 주고 받는 프로토콜
ㄴ iOS앱은 HTTP를 통해 서버에 데이터 요청 후, 서버로부터 JSON, 이미지, 파일 등 다양한 리소스 받아옴
HTTP 응답 상태 코드
: 요청 처리 결과 나타냄
(HTTP 상태 코드는 서버와 클라이언트 간의 빠르고 명확한 소통을 위한 표준화된 약속)
REST API
Representational State Transfer
네트워크 상 자원을 HTTP URI로 식별, CRUD 작업 수행
> URI
: 자원을 고유하게 식별하는 주소
- 어떤 자원에 접근할지 HTTP Method는 그 자원에 대해 어떤 작업을 할지 명확히 구분
POST 메서드
: 서버에 새로운 데이터를 전송하거나 자원을 생성 시 (주로 쓰기 작업)
- 데이터를 서버에 전송하기 위해 요청 본문에 데이터 담음
GET 메서드
: 서버로부터 데이터를 조회할때 (읽기작업)
- 본문 없음 (필요정보는 URL에 쿼리 파라미터로 포함됨
- 서버상태 변경하지 않음
당연히 에러
쿼리 파라미터란 무엇인가?
: 웹 브라우저나 앱에서 서버로 정보를 전달할 때 URL에 붙여 보내는 데이터
쿼리 파라미터를 언제 사용하는 게 좋을까요?
: 쿼리 파라미터는 리소스를 식별하지 않고, 필터링/정렬/페이지네이션처럼 요청을 조정할 때
PATCH 메서드
: 자원의 일부 속성만 업데이트(일부만 수정해야할 때 효율적)
- 멱등성이 보장되지 않음
HTTP Method의 멱등성이란 무엇을 말하는 건지?
: 같은 요청을 여러 번 보내도 결과가 항상 같아야 한다는 성질
즉, 클라이언트가 동일한 HTTP 요청을 몇 번 보내더라도 서버의 상태나 응답이 변하지 않아야 멱등하다고 해요.
위에서만 유저 조회가 안됨 ㅜㅜㅜ
PUT 메소드
서버에 이미 존재하는 특정 자원의 전체 정보를 갱신
- 필요한 값만 수정하는게 아닌, '전체'정보 수정하는데 사용됨 (PATCH와의 차이점)
유저조회하면??
DELETE 메서드
: 서버에서 특정 자원을 삭제할때
으음 스웨거 서버 문제? 가 생겨서
유엠씨에서 배웠던걸 사용해보기로 한다............
물론 이거 배울때도 뭔 소린지 몰랐음.... 지금이라도 보겠다....... 지금봐도 모르면 어쩔수 없는거고,,,,,,,,,
인텔리제이로 서버 구축해놓기!!
⬆️ HTTPMethodTestApplication위치에서 실행시키고 해당 주소 들어가기
package com.example.httpmethodtest.DTO;
public class FormData {
private String title;
private String author;
private String password;
private String content;
public FormData() {}
public FormData(String title, String author, String password, String content) {
this.title = title;
this.author = author;
this.password = password;
this.content = content;
}
// Getter, Setter 설정
public String getTitle() {
return title;
}
public void setName(String name) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAge(String Author) {
this.author = author;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package com.example.httpmethodtest.Controller;
import com.example.httpmethodtest.DTO.FormData;
import org.springframework.web.bind.annotation.*;
import java.util.concurrent.atomic.AtomicReference;
@RestController
@RequestMapping("/person")
public class FormDataController {
private final AtomicReference<FormData> formdataStorage = new AtomicReference<>();
//POST
@PostMapping
public String createFormData(@RequestBody FormData data) {
formdataStorage.set(data);
return "사람 생성 완료";
}
//GET
@GetMapping
public FormData getFormData(@RequestParam String title) {
FormData person = formdataStorage.get();
if (person == null) {
throw new RuntimeException("등록된 사람 없음");
}
/* 쿼리 파라미터를 위한 코드 */
if (!person.getTitle().equals(title)) {
throw new RuntimeException("해당 이름의 사람 없음");
}
return person;
}
//PUT : 사람 정보 전체 수정
//PATCH와 PUT은 다른 개념입니다.
@PutMapping
public String updateFormData(@RequestBody FormData wholeFormData) {
formdataStorage.set(wholeFormData);
return "폼 정보 전체 업데이트";
}
// PATCH: 사람 정보 일부 수정
@PatchMapping
public String patchPerson(@RequestBody FormData partialFormData) {
FormData currentPerson = formdataStorage.get();
if (currentPerson == null) {
throw new RuntimeException("등록된 사람 없음");
}
if (partialFormData.getTitle() != null) {
currentPerson.setName(partialFormData.getTitle());
}
if (partialFormData.getAuthor() != null) {
currentPerson.setName(partialFormData.getAuthor());
}
if (partialFormData.getPassword() != null) {
currentPerson.setName(partialFormData.getPassword());
}
if (partialFormData.getContent() != null) {
currentPerson.setName(partialFormData.getContent());
}
formdataStorage.set(currentPerson);
return "사람 부분 정보 수정 완료";
}
//DELETE
@DeleteMapping
public String deletePerson(@RequestParam String name) {
FormData person = formdataStorage.get();
if (person == null) {
throw new RuntimeException("등록된 사람 없음");
}
if (!person.getTitle().equals(name)) {
throw new RuntimeException("이름 같은 사람 없음");
}
formdataStorage.set(null);
return "등록된 사람 삭제 완료";
}
}
package com.example.httpmethodtest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HttpMethodTestApplication {
public static void main(String[] args) {
SpringApplication.run(HttpMethodTestApplication.class, args);
}
}
근데 이거 다음에 뭐 해야됨...?? ㅜㅜ,,,,,,,,
모르겟다,,, 일단 서버 해결 될때까지 대기하기.
'👥Club > ☁️9oormthon univ☁️' 카테고리의 다른 글
⚛️ React 심화 - React 비동기 처리와 데이터 패칭 라이브러리 (3) | 2025.06.22 |
---|---|
⚛️ React - Next.js App Router에서의 렌더링 전략 이해 (0) | 2025.06.04 |
☁️ 토이 프로젝트 - React+TypeScript+Next.js 📋 (0) | 2025.05.28 |
VS Code 터미널에서 github와 연결 & 브랜치 생성 (0) | 2025.05.23 |
Next.js (2) | 2025.05.18 |