본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP 변수 선언 + require — data.php의 외부 참조 패턴 완전 정리

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

 

 

Web Development · PHP data.php + require

data.php — 변수만 담은 파일과
require로 불러쓰는 패턴

데이터 파일을 분리하고 다른 파일에서 끌어다 쓰는 가장 단순한 모듈 패턴
시작 오늘 분석할 코드

이 파일은 로직이 없다. 단지 두 변수를 선언하고 끝난다. 짝이 되는 require.php가 이 파일을 읽어 들여(require) 변수 값을 사용하는 구조다 — PHP 초창기의 대표적인 모듈 분리 패턴.

<?php $name = "○철수"; $message = "등록 감사드립니다."; ?>
이 파일을 직접 브라우저로 열면 아무것도 보이지 않는다 (출력이 없으니까). 의미는 다른 파일이 require("data.php")로 가져갔을 때 비로소 살아난다.
짝이 되는 require.php (참고)
<HTML><HEAD>...</HEAD><BODY> <?php require("data.php"); // data.php를 통째로 이 자리에 끼워 넣음 print "$name 님<BR>"; print "$message<BR>"; ?> </BODY></HTML>
최종 출력 (require.php를 실행했을 때)
○철수 님
등록 감사드립니다.
용어 용어 정리
$name사용자 이름을 담는 변수
$message화면에 표시할 메시지 변수
require다른 PHP 파일을 통째로 끼워 넣는 명령
데이터 파일로직 없이 값만 정의해둔 파일
모듈 분리코드 역할별로 파일을 나누는 설계
변수 선언$ 기호 + 이름 + 값 = …
스코프 공유require된 파일은 같은 스코프 사용
경로상대/절대 경로로 파일 위치 지정

1 왜 변수만 담은 파일을 만드는가?

한 파일 안에 모든 코드를 다 적어도 동작은 한다. 하지만 프로젝트가 커지면 역할별로 파일을 나누는 게 유지보수에 유리하다.

예시 시나리오
· DB 접속 정보 — config.php에 한 번만 적고 어디서든 require
· 사이트 공통 메시지 — messages.php로 분리해 다국어 대응
· 회원 정보 — user.php에 모아두고 여러 페이지에서 공유
※ 이번 코드의 data.php는 학습용으로 단순화된 버전. 실무에서 비밀번호·API 키 같은 민감 데이터는 이렇게 평문 변수로 두지 않는다 (환경변수 사용).

2 변수 선언 — $ 기호와 대입
$name = "○철수"; //└┬┘ └───┬───┘ // 변수명 값 (문자열)
요소 역할 특징
$ "이건 변수다" 표시 PHP는 모든 변수에 $ 필수
name 변수 이름 영문·숫자·_ 가능, 첫글자 숫자 불가
= 대입 (오른쪽을 왼쪽에 넣음) 비교(==)와 다름!
"○철수" 문자열 값 큰따옴표 안은 변수 치환 가능
; 문장 끝 매 문장 뒤에 필수

반응형
3 require란? — 파일 통째로 끼워 넣기

require("data.php")그 파일의 내용을 그대로 그 자리에 복사·붙여넣기하는 효과를 낸다.

// 실행 전 (require.php 안) require("data.php"); print "$name 님<BR>"; print "$message<BR>"; // 내부적으로는 이렇게 해석된다 ↓ $name = "○철수"; ← data.php 내용이 끼워짐 $message = "등록 감사드립니다."; print "$name 님<BR>"; ← $name 사용 가능 (방금 정의됐으니) print "$message<BR>";
즉, require로 가져온 변수는 같은 스코프(함수 안이면 함수 안, 전역이면 전역)에 살아 있다. 그래서 그 다음 줄부터 바로 $name을 쓸 수 있다.

4 require / require_once / include / include_once

"파일을 끼워 넣는" 명령에는 4가지 변형이 있다.

명령 실패 시 중복 호출 방지 언제 쓰나
require 치명적 오류 (스크립트 중단) 없음 (여러 번 끼워짐) 없으면 안 되는 핵심 파일
require_once 치명적 오류 있음 (한 번만) 설정·클래스 정의 파일
include 경고만 (계속 실행) 없음 없어도 큰 문제 없는 부속 파일
include_once 경고만 있음 여러 번 호출 가능성 있는 부속
※ 실무 권장
  • 설정·클래스·함수 정의: require_once (안전 + 중복 방지)
  • 일회성 템플릿: require 또는 include
  • 현대 프로젝트에서는 require 대신 Composer autoloader를 사용

5 실행 흐름 단계별 추적
1
브라우저가 require.php 요청웹서버가 PHP 인터프리터에 파일 전달
2
HTML 태그 부분 출력<HTML><HEAD>... 그대로 브라우저로 전송
3
<?php require("data.php"); ?>data.php를 읽어 그 자리에 코드 삽입
4
$name = "○철수"; $message = "..."; 실행두 변수가 메모리에 생성됨
5
print "$name 님<BR>""○철수 님<BR>" 브라우저로 출력
6
print "$message<BR>""등록 감사드립니다.<BR>" 출력
7
나머지 HTML 출력 후 종료</BODY></HTML> 까지 전송

6 require에서 파일을 못 찾으면?
require — 치명적
파일 없음 → Fatal error
스크립트 거기서 즉시 중단
뒤의 코드 실행 안 됨
include — 부드러움
파일 없음 → 경고만
뒤의 코드는 계속 실행
(변수가 없으니 다른 에러 가능)

"이 파일이 없으면 답이 없다"면 require, "있으면 좋고 없어도 그만"이면 include를 쓴다는 게 일반적인 선택 기준.


7 자주 하는 실수
실수 증상 해결
경로 오타 (data.php 위치) require: 치명적 오류 상대 경로 정확히, 또는 절대 경로
같은 파일을 여러 번 require 변수 재선언, 클래스 중복 정의 오류 require_once 사용
require 안에 출력 후 헤더 변경 "headers already sent" 오류 출력은 헤더 호출 뒤에
data.php에 닫는 ?> 뒤 빈 줄 의도치 않은 공백·BOM 출력 순수 PHP 파일은 ?> 생략 권장
data.php를 직접 URL로 접근 데이터·비밀이 노출될 수 있음 웹 루트 밖에 두거나 .htaccess 차단

8 한 단계 발전 — 배열로 묶어 반환하기

현대 PHP에서는 변수를 흩어 정의하기보다 배열로 묶어 return하는 패턴이 권장된다.

// data.php (현대식) <?php return [ 'name' => '○철수', 'message' => '등록 감사드립니다.', ]; // 사용 측 $data = require __DIR__ . '/data.php'; print "{$data['name']} 님<BR>"; print "{$data['message']}<BR>";
※ 이 패턴의 장점
  • 데이터가 어디서 왔는지 명시적 ($data 변수)
  • 같은 파일을 여러 번 가져와도 변수 충돌 없음
  • 전역 스코프 오염 없음 — 함수 안에서도 안전
  • Laravel·Symfony 같은 프레임워크의 config 관행

핵심 한 줄 요약

data.php로직 없이 변수만 담은 데이터 파일
변수 선언$이름 = 값; — 이름 시작은 영문/_
require다른 PHP 파일을 그 자리에 통째로 삽입
스코프 공유require된 변수는 호출 측 스코프에서 사용 가능
변형 4종require / require_once / include / include_once
실패 시require는 중단, include는 계속
현대식배열을 return하고 변수에 담아 받기
반응형

댓글