Loading...
PHP imagecreatetruecolor와 imagefilledrectangle으로 동적 배너 이미지 생성하기

웹 서비스 운영 중 상품 정보나 이벤트 배너를 매번 디자이너에게 요청해서 받는 게 비효율적이라고 생각해봤을까? 또는 사용자마다 다른 텍스트가 들어가야 하는 동적 이미지가 필요한데 서버에서 직접 생성할 수 있는 방법을 모르는 경우가 많다. 이번에는 PHP의 GD 라이브러리를 활용해 프로그래밍으로 이미지를 동적 생성하는 방법을 정확하게 정리해서 소개하겠다. 1···

20 0
MySQL Deadlock 에러 원인 분석과 트랜잭션 최적화 완벽 가이드

MySQL을 사용해 트래픽이 많은 웹 서비스를 운영하다 보면 어느 날 갑자기 Deadlock found when trying to get lock; try restarting transaction 에러를 경험해봤을 것이다.다만 이 에러가 어떤 상황에서 왜 발생하는지, 혹은 무조건 쿼리 성능이 떨어져서 발생하는 문제인지 정확한 원인과 해결책을 모르는 경우가 ···

13 0
PHP-FPM 502 Bad Gateway 에러 원인 분석과 Nginx 연동 최적화 완벽 가이드

Nginx 웹 서버와 PHP-FPM을 연동해 서비스를 운영하다 보면 어느 날 갑자기 브라우저에 502 Bad Gateway 에러가 발생하는 상황을 한 번쯤 경험해봤을 것이다.다만 서버가 그냥 다운된 것인지, Nginx 설정 문제인지, 아니면 PHP 프로세스 메모리 초과 때문인지 정확한 원인이나 해결책을 모른 채 Nginx나 PHP 서비스만 무작정 재시작하는···

19 0
PHP에서 JSON 데이터를 안전하게 파싱하고 검증하기 - json_decode 완벽 가이드

API 응답을 받거나 외부 데이터를 처리할 때 JSON을 파싱하는 작업은 일상이다. 하지만 대부분의 개발자들은 json_decode를 쓸 때 기본 형태만 알고, 잘못된 JSON이나 보안 문제까지 제대로 대응하지 못한 채 진행한다. 특히 json_last_error()를 확인하지 않아서 조용히 실패하거나, 두 번째 인자를 모르는 경우가 많다. 이번에는 jso···

16 0
PHP SQL 인젝션 방어 - PDO Prepared Statement 완벽 가이드

웹애플리케이션을개발하면서사용자입력을받아데이터베이스쿼리를실행하다가보안경고나예상치못한에러를경험해봤을까?다만SQL인젝션의정확한원인이나PreparedStatement가이를어떻게차단하는지내부원리를모른채구글링한코드를그대로붙여넣는경우가많다.이번에는PDO의PreparedStatement가정확히뭔지,왜단순한문자열치환보다안전하고강력한지,실무에서어떻게안전하게작성하는지완벽하게정···

17 0
MySQL CONNECTION ERROR: Too many connections - 동시접속 제한 완벽 해결

MySQL\'Toomanyconnections\'에러가뜨는이유갑자기웹사이트가먹통이되고에러로그를확인해보니\"ERROR1040(HY000):Toomanyconnections\"메시지가반복된다면,동시접속자가MySQL서버의최대연결수를초과했다는뜻이다.특히트래픽이몰릴때나애플리케이션버그로연결이제대로종료되지않을때자주발생한다.다만대부분의개발자들은이에러의정확한원인을파악하지못한채무조···

17 0
MySQL ERROR 1045: Access Denied for User 'root'@'localhost' - 원인 분석과 해결 완전 가이드

MySQL을설치하고처음접속하려는데ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES)가뜨면서접속이안되는경험을해봤을것이다.또는잘쓰던서버에서어느날갑자기같은에러가발생해서당황한적도있을것이다.다만대부분의개발자들은검색해서나오는명령어를무작정복사해실행하다가오히려상황을더꼬이게만든다.비밀번호문제인···

24 0
쿠키 vs 세션 vs 토큰 - 웹 인증 방식 완벽 비교

