Search
Duplicate
moon
sun

[중급]나만의 온라인 명함 by_AI(Render활용)

목차(클릭하세요)
💡
동적기능을 포함한 웹페이지: 메일전송 기능, 설문조사 자동통계, 데이터 베이스 등

0. 참고: 이 내용은 ‘커서 AI 트렌드&활용백과’를 참고함

1. 온라인 명함 작성을 위한 기초Tip

1-1. 베이스가 될 디자인

•
✅ 내 온라인 명함의 기준이 될 디자인 모델이 있다면 더욱 쉽게 만들 수 있음
•
✅특히 화면 캡쳐 기능을 이용한다면 더욱 스마트 하게

1-2.index.php를 사용하기 위한 기초

🟦 index.html vs index.php 차이점

🖥️ 기본 개념

index.html
👉 정적인(Static) 웹 페이지
👉 서버가 해석 없이 파일 내용을 그대로 브라우저에 전송
index.php
👉 동적인(Dynamic) 웹 페이지
👉 서버가 PHP 코드를 먼저 해석하고 결과를 브라우저에 전송

📌 주요 비교

📝 구분
🟢 index.html
🟠 index.php
파일 확장자
.html
.php
콘텐츠 방식
정적인 페이지
동적인 페이지
서버 처리
서버가 그대로 전송
서버가 PHP 코드 해석 후 결과만 전송
백엔드 연결
❌ 불가능
✅ 가능 (DB 연결, 사용자 입력 처리 등)
필요한 환경
웹 서버 (Apache, Nginx 등)
PHP가 설치된 웹 서버
대표 사용 예시
회사소개 페이지, 포트폴리오
로그인, 게시판, 데이터 입력/출력 페이지

🎯 핵심 요약

✅ 변동 없는 페이지 → index.html
✅ 사용자 입력, 데이터 처리 필요 → index.php

2. 온라인명함제작(기초단계)

2-0.전체 구성 흐름

[브라우저] ↓ [php -S localhost:8000 → index.php 실행] ↓ [1. 사용자 정보 배열 ($user)] └→ 이름, 포지션, 이메일, 전화번호, 주소, 프로필 이미지 ↓ [2. 디바이스 감지 (isMobile 함수)] └→ 모바일 or 데스크탑 구분 ↓ [3. Tailwind CSS + 아이콘/폰트 적용] ↓ [4. HTML 콘텐츠 생성] ├── 프로필 영역 (이미지 + 이름 + 포지션) ├── 네비게이션 (About Me, 약력, 프로젝트, 연락) ├── 연락처 정보 ├── 소셜미디어 아이콘 ├── 추천 영상 (2x2 유튜브 iframe) └── 다크/라이트 모드 전환 버튼 ↓ [5. 모달 창 (About, History, Projects, Contact)] └→ JS로 열기/닫기 ↓ [6. 연락하기 → send_mail.php로 POST 전송 (fetch API 사용)]
Scss
복사

2-1. 프롬프트

•
핵심은 이미지와 함께 프롬프트를 사용하는 멀티모달
tailwind(테일윈드)CSS프레임워크를 이용해서 내가 첨부한 이미지와 유사한 온라인 명함을 만들어봐. 기본적인 기능만 이용해서 php로 작성하고, 모바일과 데스크톱을 자동으로 인식해서 작동하는 반응형 디자인으로 제작해야 해
Markdown
복사

2-2.PHP설치하기

[참고]

📢로컬에 PHP 설치하기 (윈도우 기준)

2.
압축 풀기 (예: C:\php)
3.
환경 변수 설정
•
시스템 변수 → Path에 C:\php 추가
4.
cmd에서 php -v 입력 → 버전 확인되면 성공

📂 설치 방법 (Zip 파일 다운로드 후):

1.
압축 풀기 (예: C:\php)
2.
php.exe가 있는지 확인
3.
환경 변수 Path에 C:\php 추가
4.
cmd에서 php -v 입력 → 버전 나오면 성공
PHP 8.4.6 (cli) (built: Apr 9 2025 09:45:13) (NTS Visual C++ 2022 x64) Copyright (c) The PHP Group Zend Engine v4.4.6, Copyright (c) Zend Technologies
Markdown
복사
•
만약 아래와 같은 문구가 나왔다면, 이는 Microsoft Visual C++ Redistributable 라이브러리 버전과의 호환성 문제이므로 이를 해결해야 함.
PHP Warning: 'C:\WINDOWS\SYSTEM32\VCRUNTIME140.dll' 14.34 is not compatible with this PHP build linked with 14.43 in Unknown on line 0
Markdown
복사

