1. 설치할 것 : 

1) VirtualBox 6.x, or VMWare

2) Vagrant

 

Downloads | Vagrant by HashiCorp

Vagrant enables users to create and configure lightweight, reproducible, and portable development environments.

www.vagrantup.com

3) git bash

 

2. 홈스테드 Vagrant Box 설치하기

1) 커맨드 창에 아래의 명령어 입력

vagrant box add laravel/homestead

2) provider 선택지 : virtualbox 선택

vagrant box 설치

3) success 시 완료

 

3. 홈스테드 설치하기

1) Git bash로 home 디렉토리안에 Homestead 폴더로 저장소를 복제하기

git clone https://github.com/laravel/homestead.git ~/Homestead

 

2) master 브랜치는 개발중이라 안정적이지 않을 수도 있기 때문에, 태그를 지정한 버전을 체크아웃 

cd ~/Homestead

git checkout release

 

4. Homestead 설정하기 (Homestead.yalm)

 

1) C:\Users\사용자\Homestead\resources 에서 Homestead.yalm 수정

2) C:\Users\사용자\Homestead 에서 init.bat 실행하면 Homestead 폴더에도 Homestead.yalm 생성

 

3) Homestead.yalm 

 

folders : map은 로컬에서 프로젝트 코드의 위치, to는 가상머신 vagrant의 경로

folders:
    - map: C:/Users/사용자/project/code
      to: /home/vagrant/code

sitest : map은 가상도메인

sites:
    - map: homestead.test
      to: /home/vagrant/code/생성할 프로젝트폴더명(project1)/public

 

Homestead.yalm

 

5. ssh 키 생성

ssh-keygen -t ras -C "메일주소"

Enter passpahrase : 개인키 암호

6. host 설정

1) 메모장을 관리자 권한으로 실행한 다음 C:\Windows\System32\drivers\etc\hosts 파일 열기

2) homestead.yalm 파일에서의 ip 와 sites의 map 부분과 같아야 함

192.168.56.56           homestead.test

 

7. Vagrant Box 구동 & ssh를 통해 홈스테드 환경에 접속

vagrant up : vagrant box 구동

vagrant reload --provision : 설정 변경 후 다시 가동

vagrant ssh : ssh를 통해 홈스테드 환경에 접속

vagrant up

vagrant reload --provision (설정 변경 후 vagrant 다시 실행시)

vagrant ssh

 

8. 프로젝트 생성

 

cd ~/code
laravel new proejct1

9. homestead.test


WRITTEN BY
beautifulhill

,

composer 설치가 지원되지 않는 버전에서 사용

 

1. wkhtmltopdf 다운로드 - OS에 맞게 다운로드를 한다.

 

https://wkhtmltopdf.org/downloads.html

 

wkhtmltopdf

All downloads are currently hosted via Github releases, so you can browse for a specific download or use the links below. Stable The current stable series is 0.12.5, which was released on June 11, 2018 – see changes since 0.12.4. OS Flavor Downloads Commen

wkhtmltopdf.org

 

 

 

2. .rpm 파일의 압축을 풀어준다.

- 7-Zip 을 추천

 

 

3. wkhtmltox-0.12.5-1.centos6.x86_64.cpio 압축을 풀어준다.

 

 

4. usr/local 폴더에 bin, include, lib, share 폴더가 나온다.

 

이 폴더 안의 파일들을 각 위치에 맞게 실서버에 올린다

 

 

5. 코드 작성

 

index.php

<form name="WkhtmlPdfForm" id="WkhtmlPdfForm" action="/pdf_down.php" method="post" accept-charset="UTF-8" enctype="multipart/form-data">
	파라미터들
</form>

pdf_down.php

<?

header('Content-Type: text/html; charset=UTF-8');
$url = "http://www.naver.com";
$down_name = "test";