웹 개발을 하면서 사용자 로그인을 처리해야 할 때 쿠키, 세션, 토큰이라는 세 가지 방식을 마주치게 된다. 다만 이 세 가지가 정확히 뭐가 다른지, 어떤 상황에서 뭘 써야 하는지 설명할 수 있는 개발자는 생각보다 적다. 많은 사람들이 그냥 "세션을 쓰면 된다더라" 또는 "요즘은 토큰을 쓴다더라" 정도만 알고 있을 뿐이다. 다만 각 방식의 원리를 이해하면, ···

20 0
Linux chmod 권한 완전 이해하기 - 755? 644? 777? 정확히 뭔가요

리눅스 서버를 다루다 보면 chmod 명령어를 자주 사용하게 된다. 특히 파일 업로드 기능, 권한 설정, 디렉토리 접근 제한 등 웹 개발 과정에서 거의 매일 마주친다. 다만 대부분의 개발자들은 chmod 뒤에 붙는 숫자가 정확히 뭔지 모른 채 인터넷에서 가져온 코드를 그냥 복사해 붙인다. "755 권한으로 설정해" 라는 말은 들어봤지만, 왜 755인지, 6···

30 0
MySQL 느린 쿼리 로그로 성능 문제 디버깅하기

웹사이트를 운영하다 보면 시간이 지나면서 데이터가 쌓이고, 어느 순간부터 갑자기 페이지 로딩이 느려지는 경험을 하게 된다. 특히 PHP에서 MySQL 쿼리를 실행할 때 어떤 쿼리가 느린지, 왜 느린지 파악하기가 쉽지 않다. 직접 쿼리를 날려보거나 전체 쿼리를 로깅하는 것도 방법이지만 효율적이지 못하다. 이럴 땐 MySQL의 느린 쿼리 로그(Slow Quer···

26 0
PHP의 취약점에 대하여

PHP의 취약점을 검색하면 상당히 많은 검색결과를 볼 수 있다. 하지만 PHP 뿐만 아니라 모든 언어는 취약점이 발생하기 마련이다. 이런걸 보안하여 패치하는게 개발자의 일이기도 하다. 그럼 PHP의 취약점 보완을 위해 버전 업그레이드를 받는다고 해서 취약점이 해결될까? 절대 그럴일이 없다.. 이미 엉망인 소스에다가 PHP 버전을 업그레이드 받는다고 취약점이···

441 2
보안을 위해선 수시로 접속로그를 확인하는 습관이 필요하다.

개인 사이트 또는 블로그 운영시 접속로그를 살펴보는건 중요한 부분중 하나다. 사이트 접속 로그를 수시로 살펴보고 어떤 곳에 유입이 많이 되었는지 확인하여 컨텐츠를 구성하는데 도움이 될 수 있다. 하지만 언제나 그렇듯 접속로그를 보다보면 수상한 접속 기록등이 확인될 때가 있다. 보통 개인이 서버로 운영하지 않고 네이버 또는 티스토리와 같은 서비스에서 블로그를···

520 5
보안토큰을 적용하여 안전하게 FORM 전송을 하는 간단한 예제

최근들어 큰 프로젝트들이 많이 겹쳐 블로그 운영을 많이 못했던것같다. 현재 UI도 리뉴얼 구성중에 있긴하나 당분간은 엄두가 나지 않을듯 싶다. 이번에 소개할 내용은 보안토큰을 적용한 간단한 FORM 전송 예제이며 이 방법을 주로 사용하는 목적은 스팸(악성)글을 막기위한 용도로 많이 사용된다. 자세한 방법은 아래 예제 소스를 통해 알아보자. EX) 폼 파일 ···

1,937 11
아파치 웹서버 - Service Unavailable Error(503 에러) 해결 방법

아파치 웹서버에서 발생되는 Service Unavailable Error 에러는 서비스는 시작되었지만 접근할 수 없는 서버 내부 오류로 검색을 통해서 해결이 안되는 경우가 있다. 주로 검색을 하면 포트를 열어서 해결하라는 식으로 소개가되는데 이러한 방법으로도 끝까지 해결이 안되는 경우가 있다. 물론 포트를 사용가능하게 여는것도 필요하지만 가장 중요한건 서버···

