본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP if 조건문 — 로그인 검증 예제로 배우는 && 연산자

by 왕진 2026. 6. 12.
반응형

 

 

Web Development · PHP if

PHP if 조건문 —
로그인 검증으로 배우는 && 연산자

두 조건이 모두 참일 때만 실행되는 가장 흔한 패턴
시작 오늘 분석할 코드

PHP의 가장 기본적인 if 조건문이다. 사용자가 입력한 아이디·비밀번호와 DB에 저장된 값이 둘 다 같은가를 검사하는, 로그인의 최소 단위 코드다.

<?php $username = "user"; // 사용자가 입력한 아이디 $password = "pass"; // 사용자가 입력한 비밀번호 $db_data["username"] = "user"; // DB에 저장된 아이디 (연관배열) $db_data["password"] = "pass"; // DB에 저장된 비밀번호 if($db_data["username"] == $username && $db_data["password"] == $password){ // 회원 페이지 표시 print "회원 페이지입니다."; } ?>
실제 출력 미리보기
회원 페이지입니다.

→ 두 변수 모두 DB 값과 일치 → if 조건 참 → 본문 실행. 아이디나 비밀번호 중 하나라도 다르면 아무것도 출력되지 않는다.

용어 용어 정리
if"만약 ~라면" 조건문 시작 키워드
==값이 같은가? (비교 연산자)
=대입 연산자 (값을 저장)
&&AND — 두 조건 모두 참이어야 참
||OR — 둘 중 하나만 참이면 참
연관배열"키 → 값" 형태의 배열 ($arr["키"])
참(true)조건이 만족됐다는 의미
{ }if가 참일 때 실행할 영역(블록)

1 if 조건문의 기본 구조
if ( 조건 ) { 조건이 참일 때 실행할 코드 }

괄호 안의 식이 참(true)이면 중괄호 안 코드가 실행되고, 거짓이면 통째로 건너뛴다. 이 코드에서는 "DB의 username과 입력 username이 같고, DB의 password와 입력 password도 같다"가 조건이다.

if는 의사결정의 가장 작은 단위 — "이거 맞으면 저거 해, 아니면 그냥 넘어가."

2 = vs == — 가장 흔한 함정

PHP 입문에서 가장 자주 일어나는 버그==를 쓸 자리에 =를 쓰는 것이다. 둘은 모양은 비슷하지만 완전히 다르다.

= (대입)
$a = 10;

"$a에 10을 넣어라"
오른쪽 값을 왼쪽 변수에 저장
== (비교)
$a == 10

"$a가 10과 같은가?"
참(true) 또는 거짓(false) 반환
if($a = 10)은 문법 오류가 아니다 — "$a에 10을 넣고, 그 결과(10)는 참이니까 항상 실행"이 된다. 디버깅이 매우 어려워진다. 반드시 ==를 써야 한다.

3 && (AND) — 두 조건을 동시에

&&는 두 조건이 모두 참이어야 전체가 참이 된다. 로그인은 "아이디 맞고 + 비밀번호도 맞고"가 함께 성립해야 하므로 &&가 적절하다.

조건1 조건2 && 결과 의미
본문 실행
거짓 거짓 건너뜀
거짓 거짓 건너뜀
거짓 거짓 거짓 건너뜀
// 본 코드의 조건 분해 $db_data["username"] == $username // "user" == "user" → 참 && $db_data["password"] == $password // "pass" == "pass" → 참 ↓ 참 && 참 = 참 → 본문 실행
※ && vs ||
  • && (AND) — "둘 다" 만족해야 함 (엄격)
  • || (OR) — "둘 중 하나만" 만족하면 됨 (느슨)
  • 로그인 = AND, "관리자 또는 본인" = OR 식으로 의미 따라 선택

반응형
4 연관 배열 — $db_data["username"]

$db_data["username"] = "user"; 같은 형태는 연관 배열(associative array)이다. 일반 배열이 0, 1, 2... 숫자로 칸을 구분한다면, 연관 배열은 "키"라는 이름표로 칸을 구분한다.

// 일반 배열 (인덱스 = 숫자) $arr[0] = "user"; $arr[1] = "pass"; // 연관 배열 (인덱스 = 문자열 키) $db_data["username"] = "user"; $db_data["password"] = "pass"; // PHP 5.4+ 단축 문법 $db_data = ["username" => "user", "password" => "pass"];

실제 DB에서 데이터를 가져오면 보통 연관 배열로 받는다. $row["username"]처럼 컬럼 이름으로 접근하는 것이 일반적이다.


5 중괄호의 유무

if 본문이 한 줄이면 중괄호를 생략할 수 있다. 하지만 실무에서는 거의 항상 중괄호를 쓴다 — 가독성과 버그 예방 때문이다.

중괄호 없음 (한 줄만)
if($a == 10)
  print "ten";


바로 다음 한 줄만 실행
중괄호 있음 (권장)
if($a == 10) {
  print "ten";
  print "ok";
}


여러 줄 가능 + 명확
※ 중괄호 없는 if 뒤에 들여쓰기로만 줄을 늘리면 두 번째 줄은 if와 무관하게 항상 실행된다 → 매우 위험한 버그.

6 자주 하는 실수
실수 증상 해결
if($a = 10) 항상 참 — 조건 무력화 비교는 반드시 ==
& 1개 사용 (&는 비트 연산자) 이상한 결과 논리 AND는 && (2개)
중괄호 없이 여러 줄 작성 두 번째 줄이 항상 실행됨 본문이 1줄 이상이면 중괄호 사용
연관 배열 키에 따옴표 누락 Notice: Undefined constant $arr["key"]처럼 따옴표 필수
"비밀번호 평문 저장" 보안 사고 위험 실무에선 password_hash()로 해시 저장 필수
※ 본 예제는 학습용이다. 실제 로그인은 ① DB 조회 ② password_hash()로 해시 비교 ③ 세션 처리 ④ Prepared Statement로 SQL Injection 방어가 모두 필요하다.

7 로그인 검증 흐름
[ 사용자 입력 ] $username = "user" $password = "pass" ↓ [ DB 데이터 ] $db_data["username"] = "user" $db_data["password"] = "pass" ↓ [ if 검사 ] username 같음? → 참 password 같음? → 참 && → 참 ↓ [ 본문 실행 ] "회원 페이지입니다." 출력

핵심 한 줄 요약

if(조건){...}조건이 참일 때만 중괄호 안 실행
==값이 같은가 비교 (=는 대입과 다름)
&&AND — 두 조건 모두 참이어야 참
||OR — 하나만 참이어도 참
$arr["키"]연관 배열 — 문자열 키로 칸 접근
중괄호실무는 거의 항상 사용 (1줄이라도)
실무 보안password_hash + Prepared Statement 필수
반응형

댓글