PHP 에서 URL 의 값 받기

👉🏼 KIM·2026년 4월 28일

퍼블리셔로 일하다가 처음으로 백엔드 코드를 들여다볼 일이 생겼는데, URL 에서 값 받는 패턴이 계속 나와서 이번에 제대로 정리해봤다.

PHP 가 URL 의 정보를 받아서 변수에 담는 패턴 정리


1. URL 이란?

https://example.com/page.php?cate_no=101&keyword=메신저
                              └────────┘ └──────────┘
                              파라미터 1   파라미터 2
  • ? 뒤부터 = 쿼리스트링 (query string)
  • & 로 여러 파라미터 구분
  • 형식: 이름=값

2. PHP 가 URL 의 값 받는 법: $_GET

PHP 는 URL 의 파라미터를 자동으로 읽어서 $_GET 이라는 배열에 담아둠.

// URL: ?cate_no=101&keyword=메신저
$_GET['cate_no']    // → "101"
$_GET['keyword']    // → "메신저"

비유: URL = 편지봉투, $_GET = 편지 내용을 PHP 가 자동으로 꺼내 담아둔 메모지


3. 값이 있는지 체크: isset()

URL 에 그 파라미터가 없으면 $_GET['cate_no'] 자체가 존재하지 않음 → 그냥 쓰면 에러.

isset($_GET['cate_no'])  // 있으면 true, 없으면 false

비유: "이 메모지에 cate_no 라는 항목이 있나요?" 확인


4. 짧은 if-else: 삼항 연산자 (? :)

$a = (조건) ? (참일 때 값) : (거짓일 때 값);

긴 if-else 를 한 줄로 줄임:

// 긴 버전
if (isset($_GET['cate_no'])) {
    $cate_no = $_GET['cate_no'];
} else {
    $cate_no = 0;
}

// 짧은 버전 (같은 의미)
$cate_no = isset($_GET['cate_no']) ? $_GET['cate_no'] : 0;

비유: "있으면 A, 없으면 B"


5. 타입 강제 변환: (int), (string)

URL 에서 받은 값은 항상 문자열. 숫자처럼 쓰려면 강제로 변환.

$_GET['cate_no']           // → "101"   ← 문자열 (따옴표 있음)
(int)$_GET['cate_no']      // → 101     ← 진짜 숫자

왜 필요? SQL 쿼리에 숫자만 들어가야 안전 (보안 + 정확성).

$cate_no = (int)$_GET['cate_no'];  // 숫자 강제 변환
// "101abc" → 101 (뒤 abc 무시)
// "메신저" → 0   (숫자 아니면 0)

비유: "이거 숫자로 받아라" 강제 명령


6. 양쪽 공백 제거: trim()

사용자가 실수로 검색어 앞뒤에 공백 넣을 수 있음. trim() 으로 제거.

trim("  메신저  ")  // → "메신저"

7. 조립: 실전 패턴

지금까지 배운 거 다 합치면:

// URL 의 cate_no 받아서 안전하게 처리
$cate_no = isset($_GET['cate_no']) ? (int)$_GET['cate_no'] : 0;
//          └─────────────────┘   └──────────────────┘   └┘
//          (1) 있는지 체크         (2) 숫자로 변환        (3) 없으면 default

// keyword 도 비슷 (단 문자열은 trim 까지)
$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';

8. 한 줄 요약

$변수 = isset($_GET['이름']) ? (타입)$_GET['이름'] : 기본값;
부분의미
isset(...)URL 에 값 있는지 체크
(int) 또는 trim()안전하게 변환
: 기본값없을 때 default

9. 모던 PHP 에선?

PHP 7+ 에선 더 짧은 문법 (?? null coalescing 연산자) 가능:

// PHP 7+
$cate_no = (int)($_GET['cate_no'] ?? 0);

// PHP 4.4 (회사 환경) — 위 문법 안 됨, 풀어 써야 함
$cate_no = isset($_GET['cate_no']) ? (int)$_GET['cate_no'] : 0;

→ Laravel 같은 framework 쓰면 더 짧음:

$cate_no = $request->integer('cate_no', 0);

framework 가 isset/타입변환/default 다 알아서 해줌.


10. 다양한 예시 (실전 시나리오)

같은 패턴이 여러 사이트/페이지에서 어떻게 쓰이는지.

예시 1. 게시판 페이지네이션

URL: /board.php?page=3
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// → URL 에 page=3 → $page = 3 (3번째 페이지 보여주기)
// → URL 에 page 없으면 → $page = 1 (첫 페이지 default)

예시 2. 쇼핑몰 카테고리 + 정렬

URL: /shop.php?category=fashion&sort=price
$category = isset($_GET['category']) ? trim($_GET['category']) : 'all';
$sort     = isset($_GET['sort'])     ? trim($_GET['sort'])     : 'reg';
// → category=fashion → 패션 카테고리만
// → sort=price → 가격순 정렬

예시 3. 검색 결과

URL: /search.php?q=메신저&type=goods
$keyword = isset($_GET['q'])    ? trim($_GET['q'])    : '';
$type    = isset($_GET['type']) ? trim($_GET['type']) : 'all';
// → q=메신저 → "메신저" 검색
// → type=goods → 상품에서만 검색

예시 4. 사용자 프로필

URL: /user.php?id=123
$user_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

if ($user_id === 0) {
    // 잘못된 접근 → 메인페이지 redirect 같은 처리
    header('Location: /');
    exit;
}
// → id=123 → 123번 사용자 프로필 보여주기

예시 5. 다중 옵션 (체크박스 등)

URL: /filter.php?colors[]=red&colors[]=blue&colors[]=green
$colors = isset($_GET['colors']) ? $_GET['colors'] : array();
// → $colors = array('red', 'blue', 'green')
// → URL 에 [] 붙으면 PHP 가 자동으로 배열로 받음

예시 6. 가격대 필터

URL: /goods.php?min=10000&max=50000
$min_price = isset($_GET['min']) ? (int)$_GET['min'] : 0;
$max_price = isset($_GET['max']) ? (int)$_GET['max'] : 999999999;
// → min=10000, max=50000 → 1만원~5만원 사이
// → 둘 다 없으면 전체 (0 ~ 매우 큰 수)

11. 다음에 코드 볼 때

회사 PHP 페이지 어디서든 위 패턴 보면:

"아, URL 의 값 안전하게 받아서 변수에 담는 거구나"

라고 바로 이해 가능.

profile
프론트는 순항중 ¿¿

0개의 댓글