활동/호기심

스프링 게시판 CRUD 만들기 (HTTP Method / GET방식과 POST방식)

ByeongJun 2023. 9. 21. 16:46
반응형

여러 글을 참고해가며 서두 없이 정리한 글이라 흐름이 깔끔하진 않을 예정이라 양해를 구하며

작성하면서 많은 도움이 된 감사한 분들의 게시글 출처를 하단에 밝혀놨으니 참고하시면 되겠다.

조만간 예정되어 있는 다음 사이트인 부산 지역 렉카 타겟 1순위 기계설비 톱니몬 성호

요즘 게시판 CRUD 구현 실습 강의를 보며 차근차근 다시 공부를 하고 있다.

 

// 삭제
    @GetMapping("/board/delete")
    public String boardDelete(Integer id) {

        boardService.boardDelete(id);

        return "redirect:/board/list";
    }

// 수정
    @GetMapping("/board/modify/{id}")
    public String boardModify(@PathVariable("id") Integer id,Model model) {

        model.addAttribute("board", boardService.boardView(id));

        return "boardmodify";
    }

그러던 중 CRUD에서 GET방식과 POST방식에 대해 고민해보게 되었다. 

 

 

 

 

 

 

HTTP (Hypertext Transfer Protocol) Method

   : 웹 요청을 수행하는데 사용되는 특별한 동작을 정의하는 방법

 

주된 목적은 웹 서버에게 어떤 동작을 수행해야 하는지 알리는 것이며,

HTTP Method를 올바르게 사용하면 웹 애플리케이션의 동작을 명확하게 정의하고 

보안과 효율성을 향상시키며 RESTful API를 설계하는데 도움된다.

 

더보기
클라이언트와 서버 구동 방식

클라이언트가 인터넷 브라우저 주소창에 URL을 입력하면 

서버는 클라이언트의 요청에 응답하여 웹 페이지를 보여준다. 

 

요청을 보내고 응답을 받을 때 그 정보들을

패킷(Packet)이라는 작은 조각에 실어 보내는데

 

HTTP Method방식 (GET, POST), 클라이언트와 브라우저, 

접속하고자 하는 URL 정보 등이 담겨있는 Header

 

전달하고자 하는 정보를 담아서 서버에 요청할 수 있는

Body로 나뉜다. 

 

 

 


GET 방식

 

GET 방식은 클라이언트가 서버로 데이털르 요청하기 위해 사용되는 Method이다. 

GET 방식을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송된다.

 

// 삭제
@GetMapping("/board/delete")
public String boardDelete(Integer id) {

    boardService.boardDelete(id);
    
    return "redirect:/board/list";
}

게시물 삭제 요청을 처리하고

삭제되면 "/board/list" 경로로 redirect 시킨다.

 

 

 

public void boardDelete(Integer id) {

    boardRepository.deleteById(id);
}

게시물 삭제 관련된 로직은 boardService 클래스에 있는 

boardDelete() 메서드에서 처리되는 것을 알 수 있다.

 

 

 

 

 

근데 이러면 안된다.

 

컨트롤러에서 GET 방식으로 삭제를 처리하면 안 되고 

무조건 POST 방식으로 처리해야 한다. 

 

 

localhost:8080

URL을 이렇게 입력하면 id가 20번 게시글이 삭제된다. 

 

여기서 문제는 누구나 글을 삭제할 수 있다는 것이기 때문에 

메서드 방식을 POST 방식으로 바꿔주면 된다.

 

 

 

 

 

처리방식 GET POST
정보 노출 Parameter가 URL을 통해 노출되며, 브라우저에 기록 남음 HTTP 헤더 속으로 감춰져 Parameter 브라우저에 저장 안됨
Parameter 전송 가능 (URL에 2k 이하로 넣는게 안전 queryString으로 url 뒤에 "?"가 붙음) 서버에 파일 업로드 등을 포함해서 가능
리소스 전달 방식 queryString HTTP Body
정보 전달 방식 URL 뒤에 "?"를 붙이거나 HTML 폼 형식에서 이용 가능 반드시 HTML 폼을 통해서만 사용 가능
데이터 위치 Header Body
북마크 URL로 인코딩 되므로 북마크 가능 북마크 불가능
(요청 Parameter가 요청 body에 포함)
캐싱 가능 여부 Idempotent하므로 캐시 O
(같은 요청 여러 번 해도 항상 같은 응답)
Not Idempotent로 캐시 X
(같은 요청 여러 번 해도 다른 응답이 올 수 있음)
해킹 난이도 쉬움 GET보다는 어려움
사용 범위 검색어 전달, 게시판 페이지 번호 등
(보안 관련 없는 부분에서 많이 사용)
아이디, 비밀번호, 개인정보 등 

 

*Idempotent / 멱등성

   : 연산을 여러 번 하더라도 결과가 달라지지 않는 성질을 의미한다.

     GET 요청의 경우 여러 번 요청해도 응답이 같지만,
     POST 요청은 리소스를 새로 생성하거나 업데이트 하므로

     서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

 

 

 

 

 

참고 및 출처
https://velog.io/@dnjsgml418/WEB-HTTP-Method-CRUD

https://swimjiy.github.io/2019-11-03-How-Web-Works 

https://yjshin.tistory.com/684

https://computer-science-student.tistory.com/223

https://u-it.tistory.com/46

반응형