Chillax in dev

[PHP] 웹에서 데이터를 전송하는 두 가지 주요한 방법 본문

PHP & MySQL

[PHP] 웹에서 데이터를 전송하는 두 가지 주요한 방법

Seong Story 2023. 12. 22. 11:38
728x90

GET 방식과 POST 방식

웹에서 데이터를 전송하는 두 가지 주요한 방식은 GET 방식과 POST 방식이 있습니다. 

각방식의 특징과 사용법을 살펴보겠습니다. 

 

GET 방식

- GET 방식은 URL에 데이터를 첨부하여 전송하는 방식입니다. 

데이터가 URL에 그대로 노출되기 때문에 보안에 취약한 부분이 있습니다. 

URL을 통해 값을 붙여 전송하는 방식이기 때문에 전송용량에 제한이 있습니다.

용량 제한은 클라이언트가 사용하는 브라우저나 서버에 따라 상이하지만 많은 브라우저들이 일반적으로 2,048자(또는 2KB)로 제한됩니다. 이는 URL에 허용하는 전체 길이 즉 URL 자체를 포함한 용량입니다. 

웹 서버의 경우는 대부분 2KB ~ 3KB 사이의 제한을 가지고 있습니다. 

그러니 대량의 데이터를 전송해야 한다면 POST 방식을 사용하고 가능하면 GET 방식은 전송하는 데이터의 크기를 작게 유지해야 합니다.

따라서 주로 데이터를 조회하거나 검색등의 요청을 수행할 때 많이 사용합니다. 

 

개념

http://example.com/search?keyword=apple&page=1

 

위의 예시에서  http://example.com/search는 요청 경로입니다.

? 이후 KEY=VALUE 형태로 데이터를 첨부하는 겁니다.  위 예시에선 KEY : keyword , VALUE : apple 이되겠습니다. 

&를 통해 같은 방식으로 더 많은 KEY와 VALUE를 붙여서 전송 가능합니다.

위 예시에선  keyword=apple , page=1  두 가지 데이터를 전송하고 있습니다. 

 

활용

자 이제 PHP 프레임워크 CodeIgniter 환경,  controller에서 GET 방식은 어떤 식으로 적용되는지 살펴보겠습니다.

 

http://example.com/manager?popup=Y

 

위의 예시를 보면 GET 방식으로 KEY : popup , VALUE : Y로 URL을 통해 접근했습니다.  

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Manager extends CI_Controller {
	
	/*
		///////////////////////////////////////////////////////////////////////////////
		Remap indexing
		///////////////////////////////////////////////////////////////////////////////
		///////////////////////////////////////////////////////////////////////////////
	*/
	public function _remap($method, $data){
		
		if(isset($_GET['popup']) && $_GET['popup'] == "Y"){
			//이렇게 데이터를 받아옵니다.
		}
	}
}

 

위 코드를 보면 $_GET ['KEY'] 방식으로 데이터를 가져옵니다.  위 예시의  $_GET ['popup']로 활용가능합니다.

 

POST 방식

 

- POST 방식은 HTTP 요청의 본문에 데이터를 포함하여 전송하는 방식입니다.  URL에 데이터를 노출하지 않으므로 GET방식보다는 보안적으로 더 안전합니다. 또한 데이터 전송량에 제한이 없어 더 많은 양의 데이터를 전송할 수 있어

데이터 생성, 수정, 삭제 등의 요청에 사용됩니다.

개념 

POST /form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

name=John&age=25

 

위의 예시에서 "POST /form"은 요청할 경로를 나타내고, "Host"는 요청을 보낼 호스트 주소를 나타냅니다. "Content-Type"은 전송할 데이터의 형식을 지정하며, 일반적으로 "application/x-www-form-urlencoded"를 사용합니다. 본문에는 key=value 형태로 데이터를 포함시킵니다. 위 예시에서는 "name"과 "age"라는 두 개의 데이터를 전송하고 있습니다.

 

활용

 

자 이제 PHP 프레임워크 CodeIgniter 환경,  controller에서 POST 방식은 어떤 식으로 적용되는지 살펴보겠습니다.

HTML <form> 태그를 활용해서 url로 submit 한경우를 예시로 살펴볼까요

<form method="post" action="/User/register">
    <label for="name">이름:</label><br>
    <input type="text" id="name" name="name"><br>
    <label for="email">이메일:</label><br>
    <input type="text" id="email" name="email"><br>
    <input type="submit" value="등록">
</form>

 

다음으로 사용자가 form을 submit 하면 POST방식으로 데이터를 받아서 controller에서 처리해 봅시다.

class User extends CI_Controller {
    public function register() {
        $name = $this->input->post('name'); // POST 데이터에서 'name'을 가져옵니다.
        $email = $this->input->post('email'); // POST 데이터에서 'email'을 가져옵니다.

        $this->load->model('User_model'); // User_model을 로드합니다.
        $this->User_model->add_user($name, $email); // 모델을 통해 DB에 사용자 정보를 추가합니다.

        echo '등록이 완료되었습니다!';
    }
}

 

 

그러나 이렇게 입력한 데이터는 사용자로부터 직접적으로 받는 데이터이므로 바안상의 이유로 꼭 필터링이 필요합니다.

특히 php Codeigmiter에서는 다음과 같이 필터링을 지원합니다.

$data = $this->input->post('변수명', TRUE); // 두 번째 인자를 TRUE로 설정하면 XSS 필터링이 적용됩니다.

 

이렇게 GET 방식과 POST 방식을 CodeIgniter에서는 input 클래스를 이용하여 쉽게 사용할 수 있습니다.\

 

 

정리

웹에 데이터를 전송하는 GET 방식과 POST 방식을 알아봤어요.

 

1. GET 방식 

GET 방식은 일반적으로 데이터를 조회할 때 사용합니다. 주소(URL)에 변수가 그대로 보이며, 데이터를 조회하는 데 사용됩니다.

 

CodeIgniter에서는 아래와 같이 사용할 수 있습니다.

$data = $this->input->get('변수명'); // $_GET['변수명']과 동일합니다.

 

 

2. POST 방식

POST 방식은 사용자의 데이터를 서버로 전송할 때 사용합니다. 주로 로그인, 회원가입 등 폼 데이터를 전송할 때 사용되며, 데이터가 URL에 노출되지 않습니다.

 

CodeIgniter에서는 아래와 같이 사용할 수 있습니다

$data = $this->input->post('변수명'); // $_POST['변수명']과 동일합니다.
728x90
LIST
Comments