//tmp폴더의 test.pdf 저장
exec('/usr/local/bin/wkhtmltopdf -L 10mm -R 10mm -T 10mm -B 10mm "'.$url.'" "tmp/'.$down_name.'.pdf" 2>&1');

//tmp폴더의 test.pdf를 클라이언트가 다운받을 수 있도록
$sFilePath = 'tmp/'.$down_name.'.pdf';
$sFileName = $down_name.'.pdf';

header("Content-Disposition: attachment; filename=\"".$sFileName."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strval(filesize($sFilePath)));
header("Cache-Control: cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");

echo file_get_contents($sFilePath);
flush();
unlink($sFilePath);//tmp폴더의 test.pdf 파일을 삭제

?>

 

 

6. wkhtmltopdf font 적용 안될 때

usr/share/fonts/원하는 폰트.ttf 을 업로드한다.(폰트 설치)

 

 

 


WRITTEN BY
beautifulhill

,

wkhtmltopdf는 html 페이지를 pdf로 다운받을 수 있는 프로그램이다.

 

 

1. OS에 맞게 다운로드한다.

https://wkhtmltopdf.org/downloads.html

 

wkhtmltopdf

All downloads are currently hosted via Github releases, so you can browse for a specific download or use the links below. Stable The current stable series is 0.12.5, which was released on June 11, 2018 – see changes since 0.12.4. OS Flavor Downloads Commen

wkhtmltopdf.org

 

2. 다운로드 후 적당한 위치에 압축을 푼다.

 

3. 윈도우의 경우 cmd 창에서

 

cd wkhtmltopdf위치\bin

wkhtmltopdf "다운로드 받고자 하는 페이지" "pdf 다운받을 위치"

 

 

 

4. 다운로드 됨

 

*참고

wkhtmltopdf -h 

를 작성하면 여러 옵션들이 나온다.


WRITTEN BY
beautifulhill

,

php, html 코드로 되어있는 페이지를 pdf로 변환하고자 한다.

이미 html코드로 페이지가 되어있는 상태라 최대한 적게 수정하는 방향으로 알아봤다.

 

1. fpdf

http://www.fpdf.org/

 

FPDF

 

www.fpdf.org

<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

사이트에 가면 여러 예제가 나와있으나, 코드를 대폭 수정해야한다.

 

2. tcpdf

https://tcpdf.org/

-tcpdf의 경우 fpdf보다 기존의 코드를 살릴 수 있었다.

-예제도 더 자세하고 많이 나온다.

-float padding 이 안먹힌다.

-기존의 페이지와 다르게 나오는 부분이 많아 결국 전체 수정을 해야할 판..

 

 

 

3. html2pdf

https://github.com/spipu/html2pdf

 

-이런 라이브러리를 간절히 찾고있었다!

-한글이 안된다

 

 

 


4. html2canvas, jspdf

 

-html2canvas로 html객체를 이미지로 변환 jspdf로 pdf를 생성하는 방식

-원하는 곳에서 페이지를 나눌 수 있고

-기존의 페이지와 가장 유사하게 나온다.

-화질의 문제가 발생한다.

-마치 그림판으로 늘려놓은 느낌의 글자와 이미지 화질....

-화면 크기에 따라 다른 결과가 나옴

-pdf 변환이 다 되기 전에 스크롤로 아래페이지로 가버리면 윗 페이지들이 안나오거나 오류가 발생함

-좀 더 고민해서 사용하면 유용할 것 같다.

 

 

5. wkhtmltopdf

https://wkhtmltopdf.org/

-html2canvas, jspdf를 사용하는 것과 같은 결과가 나온다.

-해당 페이지를 캡처하여 pdf로 변환하는 것과 같은 효과

-화질이 깨지지 않음

-5개 중 가장 간단하고 빠름

-php의 경우 exec로 바로 실행된다.

- https://beautifulhill.tistory.com/3

 


WRITTEN BY
beautifulhill

,

스킬서버를 구축하여 카카오톡 챗봇을 사용하면 더 자유롭게 사용할 수 있다.

php로 아주 간단히 simpletext로 응답을 보내는 방법을 설명하겠다.

 

1. 블록 수정

 

2. 응답 예시

- 응답은 다음과 같은 json 형태로 올 것이다.

3. 코드

~~/kakaochat/index.php

<?
$json_data = file_get_contents("php://input"); 
$obj_json = json_decode($json_data);
$singer = $obj_json->action->detailParams->singer->value;
$num_album = $obj_json->action->detailParams->num_album->origin;


$text = '주문확인 : '.$singer.'의 '.$num_album.'을 주문하셨습니다.';
$jayParsedAry = [
	"version" => "2.0", 
	"template" => [
		"outputs" => [
			[
				"simpleText" => [
					"text" => $text
				]
			]
		]
	]
];

echo json_encode($jayParsedAry,JSON_UNESCAPED_UNICODE);
?>

 

 

4. 카카오톡 챗봇 > 스킬 > 스킬 명 및 스킬서버 URL 입력 

 

 

5. 예시

 


WRITTEN BY
beautifulhill

,

스킬서버 없이 간단한 카카오톡 챗봇을 만들 수 있다.

다른 것들은 매뉴얼에 잘 나와 있어 쉽게 따라했지만 되묻기, 컨텍스트의 경우 헷갈렸다.

그래서 그에 대해 정리하고자한다.

 

1. 되묻기

 

 

 

 

 

 

2. 컨텍스트

 

 

주는 블록

 

 

받는 블록

 

 

테스트

 


WRITTEN BY
beautifulhill

,

1. 엔티티

  • 봇이 이해할 수 있는 단어 사전, 데이터 사전
  • 동의어 설정 가능 => 오타가 있거나 띄어쓰기가 달라도 제대로 답변을 보여줄 수 있다.
  • 구조 : [엔티티명], [대표 엔트리], [동의어]
    • ex) [대학교], [서울대학교], [서울 대학교, 서울대, 관악대]
  • 종류 : 나의 엔티티, 시스템 엔티티
  • 나의 엔티티 : 사용자 정의 엔티티