12,392 5
웹 소켓 서버(Websocket) - Ratchet 웹 소켓 서버에서 접속자를 제어

Ratchet 웹 소켓 서버를 실행하면 소켓의 정보만 있다면 로컬에서만 접속가능한 환경이 아닐 경우 TCP URI 정보만 있다면 누구든 클라이언트에서 웹 소켓을 연결하여 접속을 할 수 있게된다. 우리는 이를 사전에 막아 보안강화를 할 필요가 있다. 기본적으로 포트를 막는 방법엔 아래와 같이 두가지 방법이 있다. 1. iptables 를이용하는 방법이 가장 ···

3,156 17
웹 소켓 서버(Websocket) - Ratchet 라이브러리의 보안 프로토콜(wss) 소켓 생성방법

웹 소켓은 ws 와 wss 프로토콜 방식을 제공하는데 이는 일반적인 URI의 HTTP 와 HTTPS와 같이 일반전송과 암호화전송 정도로 이해하면 된다. ws 프로토콜을 이용할경우 일반적인 원문으로 전송이 되기 때문에 중요 데이터를 공격자는 그대로 볼 수 있다. 이는 DB로 본다면 비밀번호 칼럼을 그대로 원문으로 처리한것과 동일하다. 이럴경우 DB가 노출되면···

3,265 3
웹 소켓 서버(Websocket) - 자바스크립트 Websocket 이용한 간단한 채팅 프로그램 예제

자바스크립트에서 공식적으로 제공되는 Websocket 객체는 클라이언트 와 서버 간 데이터를 주고 받을 수 있도록 연결 스트림을 만들어 주는 기술로 일반 소켓통신은 서버간 통신였다면 웹 소켓은 클라이언트 to 서버간 통신으로 볼 수 있다. 그렇다고 해서 클라이언트만 이용가능한건 아니며 서버간 통신도 가능하지만 서버간 통신이라면 굳이 복잡한 웹 소켓을 보단 ···

3,422 6
웹 소켓 서버(Websocket) - PHP Ratchet 라이브러리 설치 및 실행

PHP를 통해 웹 소켓을 하기 위해선 소켓 서버가 있어야한다. 당연하게도 우리는 웹 소켓 프로그램을 만들기엔 오랜시간이 걸리고 어쩌면 영영 못만들 수 있다. 그래서 제공되는 라이브러리를 사용해야 하며 라이브러리는 Composer를 통해 쉽게 관리할 수 있다. 우선 들어가기 앞서 Composer 설치가 안되어 있을 경우 진행할 수 없으니 사전에 Compose···

4,050 5
PHP8 도입은 언제쯤이 좋을까?

PHP와 함께 해온지 벌써 10년이 다되가는것같다. 내가 처음 사용한 버전은 PHP5 버전대였는데 영원할것같던 5도 이제 역사속으로 사라지고 PHP7로 갈아탄지가 엊그제 같은데 부지런하고 똑똑한 PHP 연구원들덕에 빠르게 사라질 듯 싶다. 솔직히 PHP8은 작년에 개발서버에 설치만 해놓고 언젠간 해야지라는 믿을 수 없는 결심만 하고 지금껏 모른척 했지만 회···

3,820 2
PHP를 이용하여 문장의 앞뒤로 자르고 접두사 붙이기 (mb_substr_after / mb_substr_before)

주로 컨텐츠 관련된 작업을 하다보면 글이 길경우 잘라야 하는 경우가 있다. 보통 문장의 뒷부분을 자르고 접두사(...)를 붙이는 경우가 많다. 다만 요즘은 반응형으로 사이트를 많이 제작하다보니 PC기준으로 최대한 글자수를 자르고 CSS로 말줄임 처리를 하는 경우가 많다. 이번편에서는 간단하게나마 PHP를 이용하여 문장의 뒷부분 또는 앞부분 자르는 함수에 대···

2,981 7
REDINFO Since 2014
webmaster@redinfo.co.kr
Copyright © Redinfo All Rights Reserved