쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

프로그래밍 15년이상 개발자입니다.(이학사, 공학 석사) ※ 판매자와 상담 후에 구매해주세요. 학습을 위한 코드, 게임, 엑셀 자동화, 업...

안녕하세요!!!고객님이 상상하시는 작업물 그 이상을 작업해 드리려 노력합니다.저는 작업물을 완성하여 고객님에게 보내드리는 것으로 거래 완료...

#### 결재 먼저 하지 마시고 쪽지 먼저 주세요. ######## 결재 먼저 하지 마시고 쪽지 먼저 주세요. ####안녕하세요. C/C++/MFC/C#/Python 프...

30년간 직장 생활을 하고 정년 퇴직을 하였습니다.퇴직 후 재능넷 수행 내용은 쇼핑몰/학원/판매점 등 관리 프로그램 및 데이터 ...

Varnish와 PHP를 이용한 HTTP 가속기 구현

2024-10-29 22:09:45

재능넷
조회수 75 댓글수 0

Varnish와 PHP를 이용한 HTTP 가속기 구현 🚀

 

 

안녕하세요, 여러분! 오늘은 정말 흥미진진한 주제로 여러분과 함께 시간을 보내려고 해요. 바로 Varnish와 PHP를 이용한 HTTP 가속기 구현에 대해 알아볼 거예요. 😃 이 주제가 조금 어렵게 들릴 수도 있지만, 걱정 마세요! 제가 쉽고 재미있게 설명해드릴게요.

우리가 살고 있는 이 디지털 시대에서 웹사이트의 속도는 정말 중요하죠. 여러분도 느린 웹사이트를 만나면 얼마나 답답한지 아시죠? 그래서 오늘 우리는 웹사이트를 번개처럼 빠르게 만드는 마법 같은 기술에 대해 알아볼 거예요. 🌩️

