웹 개발/웹 개발 기초

HTTP전달방식(GET방식과 POST방식)

Blue_bull 2025. 2. 7. 21:06

📌 GET 방식과 POST 방식 비교 (초급 개발자를 위한 완벽 정리)

GET과 POST는 클라이언트(웹 브라우저)와 서버(서블릿, 웹 애플리케이션) 간 데이터를 주고받을 때 사용하는 HTTP 요청 방식(Method)입니다.
각 방식은 사용 목적과 특징이 다르며, 적절한 상황에 맞게 선택해야 합니다.


✅ 1. GET 방식과 POST 방식 비교표

비교 항목 GET 방식 POST 방식
데이터 전달 방식 URL에 데이터를 포함 (쿼리 스트링: ?key=value) HTTP 요청 본문(Body)에 데이터를 포함
URL 변경 여부 ✅ 변경됨 (example.com/page?name=John) ❌ 변경되지 않음
보안 ❌ 취약 (URL에 데이터가 노출됨) ✅ 상대적으로 안전 (데이터가 URL에 보이지 않음)
데이터 크기 제한 ❌ URL 길이 제한 존재 (~2048자) ✅ 제한 없음 (대용량 데이터 전송 가능)
브라우저 캐싱(Cache) ✅ 캐싱 가능 (이전 요청 저장 가능) ❌ 캐싱 불가능 (항상 새로운 요청)
사용 목적 검색, 조회, 링크 공유 등 (데이터 변경 X) 로그인, 회원가입, 데이터 변경 요청
중복 요청 처리 ❌ 중복 요청 가능 (뒤로 가기, 새로고침 시 동일 요청 발생) ✅ 중복 요청 방지 가능

✅ 2. GET 방식

GET 요청은 데이터를 URL에 포함시켜 서버로 전달하는 방식입니다.
주로 "데이터 조회"에 사용되며, 서버의 상태를 변경하지 않는 요청(GET 요청은 안전해야 함).

🔹 GET 방식 예제 (URL로 데이터 전달)

<a href="search.jsp?query=Java">검색</a>

?query=Java 부분이 쿼리 스트링(Query String)이며, 서버는 query=Java라는 데이터를 받음.
✔ 브라우저에서 URL을 직접 입력해도 동일한 요청을 보낼 수 있음.

🔹 GET 방식으로 서버에서 데이터 받기 (서블릿 예제)

@WebServlet("/search")
public class SearchServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String query = request.getParameter("query");  // URL에서 query 값 가져오기
        response.getWriter().write("검색어: " + query);
    }
}

http://localhost:8080/search?query=Java 요청 시 "검색어: Java" 출력됨.

📌 💡 GET 방식의 특징
URL에 데이터를 포함하므로 북마크 & 공유 가능.
데이터가 URL에 보이므로 보안에 취약 (비밀번호, 개인정보 전달 X).
대량의 데이터를 전송하기 어려움 (URL 길이 제한).


✅ 3. POST 방식

POST 요청은 데이터를 HTTP 요청의 Body(본문)에 포함시켜 서버로 전달하는 방식입니다.
주로 "데이터를 변경"하는 요청 (로그인, 회원가입, 글쓰기, 결제 등)에 사용됨.

🔹 POST 방식 예제 (폼 전송)

<form action="login.jsp" method="POST">
    <input type="text" name="username" placeholder="아이디">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">로그인</button>
</form>

비밀번호가 URL에 포함되지 않고, 보안이 강화됨.

🔹 POST 방식으로 서버에서 데이터 받기 (서블릿 예제)

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.getWriter().write("로그인 시도: " + username);
    }
}

doPost()GET 방식이 아니라 POST 방식으로만 데이터를 받을 수 있음.
로그인, 회원가입 같은 데이터 변경 작업에서 사용됨.

📌 💡 POST 방식의 특징
데이터가 URL에 노출되지 않으므로 보안성이 높음.
대용량 데이터를 전송할 수 있음 (파일 업로드 가능).
캐싱되지 않으므로, 같은 요청을 여러 번 하면 서버 부하 발생 가능.


✅ 4. GET vs POST 실제 사용 예시

사용 예시 GET 방식 사용 POST 방식 사용
검색 엔진 🔹 https://google.com/search?q=java
회원가입 🔹 POST /register (비밀번호 입력 필요)
로그인 🔹 POST /login (보안이 필요함)
게시글 조회 🔹 GET /post?id=123
게시글 작성 🔹 POST /write (데이터 저장 필요)
파일 업로드 🔹 POST /upload (대량 데이터 전송)

✅ 5. GET과 POST 코드 비교 (서블릿)

🔹 GET 방식 요청 (조회)

@WebServlet("/search")
public class SearchServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String keyword = request.getParameter("keyword");  // URL에서 키워드 값 가져오기
        response.getWriter().write("검색 키워드: " + keyword);
    }
}

✔ URL에 ?keyword=Java 추가하여 데이터 전달 가능 (http://localhost:8080/search?keyword=Java).

🔹 POST 방식 요청 (데이터 저장)

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.getWriter().write("회원가입 완료: " + username);
    }
}

✔ POST 요청을 보내야 하므로 브라우저에서 직접 테스트할 수 없음 (폼 또는 Postman 필요).


✅ 6. 결론 (GET vs POST)

GET은 데이터를 "조회"할 때 사용 → URL에 데이터를 포함, 캐싱 가능, 보안 취약.
POST는 데이터를 "변경"할 때 사용 → 본문(Body)에 데이터를 포함, 보안 강함, 대량 데이터 전송 가능.
로그인, 회원가입, 파일 업로드 등 보안이 필요한 요청에는 POST를 사용해야 함.
검색, 게시글 조회, 링크 공유 등에는 GET이 적절함.

🚀 이제 GET과 POST의 차이를 완벽하게 이해했을 거야! 😊

'웹 개발 > 웹 개발 기초' 카테고리의 다른 글

서블릿 매핑 방식  (0) 2025.02.07
MVC 개념 및 모델1 vs 모델2  (0) 2025.02.07
포워딩, 리다이렉트 비교  (0) 2025.02.07
URL과 URI의 차이  (1) 2025.02.05
BOM (Browser Object Model)  (0) 2025.02.05