코드네임 :

☁️ 토이 프로젝트 - Swagger 연결 📋 본문

👥Club/☁️9oormthon univ☁️

☁️ 토이 프로젝트 - Swagger 연결 📋

비엔 Vien 2025. 5. 30. 01:52

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 메서드

: 서버에서 특정 자원을 삭제할때

 


 

으음 스웨거 서버 문제? 가 생겨서

유엠씨에서 배웠던걸 사용해보기로 한다............

물론 이거 배울때도 뭔 소린지 몰랐음.... 지금이라도 보겠다....... 지금봐도 모르면 어쩔수 없는거고,,,,,,,,,

 

인텔리제이로 서버 구축해놓기!!

 

http://localhost:8080

⬆️ 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);
	}

}

 

근데 이거 다음에 뭐 해야됨...?? ㅜㅜ,,,,,,,,

 

모르겟다,,, 일단 서버 해결 될때까지 대기하기.