이 기술은 마치 재능넷(https://www.jaenung.net)에서 여러분의 재능을 빠르게 찾아주는 것처럼, 웹사이트의 콘텐츠를 빠르게 전달해주는 역할을 해요. 자, 그럼 이제 본격적으로 시작해볼까요?

HTTP 가속기란 무엇일까요? 🤔

HTTP 가속기라는 말을 들으면 뭐가 떠오르나요? 혹시 자동차 경주에서 쓰는 가속 페달 같은 걸 상상하셨나요? 사실 비슷한 개념이에요! 😄

HTTP 가속기는 웹사이트의 속도를 높여주는 특별한 도구예요. 마치 자동차의 가속 페달을 밟으면 차가 빨리 달리는 것처럼, HTTP 가속기를 사용하면 웹사이트가 더 빠르게 로딩되죠.

그런데 왜 이런 가속기가 필요할까요? 🧐 우리가 웹사이트를 방문할 때마다, 서버는 우리가 요청한 정보를 찾아서 보내주는 작업을 해요. 이 과정이 반복될수록 서버는 점점 더 바빠지고, 결국 웹사이트의 속도가 느려지게 되죠.

여기서 HTTP 가속기가 등장합니다! 이 가속기는 마치 재능넷에서 여러분의 재능을 효율적으로 관리하듯이, 서버의 작업을 효율적으로 관리해줘요. 그 결과, 웹사이트는 번개처럼 빠른 속도로 로딩될 수 있답니다. ⚡

💡 알아두세요: HTTP 가속기는 단순히 속도만 높이는 게 아니에요. 서버의 부하를 줄이고, 사용자 경험을 개선하며, 웹사이트의 전반적인 성능을 향상시키는 중요한 역할을 합니다.

Varnish: 우리의 슈퍼 영웅 🦸‍♂️

자, 이제 우리의 주인공 Varnish를 소개할 시간이에요! Varnish는 HTTP 가속기의 슈퍼 영웅이라고 할 수 있어요. 마치 영화 속 슈퍼 히어로처럼, Varnish는 웹사이트의 속도 문제를 해결하는 데 탁월한 능력을 가지고 있죠.

Varnish는 HTTP 캐시라는 특별한 기술을 사용해요. 이 기술은 마치 우리가 자주 사용하는 물건을 손이 닿기 쉬운 곳에 두는 것과 같아요. 웹사이트에서 자주 요청되는 정보를 미리 저장해두고, 필요할 때 빠르게 제공하는 거죠.

예를 들어볼까요? 여러분이 재능넷에서 인기 있는 재능을 찾는다고 해봐요. Varnish가 없다면, 매번 서버에 요청을 보내고 기다려야 해요. 하지만 Varnish가 있다면? 이미 인기 있는 재능 목록을 저장해두고 바로 보여줄 수 있어요. 빠르고 효율적이죠? 😎

🔍 Varnish의 주요 특징:

  • 빠른 속도: 초당 수만 건의 요청 처리 가능
  • 유연한 설정: VCL(Varnish Configuration Language)을 통한 맞춤 설정
  • 효율적인 캐시 관리: 똑똑한 캐시 정책으로 리소스 절약
  • 보안 강화: 악성 트래픽 차단 기능 제공

Varnish는 마치 재능넷이 다양한 재능을 효율적으로 관리하듯이, 웹사이트의 콘텐츠를 효율적으로 관리해요. 그 결과, 사용자들은 더 빠르고 쾌적한 웹 경험을 즐길 수 있게 되죠. 👍

Varnish 작동 원리 Varnish 캐시 서버 캐시된 콘텐츠 새로운 요청

위의 그림은 Varnish의 기본적인 작동 원리를 보여줍니다. 캐시된 콘텐츠는 빠르게 제공되고, 새로운 요청은 필요할 때만 처리되어 효율성을 극대화하죠.

PHP: 우리의 믿음직한 조력자 🤝

이제 Varnish의 파트너, PHP에 대해 알아볼 차례예요. PHP는 웹 개발의 베스트 프렌드라고 할 수 있어요. 마치 여러분이 재능넷에서 다양한 재능을 찾을 수 있는 것처럼, PHP로는 다양한 웹 기능을 구현할 수 있답니다.

PHP는 서버 사이드 스크립트 언어예요. 이게 무슨 말이냐고요? 간단히 말해서, 서버에서 실행되는 프로그램을 만드는 언어라는 뜻이에요. 웹사이트의 뒷단에서 열심히 일하는 요리사라고 생각하면 됩니다. 😊

PHP의 장점은 정말 많아요. 배우기 쉽고, 다양한 데이터베이스와 연동이 가능하며, 대부분의 웹 서버와 호환됩니다. 게다가 오픈 소스이기 때문에 무료로 사용할 수 있어요. 이런 특징들 때문에 PHP는 전 세계 많은 웹사이트에서 사용되고 있답니다.

🌟 PHP의 주요 기능:

  • 동적 웹 페이지 생성
  • 데이터베이스 조작
  • 파일 처리
  • 세션 관리
  • 이메일 전송

PHP는 Varnish와 함께 사용될 때 더욱 빛을 발해요. PHP로 만든 동적 콘텐츠를 Varnish가 효율적으로 캐싱하면, 웹사이트의 성능이 크게 향상됩니다. 마치 재능넷에서 여러분의 재능과 수요자의 요구를 완벽하게 매칭시키는 것처럼 말이죠! 🎯

PHP와 Varnish의 협력 PHP Varnish 동적 콘텐츠 캐싱

위 그림은 PHP와 Varnish가 어떻게 협력하는지 보여줍니다. PHP가 동적 콘텐츠를 생성하면, Varnish가 이를 효율적으로 캐싱하여 빠른 응답 속도를 제공하는 거죠.

Varnish와 PHP의 환상적인 콜라보 🤝

자, 이제 우리의 두 주인공 Varnish와 PHP가 어떻게 함께 일하는지 자세히 알아볼까요? 이 둘의 조합은 마치 완벽한 듀엣 공연을 보는 것 같아요. 각자의 장점을 살려 웹사이트의 성능을 극대화하는 거죠. 😎

Varnish는 HTTP 캐시 서버로서, PHP로 만들어진 동적 콘텐츠를 효율적으로 저장하고 제공합니다. 한편, PHP는 서버 사이드에서 동적 콘텐츠를 생성하고 데이터베이스와 상호작용하죠. 이 두 기술이 만나면 어떤 일이 일어날까요?

  1. 빠른 응답 시간: Varnish가 자주 요청되는 PHP 페이지를 캐시에 저장해두면, 다음 요청 시 PHP 처리 과정을 거치지 않고 바로 응답할 수 있어요. 마치 재능넷에서 인기 있는 재능을 빠르게 찾을 수 있는 것처럼요!
  2. 서버 부하 감소: PHP 스크립트 실행과 데이터베이스 쿼리 횟수가 줄어들어 서버의 부담이 크게 줄어듭니다.
  3. 동적 콘텐츠의 효율적 관리: Varnish의 VCL을 이용해 PHP 페이지의 캐시 정책을 세밀하게 조정할 수 있어요.
  4. 확장성 향상: 트래픽이 증가해도 Varnish가 많은 부분을 처리해주기 때문에, PHP 서버의 확장이 덜 필요해집니다.

💡 재능넷 팁: 재능넷과 같은 동적 콘텐츠가 많은 웹사이트에서도 Varnish와 PHP의 조합은 매우 효과적입니다. 사용자들에게 빠른 페이지 로딩을 제공하면서도, 서버 리소스를 효율적으로 사용할 수 있죠!

이제 Varnish와 PHP가 어떻게 협력하는지 더 자세히 살펴볼까요? 아래의 시나리오를 통해 이해해봐요:

  1. 첫 번째 요청: 사용자가 PHP로 만든 웹 페이지를 요청합니다.
  2. Varnish 확인: Varnish는 해당 페이지가 캐시에 있는지 확인합니다.
  3. 캐시 미스: 캐시에 없다면, Varnish는 요청을 PHP 서버로 전달합니다.
  4. PHP 처리: PHP 서버는 요청을 처리하고 동적 콘텐츠를 생성합니다.
  5. 응답 캐싱: Varnish는 PHP 서버의 응답을 사용자에게 전달하면서 동시에 캐시에 저장합니다.
  6. 후속 요청: 같은 페이지에 대한 다음 요청 시, Varnish는 캐시된 버전을 즉시 제공합니다.
Varnish와 PHP 작동 프로세스 사용자 Varnish PHP 서버 요청 캐시 미스 응답 캐시된 응답

이 그림은 Varnish와 PHP가 어떻게 협력하여 웹 요청을 처리하는지 보여줍니다. 사용자의 요청부터 시작해서, Varnish의 캐시 확인, PHP 서버의 처리, 그리고 최종 응답까지의 전체 과정을 한눈에 볼 수 있죠.

이런 프로세스 덕분에, 재능넷과 같은 동적 콘텐츠가 많은 웹사이트에서도 빠른 응답 속도를 유지할 수 있어요. 사용자들은 더 나은 경험을 하게 되고, 서버는 효율적으로 운영될 수 있답니다. 👍

HTTP 가속기 구현: 단계별 가이드 🛠️

자, 이제 실제로 Varnish와 PHP를 이용해 HTTP 가속기를 구현하는 방법을 알아볼까요? 마치 레고 블록을 조립하듯이, 단계별로 차근차근 만들어 볼 거예요. 준비되셨나요? 시작해볼까요! 🚀

1단계: 환경 설정

먼저, 우리의 작업 환경을 준비해야 해요. 필요한 소프트웨어를 설치하고 기본 설정을 해줄 거예요.

  1. PHP 설치: 최신 버전의 PHP를 설치합니다. 대부분의 리눅스 배포판에서는 패키지 매니저를 통해 쉽게 설치할 수 있어요.
  2. Varnish 설치: Varnish도 마찬가지로 패키지 매니저를 통해 설치할 수 있습니다.
  3. 웹 서버 설정: Apache나 Nginx와 같은 웹 서버를 설치하고 PHP와 연동합니다.

Ubuntu나 Debian 기반 시스템에서는 다음과 같은 명령어로 설치할 수 있어요:


sudo apt update
sudo apt install php php-fpm varnish apache2
  

💡 팁: 재능넷과 같은 대규모 웹사이트를 운영한다면, 각 구성 요소(PHP, Varnish, 웹 서버)를 별도의 서버에 설치하는 것이 좋아요. 이렇게 하면 각 부분을 독립적으로 확장하고 관리할 수 있답니다.

2단계: Varnish 설정

Varnish를 설치했다면, 이제 설정을 해줘야 해요. Varnish의 설정 파일은 VCL(Varnish Configuration Language)로 작성됩니다.

  1. 기본 설정 파일 열기: /etc/varnish/default.vcl 파일을 엽니다.
  2. 백엔드 서버 설정: PHP가 실행되는 웹 서버의 주소와 포트를 지정합니다.
  3. 캐시 정책 설정: 어떤 요청을 캐시할지, 얼마나 오래 캐시를 유지할지 등을 정의합니다.

기본적인 VCL 설정의 예시를 볼까요?


vcl 4.0;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
    # PHP 동적 페이지는 캐시하지 않음
    if (req.url ~ "\.(php|php5)$") {
        return(pass);
    }
}

