# PHPκ°œμš”

# πŸ“š λͺ©μ°¨


# PHP(PHP: Hypertext Preprocessor)

Personal Home Page Tools β†’ PHP:Hypertext Preprocessor 의미 λ³€ν™”

  • HypertextλŠ” λ¬Έμ„œμ™€ λ¬Έμ„œκ°€ 링크둜 μ—°κ²° (λ§Œλ“œλŠ” μ–Έμ–΄ : HTML)
  • Cμ–Έμ–΄λ₯Ό 기반으둜 μž‘μ„±λ¨

PHPλŠ” μ„œλ²„ μΈ‘μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄

  • 주둜 HTML μ½”λ“œλ₯Ό ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ 생성(λ™μ μœΌλ‘œ λΉ λ₯΄κ²Œ HTML λ¬Έμ„œ μž‘μ„±κ°€λŠ₯)
  • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš© & 데이터 μ €μž₯ & ν‘œν˜„
  • μ›Ή ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ 높은 생산성을 μ œκ³΅ν•˜λŠ” μ–Έμ–΄

적용 사둀

  • μ„œλ²„λ₯Ό 직접 μ„€μΉ˜ν•΄μ„œ μš΄μ˜ν•  수 μžˆλŠ” μ„€μΉ˜ν˜• μ›Ή μ—ν”Œλ¦¬μΌ€μ΄μ…˜
  • ex) μ œλ‘œλ³΄λ“œ, ν…μŠ€νŠΈνλΈŒ, μ›Œλ“œν”„λž˜μŠ€, PHPBB λ“±

# βœ”οΈ PHP와 같은 μ„œλ²„ μ‚¬μ΄λ“œ μ–Έμ–΄μ˜ ν•„μš”μ„±

  • 처음 μ›Ή λ™μž‘μ€ Clientκ°€ μš”μ²­ν•˜λ©΄ Server(PC)에 μ €μž₯된 정적인 file(HTML)을 Client(μ›Ή λΈŒλΌμš°μ €)에 λ³΄μ—¬μ£ΌλŠ” 방식(μ•„λž˜ κ·Έλ¦Ό)
  • 인터넷이 ν™•μž₯ 됨에 따라 정적인 fileν˜•νƒœμ˜ HTML은 ν•œκ³„κ°€ μžˆλ‹€κ³  νŒλ‹¨
  • μƒˆλ‘œμš΄ μ„œλ²„ λͺ¨λΈμ΄ ν•„μš”ν•¨
  • 생산성이 높은 PHPμ–Έμ–΄ κ³ μ•ˆ
  • μ„œλ²„μ—μ„œ μ²˜λ¦¬ν•΄μ£ΌκΈ° μœ„ν•΄ CGI(Common Gateway Interface)λ₯Ό λ„μž…
  • CGI ν†΅μ‹ κ·œμ•½μ„ 톡해 μ„œλ²„λŠ” μš”μ²­λ°›μ€ PHPλ₯Ό PHP engine으둜 μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 섀계
  • μ›ΉλΈŒλΌμš°μ €κ°€ 응닡을 받을 λ•ŒλŠ” HTML둜 λ°›κΈ° λ•Œλ¬Έμ— PHP의 μ‘΄μž¬λŠ” μ•Œ 수 μ—†κ³  ν•„μš”λ„ μ—†μŒ

# βœ”οΈ 단점은?

  • λ³΅μž‘ν•œ μ‚¬μ΄νŠΈλ₯Ό λ§Œλ“œλŠ” μž‘μ—…μ—λŠ” νš¨μœ¨μ μ΄μ§€ λͺ»ν•¨
  • λ³΄μ•ˆμ— μ•ˆμ •ν•˜μ§€ μ•Šμ€ μ–Έμ–΄ ꡬ쑰

λ³΄μ•ˆμƒμ˜ μ·¨μ•½μ„±μœΌλ‘œ 인해 JSPλ‚˜ ASP.NET으둜 λŒ€μ²΄λ˜λŠ” κ²½ν–₯이 있음

