PHP) 단축 URL 서비스 구축하기

카테고리 : 웹 프로그래밍/PHP

준비물

  1. 웹서버 (Apache, NginX 등)
  2. PHP
  3. MySql(MariaDB)

이 글에서는 Apache 웹서버로 만들것입니다.

 

간단하게 구조 설명 : 단축 URL

단축 url은 이미 있는 url과 그에 해당하는 key를 만들고, key로 접근 시 url으로 리다이렉트 하는 서비스입니다.

 

쉽게 http://example.com/mykey 접속 시, 서버에서는 mykey와 매칭 되는 url을 찾습니다. (DB에서 검색)

key url
mykey https://hi098123.tistory.com/

따라서 https://hi098123.tistory.com/으로 연결되게 만들 수 있습니다.

 

아주 간단하게 만들 수 있는 서비스이며, 소스가 공개되어 있는 경우도 많습니다.

이 글에서는 MIT라이선스로 누구나 가져다 쓸 수 있는 오픈소스를 이용해 구축해보려 합니다.

 

 

1. 먼저 아래의 소스를 다운로드합니다.

https://github.com/urls/url-shortener

 

urls/url-shortener

Web application that will help you in shortening your url - urls/url-shortener

github.com

해당 소스의 functions/shorten.php 경로에 오류가 있습니다.

<?php

session_start();

require_once("../config.php");
require_once("../UrlShortener.php");

$errors       = false;
$insertCustom = false;

...

을 다음과 같이 수정합니다.

<?php

session_start();

require_once('../config.php');
require_once('./UrlShortener.php');

$errors       = false;
$insertCustom = false;

...

 

2. 아파치 + PHP + MYSQL이 모두 설치된 환경을 가정하고 설명합니다.

연습용이라면 XAMPP를 이용해 한번에 모두 설치하거나, 닷홈 무료 호스팅, 000webhost무료호스팅을 이용할 수도 있습니다.

 

루트 폴더의 .htaccess 파일을 수정합니다.

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ functions/redirect.php?secret=$1 [L]

만약 NginX라면 아래와 같이 작성할 수 있습니다.

location / {
  if (!-e $request_filename){
    rewrite ^(.*)$ /functions/redirect.php?secret=$1 break;
  }
}

 

.htaccess 코드 설명