sub vcl_backend_response {
    # 정적 파일은 1시간 동안 캐시
    if (bereq.url ~ "\.(jpg|jpeg|gif|png|css|js)$") {
        set beresp.ttl = 1h;
    }
}
  

이 설정은 PHP 파일은 캐시하지 않고, 정적 파일은 1시간 동안 캐시하도록 지정하고 있어요. 재능넷과 같은 동적 웹사이트에서는 이런 식으로 동적 콘텐츠와 정적 콘텐츠를 구분하여 캐시 정책을 설정하는 것이 중요합니다.

3단계: PHP 최적화

PHP도 최적화해야 Varnish와 잘 어울릴 수 있어요. 몇 가지 팁을 드릴게요:

  • OPcache 활성화: PHP의 opcode 캐시를 활성화하여 스크립트 실행 속도를 높입니다.
  • 세션 관리: 세션을 파일 대신 메모리나 데이터베이스에 저장하여 I/O를 줄입니다.
  • 불필요한 모듈 비활성화: 사용하지 않는 PHP 모듈은 비활성화하여 리소스를 절약합니다.

PHP의 php.ini 파일에서 다음과 같은 설정을 추가하거나 수정할 수 있어요:


opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

session.save_handler = redis
session.save_  path = "tcp://localhost:6379"
  

