본문 바로가기
코드이그나이터와 php7와 mysql

윈도우에 PHP 8 설치 (2편, MYSQL 한글과 이모티콘 사용)

지난 게시글에서는 윈도우에 PHP8MYSQL 설치,
MYSQL 연결 샘플까지 다뤄보았습니다.

https://itadventure.tistory.com/627

 

윈도우에 PHP 8 설치 + MYSQL 연결 예제 ( APM 설치 - 2023. 9. 1기준)

오늘은 윈도우에서의 PHP(피에이치피) 설치에 대해 알아보겠습니다. 2023. 9. 1 기준 최신 PHP 버전은 8.2 인데요. 8.3 버전이 있긴 한데 아직 알파 버전(실험 버전)이라 논외입니다. PHP 설치시 아래 2가

itadventure.tistory.com

그런데 한가지 문제가 있다고 말씀드렸지요?


MySQL 패스워드가 설정되지 않았기 때문에,
해커가 그 빈틈을 타고 들어와 여러분의 컴퓨터를
트로이목마와 같은 해킹 기술로 침투! 할 수 있다는 것입니다. ( 무서워라... )

그러니까 패스워드를 필히 설정해 주셔야 합니다.
그리고 한국에서 서비스한다면 언어 설정도 한글로 바꿔야 하는데요. 오늘은 그 부분을 알아보도록 하겠습니다.


MYSQL 패스워드를 설정하자!

패스워드를 어떤 것으로 할지 먼저 생각해 주세요.
해커에게 털리지 않으려면 패스워드는 되도록 영어 + 숫자 + 특수기호를 포함10글자 이상을 추천합니다.
예를 들면 아래와 같은데요 이렇게 규칙을 지으시라는 것이지, 아래 패스워드를 바로 사용하시면 안됩니다.
그리고 잊지 않게 어딘가 메모해 두시면 됩니다.

패스워드 예시 : fkfkqpf2023@+

이제 XAMPP 컨트롤 패널에서 패스워드를 설정하시면 되는데요.
프로그램을 닫으셨다면 시작 버튼 - XAM 만 검색하셔도 쉽게 찾아 실행하실 수 있을 겁니다.

Apache, MySQL 라인의 버튼이 Start 로 되어 있다면 서비스가 중지되어 있는 것입니다.
각각 Start 버튼을 선택하여 실행해 주신 다음,

이와 같이 바뀌면 됩니다.

MYSQL 패스워드를 변경하기 위해 터미널에 접속합니다.

그러면 MYSQL 을 다룰 수 있는 XAMPP 터미널 창이 등장하는데요.
화면에서 깜박깜박하는 걸 커서라고 부릅니다.
명령어를 타이핑해 윈도우의 서비스와 대화하는 란이데 웬지 귀엽지 않나요? :)

MYSQL 패스워드를 변경하려면 여기서  MYSQL 콘솔이란 상태로 한번 더 접속해야 합니다.
( 1. 터미널 접속 => 2. MYSQL 콘솔 접속 )
아래 명령타이핑해 입력하세요. ( 타이핑을 마친 후 마지막에는 Enter 키 입력 )

 mysql -u root

이제 생각해두셨던 MYSQL 패스워드를 설정하시면 되는데요.
아래 명령어를 타이핑패스워드를 변경해 주시면 됩니다. ( 타이핑 후에는 항상 Enter  키! )

ALTER USER 'root'@'localhost' IDENTIFIED BY '여러분이정하신패스워드';

타이핑하기 귀찮으면 복사해서 붙여넣기하고 패스워드만 수정해 주셔도 괜찮습니다 :)

새로 설정한 패스워드는 아래 명령어를 입력해야 적용이 되니 마저 입력해 주세요.

 flush privileges;

이제 패스워드가 변경되었습니다.
이제 터미널 창은 그냥 닫으셔도 되지만, 되도록 정석대로 정상적인 단계을 거치는 것이 좋습니다.
2번 접속했으니 2번 접속을 해제해야 겠지요? ( 1. MYSQL 접속 해제 -> 2. 터미널 접속 해제 )
아래 명령어를 입력하여 MYSQL 접속을 해제하고 

