Loading...
홈 › 블로그

IT 개발 블로그 — REDINFO

MySQL ERROR 1045: Access denied for user - PHP PDO/MySQLi 연결 인증 실패 완벽 해결

MySQL에 접속할 때 가장 흔하게 마주치는 에러가 ERROR 1045다. 데이터베이스는 설치했는데 갑자기 connection이 끊기거나, 배포 후 운영 서버에서만 접속이 안 되거나, 비밀번호를 분명히 맞게 입력했는데도 denied 된다는 메시지가 떠서 당황해한다. 다만 대부분의 개발자들은 에러 메시지만 보고 비밀번호 한두 글자를 고쳐보다가, 근본 원인을 ···

1 0
Linux SSH 22번 포트 무차별 대입 공격 차단 - 포트 변경 및 UFW 방화벽 설정 완벽 가이드

서버를 생성하고 공인 IP를 할당받은 지 몇 분 지나지도 않아 /var/log/auth.log 파일에 무수히 찍히는 SSH 접속 시도 로그를 본 적이 있을 것이다. 세상의 수많은 자동화 스캐너들이 22번 포트를 타깃으로 무차별 대입 공격(Brute Force Attack)을 퍼붓기 때문이다. 다만 대다수의 개발자들은 SSH 기본 포트를 22번 그대로 방치한···

0 0
MySQL ERROR 1366: Incorrect string value for column - UTF-8 인코딩 오류 완벽 해결

MySQL에 한글이나 이모지를 저장하다가 갑자기 '1366 Incorrect string value for column' 에러가 터진 경험이 있을까. 대부분의 개발자들은 이 에러를 만나면 인코딩 설정이 뭔가 이상하다는 건 알지만, 정확히 어디서 뭘 잘못 설정했는지는 헷갈린다. 데이터베이스 레벨인지, 테이블 레벨인지, 컬럼 레벨인지, 아니면 연결 설정인지 말···

1 0
PHP PDO Prepared Statement IN 절 바인딩 실패 - 동적 플레이스홀더 생성으로 SQL 인젝션 방어 및 쿼리 오류 완벽 해결

PHP로 데이터베이스 연동 개발을 하다가 WHERE id IN (:ids) 처럼 배열 파라미터를 통째로 바인딩해보았는가? 분명 배열에 여러 개의 PK 값을 넣어서 넘겼는데, 쿼리 결과에는 맨 첫 번째 아이템 하나만 조회되거나 심지어 SQL 구문 에러가 발생하며 멈춰 버리는 상황을 겪어봤을 것이다.다만 대부분의 개발자들은 왜 이런 현상이 발생하는지 정확한 원···

4 0
MySQL ERROR 1251: Client does not support authentication protocol requested by server 완벽 해결

MySQL 8.0으로 업그레이드하거나 서버를 변경한 후 PHP에서 데이터베이스 연결을 시도하면 갑자기 'Client does not support authentication protocol' 에러가 떨어진다. 다만 정확히 뭐가 문제인지, 왜 갑자기 안 되는지 모르는 개발자가 대부분이다. 이번에는 MySQL 8.0의 기본 인증 방식 변화가 뭔지, 왜 이 에러···

14 0
MySQL ERROR 1064: You have an error in your SQL syntax - 구문 오류 완벽 해결 가이드

SQL 쿼리를 실행할 때 갑자기 ERROR 1064가 튀어나오면 당황스럽다. 특히 복잡한 JOIN이나 서브쿼리를 작성했을 때는 어디가 문제인지 찾기도 힘들다. 다만 대부분의 개발자들은 에러 메시지의 "near ~" 부분을 무시하고, 스택오버플로우에서 임의로 찾은 쿼리를 복사 붙여넣기만 한다. 이번에는 ERROR 1064가 정확히 뭔지, 왜 발생하는지, 그리···

2,416 0
MySQL ERROR 1205 Lock wait timeout exceeded 원인 분석과 트랜잭션 교착 상태 완벽 해결