2-3.PHP 실행하기

[참고]
•
✅vscode 익스텐션을 설치하기: php, php debug, 📌php server, php intelephense
•
우측 상단에 생긴 PHP 서버를 누르거나 또는 CTRL + SHIFT + P를 누르고  PHP Server: Serve project를 찾아 실행하기
•
✅ 초기 실행결과를 살펴보면?

2-4.사진 업로드 및 비디오 추가

•
업로드하고 싶은 사진하나를 포스팅이미지와 같은 사이트를 사용해 업로드한 뒤, 해당 주소의 사진을 넣어달라고 요청하기
https://i.postimg.cc/OOOOOOOOOO 해당 이미지사진을 사용해서 이미지수정해봐
Markdown
복사
•
해당 php페이지에서 새로고침을 해야 변경된 것을 볼 수 있음
•
비디오 추가를 위해 다음 프롬프트를 사용
이제 명함 아래쪽에 비디오 섹션부분을 넣어줘. 그냥 정사각형으로 하나의 행에 2개의 유튜브 영상이 들어가도록 2*2그리드로 작성해서 반영해. 영상을 직접 포함하는 임베디드 방식으로 코드로 작성해야해
Markdown
복사

2-5.화면전환 및 메뉴 추가

•
✅ 화면 전환버튼을 누르면 화면 배경을 다크모드 ➡️ 라이트 모드로 변환할 수 있는 기능 추가하기
•
이런 기능들은 서버가 아니라 클라이언트에서 처리하는 방식이므로, 자바스크립트로 구현되는 경우가 많음, 따라서 프롬프트를 아래와 같이
지금의 배경의 디자인이 다소 어둡구나. 다크모드와 라이트모드를 상호변환할 수 있는 전환버튼을 화면 우측 하단에 전구 아이콘으로 표시하고, JS로 구현하자
Markdown
복사
•
이제 우측 상단에 메뉴를 만들꺼야. 'about me', 약력, 프로젝트, 연락, 이렇게 4개로 만들고 font awesome을 이용해서 아이콘도 붙여줘

2-5.메뉴 네비게이션바의 기능 연결하기

•
만들어진 페이지에서 특정 영역을 클릭했을때, 특히 위 그림을 기준으로 ‘Navbar’의 4가지 메뉴를 클릭했을 때 반응이 없음
•
✅ 간단하게 아래페이지에서 넣고 싶은 UI를 선택하고, 프롬프트를 활용해 기능 연결하기
네비게이션 메뉴에 UI를 추가하자. 1.about 클릭시 모달창: 컴퓨터교육과출신의 찐 AI 연구자 2.약력 클릭시 타임라인: 정보교육지원단- 정보교육유공교원-AIDEAP 마스터 교원 등 3.프로젝트 클릭시 모달창: 바이든vs날리면 외 다수 4. 연락 클릭시 Dialog (다이얼로그)창: 연락받고 싶은 이메일 또는 연락처를 적으세요 오류없이 추가해
Markdown
복사
•
결과는? ➡️메일 보내기 버튼을 눌러도 실제로 작동하지 않음
•
실제 작동을 위해서는 PHP로 코딩해서 메일전송만 처리하는 페이지를 별도로 만드는 것이 필요
•

3. 메일전송php 기능

•
메일이 정상적으로 오는지 확인하려면, 실제 이메일주소를 기재할 필요가 있음
사용자가 연락을 눌러서 실제 이름과 이메일주소를 누르고 전송하게 되면, 실제 메일이 도착할 수 있도록 작업할꺼야. 1. 별도의 메일 송신을 담당하는 php 파일을 만들어서 연결해줘. php 에서 mail함수를 사용해 사용자가 입력한 메일이 OOOO.com으로 전송되게 구현해봐
Markdown
복사