이러한 설정은 OPcache를 활성화하고, 세션을 Redis에 저장하도록 지정합니다. 재능넷과 같은 대규모 웹사이트에서는 이런 최적화가 성능에 큰 영향을 미칠 수 있어요.

4단계: 웹 서버 설정

웹 서버(예: Apache나 Nginx)도 Varnish와 잘 협력할 수 있도록 설정해야 해요. 주요 포인트는 다음과 같습니다:

  1. 포트 변경: 웹 서버가 기본 80 포트 대신 8080 포트(또는 다른 포트)를 사용하도록 변경합니다. Varnish가 80 포트를 사용할 거예요.
  2. 캐시 헤더 설정: 적절한 캐시 제어 헤더를 설정하여 Varnish가 효과적으로 캐시할 수 있게 합니다.
  3. gzip 압축: 콘텐츠를 압축하여 전송 속도를 높입니다.

Apache의 경우, 다음과 같은 설정을 apache2.conf 또는 가상 호스트 설정 파일에 추가할 수 있습니다:


Listen 8080

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>

<IfModule mod_headers.c>
    Header set Cache-Control "max-age=3600, public"
</IfModule>
  

5단계: 모니터링 및 튜닝

마지막으로, 우리가 구현한 HTTP 가속기의 성능을 모니터링하고 지속적으로 튜닝해야 해요. 이는 마치 재능넷에서 사용자들의 활동을 분석하고 서비스를 개선하는 것과 비슷해요.

  • Varnish 로그 분석: varnishlog, varnishstat 등의 도구를 사용하여 캐시 히트율, 응답 시간 등을 모니터링합니다.
  • PHP-FPM 상태 확인: PHP-FPM의 상태 페이지를 통해 PHP 프로세스의 건강 상태를 체크합니다.
  • 웹 서버 로그 분석: 웹 서버의 액세스 로그와 에러 로그를 주기적으로 분석합니다.
  • 부하 테스트: Apache Bench나 Siege 같은 도구로 주기적인 부하 테스트를 실시합니다.

💡 성능 튜닝 팁: 재능넷처럼 트래픽이 많은 사이트에서는 정기적인 성능 검토가 중요해요. 사용 패턴을 분석하고, 병목 지점을 찾아 지속적으로 개선해 나가세요. 때로는 하드웨어 업그레이드나 아키텍처 변경이 필요할 수도 있답니다.

이렇게 해서 Varnish와 PHP를 이용한 HTTP 가속기 구현이 완료되었어요! 이제 여러분의 웹사이트는 재능넷처럼 빠르고 효율적으로 동작할 거예요. 물론, 실제 환경에 적용할 때는 더 많은 세부 설정과 최적화가 필요할 수 있어요. 하지만 이 기본 틀을 잘 이해하고 있다면, 어떤 상황에서도 잘 대처할 수 있을 거예요. 👍

