SQL INJECTION (SQL 인젝션 방지)
·
SQL 정리
SQL INJECTION이란?SQL 인젝션(SQL Injection)웹 애플리케이션에서 사용자 입력값을 제대로 검증하지 않고 SQL 쿼리에 포함시킬 때 발생하는 보안 취약점입니다. 공격자는 이를 악용해 데이터베이스를 임의로 조작하거나 민감한 정보를 탈취할 수 있습니다. -- 로그인 쿼리 예시SELECT * FROM users WHERE username = 'admin' AND password = '1234'; 위 쿼리가 아래처럼 사용자 입력을 문자열로 그대로 받는 경우 username = 'admin' -- 'password = '아무거나' 그럼 최종 쿼리는 이렇게 변합니다 SELECT * FROM users WHERE username = 'admin' -- ' AND password = '아무거나'; ..
DB 커넥션 수 최적화 전략
·
퍼블엘
만일 다수의 DB 커넥션이 연결되어 있어 리소스의 비용이 낭비되고 있을때 어떻게 해야 커넥션 수를 줄여 리소스 비용을 줄일수 있을까 [Access Phase]조건 검증 + Rate Limit (Shared dict 활용)조건 검증 : JWT 검증과도 요청시 바로 차단 (return 429)shared dict late limiter를 통해 과도한 접속 제한과도하게 접속한 유저는 일정시간동안 접속 제한DB 커넥션 연결 전에 최대한 fail fast 처리fail fast 처리rate limiterheader 검사JWT Signature Validation [Content Phase]DB 연결 (필요할 때만)커넥션 풀 사용 (keepalive)커넥션 풀을 사용하면 미리 일정 수의 DB 연결을 만들어두고, 요청..
openresty DB 커넥션 연결 최적화
·
openresty
데이터베이스(DB) 연결은 단순한 작업처럼 보일 수 있지만, 실제로는 많은 시스템 자원(CPU, 메모리, 네트워크 등)을 소비하는 비용이 큰 작업이다. 만약 애플리케이션이 매 요청마다 DB에 새롭게 연결하고 해제한다면, 불필요한 리소스 낭비로 이어질 수 있다.특히 다수의 사용자가 동시에 요청을 보내는 환경에서는, 반복적인 연결/해제 작업이 전체 시스템의 성능 저하와 병목 현상을 유발할 수 있다. 또한 데이터베이스 자체도 동시에 처리할 수 있는 연결 수에 한계가 있기 때문에, 무분별한 연결 시도는 DB 다운이나 서비스 지연을 초래할 수 있다.이러한 문제를 방지하고 효율적인 리소스 관리를 위해서는, DB 연결을 보다 효율적으로 관리할 수 있는 전략이 필요하다. 가장 대표적인 방법으로는 커넥션 풀(Connec..
서버에서 적합한 openresty의 phase 구조
·
openresty
Nginx는 HTTP 요청을 처리할 때 여러 개의 처리 단계(phase)를 순차적으로 거칩니다. 각 phase에서 특정 handler 또는 module이 실행됩니다. OpenResty는 각 phase에 Lua 코드를 삽입할 수 있게 해주기 때문에, 이 구조를 이해하면 어떤 타이밍에 어떤 작업을 수행할 수 있는지 알 수 있습니다.  https://openresty-reference.readthedocs.io/en/latest/Directives/openresty의 레퍼런스에서 참고한 자료 openresty에서 기본적으로 권장하는 phase 구조이다.1. Initial Phase설명: OpenResty에는 명시적인 initial phase는 없지만, 보통 초기화 작업은 init_by_lua* 나 init_w..
openresty postgre연동 후 GET Method 데이터 조회
·
openresty
openresty란?"Nginx + Lua 스크립팅 + 유틸리티 라이브러리 모음" 구성에는 OpenResty = Nginx + LuaJIT + ngx_lua 모듈 + 여러 Lua 라이브러리 패키징이 있다. 특징으로 보면Nginx 내부에 Lua 스크립트 실행 가능MySQL, PostgreSQL, Redis, HTTP Client, JSON 처리 등 Lua 기반 모듈 내장Nginx 설정파일 안에서 Lua 코드 작성 가능고성능 API 서버, 인증서버, 미들웨어 서버 등 개발에 유리 openresty는 docker를 통해 서버를 구동하였습니다. DB는 postgreSQL사용 (openresty안에 nginx로 서버를 구동시켜 openrety가 구동되게 한다.) docker-compose.ymlservices: ..
Docker credential 문제
·
Docker
필자는 openresty를 도커로 실행하기 위해 docker-compose up 이라는 명령어를 사용했으나 인증 문제로 인해 명령어가 거절당했다.  해당 docker 링크에 접속하여 confimation code를 입력하고 docker login 해당 명령어를 입력했으나 역시 같은 이유로 거부되었다. 하지만~/.docker/config.json 해당 경로로 가서 "credsStore": "desktop" 부분을 지우면 docker-credential-desktop을 사용하지 않도록 설정하고, 자격 증명을 수동으로 입력하고 Docker CLI에서 직접 로그인이 가능하다 하지만 "credsStore": "desktop"을 지우게 되면 보안 이슈가 발생 가능성이 있기에 정 안될때 최후의 수단으로 추천한다.
Signed URL
·
AWS
AWS S3의 Signed URL은 AWS S3 버킷에 저장된 객체에 대해 제한된 시간 동안 인증된 접근 권한을 부여하는 URL입니다. 보통 S3 버킷의 객체는 기본적으로 비공개(private)로 설정되어 있기 때문에 특정 사용자가 애플리캐이션에게만 접근 권한을 주기 위해 Signed URL을 사용합니다. 주요 특징임시 접근 권한Signed URL은 생성 시 지정한 만료 시간(expiration time) 이후에는 사용할 수 없으므로 일시적인 접근 권한을 부여할 때 유용합니다. 보안성URL에 포함된 서명(signature)은 요청이 변경되지 않았음을 보장하며, AWS 자격 증명을 사용해 생성되기 때문에 외부에서 위변조하기 어렵습니다. 다양한 활용 사례파일 다운로드: 사용자에게 파일 다운로드 권한을 임시로..
유저가 다운받은 파일 조회한 것을 클라이언트(셀러)가 조회할 때의 flow chart
·
퍼블엘
유저가 웹에서 게시된 파일(PDF, VOD, 등등)을 다운 받았을때 셀러가 유저가 어떤 파일을 다운받았고 얼마나(채널, 컨텐츠, 유저) 다운 받았는지 알기 위해 해당 api를 개발하게 되었다. Records/users    target_id: 다운로드 받은 유저의 고유한 id target_id 기준으로 조회type = daliy :  유저별로 다운받은 기록을 일별로 조회한다.type = monthly : 유저별로 다운받은 기록을 월별로 조회한다.type = combined : 유저별로 다운받은 기록을 일별, 월별로 조회한다.컨텐츠를 다운로드 한 유저가 있어야 한다. 없을 시 -> 404 NOT FOUND Records   channel_id : 셀러가 생성한 채널의 고유한 id (여기서 채널은 샐러가 생..
Niginx란?(openresty 사용)
·
Nginx
Nginx(엔진엑스)는 고성능 웹 서버 소프트웨어이자 리버스 프록시, 로드 밸런서, HTTP 캐시 등 다양한 역할을 수행할 수 있는 오픈 소스 솔루션이다. 높은 성능과 효율성:Nginx는 이벤트 기반 아키텍처를 사용하여 다수의 동시 연결을 효율적으로 처리할 수 있습니다. 이를 통해 높은 트래픽 상황에서도 빠른 응답 속도를 유지할 수 있다.낮은 메모리 사용량:동시 접속 수가 많아져도 메모리 사용량이 적어 서버 자원을 효율적으로 사용할 수 있다.리버스 프록시 및 로드 밸런싱:웹 애플리케이션의 트래픽을 여러 서버로 분산시키거나, 클라이언트의 요청을 백엔드 서버로 전달하는 리버스 프록시 기능을 제공합니다. 이를 통해 부하 분산과 장애 조치(failover)를 구현할 수 있다.정적 파일 서빙:정적 콘텐츠(HTML..
Spring Boot 핵심 개념
·
Spring
1. 자동 구성(Auto-Configuration)클래스패스 스캔: Spring Boot는 애플리케이션 실행 시 클래스패스에 있는 라이브러리와 설정 파일을 스캔한다.조건부 설정: 특정 라이브러리가 존재하거나, 특정 빈(bean)이 없는 경우에만 자동으로 설정을 적용한다. 2. 의존성 주입 (Dependency Injection)와 제어의 역전 (IoC)의존성 관리: 스프링 프레임워크의 핵심 개념인 DI와 IoC를 통해 애플리케이션 내의 객체 간의 의존성을 스프링 컨테이너가 관리한다.유연성 및 테스트 용이성: 객체들이 직접 생성되기보다는 컨테이너에 의해 주입되므로, 코드의 결합도를 낮추고, 테스트 및 유지보수가 용이해진다. 3. 스타터 의존성 (Starter Dependencies)편리한 의존성 관리: s..