목록엔지니어스 마인드 (18)
하츠의 꿈
새로운 서버를 설치한 후 mysql database를 사용하기 위해 phpMyAdmin을 설치했다. phpMyAdmin은 웹에서 mysql db를 사용하기 상당히 훌륭한 기능을 제공한다. 쿼리는 물론이고, DB 관리, 서버 상태 점검 등 거의 모든 기능을 제공한다. 그런데, phpMyAdmin를 설치한 후 웹에서 접속해보니 무엇지 문제인지 아래와 같은 오류가 발생했다. phpMyAdmin - 오류 mysqli 확장기능이 설치되지 않았습니다. PHP의 설정을 확인하십시오. See our documentation for more information. phpinfo() 함수를 통해 mysqli가 설치되었는지 확인해 보았다. 위 이미지와 같이 MySQLi 항목이 보인다. 그래서 해당 모듈 설치에 문제가 없는 ..
MySQL 등의 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재는 같은 성격의 값을 한번의 쿼리로 추출할 수 있도록 돕는다. 예를 들어 Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용하면 한번의 쿼리로 간단하게 정보를 추출할 수 있다. Union을 사용할 때 주의할 점. - 대응하는 필드의 이름이 같아야 한다. 같지 않다면 AS 를 사용하여 같게 만든다. - 대응되는 각 필드의 타입이 같아야 한다. ■ 예제 테이블 정보 * Member 테이블 seq u_name u_email etc 1 개똥이 aa@aa.co.kr ....
Apache 302 error는 메뉴얼에 보면 Moved temporarily 이라고 되어 있다. 참 알기 어려운 암호같은 말... 한국말로 풀이해보면 임시로 옮겼다?? 웹서버의 요청에 문제가 있어서 임시 URL로 옮겼다는 것 같다. 오늘 아파치에 새로운 도메인을 셋팅하고 난 후 웹브라우저에서 확인해보니, 약 1분 동안 해당 웹페이지를 계속 찾다가 멈춰버리는 오류가 발생했다. 아파치의 access_log 파일을 확인해보니 위와 같이 302 오류가 주루~룩 뜨는 것을 확인할 수 있었다. 즉, 웹서버가 뭔가 하려고 했는데 되지 않아 계속 찾다가 멈춰버리는 것이었다. httpd.conf 파일의 내용 ServerAdmin info@xxxxx.com ServerName xxxxx.co.kr ServerAlias ..
리눅스 아파치 403 오류의 3가지 고려사항 리눅스 서버에서 아파치(Apache) 웹서버를 설치하여 사용하다보면 자주 등장하는 것이 403 Forbidden(Apache 403 Forbidden error) 에러다. 403 Forbidden 에러는 해당 파일이나 디렉터리에 접근 권한이 없는 경우 것으로 보안과 관련된 오류다. 디렉터리나 파일 권한, 그리고, 웹서버의 설정을 봐도 왜 403 에러가 나는 지 쉽게 알 수 없는 경우가 있다. 403 Forbidden error는 원인이 여러가지이고 찾기가 쉽지 않아 매번 한참 해메다가 겨우 해결하곤 한다. 그 해결 방법을 정리해 본다. 1. httpd.conf 의 권한 설정 실수인지 어쩐지는 모르지만 아래와 같이 설정 지시 부분에 "Deny from all"이..
같이 일하는 웹개발자에게 문자메시지 보내는 프로그램을 짜라고 했더니 며칠을 고민한다. 별것도 아닌데 며칠을 끙끙앓고 있길레, 뭣 때문이냐고 물으니 문제가 없는 웹페이지인데 한번 페지이를 부르면 무조건 리로드되어 2번이 실행된다는 것이다. 그럴리가 있냐고 소스를 보여달라고 했다. 소스는 아주간단했다.
MySQL DB를 사용하는 경우, 특별한 규칙이 없는 256Byte가 넘는 텍스트는 도리없이 TEXT를 사용한다. 만약 해당 필드를 검색해야 한다면? 테이블의 Rows가 얼마 안되면 그냥 한 테이블에 담는다. TEXT필드를 별도의 테이블로 떼어낸다. 하지만, Row가 수십만이 넘어간다면 어떻게 하더라도 TEXT필드를 검색하기란 여간 부담이 되지 않는다. 그렇다고 검색엔진과 같은 방식을 쓰기에는 배보다 배꼽이 더 크고... 최근에 모 프로젝트를 하면서 유사한 고민이 생겼다. - 데이터 Bytes : 20 ~ 1,000 - 최대 Rows : 10,000,000 - 검색 조건 : 새로 저장할 값이 이미 존재하는 지 해당 필드에서 검색 - View 조건 : 관리자 화면에서 저당된 데이터를 확인할 수 있어야 한다..
아주 유용하지만 엄청난 옵션에 입이 따~악 벌어지는 find 군! 몇가지 만 알면 수십줄의 코딩을 한줄로 끝낼 수도 있는 find의 옵션을 정리해 봅니다. 기본사항 1. * : 모든 것을 의미한다. 2. $ 와 같이 쉘에서 의미를 갖는 문자를 검색할 경우 앞에 "\"를 붙인다. 3. 단어를 검색할 경우 반드시 single quotation(')을 앞뒤에 붙여서 검색한다. 4. 각 옵션은 혼합하여 사용할 수 있다. 5. 숫자 옵션 +n : n 이상인 파일 검색 -n : n 이하인 파일 검색 n : 정확하게 n과 일치하는 파일 검색 파일명 검색 -name 예) 파일명에 "php"가 들어간 파일 검색 # find . -name '*php' 용량 검색 -size 예) 용량이 100KBytes 이상인 파일 검색 ..
작업 중인 모 사이트가 갑자기 다운되는 현상이 발생했다. 원인은 MySQL DB connect 숫가가 꽉 차서 연결이 안되서였다.(max_connections) 급하게 MySQL Daemon을 restart해서 다시 정상이 되기는 했지만 문제를 찾아야 했다. DB를 확인해 보니 1천만 row 가까운 테이블이 존재했고, 별다른 인덱스가 걸려있지 않았다. Slow Query Log와 해당 테이블을 사용하는 웹프로그램을 뒤져서 해당 테이블을 다른 테이블과 JOIN 하여 데이터를 추출하고 있다는 것을 알았다.... 웹프로그램을 짜다보면... '이 서비스가 얼마나 활성화되겠어? 조금 서비스하다가 말겠지..' 라는 안일한 생각과 게으름으로 쿼리를 대충 사용하는 경우가 종종 있다. 그런 경우 약간 만 동시접속자가 증..
어떤 블로그를 방문해서 댓글을 쓰려고 보면 박스 안에 그림이 있는 경우가 있다. 어떻게 넣었을까? 신기하네? Web2.0에 맞춰서 코딩이 되어 있기에 소스에서 댓글박스(textarea)를 찾기가 어려울 줄 알았다. 하지만 찾아보니까 쉽게 눈에 띄어서 내 블로그에 이미지를 넣었고 그 방법을 설명하려고 한다. 일단, 박스에 넣을 이미지를 구해야 한다. blog.bsmind.co.kr의 댓글입력 박스의 이미지는 어딘가에서 퍼온 이미지이며, 원저작자가 누구인지 몰라서 허락을 받지 못한 이미지이다. 텍스트큐브의 댓글입력 박스의 높이는 약 126px이며, 티스토리의 댓글입력 박스의 높이는 130px 이다. 높이는 각자의 블로그마다 다를 수 있다. 1. 텍스트큐브 관리자화면 -> 꾸미기 -> 스킨편집 화면으로 이동한..
리눅스나 유닉스에서 시간 처리할 때 흔하게 사용하는 것이 유닉스시간(Unixtime)이다. 대부분의 함수도 지원을 하고 불편함이 없이 사용하는 데 유독 DB에서는 자주 사용하지 않게 되서 꼭 필요할 때는 기억이 안난다.....-_-;; 1) Unixtime -> Date 형식(일반적인 시간)으로 변환 SELECT user_id, FROM_UNIXTIME(`regdate`,'%Y%m%d %H%i%s') FROM member : from_unixtime 이라는 MySQL 함수를 이용해서 입력받은 Unixtime 값을 일반적으로 사용하는 시간으로 변환한다. 이때 사용하는 "%" 값들은 PHP나 기타 프로그램에서 사용하는 시간 표현 문자와 동일하다. (PHP 의 date 함수 설명) 2) 현재 시간을 Unixt..
아주 훌륭한 에디터인 vi의 팁을 정리해 본다. 너무나 많은 기능이 있지만 사용하는 기능을 별로 되질 않아서 까먹고 못쓰는 기능이 아쉽다. 1. ^M삭제 vi로 어떤 파일을 열면 ^M 이라는 문자가 각 줄 끝에 붙어 있는 경우가 있다. 이것은 문자 치환 명령으로 간단하게 없앨 수 있다. ( ^M 은 Ctrl + v 을 누르고 M 을 입력하면 나타나는 기호이다. ) 문자 치환 명령 :%s/찾을문자/바꿀문자/g
다른 시스템과 연동을 하는 중에 흔히 실수하는 것이 여러가지 있다. 자신이 개발하는 문자셋과 연동할 시스템의 문자셋이 다른 것이 그 중 하나다. 당연히 다른 시스템과 문자셋이 다르면 깨져 보이기 때문에 iconv나 mbstring 등의 함수로 처리를 한다. 그런데도 깨진다. 그것은 값을 넘기는 과정에서 변환이 되지 않은 부분이 있던가 아니면 변환한 것을 다시 변환해서 그런 경우가 많다. 다른 시스템(특히 PG 연동 등)에서 내가 보낸 것을 찍어 보기가 어려워서 고민을 한다. 하지만, 최종적으로 값을 넘기는 최종 단계에서 화면에 출력을 해 보면 그것을 알 수 있다. 출력할때는 header함수를 이용해서 해당 페이지의 인코딩을 지정해 놓고 봐야 한다. 문자포맷을 변환할 때는 먼저 해당 문자가 어떤 언어포맷인..
0x00 ~0xFF, 즉 16진수를 말한다. 여기서 "0x" 를 제외한 나머지 2자리 문자가 의미를 갖는다. (다 아는 내용^^;) 타 시스템과 통신을 할 때 이 16진수 헥사코드를 이용하여 데이터를 주고 받는 경우가 많다. 얼마 전에 16진수로 값을 받아서 일부 몇byte를 다시 bit로 해석해야 하는 일이 생겼다. 후배에게 작업을 맡겼는데 어렵다고 해서 설명을 하다가 정리 해 보기로 했다. 소켓으로 날아 온 전문 : 000003e801e00000e995 (총 10 bytes) 각 byte 별 값의 정의 - 1,2 bytes : 장비명 ( 2진수 "11100000" PHP에서의 처리 $dec = hexdec("e0"); // 16진수를 10진수로 변환 $bin = decbin($dec); // 10진수..
개발을 하거나 시스템 관리를 하다 보면 특정 디렉터리의 모든 파일 내의 특정 문자를 다른 문자로 치환해야 하는 일이 종종 생긴다. 여러가지 방법으로 치환할 수 있겠지만, 나는 find 와 perl 을 이용하여 이 방법을 해결하곤 하였다. 단, 이 명령은 오류가 없는 이상 화면에 출력하지 않으며, 현재 위치를 잘못 지정하면 큰 낭패를 볼 수 있으므로 주의해야 한다. 아래에서 볼 수 있듯이 perl을 사용하며 "찾을 문자열"이나 "바꿀 문자열"부분에는 정규표현식을 시용할 수 있다. 기본 명령 # find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; - find . : 현재 위치와 그 하위 디렉터리의 모든 내용을 출력한다. - -exec : 출력하는 각 줄의 내용을 그 다음 ..
Linux(Unix) 나 윈도우 등의 시간은 아주 조금 씩 느려지거나 빨라진다. 이를 표준시간과 맞춰 주기 위해서 타임서버를 이용한 동기화를 한다. 우리나라 타임서버 목록은 ... 1. NTP Primary Time Server(Stratum 1 Server) - time.kriss.re.kr - time2.kriss.re.kr - time.bora.net - ntp.kornet.net - ntp.postech.ac.kr - ... 2. NTP Secondary Time Server(Stratum 2 Server) - ntp.ewha.net - ticktock.ewha.net - time.bora.net - ... Linux(Unix)에서의 시간 동기화 1. rdate 를 이용한 시간 동기화 * rdat..
항상 사용하지만, 몇개 밖에는 잘 사용하지를 못한다. 이렇게 적어두어야 까먹지 않지^^ 1. bash의 단축키 정리 ctrl-a : 맨 왼쪽으로 이동 ctrl-b : 한글자씩 왼쪽으로 이동 ctrl-c : 한줄 취소 ctrl-d : 한글자씩 오른쪽 글자 지우기 ctrl-e : 맨 오른쪽으로 이동 ctrl-f : 한글자씩 오른쪽으로 이동 ctrl-g : ctrl-h : 한글자씩 왼쪽 글자 지우기 ctrl-i : ctrl-j : 엔터와 같다. ctrl-k : 현재 커서의 오른쪽에 있는 문자들 삭제 ctrl-l : 화면 clear ctrl-m : 현재줄 복사한 후 엔터 (secureCRT 명령어) ctrl-n : 복사한 내용 취소 ctrl-o : 엔터, 그리고 줄에 있던 내용을 다시 표시(복사는 아님) ctr..
별 스럽지 않게 생각하는 것들이 보통 생각이 안난다. Ajax에서 한글 깨지는 것을 여러번 보았건 만.. -_-;; 1. Ajax를 이용해 PHP에서 한글로 javascript에 값을 던지는 경우에 한글이 깨진다. PHP -> javascript 인 경우 www.itpass.co.kr 의 생방송특강창에서 javascript로 1분마다 한번씩 Live인지를 체크하기 위해서 PHP에 물어본다. 요청을 받은 PHP는 다시 javascript에게 결과 값을 던저준다. 이 때 Live이면 한글 강의 제목을 던져준다. - 던지는 PHP에서 값 처리 : rawurlencode(iconv("CP949", "UTF-8", $return_str)) - 받는 Javascript에서 값 처리 : decodeURICompone..
출처 : http://www.phpschool.com/bbs2/inc_view.html?id=9464&code=tnt2 [MYSQL] LIKE vs INSTR() 0. 배경 1. 영문 검색어 테스트 1-1. 앞 부분 검색 1-2. 중간 부분 검색 1-3. 끝 부분 검색 2. 한글 검색어 테스트 2-1. 앞 부분 검색 2-2. 중간 부분 검색 2-3. 끝 부분 검색 3. 결과 비교(표) 3-1. 영문 검색어 결과 3-2. 한글 검색어 결과 4. 결론 5. 후기 --------------------------------------- 0. 배경 TRUE 인 경우만 테스트한 경우임. ... cols LIKE '%한글검색어%' ... BINARY cols LIKE '%한글검색어%' 웹 게시판에서, 후자의 경우 속..