3-1. 전체 흐름

[연락하기(Contact) 모달에서 사용자 입력 → 이름, 이메일, 메시지] ↓ [JS fetch → POST 전송 → send_mail.php] ↓ [send_mail.php] ├── 1. 요청 방식 확인 (POST 아니면 차단) ├── 2. 입력 데이터 유효성 검사 (빈칸, 이메일 형식 확인) ├── 3. PHPMailer 로드 (Composer autoload 사용) ├── 4. SMTP 설정 (Gmail, SendGrid, Mailtrap 등) ├── 5. 메일 작성 (From, To, 제목, 본문) ├── 6. 메일 전송 시도 → `$mail->send()` ├── 7. 전송 결과에 따라 JSON 응답 (성공 / 실패) ↓ [브라우저] └── 성공 시 → "전송 완료" 알림 실패 시 → "오류 발생" 알림 (에러 메시지 포함 가능)
Scss
복사

3-2.주의사항

1.
보안 강화:
•
실제 운영 환경에서는 CSRF 토큰, 스팸 방지를 위한 캡차 등의 추가 보안 기능을 구현하는 것이 좋음
•
커서나 코파일럿이 제공하는 코드는 기본적인 입력 검증(필수 필드, 유효한 이메일 형식)만 구현되어 있을 가능성이 높음

3-3.주의사항

•
현재는 send_mail.php 파일이 서버에 존재하지 않기에 메일 전송이 실제로 이루어질 수 없음

✅ 현재 상황

항목
상태
index.php
VS Code + PHP 내장서버 (php -S)로 실행 중
send_mail.php
c:\Users\user\Desktop\online_card\send_mail.php에 존재함
외부 SMTP 서버 설정
없음 (mail 서버 미설정)
PHP 기본 mail() 함수
Windows 환경에서는 동작 X (sendmail or SMTP 필요)

3-4.Composer 설치하기

•
Composer란? PHP 프로젝트에 사용되거나 사용되어야 할 라이브러리들을 기록하고 설치할 수 있게 해주는 역할
•
PHP 버전에 따른 패키지 설치 버전을 자동으로 정리해 줌
•
실행환경: php 5.3.2+ 이상에서 동작
•
설치방법
◦
글로벌 설치와 로컬 설치가 있는데 귀찮으면 윈도우 인스톨러 다운로드

설치 시 주의:

◦
PHP 경로 설정 (예: C:\php\php.exe → PHP가 설치된 위치)
◦
"Add Composer to PATH" 옵션 체크 → 이것이 중요!
◦
중간에 프록시 설정화면에서는 체크해제
•
이후 설치가 완료됨을 확인하기 위해 bash창에 다음 명령어 입력해보기
composer -V
Scss
복사

3-5.Composer 설치후 PHPMailer 설치

composer require phpmailer/phpmailer
Scss
복사
•
해당 프로젝트가 진행중인 폴더경로에서 CMD실행 후 PHP 메일러 설치를 진행하면?➡️ vendor 폴더와 autoload.php가 생성됨.
•
또 추가로 PHPMailer가 SMTP로 메일 전송할 때 TLS/SSL을 사용하기 때문에 반드시 OpenSSL 확장이 필요

3-6.Gmail 보안 설정

•
구글 계정설정으로가서 ‘보안’ → 2단계 인증 활성화 후→ 앱 비밀번호를 상단에서 검색해서 접근 —> 앱 비밀번호 설정
•
→ your_app_password 자리에 설정한 앱 비밀번호 입력
❌ Gmail 일반 비밀번호 X
✅ 앱 비밀번호 O

3-7.메일 제목이 깨지는 등 인코딩 설정이 잘못된 경우

•
메일 헤더(Subject)가 UTF-8로 인코딩되지 않으면
•
영어만 있을 때는 괜찮지만, 한글, 일본어, 특수문자 → 깨짐 발생
•
PHPMailer에서는 별도로 CharSet과 Encoding 설정을 해줘야 함.
$mail->CharSet = 'UTF-8'; // ✅ 인코딩 설정 추가! $mail->Encoding = 'base64'; // ✅ 인코딩 방식 설정!
PHP
복사

4. 깃허브 업로드 후 Render로 배포

