분류 전체보기31 [Security] SQL 인젝션 SQL 인젝션이란?사용자 입력값을 조작하여 데이터베이스를 공격하는 해킹 기법 SQL 인젝션(SQL Injection)은 웹 애플리케이션이 사용자 입력의 유효성을 제대로 검사하지 않을 때 발생하는 보안 취약점이다. 해커는 악의적인 SQL 명령어를 입력창에 삽입하여 데이터베이스를 마음대로 조작할 수 있다.SQL 인젝션의 위험성데이터베이스 정보 유출(사용자 정보, 비밀번호 등)데이터 조작 및 삭제(전체 데이터 손실 가능)관리자 권한 탈취(시스템 완전 장악)예시예를 들어 로그인 검증 시 해당 코드를 사용한다고 가정해보자// 취약 코드public ResponseEntity login(String username, String password) { String sql = "SELECT * FROM users WHE.. 2026. 3. 13. JWT 로그인과 보안 전략 왜 세션 대신 JWT인가?프로젝트 초기, 로그인 방식을 두고 세션과 JWT 중 고민을 했었는데 결론적으로 JWT 방식을 선택했다. 가장 큰 이유는 서버 리소스 효율성 때문이었다. 우리 프로젝트는 EC2 하나로 구동되기 때문에 세션 방식을 사용한다면 동시 접속자가 늘어날 수록 서버 메모리에 부하가 갈 수 있다고 판단했다. 따라서 상태를 서버에 저장하지 않는 JWT 방식이 우리 환경에 더 적합하다고 생각했다. 토큰 저장소의 분리JWT의 약점은 탈취되었을 때 대처가 어렵다는 점이다. 이를 보완하기 위해 Access Token과 Refresh Token으로 분리하고, 저장 위치를 다르게 가져갔다. Access Token : 클라이언트에서 화면 렌더링을 위해 토큰안에 userId같은 값을 추출해서 사용하기 때문.. 2026. 1. 23. Pub/Sub 패턴 Redis 스터디 중에 Pub/Sub이라는 메시징 패턴이 나왔다.생각보다 여러 곳에서 쓰이는 중요한 개념이라서 제대로 정리해보려고 한다.Pub/Sub이란?Pub/Sub은 Publish/Subscribe의 약자로, 발행-구독 패턴을 의미한다.쉽게 말하면 유튜브 구독 시스템과 비슷하다:Publisher (발행자): 유튜버가 영상을 올린다Channel (채널): 유튜브 채널Subscriber (구독자): 구독자가 알림을 받는다핵심은 발행자와 구독자가 서로를 모른다는 것이다. 유튜버는 누가 구독하는지 일일이 알 필요 없고, 구독자는 그냥 채널만 구독하면 된다.왜 필요한가?강한 결합의 문제일반적인 방식은 A가 B에게 직접 메시지를 보낸다:A → B 문제A는 B의 존재를 알아야 함B가 추가되거나 삭제되면 A의 코드.. 2026. 1. 1. 회원탈퇴 - Soft Delete 배경프로젝트의 Api 구현이 거의 마무리될 시점에 회원탈퇴 기능을 작업하게 되었다. 회원 탈퇴 기능은 User 테이블 뿐만 아니라 Order, Cart, Chat 등 여러 도메인의 로직을 건드려야하기 때문에 코드가 자주 바뀔수 있는 초반보다 기능이 안정화된 시점에 구현하는 것이 제일 적합하다고 판단했다. 문제처음에 단순히 관련 데이터들만 삭제하면 된다고 생각했다. 하지만 ERD를 다시 살펴보니 여러 테이블들이 엮여있기 때문에 함부로 데이터를 삭제해버리면 관련된 기능들이 동작하지 않거나 심각한 문제가 생길 수도 있다고 판단했다. 전략그래서 회원탈퇴 시 처리되는 데이터들을 두 가지 종류로 우선 분류해봤다.1. 삭제해야 할 데이터 (Hard Delete) : 장바구니, 친구 관계 등2. 보존해야 할 데이터 (.. 2025. 12. 26. [TIL] 23. 12월 CORS(Cross-Origin Resource Sharing) 프로젝트가 끝나갈 무렵 프로젝트 배포 단계에서 예상치 못한 CORS 에러를 만났다. 로컬에서는 잘 돌아갔었는데 배포 환경에서는 작동하지 않았다. 단순히 설정을 빼먹어서 생긴 문제였지만, 이번 기회에 CORS가 정확히 무엇이고 왜 필요한지 제대로 이해하고 정리해보려고 한다.CORS란?CORS는 Cross-Origin Resource Sharing의 약자로 교차 출처 리소스 공유를 의미한다.웹 브라우저는 보안상의 이유로 다른 출처(Origin)의 리소스를 요청하는 것을 기본적으로 차단한다. 이를 동일 출처 정책(Same-Origin Policy)이라고 한다.하지만 현대 웹 개발에서는 프론트엔드와 백엔드가 다른 서버에서 동작하는 경우가 많다. React는 localhost:3000에서, Spring Boot는.. 2025. 12. 21. [TIL] 22. 12월 Axios Interceptor (문제해결) Axios Interceptor로 인한 무한 루프 해결기프로젝트에서 JWT 인증을 구현하던 중, 토큰 재발급 과정에서 예상치 못한 무한 루프 문제가 발생했다. 겉보기엔 단순한 실수처럼 보였지만, 해결 과정에서 인터셉터의 동작 원리와 비동기 통신의 구조를 깊이 이해할 수 있었던 경험을 공유한다.Axios란?Axios는 브라우저와 Node.js에서 사용할 수 있는 Promise 기반 HTTP 클라이언트다.React에서 백엔드 API와 통신할 때 가장 많이 사용되는 라이브러리 중 하나다. fetch API보다 더 간편한 문법과 다양한 기능을 제공한다.// 기본적인 Axios 사용 예시import axios from 'axios';const response = await axios.get('/api/users'.. 2025. 12. 16. 이전 1 2 3 4 ··· 6 다음