퍼블리셔로 일하다가 처음으로 백엔드 코드를 들여다볼 일이 생겼는데, URL 에서 값 받는 패턴이 계속 나와서 이번에 제대로 정리해봤다.
PHP 가 URL 의 정보를 받아서 변수에 담는 패턴 정리
https://example.com/page.php?cate_no=101&keyword=메신저
└────────┘ └──────────┘
파라미터 1 파라미터 2
? 뒤부터 = 쿼리스트링 (query string)& 로 여러 파라미터 구분이름=값$_GETPHP 는 URL 의 파라미터를 자동으로 읽어서 $_GET 이라는 배열에 담아둠.
// URL: ?cate_no=101&keyword=메신저
$_GET['cate_no'] // → "101"
$_GET['keyword'] // → "메신저"
비유: URL = 편지봉투, $_GET = 편지 내용을 PHP 가 자동으로 꺼내 담아둔 메모지
isset()URL 에 그 파라미터가 없으면 $_GET['cate_no'] 자체가 존재하지 않음 → 그냥 쓰면 에러.
isset($_GET['cate_no']) // 있으면 true, 없으면 false
비유: "이 메모지에 cate_no 라는 항목이 있나요?" 확인
삼항 연산자 (? :)$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"
(int), (string) 등URL 에서 받은 값은 항상 문자열. 숫자처럼 쓰려면 강제로 변환.
$_GET['cate_no'] // → "101" ← 문자열 (따옴표 있음)
(int)$_GET['cate_no'] // → 101 ← 진짜 숫자
왜 필요? SQL 쿼리에 숫자만 들어가야 안전 (보안 + 정확성).
$cate_no = (int)$_GET['cate_no']; // 숫자 강제 변환
// "101abc" → 101 (뒤 abc 무시)
// "메신저" → 0 (숫자 아니면 0)
비유: "이거 숫자로 받아라" 강제 명령
trim()사용자가 실수로 검색어 앞뒤에 공백 넣을 수 있음. trim() 으로 제거.
trim(" 메신저 ") // → "메신저"
지금까지 배운 거 다 합치면:
// 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']) : '';
$변수 = isset($_GET['이름']) ? (타입)$_GET['이름'] : 기본값;
| 부분 | 의미 |
|---|---|
isset(...) | URL 에 값 있는지 체크 |
(int) 또는 trim() | 안전하게 변환 |
: 기본값 | 없을 때 default |
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 다 알아서 해줌.
같은 패턴이 여러 사이트/페이지에서 어떻게 쓰이는지.
URL: /board.php?page=3
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// → URL 에 page=3 → $page = 3 (3번째 페이지 보여주기)
// → URL 에 page 없으면 → $page = 1 (첫 페이지 default)
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 → 가격순 정렬
URL: /search.php?q=메신저&type=goods
$keyword = isset($_GET['q']) ? trim($_GET['q']) : '';
$type = isset($_GET['type']) ? trim($_GET['type']) : 'all';
// → q=메신저 → "메신저" 검색
// → type=goods → 상품에서만 검색
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번 사용자 프로필 보여주기
URL: /filter.php?colors[]=red&colors[]=blue&colors[]=green
$colors = isset($_GET['colors']) ? $_GET['colors'] : array();
// → $colors = array('red', 'blue', 'green')
// → URL 에 [] 붙으면 PHP 가 자동으로 배열로 받음
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 ~ 매우 큰 수)
회사 PHP 페이지 어디서든 위 패턴 보면:
"아, URL 의 값 안전하게 받아서 변수에 담는 거구나"
라고 바로 이해 가능.