📌왜 Render인가?
➡️ Render와 Heroku를 많이 사용함, Heroku는 최근 무료 플랜을 종료해버림, 따라서 Render로 결정 🚫Vercel은 서버리스 환경 기반이므로 처음부터 후보군에서 제외

4-1. 깃허브 업로드전 readme.md & .gitignore파일 만들기

✅ (참고)에이전트 모드일때 파일을 직접 생성해줌
readme.md와 .gitignore파일 만들어줘
Sass
복사
•
저장소(Repository) 생성후 공개용으로 설정해서 업로드 되었는지 확인
•
GitHub Pages 설정: ❗GitHub Pages는 PHP 실행을 지원하지 않음
👉 즉, 지금처럼index.php, send_mail.php 같은 PHP 파일이 포함된 경우: GitHub Pages로 배포해도 HTML, CSS만 보이고 PHP 기능 (예: 메일 전송, DB 연동 등)은 작동 안 됨❌
•
따라서 ✅GitHub Pages 설정은 무시하고 바로 Render로 배포 시작

4-2. Render가입

•
https://render.com 접속, 가입시 구글계정이 아닌 깃허브계정 연동으로 가입하기
◦
📢 클릭 한 번으로 깃허브 저장소가 자동 연결됨
•
깃허브 계정 연결
•
로그인 → New + → Web Service를 선택
리소스 타입
역할 요약
주로 사용하는 경우
Static Sites
HTML/CSS/JS 등 정적 파일만 CDN으로 배포
프론트엔드 웹사이트, 블로그, 포트폴리오 등
Web Services
PHP, Node.js, Python 등 동적 웹 애플리케이션 실행
✅ 백엔드 서버, PHP 웹사이트, API 서버 등
Private Services
Render 내부에서만 접근 가능한 비공개 서비스
인증, DB API 등 외부에 노출하지 않을 때
Background Workers
백그라운드 작업, 큐 기반 비동기 처리
데이터 처리, 메시지 소비, 비동기 로직 등
Cron Jobs
일정 시간마다 실행되는 짧은 작업 스케줄러
매일 백업, 자동 이메일 전송 등
Postgres
PostgreSQL 데이터베이스 생성 및 관리
데이터 저장소 필요 시 (RDBMS)
Key Value
Redis 호환 캐시 또는 메시지 큐
로그인 세션, 실시간 상태 저장, 큐 처리 등
•
GitHub 리포지토리 연동(로그인된 GitHub 계정 연결 단계)
◦
중간 설정 과정에서 모든 저장소 선택
•
연결이 완료되면 다음그림처럼 소스코드가 나오게 됨

4-3. Render 활용배포

💡
Dockerfile + .render.yaml 준비해서 배포하는 방식
✅ 배포하고자 하는 깃허브 저장소를 선택
•
Environment: PHP
•
Root directory: /
•
Start command: (비워도 됨)
•
Deploy
📢 주의점
•
Render는 Node.js, Python, Ruby, Go, Rust, Elixir와 같은 언어를 네이티브로 지원하며, PHP를 직접 지원안함
•
사용하려면 Docker 이미지를 통해 환경을 설정해야 함
•
지역은 싱가포르 선택
•
Root Directory → ❌ 비워두기
index.php, send_mail.php, Dockerfile이 모두 리포지토리 최상단에 있는 경우
→ 아무것도 입력하지 않으면 기본 루트로 인식됨
•
Dockerfile Path → ./Dockerfile
또는 . 만 입력해도 자동 인식 (기본으로 . 이 셋팅되어 있음)
•
배포를 위해 깃허브 저장소에 배포설정 파일 추가하기(.render.yaml)
services: - type: web name: 프로젝트 명칭 env: docker region: singapore plan: free branch: main dockerfilePath: ./Dockerfile autoDeploy: true
YAML
복사

🟦 .render.yaml 파일의 역할

📌 주요 항목 설명