백엔드 서비스를 운영하다가 대량 데이터 업데이트나 트랜잭션 요청이 몰릴 때 ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 에러를 마주친 적이 있을 것이다. 대부분 단순 데이터베이스 과부하로 치부하고 넘어가지만, 정확한 발생 원인과 트랜잭션 잠금 매커니즘을 모르면 동일한 ···

16 0
PHP 파일 시스템 함수 is_file()과 file_exists() 차이 - 파일 존재 여부 확인 완벽 가이드

파일 업로드 처리나 서버 리소스 관리 시 특정 파일이 실제로 존재하는지 먼저 확인해야 한다. 대부분의 개발자는 file_exists()나 is_file()을 아무 생각 없이 쓰거나, 둘의 차이를 정확히 모르고 상황에 맞지 않는 함수를 선택해서 버그를 만든다. 심하면 디렉토리인데 is_file()로 체크해서 false가 나오는 게 당연한데 마치 파일이 없다고···

15 0
PHP preg_match() 정규표현식 매칭 실패 - 메타문자 이스케이프와 구분자 오류 완벽 해결

정규표현식으로 이메일이나 전화번호, URL을 검증하려고 preg_match()를 썼는데 자꾸 false가 나온다는 경험을 해본 개발자가 많을 것이다. 코드는 문법적으로 틀린 게 없는데 패턴이 매칭되지 않는 현상은 대부분 메타문자 이스케이프 누락이나 구분자 선택 오류 때문이다. 다만 많은 개발자들이 정규표현식의 문법과 PHP 문자열 이스케이프를 헷갈려서 문제···

28 0
PHP 세션 탈취 위험 - session_regenerate_id()와 쿠키 보안 옵션으로 완벽 방어하기

웹 애플리케이션을 개발하면서 세션(Session) 기반 로그인을 구현해본 경험은 누구나 있을 것이다. 사용자 인증 상태를 유지하기 위해 필수적인 세션이지만, 기본 설정 그대로 사용하는 개발자가 태반이다. 다만 세션 ID가 네트워크 상에서 유출되거나 탈취당했을 때 발생하는 보안 사고의 위험성을 제대로 아는 경우는 의외로 드물다.실무에서 세션 ID를 탈취하는 ···

21 0
PHP mysql_fetch_array() 함수 폐기 - mysqli_fetch_assoc()과 PDO fetch()로 완벽 마이그레이션

PHP 코드를 유지보수하던 중 경고 메시지를 본 적이 있나. 'Call to undefined function mysql_fetch_array()'라는 메시지가 나타나면서 코드가 작동하지 않는 상황을 말이다. 사실 이건 단순한 버그가 아니라 PHP 5.5.0부터 mysql 확장이 공식 폐기되고, PHP 7.0.0부터는 완전히 제거된 결과다. 다만 많은 개발···

21 0
MySQL ERROR 1055 (42000) 원인 분석과 ONLY_FULL_GROUP_BY 설정 완벽 해결 가이드

MySQL 버전을 5.7 이상으로 업그레이드하거나 서버를 이전한 직후, 기존에 잘 동작하던 SQL 쿼리에서 'ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause' 에러를 만난 적이 있을 것이다. 소스 코드를 건드리지도 않았는데 갑자기 데이터베이스 조회 기능이 터지는 바람에 당···

28 0
PHP Fatal error: Out of memory - 메모리 누수 원인 분석과 ini_set으로 완벽 해결

서버에서 갑자기 PHP 스크립트가 죽어버렸고, 로그에 'Fatal error: Allowed memory size of X bytes exhausted'라는 메시지가 남아있다면 메모리 고갈 문제를 겪고 있는 것이다. 다만 대부분의 개발자들은 memory_limit을 무작정 늘리기만 하고, 정작 왜 메모리가 낭비되는지, 어디서부터 막아야 하는지 모른 채 응급···

30 0
MySQL ERROR 1071: Specified key was too long - max_key_length 초과 완벽 해결

마이그레이션이나 테이블 생성 시 갑자기 나타나는 'Specified key was too long' 에러를 경험해봤을까? 인덱스나 기본키를 설정하려는데 컬럼 길이가 너무 길다며 생성이 거부되는 상황이다. 다만 대부분의 개발자들은 이 제한이 정확히 어디서 비롯되었는지, 왜 필요한지, 어떻게 해결해야 하는지 모른 채 컬럼 길이를 무작정 줄이거나 인덱스를 포기해···