루트 경로로 전송된 값을 ( 예 : http://example.com/abc )

 

/functions/redirect.php의 secret 파라미터로 전송(GET 형태) ( 예 : http://example.com/functions/redirect.php?secret=abc )

 

 

 

3. 루트 폴더에 아까 전 1번에서 받은 파일을 넣습니다.

이 파일만 루트 폴더에 올리면 됩니다.

 

database 폴더의 파일은 phpmyadmin을 설치했다면 pma를 사용해도 되고,

 

데이터베이스에 직접 SQL 쿼리를 입력해도 됩니다.

CREATE TABLE IF NOT EXISTS `link` (
  `id` int(11) NOT NULL,
  `url` varchar(1000) DEFAULT NULL,
  `code` varchar(20) DEFAULT NULL,
  `created` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `link`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `link`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

 

4. 방금 이동시킨 config.php를 수정합니다.

<?php

if ( !defined('SITE_NAME') )
{
    define('SITE_NAME', "Make It Short!");//site title : index.php에서만 사용
}

// URL LOCATION (Don't forget "/" at the end !)

if ( !defined('BASE_URL') )
{
    define('BASE_URL', "/");
}

// DATABASE CONFIGURATION

if ( !defined('HOST_NAME') )
{
    define('HOST_NAME', "127.0.0.1:3306"); //DB 주소
}

if ( !defined('DB_NAME') )
{
    define('DB_NAME', "DATABASE_NAME"); //DB 이름
}

if ( !defined('USER_NAME') )
{
    define('USER_NAME', "USERNAME"); //DB 아이디
}

if ( !defined('USER_PASSWORD') )
{
    define('USER_PASSWORD', "PASSWORD"); //DB 비밀번호
}

 

이제 완료되어 웹서버에 연결된 도메인 또는 http://127.0.0.1/index.php에서 새로운 단축 주소를 등록할 수 있습니다.

 

000webhost무료호스팅 이용한 방법

똑같은 내용을 직접 서버를 구축하는 게 아닌 간단히 웹호스팅을 이용해 구축해볼 수도 있습니다.

보통 요금제가 있기 때문에 잘 선택해야 됩니다.

000webhost가 트래픽이 많으면 무료 계정에서 호스팅을 제거시켜버린다고 말이 많긴 한데.

간단히 기능 구현용으로 사용해보았습니다.

어느 호스팅을 사용하나 비슷하다고 생각됩니다..

주의할 점은 실제 서비스를 만들 때 무료 서비스를 사용하면 안 됩니다. 안정성에 큰 지장이 있을 수 있습니다.

비슷한 글 hi098123.tistory.com/188

 

Tools메뉴의 Database Manager메뉴 접속 후 New Database를 눌러 새로운 DB를 생성합니다.

DBname 등 정보를 입력해 생성한다.

잠시 시간을 기다리면 관리(Manage) 버튼이 뜨게 됩니다.

클릭하여 PMA(phpmyadmin)에 접속합니다.

PMA에서 SQL을 눌러서 코드 입력 후 실행 버튼 클릭

CREATE TABLE `link` (
  `id` int(11) NOT NULL,
  `url` varchar(1000) DEFAULT NULL,
  `code` varchar(20) DEFAULT NULL,
  `created` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB;

ALTER TABLE `link`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `link`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

 

다시 관리창으로 돌아와서 File Manager에 접속합니다.

public_html (또는 www, htdocs 등) 클릭 후 업로드하기 클릭

깃허브에서 받은 파일을 업로드하였습니다.

config.php 에 DB정보를 기입하면 완료

 

functions/shorten.php 부분 수정을 안 했었다면 1번 깃허브 다운로드 부분으로 돌아가 소스를 수정해야 작동합니다.

 

이제 단축 주소를 생성해보자

https://php-url-demo.000webhostapp.com/hi098123 으로 생성해보았습니다.

접속 시 https://hi098123.tistory.com/ 으로 이동하게 됩니다.

이렇게 만들어진 Demo 페이지

https://php-url-demo.000webhostapp.com/

URL이 짧아야 좋습니다.

포스팅을 위해 무료로 만든것이기 때문에 굳이 도메인을 연결하진 않았습니다.

 

스팸 url 리다이렉트 남용 방지를 위해 티스토리가 아닌 주소 생성은 불가능하게 막아두었습니다.

티스토리 주소로 생성은 가능합니다.

 

만약 코드를 더 작성한다면 통계 페이지 등을 만들 수도 있습니다. (이 글에서는 다루지 않습니다.)

 

 

 

마지막으로

URL 단축 서비스는 무엇보다 도메인이 상징적이거나 짧아야 좋습니다.

예를 들어 트위터의 단축 도메인은 t.co이며, 매우 짧습니다.

 

간단히 만들어보면서 어떠셨나요?

해당 소스가 좋은 소스는 아니지만 원리를 파악하거나 파일 몇 개 없이 구현이 가능해서 해당 소스를 이용하여 글을 작성하였습니다.

만약 서버 구축에서 막혔다면 "XAMPP설치"를 구글에서 검색해보기 바랍니다.

 

저작권 보호안내
무단 전재, 재배포 행위는 금지됩니다. (글을 복사하여 게시금지)
본문의 일부(링크용 문장) 인용은 가능하지만, 출처와 링크(a 태그)를 남기셔야 됩니다.
(웹툴을 이용하고, 스크린샷/녹화하는것은 상관없습니다.)

예외적으로. 저에게 허락받은 경우에는 본문을 전재할 수 있습니다.

만약, 본문 공유를 원하신다면 링크 공유를 해주세요

저작권 정책 확인하기
링크 공유하기

 댓글