항목
설명
type: web
웹 서비스 (HTML, PHP 등 포함)
name
Render 서비스 이름
env: docker
Docker 환경으로 배포
region: singapore
✅ 한국에서 가장 가까운 지역 선택하기
plan: free
무료 플랜 (Render 기본값)
branch: main
GitHub 리포지토리의 메인 브랜치 기준
dockerfilePath
Dockerfile이 루트에 있으므로 ./Dockerfile
autoDeploy: true
GitHub push 시 자동 재배포
•
또한 프로젝트 루트에 깃허브 프로젝트 루트에 Dockerfile도 함께 만들어야 함
•
Dockerfile: PHP 실행 환경 (Apache 포함) 설정 파일
# 1. PHP + Apache 기반 이미지 FROM php:8.1-apache # 2. 필요한 PHP 확장 설치 (openssl 제외) RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring # 3. Composer 설치 (선택적) COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # 4. index.php 우선 적용 RUN echo "DirectoryIndex index.php index.html" > /etc/apache2/mods-enabled/dir.conf # 5. 코드 복사 COPY . /var/www/html/ # 6. 권한 설정 RUN chown -R www-data:www-data /var/www/html # 7. 포트 오픈 EXPOSE 80
Docker
복사
✅Apache 란?
항목
설명
정식 명칭
Apache HTTP Server (아파치 HTTP 서버)
역할
웹사이트를 인터넷에 공개하고 제공하는 프로그램
개발
Apache Software Foundation (ASF)
특징
오픈소스, 무료, 전 세계 웹서버 점유율 1~2위 (Nginx와 경쟁)
•
깃허브 저장소에 올라간 최종 파일들 참고
•
Render설정화면에서 Free 선택
•
마지막으로 환경 변수(Environment Variables) 설정하기
◦
현재 프로젝트에서 send_mail.php에서 SMTP 인증 정보를 안전하게 관리하기 위해 꼭 필요한 부분
◦
SMTP 관련 정보를 변수로 넣는 단계라고 생각
•
send_mail.php에서 환경 변수 사용하도록 수정
[변환 전]
// SMTP 설정 $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; // Gmail SMTP 서버 $mail->SMTPAuth = true; $mail->Username = '???'; // 🔴 본인 Gmail 주소 $mail->Password = '???'; // 🔴 Gmail 앱 비밀번호 (2차 인증 시 필수) $mail->SMTPSecure = 'tls'; // 보안 방식 $mail->Port = 587;
PHP
복사
[변환 후]
$mail->isSMTP(); $mail->Host = getenv('SMTP_HOST'); $mail->Port = getenv('SMTP_PORT'); $mail->SMTPAuth = true; $mail->Username = getenv('SMTP_USER'); $mail->Password = getenv('SMTP_PASS'); $mail->setFrom(getenv('SMTP_FROM_EMAIL'), getenv('SMTP_FROM_NAME'));
PHP
복사
•
모든 준비가 끝났다면 [Deploy Web Service] 버튼 클릭하기
•
배포 준비가 끝나면 아래와 같이 배포페이지가 나옴
•
해당페이지로 들어가서 배포가 제대로 되고 있는지 확인
◦
도커를 이용한 방식이라 배포 초기 단계에서 상당한 시간 소요
[결과물]

5. (번외) 도커로 빌드하는 이유

🐳 왜 도커(Docker)로 빌드할까?

➡️Docker는 "내 컴퓨터에서 만든 프로그램을 서버에서도 똑같이 잘 돌아가게 해주는 마법 상자" 🎁

✅ 1. 어디서나 똑같이 작동

•
개발자 컴퓨터에서 잘 되는데, 서버에서는 에러? 😱
→ Docker는 모든 실행 환경을 통째로 감싸서 어디서 실행해도 동일하게 작동함!
“내 컴에선 되는데요…”는 이제 그만!

✅ 2. 실행 환경 자동 구성

•
PHP, Apache, 확장 기능 설치까지 → Dockerfile 하나로 서버 세팅 자동화 가능!
매번 수동 설치 안 해도 돼서 편하고 빠름

✅ 3. 배포가 쉬워짐

•
Render, AWS, GitHub Actions 등에서→ Docker 이미지로 바로 실행 가능!
배포 환경에서도 개발 그대로 실행

✅ 4. 깨끗한 환경 유지

•
실수로 시스템 파일 꼬일 걱정 없음→ Docker는 고립된 공간에서 작동
실험하다 망가져도, 컨테이너만 지우면 끝!