25 0
MySQL ERROR 1062: Duplicate entry 원인 분석과 ON DUPLICATE KEY UPDATE 완벽 해결

데이터베이스에 신규 회원 정보나 주문 데이터를 삽입할 때 무작위로 발생되는 MySQL ERROR 1062 (23000): Duplicate entry 에러를 마주한 경험이 있을 것이다.시스템이 정상 동작하는 것처럼 보이다가도 동시 요청이 몰리는 이벤트 시점이나 대량 처리 작업 중에 갑자기 에러가 터져 서버 에러 로그를 더럽히곤 한다.다만 정확한 발생 원인이···

33 0
MySQL 8.0 caching_sha2_password 접속 오류 - PHP PDO 연결 실패 완벽 해결

MySQL 5.7에서 8.0으로 버전을 올려서 최신 DB 환경을 구축했거나 Docker로 MySQL 인스턴스를 새로 띄운 뒤 PHP로 접속을 시도하다가 SQLSTATE[HY000] [2054] 에러를 마주친 적이 있을 것이다. DB 서버는 올바르게 동작하고 접속 정보도 분명 정확한데 PHP 스크립트를 실행하는 즉시 커넥션이 튕겨나간다.다만 정확한 원인이나 ···

25 0
PHP 웹 서비스 CSRF 공격 취약점 - 세션 기반 토큰 생성 및 검증 알고리즘 완벽 구현

사용자가 로그인한 상태에서 나도 모르게 비밀번호가 변경되거나 결제 요청이 승인되는 아찔한 보안 사고를 경험해봤을 것이다. 웹 서비스를 개발하다 보면 인증된 사용자의 권한을 악용하는 CSRF(Cross-Site Request Forgery) 공격을 쉽게 지나치는 경우가 많다. 다만 대부분의 개발자들은 CSRF 공격이 정확히 어떤 원리로 동작하는지 모르거나 단···

38 0
MySQL ERROR 1040: Too many connections 원인 분석과 max_connections 설정 최적화 완벽 가이드

서비스 마케팅 이벤트나 순간적인 트래픽 급증 시 갑자기 웹사이트 접속이 차단되면서 SQLSTATE[HY000] [1040] Too many connections 에러 화면이 뜨는 현상을 경험해봤을 것이다. 데이터베이스가 신규 요청을 거부하는 순간 백엔드 API와 웹 애플리케이션 전체가 즉시 마비된다.다만 대부분의 개발자들은 이 에러를 마주했을 때 정확한 메···

33 0
PHP-FPM 서버 멈춤 해결 - pm.max_children 설정과 메모리 최적화 완벽 가이드

트래픽이 급증할 때 웹 서버가 갑자기 멈추거나 502 Bad Gateway 에러를 뱉으며 먹통이 되는 현상을 경험해봤을 것이다.다만 대부분의 개발자들은 Nginx 설정만 변경하거나 서버 스펙을 무작정 올릴 뿐, 원인이 PHP-FPM 프로세스 관리자에 있다는 사실을 모르는 경우가 많다.이번에는 PHP-FPM의 pm 설정이 정확히 무엇인지, 서비스 메모리에 맞···

35 0
PHP filter_var() 유효성 검증 완벽 가이드 - 이메일/URL/IP 검증부터 실무 활용까지

사용자 입력 데이터를 받을 때마다 직접 정규표현식을 작성하고 있지는 않을까. 많은 개발자들이 각 데이터 타입마다 일일이 preg_match()를 짜거나, 검증 로직을 중복해서 만든다. 다만 PHP에는 이미 내장된 filter_var() 함수가 있어서 이메일, URL, IP, 정수, 실수 등 대부분의 타입을 한 줄로 검증할 수 있다는 사실을 모르는 경우가 많···

34 0
REDINFO Since 2014
webmaster@redinfo.co.kr
Copyright © Redinfo All Rights Reserved