티스토리 뷰
# PHP와 HTML의 관계 (+ 자바스크립트 & 스위치의 관계에 대해서. 왜 URL로 정보를 주고 받아야 하는지.)
eblessyou 2026. 5. 14. 15:37
내 질문:
강사님이 이 코드를 보여주면서,
+ - * / 버튼을 누르면 함수 calc이 실행되면서,
그 다음으로 이게 스위치로 값이 간다고 했는데,
어떻게 그렇게 처리가 되는 건지 이해가 잘 안 돼서.
이 안에서 어떤 시스템으로 돌아가는 건지 알려줄래?
그리고 함수가 밑에 정의가 되어 있는데도 어떻게 위에 있는 스위치에서 받아지는 건지도 궁금해.
좋아, 이 부분은 PHP + JavaScript + 브라우저 요청 흐름이 한 번에 섞여 있어서 처음 보면 헷갈리기 정말 쉬워.
근데 흐름만 정확히 이해하면 “아 버튼 누르면 이렇게 데이터가 이동하는구나”가 딱 보이게 돼.
핵심은:
JavaScript가 URL에 값을 실어서 다시 현재 PHP 파일을 요청하고,
PHP는 그 요청값($_GET)을 받아서 switch로 계산한다.
이 구조야.
전체 흐름 먼저 보기
버튼 클릭부터 결과 출력까지 흐름을 순서대로 적으면:
1. 사용자가 버튼 클릭
↓
2. onclick="calc('+')" 실행
↓
3. JS 함수 calc('+') 호출
↓
4. location.href 로 새로운 URL 요청
↓
5. 브라우저가 PHP 파일을 다시 실행 요청
↓
6. PHP가 $_GET 값 받음
↓
7. switch($yon) 실행
↓
8. 결과 계산
↓
9. HTML 다시 출력
↓
10. 결과 화면 표시
1. 버튼 누르면 무슨 일이 발생하나?
이 부분:
<button onclick="calc('+')">+</button>
버튼을 누르면:
calc('+')
이 함수가 실행돼.
즉:
yon = '+'
값을 가지고 함수가 호출되는 거야.
2. calc 함수 내부
이 부분이 핵심이야.
function calc(yon){
const num1 = document.getElementById("num1").value;
const num2 = document.getElementById("num2").value;
location.href =
"ex12_calc_script.php?num1=" + num1 +
"&num2=" + num2 +
"&yon=" + encodeURIComponent(yon);
}
여기서 하는 일은:
입력값 읽기
예를 들어:
num1 = 10
num2 = 5
yon = +
URL 만들기
그러면 최종적으로 이런 URL이 만들어져:
ex12_calc_script.php?num1=10&num2=5&yon=%2B
%2B는 URL에서 +를 안전하게 보내기 위해 인코딩된 값이야.
실제로는:
yon=+
의 의미라고 생각하면 돼.
3. location.href가 뭐냐?
이게 진짜 중요해.
location.href = "주소";
의 의미는:
브라우저가 그 주소로 이동해라
야.
즉:
location.href = "ex12_calc_script.php?num1=10&num2=5&yon=+";
되면 브라우저가:
GET 방식으로
ex12_calc_script.php 요청
을 다시 보내는 거야.
4. PHP는 어떻게 값을 받는가?
브라우저가 이런 요청을 보내면:
ex12_calc_script.php?num1=10&num2=5&yon=+
PHP는 자동으로:
$_GET
배열에 담아줘.
즉:
$_GET['num1'] => 10
$_GET['num2'] => 5
$_GET['yon'] => +
이렇게 들어가.
5. 그래서 switch가 실행되는 거야
여기:
$yon = $_GET['yon'];
그러면:
$yon = "+"
이 들어감.
그 다음:
switch($yon)
실행.
즉 실제로는:
switch("+")
가 되는 거야.
그래서 case "+" 가 실행됨
case "+":
$result = $num1 + $num2;
break;
즉:
$result = 10 + 5;
되어서:
$result = 15;
됨.
6. 결과가 화면에 출력
여기:
<?php echo $result; ?>
PHP가 HTML 안에 결과를 끼워 넣어.
최종 HTML은 브라우저에 이렇게 전달됨:
결과 : 15
가장 헷갈리는 부분
"함수가 아래 있는데 왜 위에서 호출되나요?"
이건 JavaScript 동작 방식 때문이야.
HTML 먼저 다 읽고
script도 읽는다
브라우저는 페이지를 위에서 아래로 읽어.
마지막에:
<script>
function calc(yon){
...
}
</script>
이걸 읽으면:
"아 calc라는 함수를 메모리에 등록해놔야지"
하고 기억해둠.
버튼 클릭은 "나중"에 발생함
중요한 건:
<button onclick="calc('+')">
이게 페이지 읽는 순간 바로 실행되는 게 아니라는 거야.
이건:
"클릭되면 calc 실행해"
라는 이벤트 등록만 해놓은 상태야.
실제 클릭은:
- 페이지 로딩 완료 후
- 사용자가 버튼 누를 때
발생함.
그 시점엔 이미 아래 script까지 다 읽은 상태라:
calc()
함수를 알고 있는 거야.
쉽게 비유하면
브라우저가:
1. 버튼 발견
→ "클릭하면 calc 실행해야지 메모"
2. 아래로 내려감
→ "아 calc 함수는 이거구나 저장"
3. 사용자가 클릭
→ 저장해둔 calc 실행
이 순서야.
PHP와 JavaScript는 실행 시점이 다르다
이거 엄청 중요해.
| PHP | 서버 | 페이지 요청 순간 |
| JavaScript | 브라우저 | 페이지 받은 후 |
실제 시간 흐름
[1]
브라우저가 PHP 요청
↓
[2]
서버에서 PHP 실행
switch 실행도 여기서 함
↓
[3]
완성된 HTML 반환
↓
[4]
브라우저가 HTML 읽음
↓
[5]
JS 함수 등록
↓
[6]
사용자가 버튼 클릭
↓
[7]
calc() 실행
↓
[8]
다시 PHP 요청
즉:
버튼 누를 때마다 PHP 파일이 새로 실행되는 구조
인 거야.
핵심 한 줄 요약
calc 함수는:
URL에 값을 담아서 PHP 파일을 다시 요청하는 역할
switch는:
그 요청값($_GET)을 받아 계산하는 역할
이 둘이 GET 방식으로 연결되어 있는 거야.
내 질문:
'4. location.href 로 새로운 URL 요청
↓
5. 브라우저가 PHP 파일을 다시 실행 요청'
이 부분이랑,
'location.href = "ex12_calc_script.php?
num1=10&num2=5&yon=+";
되면 브라우저가:
GET 방식으로 ex12_calc_script.php 요청
을 다시 보내는 거야.'
이 부분이 이해가 안돼.
왜 굳이 url로 값을 보내고 받아야 하는 거야?
그리고 왜 자바스크립트가 먼저 동작하고
switch가 나중에 실행이 되는 건지 아직 이해가 안 됐어.
더 알기 쉽게 설명해줘.
좋아.
지금 헷갈리는 건 사실 “웹이 어떻게 움직이는지” 자체야.
이걸 이해하면 PHP가 왜 GET을 쓰는지, 왜 switch가 나중에 실행되는지 한 번에 이해돼.
핵심은:
PHP는 서버에서 실행되고, JavaScript는 브라우저에서 실행된다.
둘이 서로 다른 장소에 있다는 걸 먼저 이해해야 해.
먼저 아주 쉽게 비유할게
웹사이트를 음식점이라고 생각해보자.
| 손님 | 브라우저 |
| 주방 | 서버(PHP) |
| 주문서 | URL(GET 방식) |
지금 네 코드에서 일어나는 일
사용자가:
10
5
+
입력하고 버튼 누름.
그러면 브라우저(JavaScript)가:
"주방(PHP)한테 계산 요청해야겠다"
라고 생각함.
근데 문제는:
브라우저와 PHP는 서로 다른 장소에 있음.
엄청 중요함
JavaScript
사용자 컴퓨터(브라우저)
에서 실행됨.
PHP
서버 컴퓨터
에서 실행됨.
그림으로 보면
[사용자 브라우저]
JavaScript 실행됨
↓ 요청
=========================
인터넷
=========================
↓
[서버]
PHP 실행됨
즉:
JS와 PHP는 직접 연결된 게 아님
이거야.
그래서 URL로 보내는 거야
브라우저는 서버에게 요청할 때:
주소(URL)
를 사용해.
예를 들면:
https://naver.com
도 서버 요청이잖아?
그런데 값을 같이 보내고 싶다?
그러면 URL 뒤에 붙여서 보냄.
이걸 GET 방식이라고 함.
예시
ex12_calc_script.php?num1=10&num2=5&yon=+
이건 사실:
ex12_calc_script.php
야 계산 좀 해줘.
근데:
num1은 10이고
num2는 5고
연산은 +야
라는 "주문서"인 거야.
그러면 PHP는 어떻게 받냐?
서버(PHP)가 요청서를 읽음.
$_GET['num1']
이건:
URL에서 num1 값 꺼내기
라는 뜻이야.
그래서 switch가 실행됨
$yon = $_GET['yon'];
결국:
$yon = "+"
됨.
그 다음:
switch($yon)
실행.
즉:
switch("+")
되는 거야.
네가 가장 헷갈리는 부분
"왜 JS가 먼저고 switch는 나중인가?"
이건 실행 장소 때문에 그래.
실제 시간 순서
1단계
브라우저가 PHP 페이지 요청
"ex12_calc_script.php 주세요"
2단계
서버에서 PHP 실행
이때:
switch()
도 실행됨.
근데 아직 버튼 안 눌렀으니까:
$_GET 비어있음
그래서 계산 안 함.
여기 중요
PHP는:
페이지 만들 때 딱 한 번 실행
되고 끝나.
3단계
완성된 HTML이 브라우저로 옴.
이제 브라우저 화면에 보임.
4단계
브라우저가 JavaScript 읽음.
function calc(){}
등록함.
5단계
사용자가 버튼 클릭
여기서 처음으로:
calc('+')
실행됨.
즉:
버튼 클릭은 PHP가 끝난 "이후"에 발생함.
6단계
JavaScript가 URL 만들어서 다시 서버 요청
location.href =
"ex12_calc_script.php?num1=10&num2=5&yon=+";
7단계
브라우저가 다시 PHP 실행 요청
이제 서버 입장에서는:
"아 이번엔 값이 같이 왔네?"
됨.
8단계
PHP 실행
$_GET['yon'] => "+"
됨.
이제 switch 실행 가능.
핵심 이해 포인트
PHP는 버튼 클릭을 "모름"
왜냐면 PHP는 서버에 있으니까.
JavaScript만 버튼 클릭을 감지 가능
왜냐면 브라우저에 있으니까.
그래서:
1. JS가 버튼 클릭 감지
2. 서버(PHP)에게 요청
3. PHP가 계산
이 순서가 되는 거야.
아주 쉽게 표현하면
JavaScript
"사용자가 + 눌렀어요!"
를 감지하는 역할.
PHP
"오케이 계산해줄게"
역할.
그럼 왜 굳이 새로 요청해야 하냐?
왜냐면:
PHP는 이미 실행이 끝났기 때문.
이게 진짜 핵심이야.
PHP는 계속 살아있는 게 아님
C언어 프로그램처럼 계속 실행되는 게 아니라:
요청 들어옴
→ 실행
→ HTML 생성
→ 종료
이 구조야.
그래서 계산하려면?
다시 PHP를 실행시켜야 함.
방법은:
브라우저가 다시 요청 보내기
뿐이야.
그 요청 방법 중 하나가:
location.href
인 거고.
이걸 이해하면 Ajax도 이해됨
나중에 배우게 될:
fetch()
axios()
ajax()
도 사실 똑같아.
본질은:
JS가 서버(PHP)에게 값 보내기
야.
다만:
| location.href | 페이지 새로고침 |
| fetch/ajax | 새로고침 없이 통신 |
차이만 있음.
마지막 핵심 정리
버튼 클릭은 누가 감지?
JavaScript
계산은 누가 함?
PHP
JS와 PHP는 왜 연결 안 됨?
서로 다른 컴퓨터에서 실행되니까
그래서 어떻게 전달?
URL(GET 방식)로 서버 요청
switch는 왜 나중에 실행?
JS가 요청을 보내야
PHP가 다시 실행되기 때문
By. ChatGPT
'몸부림의 흔적' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 국제운전면허증 발급
- php문법
- 로즈마리
- 자바스크립트 주요 키워드
- sql 핵심 개념
- 톰 더 글로우 시그니처
- php
- 컴파일러와 인터프리터 차이
- 프리지아
- 컴파일러 인터프리터 비교
- 파충류 동반자
- 구조체 개념 이해하기 쉽게
- 구조체와 배열의 차이
- cost let var 비교
- 은구비공원
- sql 문법
- 호이스팅 개념
- JavaScript
- 클래스 개념
- php 개념
- CRUD
- 나무 같은 사람이 되고 싶다
- $stmt
- 로즈마리 물꽂이
- 컴포즈 커피
- 에어프라이어 청소
- 컴파일러 언어
- PHP 문법
- 클래스랑 구조체 차이
- SQL 개념
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
