반응형

Programming 56

리소스 직접 접근 차단하고 소스에서만 허용하기 (PHP + .htaccess)

출발점 이 글을 작성한 이유는 www.example.com/file/font.ttf 에 폰트가 저장되어 있고, 해당 url로 접근하면 폰트를 직접 접근하여 탈취할 수 있기 때문에 이를 방지하고 싶었습니다. 소스에서는 접근이 가능해야 하고, 외부에서 url을 통해 직접 접근하는 것은 막아야 했습니다. .htaccess 우선 직접 접근을 막는 방법은 간단합니다. 디렉토리가 file 이면 해당 디렉토리에 .htaccess에 아래 코드를 추가합니다. 만약 .htaccess가 없다면 새로 만들어서 추가합니다. Order Allow,Deny Deny from all 차단하고자 하는 확장자를 모두 추가합니다. PHP 이제 file을 읽어올 PHP소스를 작성합니다. 예를 들어 fileLoader.php 로 작성했습니다..

Programming/PHP 2023.11.23

DB에 저장된 JSON 데이터의 키 값을 쿼리로 추출하기

추출 예시 DB에 JSON 형식을 문자열로 그대로 저장했을 경우 이것을 쿼리로 추출하는 방법입니다. { "filename":"test.png", "buttons":[ {"name":"test_name","url":"test_url"}, {"name":"test_name2","url":"test_url2"} ] }만약 이렇게 저장된 JSON 형식의 문자열 데이터가 있을 때, "filename"의 값인 "test.png" 만 가져오는 것이 목표입니다. 예시 DBMS는 MySQL입니다. 추출 쿼리 MySQL 5.7 버전 이상 (MariaDB 10.3 이상) MySQL 5.7 버전 이상부터 사용 가능하며, 내장 함수 중 하나인 JSON_EXTRACT()를 사용할 수 있습니다. JSON 데이터가 저장된 컬럼에서 ..

Connection Pool 사용 시 release() 코드 위치의 중요성

관리하고 있는 채팅 시스템이 있는데 데이터베이스 연결 시 Connection Pool을 사용하고 있습니다. 코드는 커넥션을 얻고, 데이터베이스 결과값을 가져온 후에 다시 커넥션을 반환하는 과정으로 작성되어 있습니다. 커넥션 반환 문제 그러던 중 커넥션 풀을 사용할 때 문제가 생겼습니다. 커넥션이 계속 증가하고 있었는데, 그러다보니 커넥션 수 제한에 걸려서 서버 오류가 발생하기도 했습니다. 이 문제를 해결하기 위해 pool 생성할 때 connectionLimit을 크게 올려보기도 했지만 채팅 서버에서는 오류가 나지 않지만, DB서버 과부하로 처리가 매우 느려졌습니다. 마찬가지로 max_connections, wait_timeout 도 변경했지만 사용량이 많을 때는 속도가 상당히 떨어졌습니다. 그래서 이런 ..

Programming/Node.js 2023.09.22

Python Web Scraping :: PS Plus 게임 카탈로그 만료일 추출하기