exit

동일한 명령을 한번 더 입력하면 검은 터미널 창도 닫힙니다.


MYSQL 샘플 소스 수정

이제 MYSQL 패스워드가 설정되었기 때문에 지난 MYSQL 접속 예제 소스가 작동하지 않을겁니다.
왜냐구요? 지난 예제는 패스워드 없이 접속하도록 구성했기 때문인데요.

웹 브라우저에서 지난 테스트 페이지에 접속하시면 오류메시지를 품품 내뿜는 것을 보실 겁니다.

http://localhost/test2.php

샘플 소스 C:\xampp\htdocs\test2.php 페이지를 열어 보세요.

그리고 코드 중에서 아래 부분을

$conn = mysqli_connect("localhost", "root", "", "test");

패스워드를 넣어 아래와 같이 수정해 주시면 됩니다.

$conn = mysqli_connect("localhost", "root", "여러분이정하신패스워드", "test");

그리고 다시 웹브라우저에서 동일한 페이지에 접속하시면 정상으로 보이는 것을 확인하실 수 있습니다.


한글 + 이모티콘 설정

다음으로 한글 설정을 해볼까요? 사실 한글 설정을 안해도 테이블을 생성할 때마다 한글을 사용하겠다는 선언을 하면 문제는 없습니다. 하지만 실수할 경우도 있고 요즈음에는 🎏🎁🎨🧦 와 같이 생긴 이모티콘 문자도 많이 활용하기 때문에 이러한 기호도 저장할 수 있도록 한글 모드를 정하는 것이 좋은데요.
이를 위해서는 utf8mb4 모드를 사용하면 됩니다. 바꿔보도록 할까요~

XAMPP 창에서 MySQL 라인Config - my.ini 메뉴를 선택하세요

윈도우 메모장안에 MySQL의 설정 내용들이 매우 복잡하게 보이실텐데요.
겁내실 것 없습니다. 3군데만 수정해주시면 되거든요.

메모장에서 아래 3군데 ( 빨간 색 ) 를 수정하고 저장해 주세요.

[client] 섹션으로 가셔서 아래 내용 추가


[client]
# password       = your_password 
port=3306
socket="C:/xampp/mysql/mysql.sock"
default-character-set=utf8mb4


[mysqld] 섹션에서 아래 내용 추가


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
port=3306


[mysql] 섹션으로 가셔서 아래 내용을 추가


[mysql]
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8mb4 # 추가


이제 앞에서 수정한 내용을 서비스에 반영하려면
XAMPP 창에서 Apache 와 MySQL 서비스를 재시작해주시면 됩니다.
먼저 각각 Stop 버튼을 한번씩 눌러주세요. 그러면 서비스가 종료됩니다.

그리고 다시 Start 버튼을 눌러주시면 다시 서비스가 재개됩니다.

이 것으로 한글+이모티콘 설정이 완료되었습니다!


한글, 이모티콘이 작동되는지 볼까?

이제 익숙하신 편집 프로그램을 사용하셔서 아래 파일을 만들어 소스코드를 복붙해 주세요.
지난번 소스와 다른 점은 테이블 생성시 한글 모드 설정을 하지 않는다는 것입니다.
그리고 새로운 언어 적용을 위해 test2 라는 데이터베이스를 자동으로 생성합니다.

C:\xampp\htdocs\test3.php

<?php
// MYSQL 예제

// Mysql 연결
$conn = mysqli_connect("localhost", "root", "여러분의패스워드", "test");
if (!$conn) die("MySQL 연결 실패");

$sql = "CREATE DATABASE IF NOT EXISTS test2";
if (!($conn->query($sql)) ) die("DATABASE 생성 실패.");

mysqli_select_db($conn, "test2");
	