img
(β–² μ›Ή ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 비ꡐ / 좜처 : http://tcpschool.com/php/php_intro_works)

μ–Έμ–΄λ³„λ‘œ μž₯단점이 μžˆμœΌλ‹ˆ μ‚¬μš© λͺ©μ μ΄λ‚˜ 상황에 따라 μ•Œλ§žμ€ μ–Έμ–΄λ₯Ό κ³ λ₯΄λŠ” 것이 λ°”λžŒμ§ν•¨!

# βœ”οΈ PHP λ™μž‘ 원리

PHPλŠ” μ›Ή μ‹œμŠ€ν…œμΈ ν΄λΌμ΄μ–ΈνŠΈ / μ„œλ²„ ν™˜κ²½μ—μ„œ λ™μž‘ν•˜λŠ” μ„œλ²„ μ‚¬μ΄λ“œ 슀크립트 μ–Έμ–΄

img
(β–² PHP λ™μž‘ 원리 / 좜처 : http://tcpschool.com/php/php_intro_works)

β‘  : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 μ›Ή μ„œλ²„μ— μ›ν•˜λŠ” μ›Ή νŽ˜μ΄μ§€λ₯Ό μš”μ²­

β‘‘ : μ›Ή μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ μ›Ή νŽ˜μ΄μ§€μ˜ 둜직 및 λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 연동을 μœ„ν•΄ PHP νŒŒμ„œ(parser)에 이에 λŒ€ν•œ 처리λ₯Ό μš”μ²­

β‘’ : μ΄λ•Œ PHP νŒŒμ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ 연동이 ν•„μš”ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ°μ΄ν„°μ˜ 처리λ₯Ό μˆ˜ν–‰

β‘£ : PHP νŒŒμ„œλŠ” μ›Ή νŽ˜μ΄μ§€μ˜ 둜직 및 λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μž‘μ—… 처리 κ²°κ³Όλ₯Ό μ›Ή μ„œλ²„λ‘œ 전달

β‘€ : μ›Ή μ„œλ²„λŠ” 전달받은 λ°μ΄ν„°λ‘œ μ›Ή νŽ˜μ΄μ§€λ₯Ό μ™„μ„±ν•˜μ—¬ μ›Ή λΈŒλΌμš°μ €λ‘œ 응닡을 전솑


# μ›Ή μ‹œμŠ€ν…œ(Web System)

의미 : μš°λ¦¬κ°€ 맀일 μ‚¬μš©ν•˜κ³  μžˆλŠ” 인터넷을 κ΅¬μ„±ν•˜λŠ” μ‹œμŠ€ν…œ

μ΄λŸ¬ν•œ μ›Ή μ‹œμŠ€ν…œμ€ λ‹€μŒ κ·Έλ¦Όκ³Ό 같이 ν΄λΌμ΄μ–ΈνŠΈ(client)와 μ„œλ²„(server)둜 ꡬ성

img
(β–² μ›Ή ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ ꡬ성 / 좜처 : https://cupjoo.tistory.com/54)

  • μ„œλ²„(server) : κ°„λ‹¨νžˆ 말해 μ›Ή μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 컴퓨터λ₯Ό 의미

  • ν΄λΌμ΄μ–ΈνŠΈ(client) : μ„œλ²„κ°€ μ œκ³΅ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜λŠ” μ‚¬μš©μž λ˜λŠ” μ‚¬μš©μžμ˜ κΈ°κΈ°(λΈŒλΌμš°μ €)λ₯Ό 의미


# ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ™€ μ„œλ²„ μ‚¬μ΄λ“œ

μ›Ή μ‹œμŠ€ν…œμ—μ„œμ˜ μ²˜λ¦¬λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 쀑 μ–΄λŠ μͺ½μ—μ„œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μΈκ°€μ— 따라 λ‹€μŒκ³Ό 같이 ꡬ뢄할 수 μžˆλ‹€.

  1. ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ(client-side)

  2. μ„œλ²„ μ‚¬μ΄λ“œ(server-side)

# βœ”οΈ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ(client-side)

ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μˆ˜ν–‰ν•˜λŠ” 처리λ₯Ό 의미

  • μ›Ή μ‹œμŠ€ν…œμ—μ„œ λΈŒλΌμš°μ €λŠ” μ„œλ²„μ—μ„œ μˆ˜μ‹ ν•œ HTML λ¬Έμ„œλ₯Ό ν•΄μ„ν•˜μ—¬ μ—¬λŸ¬λΆ„μ˜ 화면에 ν‘œμ‹œν•¨
  • μ‚¬μš©λ˜λŠ” μ–Έμ–΄ : μžλ°”μŠ€ν¬λ¦½νŠΈ(JavaScript)

# βœ”οΈ μ„œλ²„ μ‚¬μ΄λ“œ(server-side)

μ„œλ²„ μΈ‘μ—μ„œ μˆ˜ν–‰ν•˜λŠ” 처리λ₯Ό 의미

  • HTML λ¬Έμ„œ + μ„œλ²„ μ‚¬μ΄λ“œ 슀크립트 μ–Έμ–΄μ˜ μ½”λ“œλ₯Ό λΈŒλΌμš°μ €μ—μ„œ μš”μ²­
  • μ„œλ²„μ—μ„œ μ²˜λ¦¬ν•œ ν›„ κ·Έ κ²°κ³Όλ₯Ό λΈŒλΌμš°μ €μ— 전솑
  • μ‚¬μš©λ˜λŠ” μ–Έμ–΄ : PHP

이처럼 μ„œλ²„μ— 미리 μ €μž₯된 파일이 μ•„λ‹Œ μ„œλ²„μ— μžˆλŠ” 데이터듀을 μ„œλ²„ μ‚¬μ΄λ“œ 슀크립트 μ–Έμ–΄λ‘œ κ°€κ³΅ν•˜μ—¬ μƒμ„±λ˜λŠ” νŽ˜μ΄μ§€λ₯Ό 동적 μ›Ή νŽ˜μ΄μ§€(dynamic web page)라고 ν•œλ‹€.


# 정적 νŽ˜μ΄μ§€ VS. 동적 νŽ˜μ΄μ§€

차이점 : νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•œ μ‚¬μš©μžμ˜ 정보와 ν˜„μž¬ μ‹œμ μ— 따라 λ‚΄μš©μ΄ λ³€ν•  수 μžˆλ‹€/μ—†λ‹€.

βœ”οΈ 정적 νŽ˜μ΄μ§€

  • μ„œλ²„μ— 미리 μ €μž₯λ˜μ–΄ 있음
  • 주둜 HTML, CSS, Javascript, μ΄λ―Έμ§€λ‘œ ꡬ성
  • μ‚¬μš©μžκ°€ pageλ₯Ό μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” ν•΄λ‹Ή 정적 νŽ˜μ΄μ§€λ₯Ό λ°˜ν™˜ν•΄μ£ΌλŠ” μ—­ν• λ§Œ μˆ˜ν–‰

βœ”οΈ 동적 νŽ˜μ΄μ§€

  • μ‚¬μš©μžκ°€ pageλ₯Ό μš”μ²­ν•˜λ©΄ DataBaseλ‘œλΆ€ν„° 얻은 ν•΄λ‹Ή μ‚¬μš©μžμ˜ μ •λ³΄λ‚˜ ν˜„μž¬ μ‹œμ  정보 등을 가곡해 μƒˆλ‘­κ²Œ μƒμ„±ν•œ pageλ₯Ό λ°˜ν™˜
  • λ™μΌν•œ μš”μ²­μ΄λΌλ„ λˆ„κ°€/μ–Έμ œ μš”μ²­ν–ˆλŠ”μ§€μ— 따라 λ‚΄μš©μ΄ 달라짐
  • λŒ€λΆ€λΆ„μ˜ μ›Ή νŽ˜μ΄μ§€κ°€ 동적 νŽ˜μ΄μ§€μ— ν•΄λ‹Ή

# CGI κ°œλ…

μœ„μ—μ„œ μ„€λͺ…ν•œ 동적 νŽ˜μ΄μ§€λ₯Ό μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ›Ή μ„œλ²„ 내에 ν”„λ‘œκ·Έλž˜λ° κΈ°λŠ₯이 λ“€μ–΄κ°€λŠ” 방식을 CGI라고 ν•œλ‹€.

img
(β–² CGI λ°©μ‹μ˜ μ›Ή ꡬ성 / 좜처 : https://cupjoo.tistory.com/54)

ν•˜μ§€λ§Œ CGI λ°©μ‹μ˜ 경우 μ›Ή μ„œλ²„μ—μ„œ 각각의 ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ— λŒ€ν•΄ 독립적인 λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성해 μš”μ²­μ„ μ²˜λ¦¬ν•˜λ―€λ‘œ, μ‹œμŠ€ν…œμ— λΆ€ν•˜κ°€ 컀져 λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œ λœλ‹€.


# μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(WAS)

CGI λ°©μ‹μ˜ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 섀계

  • μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(WAS)λŠ” μ›Ή μ„œλ²„μ™€ DB μ„œλ²„ μ‚¬μ΄μ—μ„œ 미듀웨어
  • DB 연동 및 동적 νŽ˜μ΄μ§€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 처리λ₯Ό ν•œλ‹€.

img
(β–² μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(WAS) / 좜처 : https://cupjoo.tistory.com/54)


# Reference

  1. TCP school (opens new window)
  2. μƒν™œμ½”λ”© PHP κΈ°λ³Έμˆ˜μ—… (opens new window)
  3. μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ λ™μž‘ (opens new window)
  4. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (WAS) (opens new window)
Last Updated: 6/18/2023, 2:13:15 PM