프로젝트 규모가 커질수록 기존 코드를 수정할 때 예기치 않은 버그가 발생할까 봐 불안해했던 경험이 있을 것이다.다만 대부분의 개발자들은 테스트 코드 작성 방법을 제대로 모른 채 일일이 브라우저에서 직접 입력값을 넣어가며 수동 테스트를 진행하곤 한다.이번에는 PHPUnit을 이용한 단위 테스트(Unit Test)의 기본 개념부터 왜 필요한지, 그리고 외부 A···
PHP에서 배열을 다루다 보면 특정 조건에 맞는 요소만 추출하거나, 불필요한 데이터를 걸러내야 할 상황이 자주 생긴다. 대부분의 개발자들은 foreach 루프를 돌면서 if문으로 하나하나 체크하고 새로운 배열에 담는 방식을 써왔을 것이다. 다만 array_filter 함수를 제대로 이해하고 활용하면, 코드를 훨씬 간결하게 만들 수 있을 뿐 아니라 가독성과 ···
한글을 포함한 데이터를 다룰 때 문자 깨짐이나 인코딩 오류를 경험해봤을까? 특히 외부 API에서 받은 데이터나 사용자 입력값을 처리할 때 갑자기 '?'나 알 수 없는 기호로 변환되는 현상을 목격한 개발자라면 알 것이다. 다만 대부분은 그 원인이 정확히 뭔지, 왜 인코딩이 깨지는지, 어떻게 해야 하는지 제대로 알지 못한 채 인터넷에서 가져온 코드를 대충 복사···
외부 결제 PG사나 알림 서비스 등을 연동하면서 웹훅(Webhook) 수신 엔드포인트를 만들어본 경험이 있을 것이다.다만 대부분의 개발자들은 URL만 노출되어 있으면 누구나 위조된 HTTP 요청을 보낼 수 있다는 위험성을 간과한 채, 수신된 데이터를 그대로 DB에 반영하곤 한다.이번에는 웹훅 위변조 공격이 왜 위험한지, 이를 방지하기 위한 HMAC SHA2···
PHP 개발을 하다 보면 거의 매일 마주치는 에러가 있다. 바로 "PHP Warning: Undefined Index" 경고다. 폼 데이터를 받거나 배열을 다룰 때 존재하지 않는 키에 접근하면 튀어나오는 이 경고는 대부분의 개발자들이 무시하거나 에러 리포팅 설정을 낮춰서 감춘다. 하지만 이 경고는 무시하면 안 되는 보안 취약점의 신호다. 이번에는 "Unde···
Discord 커뮤니티를 운영하다 보면 반복적인 관리 작업이나 자동화가 필요한 순간이 많다. 하지만 대부분의 개발자들은 봇을 만들어야 한다는 건 알면서도 어디서부터 시작해야 할지, 정확히 어떤 라이브러리를 써야 할지 모른 채 방황한다. 이번에는 Python의 discord.py 라이브러리를 이용해 Discord 봇을 처음부터 끝까지 만드는 방법을 완벽하게 ···
서비스 출시 전이나 이벤트 오픈을 앞두고 "갑자기 사용자 수천 명이 동시 접속하면 우리 서버가 버틸 수 있을까?" 고민해 본 적이 있을 것이다.다만 실제 트래픽 환경을 사전에 시뮬레이션하지 않고 그저 서버 스펙만 올렸다가, 예상치 못한 병목 현상이나 DB 커넥션 고갈로 서비스가 마비되는 상항을 맞닥뜨리는 경우가 많다.이번에는 Go 기반의 가볍고 강력한 오픈···
요즘들어 사이트 로그를 살펴보면 로봇의 비율이 80%를 넘기는데 이와 더불어 별 이상한 그지 같은 악성 크롤러도 판을 치고 있어서 걱정이 많다. 크롤러라면 최소한 유저에이전트에 정보라도 남겨놓는게 예의 인데 악성 크롤러는 신원같은건 무시한체 긁어가는것에 집중을 하고 있다. 간혹 이런 악성크롤러의 아이피 출처에 대한 상세 정보를 알고싶을때가 있다. 이때 조회···
캡챠는 사용자 입력 검증 관련된 개발하다보면 한번쯤 사용했거나 들어본적이 있을 것이다. 쉽게 설명하면 입력후 제줄된 문서를 진짜 타이핑해서 쓴건지 아니면 별도 프로그램으로 이용하여 제줄한건지 사전에 체크할 수 있는 시스템이다. 이러한 캡챠는 지속적으로 기술이 발전되고 있지만 자동입력 프로그램 또한 지속 발전하여 보안코드 마저 인식 후 뚫어버리는 경우가 있다···
웹 사이트를 운영하다보면 파일업로드 기능을 많이 사용하기도 하지만 직접 구현해야할때도 있다. 이럴땐 여기저기서 예제소스 가져다가 붙이곤 하는데 예외처리가 많이 안되다보니 사용하다 업로드에 문제가 생겼을 시 체크하기가 어렵다. 특히나 파일 업로드 권한이 특정 권한을 가진 유저가 아닌 모든 유저에게 부여된다면 역시나 믿을 수 없다. 하루에도 수백번씩 이상한 방···
이전 편에서 회원가입 기능을 구현해 보았다. 이번 편은 회원가입을 이어서 로그인과 로그아웃 기능을 구현하는 예제이며 간단하게 아이디, 비밀번호 그리고 아이디 저장 기능 까지 구현해 보도록 하자 참고로 본 예제는 이전 편에서 회원가입 구현과 연계되니 이전 포스팅을 미리 확인해야 본 예제를 이용하여 기능 구현이 가능하다. PHP를 이용하여 회원가입 기능을 구현···
본 예제를 이용한 회원가입기능을 테스트하기 위해선 웹 서버가 필요하니 참고바라며 본 예제에서는 이러한 내용들은 포함되지 않았으니 소스코드를 참고하여 웹 서버 지원이 되는 곳에서 테스트를 해보기 바란다. 회원가입 서비스를 구현하기 위해선 여러 기능들이 필요하다. 단 모든 기능들을 예제로 표현하기는 어렵기 때문에 이번 편에서는 단순하게 회원 기본정보만을 이용하···
프로그램 설계시 확률에 따른 결과를 추출해 내는 방식에는 여러 방법이 있다. 확률에 따른 결과를 추출하기 위해선 어떤 것에 의에 확률을 구하냐 이거인데 이번시간에는 간단한 예제 몇가지를 통해 알아보도록 하자. 1. 단순 확률에 따른 결과 추출 방법 예를 들어 게임에서 아이템 강화 확률이 50% 인 프로그램을 짠다면 아래와 같다.
이번에 소개할 프로그램은 JQUERY를 이용하여 만든 가위, 바위, 보 프로그램이다. 해당 프로그램은 결과값에 대한 조건처리가 많이 없기에 생각보다 빠르게 만든것 같다. 아래는 가위, 바위, 보 프로그램의 처음 시작 화면이다. 처음 화면에서 게임 시작을 누르면 아래와 같이 실제 게임 레이어 팝업이 뜨게 되고 게임을 시작할 수 있다. 게임이 시작되고 가위, ···
이번에 소개할 교육용 프로그램은 학생관리 프로그램으로 JQUERY를 이용하여 최대한 간단하게나마 만들어보았다. (사실 만드는데 생각보다 시간이 많이 걸렸다.) 사실 여러 기능들을 넣어서 올려볼까 했는데 db가 아니다 보니 스크립트 처리가 워낙 까다로워서 다음에 좀더 업데이트된 버전으로 올려볼까 한다. 이번 버전은 등록/삭제/조회/다운로드 까지 기능만으로 구···
PHP로 개발을 하다보면 상당히 많은 라이브러리를 접할 수 있다. 하지만 달력 같은 경우 보통 PHP가 아닌 datepicker 같은 JS라이브러리를 많이 사용하게 되는데 이벤트에 대한 메서드를 완전히 제어하기 어렵기 때문에 별도로 제작해야할때가 있다. 하지만 평소 달력은 보기만 했지 막상 만들려면 조금이나마 공수가 들어가게 된다. 이럴땐 바로 구글링을 해···
이번에 소개할 프로그램은 JQUERY의 sortable 메서드를 이용하여 만단 간단한 생상 블록 맞추기 게임이다. sortable 메서드의 경우 JQUERY UI 라이브러리가 있어야만 가능하며 특정 목록 아이템 부모를 선택해주면 자동으로 마우스 드래그&드롭 기능이 작동된다. sortable 메서드에 대한 자세한 정보는 아래의 포럼에서 살펴보면 된다.···
PC에서 웹 결제 프로그램을 이용하다보면 많이 보게 되는 숫자 키패드는 생각보다 간단하게 만들 수 있다. 물론 PG사 특성상 보안 프로그램으로 2중 체크하여 처리하겠지만 보안 프로그램을 제외한다면 별반 다를것 없이 제작할 수 있다. 이번에 소개할 웹 프로그램은 PHP 와 JQUERY 를 이용하여 만든 안전 숫자 키패드 프로그램으로 간단하게 만들었기때문에 구···