2. 시나리오

  • 서비스 단위, 블록의 그룹
  • 시나리오 단위로 다수의 블록들을 원하는 서비스 별로 그룹핑하여 체계적으로 관리
  • 기본 시나리오 : 웰컴블록, 폴백블록(사용자의 의도를 파악 못 했을 때), 탈출블록
  • 커스텀시나리오 : 사용자 정의 시나리오
    • ex) 회사소개, 자주하는 질문이 각각의 시나리오
    • 회사소개 : 위치 소개, 회사 제품 소개가 각각의 블록 
  • 시나리오설정
    • 되묻기 질문 설정 가능
    • 봇 제네릭 메뉴 : 하단의 슬라이드 메뉴 형태로 존재하는 사용자 인터페이스
    • 스마트 채팅과 유사

3. 블록

  • 사용자 의도의 기본단위, 인덴트
  • 웰컴블록 : 사용자가 봇을 처음 사용할 때 받게되는 웰컴메시지를 설정하는 블록
  • 폴백 블록 : 사용자의 발화 의도가 어떠한 블록과도 매칭이 되지 않을 때 (=봇이 사용자의 발화 의도를 이해하지 못할 때)
  • 탈출 블록: 봇의 되묻기 상황에서 사용자가 대화를 초기화하거나 탈출하고 싶을때 쓰는 사용자 명령어를 정의하는 블록
  • 블록안에는 사용자 예상 발화, 그리고 봇이 수행할 액션과 응답할 내용이 설계

4. 컨텍스트

  • 컨텍스트는 서로 다른 블록 간 ‘연결고리’를 만들고 싶을 때 사용
  • 컨텍스트에 필요한 구성값 : 인풋, 아웃풋, 컨택스트 수명(lifespan), 유효기간(TTL)
  • Input context : 다른 블록에서 내보낸 컨텍스트 받을 때
  • Output context : 다른 블록으로 컨텍스트 내보낼때