목적 PS Plus 게임 카탈로그는 영구적으로 등록되는 게임이 아니다. 위 이미지에 ‘2023/2/22 오후…’ 처럼 만료일이 정해져 있는데, 만료일은 3개월 이내가 되면 사이트에 노출되어 확인할 수 있다. 그러나 만료일이 예정된 것만 따로 찾아볼 수 없으며, 리스트에서 직접 하나씩 눌러서 확인해야 하기 때문에 어떤 게임이 만료되는지 확인하기 매우매우매우 귀찮다. (약 250~300개의 게임을 모두 눌러서 확인해야 한다…) 그래서 웹스크래핑으로 모든 게임들의 목록과 PS4/PS5 지원 여부도 추출하고, 그 중에서 만료 예정일도 함께 추출하는 것이 목적이다. 기획 웹 스크래핑으로 PS Store 게임 카탈로그(https://store.playstation.com/ko-kr/category/05a2d027-..

Programming/Python 2023.01.09

JQuery :: paste or cut event to textarea in mobile :: 모바일 환경의 textarea 에서 잘라내기, 붙여넣기 이벤트 감지

textarea에서 keyup으로 입력한 값의 이벤트를 감지하고 후처리하는 기능이 있는데, 붙여넣기 또는 잘라내기의 경우는 keyup의 이벤트를 감지하지 못했다. 문제의 코드 $(document).on("keyup", "#contents", function(){ // event } keyup은 모바일에서 자판으로 입력하는 것들은 감지했지만 붙여넣기, 잘라내기 등의 이벤트는 감지하지 못 해서 원하는 기능이 제대로 작동하지 않았다. 해결한 코드 $(document).on("input", "#contents", function () { // event } input은 모든 변경내역을 감지했으며 해당 코드로 해결할 수 있었다.

MySQL/MariaDB :: 특정 날짜 사이의 년,월,주,일 Group By (with PHP)

특정 날짜 사이의 년,월,일 Group By 하는 포스팅은 꽤 많았지만, 특정 범위의 날짜만 구하는 것이 아니라, 넓은 범위의 날짜를 구한 후 Group By 하는 방식으로 되어 있었다. 나는 정확히 특정 범위의 날짜만 구해서 처리속도도 최소화 하고 싶었다. 기존에 사용했던 코드 select stat_date from ( select adddate('[시작날짜]',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) stat_date from (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 u..

MySQL/MariaDB :: 단방향, 양방향 이중화 (Replication)

데이터베이스 이중화에 대한 내용 2대 이상의 DBMS를 나눠서 데이터를 저장한다. 삽입, 수정, 삭제 모두 복제할 수 있으며, 함수까지도 복제가 가능하다. 부분적으로 복제하는 것도 가능하다. CentOS 7, mysql Ver 15.1 Distrib 10.3.37-MariaDB 데이터베이스 양방향 이중화 my.cnf 설정 1번 서버 my.cnf ... [mysqld] server-id=1 log-bin=binlog binlog_format=mixed sync_binlog=1 binlog_cache_size=2M max_binlog_size=512M expire_logs_days=7 log-bin-trust-function-creators=1 ... 2번 서버 my.cnf ... [mysqld] serve..

JavaScript / Vanilla JS :: input file 이미지 미리보기, 삭제 :: image preview and remove

input file 로 이미지 업로드를 하는 과정에서의 이미지 미리보기, 이미지 삭제 구현입니다. input file multiple 은 아래 글을 참고하세요. (준비중) html 삭제 input file 의 이름은 #_img 이고 각 class는 #-img-section, #-img-preview, #-img-remove 로 정하면 됩니다. #에 원하는 네이밍을 부여하시면 됩니다. 이 부분이 아래에서 쓰일 tag 명칭이 됩니다. src="이미지경로" 에 이미지가 있다면 src="이미지경로" 에 이미지가 없다면 #을 넣어주세요. 이렇게 나오도록 javascript 를 작성합니다. 에러 처리는 onerror로 해도 되고, js에서 이벤트 error를 감지해서 처리해도 됩니다. javascript js 코드..

Python :: virtual enviroment setting for windows :: 윈도우에서 가상환경 세팅하기

Python :: virtual enviroment setting for windows :: 윈도우에서 가상환경 세팅하기 venv 🔥venv는 Python 가상환경 관리를 해주는 내장 모듈입니다. 💣단, Python3에서 내장된 모듈로 Python2에서는 사용이 불가능합니다. Python2에서는 virtualenv라는 외부 패키지를 사용해야 합니다. 가상환경 생성 및 연결 #cd [프로젝트 경로] cd C:\venv-test #python -m [가상환경 이름] python -m venv venv-test ###다음은 명령 도구에 맞게 실행하세요.### #[가상환경 이름]\Scripts\activate.bat - cmd .\venv-test\Scripts\activate.bat #[가상환경 이름]\Scr..

Programming/Python 2022.09.14

Python :: virtualenv setting with homebrew for macOS M1 :: 맥에서 homebrew로 가상환경 설정하기

macOS M1 환경에서 homebrew를 활용해 Python을 설치하고, pyenv를 활용해 가상환경을 만들고, autoenv를 활용해 각 프로젝트별로 가상환경을 자동으로 관리합니다. 만약 homebrew가 설치되어 있지 않다면 MacBook M1 Homebrew Install를 참고하세요. pyenv install pyenv brew install pyenv homebrew로 pyenv를 설치합니다. change python version echo 'eval "$(pyenv init --path)"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc pyenv로 python의 global version을 바꾸기 위해서 환경 설..

Programming/Python 2022.09.10
반응형