결론: 웹의 미래를 향한 빠른 여정 🚀

자, 여러분! 우리는 지금까지 Varnish와 PHP를 이용한 HTTP 가속기 구현에 대해 알아보았어요. 이 기술은 마치 재능넷이 다양한 재능을 빠르고 효율적으로 연결해주는 것처럼, 웹사이트의 성능을 극대화하는 데 큰 도움을 줍니다.

이런 HTTP 가속기의 구현은 단순히 기술적인 과제를 넘어서, 사용자 경험의 혁신을 의미해요. 빠른 로딩 속도, 원활한 상호작용, 그리고 안정적인 서비스 제공 - 이 모든 것이 현대 웹의 핵심이죠.

물론, 이 여정이 항상 쉽지만은 않을 거예요. 때로는 복잡한 설정과 마주하게 될 수도 있고, 예상치 못한 문제에 부딪힐 수도 있어요. 하지만 이런 도전이야말로 우리를 성장시키고, 더 나은 웹을 만들어가는 원동력이 된답니다.

앞으로 웹 기술은 계속해서 발전할 거예요. 새로운 캐싱 기술, 더 빠른 프로그래밍 언어, 더 효율적인 서버 아키텍처 등이 등장할 거예요. 하지만 우리가 오늘 배운 기본 원리는 변하지 않을 거예요. 빠른 응답, 효율적인 리소스 관리, 그리고 사용자 중심의 설계 - 이것이 바로 성공적인 웹 서비스의 핵심이니까요.

여러분도 이제 HTTP 가속기의 세계로 첫 발을 내딛었어요. 이 지식을 바탕으로 더 빠르고, 더 효율적이며, 더 사용자 친화적인 웹사이트를 만들어 나가시기 바랍니다. 재능넷이 여러분의 재능을 세상과 연결해주듯이, 여러분의 웹사이트도 사용자들과 더 가깝게 연결될 수 있을 거예요.

🌟 기억하세요: 기술은 도구일 뿐이에요. 진정한 가치는 그 기술을 어떻게 사용하느냐에 달려 있습니다. 항상 사용자의 니즈를 먼저 생각하고, 그에 맞는 최적의 솔루션을 찾아나가세요. 그것이 바로 재능넷이 성공할 수 있었던 비결이자, 여러분이 성공할 수 있는 길이 될 거예요.

자, 이제 여러분의 차례예요! Varnish와 PHP로 무장한 여러분의 웹사이트가 어떤 놀라운 성능을 보여줄지 정말 기대되네요. 화이팅! 🎉

관련 키워드

  • HTTP 가속기
  • Varnish
  • PHP
  • 웹 성능 최적화
  • 캐싱
  • 동적 콘텐츠
  • VCL
  • OPcache
  • 웹 서버 설정
  • 성능 모니터링

지식의 가치와 지적 재산권 보호

자유 결제 서비스

'지식인의 숲'은 "이용자 자유 결제 서비스"를 통해 지식의 가치를 공유합니다. 콘텐츠를 경험하신 후, 아래 안내에 따라 자유롭게 결제해 주세요.

자유 결제 : 국민은행 420401-04-167940 (주)재능넷
결제금액: 귀하가 받은 가치만큼 자유롭게 결정해 주세요
결제기간: 기한 없이 언제든 편한 시기에 결제 가능합니다

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

  1.엑셀의 기본기능으로 하기 어렵거나 복잡한 내용 VBA로 자동화 2.셀메뉴형태 또는 리본메뉴형태의 프로그램 3.MY-SQ...

땡큐엑셀-신차장기렌트카 비교견적기 엑셀 프로그램신차장기렌트 가격비교 비교견적 엑셀 프로그램을 통해 제휴사의 월렌트료및 잔가를 한번의 클...

개인용도의 프로그램이나 소규모 프로그램을 합리적인 가격으로 제작해드립니다.개발 아이디어가 있으시다면 부담 갖지 마시고 문의해주세요. ...

AS규정기본적으로 A/S 는 평생 가능합니다. *. 구매자의 요청으로 수정 및 보완이 필요한 경우 일정 금액의 수고비를 상호 협의하에 요청 할수 있...

📚 생성된 총 지식 7,043 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창