// 상품 테이블 생성 - 특별히 한글을 지정하지 않아도 한글 데이터 입력이 가능한 상태가 됩니다
$conn->query("CREATE TABLE IF NOT EXISTS 상품2 (
상품번호 INT PRIMARY KEY,
상품명 VARCHAR(30) NOT NULL,
가격 INT NOT NULL
);");

// 상품 입력
$array=[
	[1, '고나초콜랫🧆', 2000], 
	[2, '웨아스🧇', 2500],
	[3, '사망고🥮', 3000]
];
foreach($array as $one)
	$conn->query(
		"INSERT INTO 상품2 SET 상품번호=$one[0], 상품명='$one[1]', 가격=$one[2] 
		ON DUPLICATE KEY UPDATE 상품명='$one[1]', 가격=$one[2];"
	);

// 상품 출력
echo "<h1>크레이 제과점</h1>";
$query=$conn->query("SELECT * FROM 상품2;");
while($row=$query->fetch_assoc())
{
	echo "<h3>상품번호 : $row[상품번호]</h3>";
	echo "상품명 : $row[상품명]<br/>";
	echo "가격 : ".number_format($row['가격'])."<br/>";
	echo "<hr/>";
}

?>

그리고 아래 웹페이지에 접속하면 한글 및 이모티콘이 잘 입력되어 결과가 출력되는 것을 확인하실 수 있습니다.

여기까지 무난하게 잘 진행되셨나 모르겠군요 :)
이로써 MySQL 보안 설정과 한글+이모티콘 설정은 끄읕-.


마무~리!

이상으로 2편에 걸쳐 짧게나마 PHP8 설정에 대해 다뤄봤는데요.
사실 실제 서비스를 운영한다면 서버 세팅은 이 지점이 시작입니다.
향후 어떤 홈페이지 서비스를 제공하느냐에 따라 많은 서버 튜닝 과정을 거쳐야 하기 때문이지요.

서비스를 제공하면서 발생하는 오류를 잡는 튜닝과정은 처음 접해보시는 분들에게 많은 어려움과 긴 시간과의 싸움이 됩니다. 알수 없는 오류, 메모리 절약 노하우, 서버 최적화 기술을 하나 하나 해결하면서 점점 실력이 느는 것입니다.

방대한 인터넷에 대부분 해답은 있습니다. 많은 사람들이 비슷한 시행착오와 해결방법을 알아냈기 때문이고
특히 구글에서 영어로 검색할 경우 많은 해결 방법을 찾아보실 수 있습니다. 

오늘도 방문해주신 모든 분들께 감사드립니다~!


- 크레이의 프롤로그 -

예전에 node.js 를 학습하며 실시간 통신 웹소켓 기술을 익혔었습니다.
그러면서 PHP7 + Node.js 조합이 크레이에게는 최고일거라 생각했었는데요.

최근 PHP도 웹소켓이 지원된다고 합니다. PHP8 전용인지는 모르겠네요.
소스 내용을 보니 Node.js 와 비스무리한게 잘 될것 같아 보입니다.

관련 해외 게시글 : https://dev.to/robertobutti/websocket-with-php-4k2c

 

WebSocket with PHP

In this article, I will show you how to implement WebSocket service with PHP.

dev.to

다만 리눅스용이라 윈도우에서도 작동할지는 모르겠네요.

시간이 여유로울 때 실험해보고 내용 공유하도록 하겠습니다.
만일 PHP 만으로 웹소켓이 가능하다면 PHP 개발자에게는 완전 대~박이지요 :)


다음 게시글 : https://itadventure.tistory.com/629

 

윈도우 + PHP 8 ( 3편, 웹소켓 통신 래칫 Ratchet )

안녕하세요. 개발 기술을 익혀가며 공유해 나가는 크레이입니다 :) 지난 시간, MYSQL 에 한글과 이모티콘을 저장, 출력하는 샘플을 다뤘었는데요. https://itadventure.tistory.com/628 오늘은 윈도우 환경의

itadventure.tistory.com