5. 스킬

    • 스킬은 임의의 API를 연결하여 봇이 이를 이용할 수 있게 함

4. 컨텍스트

    • 플러그인에 스킬 적용할 수 있음
    • 스킬서버를 구축해야 사용 가능
    • 바코드(QR코드)를 보낼 수 있는 바코드플러그인
    • 날짜/시간 플러그인
    • 프로필, 회원가입, 이미지보안전송, 현위치 전송 플러그인 등

WRITTEN BY
beautifulhill

,

아주 간단하게 메일을 보낼 수 있지만

예쁘게 꾸민 html 코드로 메일을 보낼 수도 있다.

 

1. mailtest.php

$to      = '받는사람@gmail.com';
$subject = 'html을 보냈습니다.';
$fp = fopen('mailtest.html',"r");
$message = fread($fp,filesize('mailtest.html'));

$name = '김광인';
$age = '21';
$gender = '남자';
$message = str_replace('{name}', $name, $message);
$message = str_replace('{age}', $age, $message);
$message = str_replace('{gender}', $gender, $message);
echo $message;


// html 메일을 보낼 때 꼭 이헤더가 붙어야한다.
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';

// Additional headers
$headers[] = 'To: Kim<받는사람@gmail.com>';
$headers[] = 'From: Admin<test@naver.com>';
$headers[] = 'Cc: Kim1<참조인1@naver.com>,Kim2<참조인2@gmail.com>';
$headers[] = 'Bcc: 숨은참조인3@gmail.com';


$result =mail($to, $subject, $message, implode("\r\n", $headers));
echo "메일 성공여부 : ";
if($result){echo "성공";}else{echo "실패";}

2_1. mailtest.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
table tr td{
border: 1px solid #5da399;
text-align: center;
padding: 10px;
}
</style>
</head>

<body>
	<table>
		<tr>
			<td>이름</td>
			<td>{name}</td>
		</tr>		
		<tr>
			<td>나이</td>
			<td>{age}</td>
		</tr>		
		<tr>
			<td>성별</td>
			<td>{gender}</td>
		</tr>
	</table>
</body>
</html>

 

 

이렇게 하면, mailtest.html은

 

다음과 같이 출력된다.

 

메일을 보낸 후

메일함을 확인해보면

 

다음과 같이 스타일이 적용이 하나도 안된 상태로 온다.

따라서 html의 스타일을 inline방식으로 바꾼다.

 

2_2. mailtest.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">

</style>
</head>

<body>
	<table style="border-collapse: collapse;text-align: center;">
		<tr>
			<td style="border: 1px solid #5da399;padding: 10px;">이름</td>
			<td style="border: 1px solid #5da399;padding: 10px;">{name}</td>
		</tr>		
		<tr>
			<td style="border: 1px solid #5da399;padding: 10px;">나이</td>
			<td style="border: 1px solid #5da399;padding: 10px;">{age}</td>
		</tr>		
		<tr>
			<td style="border: 1px solid #5da399;padding: 10px;">성별</td>
			<td style="border: 1px solid #5da399;padding: 10px;">{gender}</td>
		</tr>
	</table>
</body>
</html>

 

 

스타일이 잘 적용된 상태로 메일이 보내진다.

 

다 끝난 것 같지만 아직 문제가 하나 남았다.

 

잘 살펴보자

 

 

분명 받는 사람은 나 하나고 참조인이 2명인데, 왜 받는사람이 두명인 것인가?

 

이는 mailtest.php에서 $to 와 $headers[] = 'To: Kim<받는사람@gmail.com>';

때문인다. to를 두번 지정해준 것이므로 "$headers[] = 'To: Kim<받는사람@gmail.com>';" 지워줘야 한다.

 

그럼 다음과 같이 받는 사람이 한명으로 제대로 나온다.


WRITTEN BY
beautifulhill

,