[Spring] Java와 Database (1)

이연우·2025년 7월 24일

TIL

목록 보기
39/100

🔌 JDBC란?
Java 애플리케이션에서 데이터베이스와 통신하기 위한 표준 인터페이스(API)
CRUD 작업을 Java 코드로 수행할 수 있게 해 줌

📐 JDBC 구조

Java Application ↔ JDBC API ↔ JDBC Driver ↔ DBMS ↔ Database
  • Java 코드 → JDBC API → 각 DBMS 드라이버에 맞게 변환 → DB에 명령 전달

📌 JDBC 특징

기능설명
표준 APIOracle, MySQL 등 모든 RDBMS와 통일된 방식 사용 가능
연결 관리DriverManager를 통해 DB 연결
SQL 실행Statement / PreparedStatement로 SQL 실행
ResultSet 처리결과를 Java 객체로 받아 처리
트랜잭션 제어commit(), rollback() 등으로 DB 작업 제어

✍️ Statement vs PreparedStatement

  • 데이터베이스와의 통신을 통해
    쿼리 결과를 반환하거나 데이터 조작을 수행하는 데 사용

1. Statement

Statement stmt = conn.createStatement();
ResultSet rs = stmt.execute("SELECT * FROM users WHERE name = 'Alice'");
  • 문자열로 SQL을 직접 전달 → 실행 시마다 파싱 필요
  • 성능 낮고, SQL Injection에 취약


2. PreparedStatement

String query = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, "Alice");
  • ? 로 값을 대체하고 미리 컴파일(precompile) → 실행 시 값만 바인딩
  • 성능 좋음, 보안 강력
  • 입력값 자동 이스케이핑 → SQL Injection 차단

🔐 웹 보안이란?

  • 웹 애플리케이션은 외부 공격에 항상 노출되어 있음
    → 반드시 입력값 검증, 보안 처리 필요

💉 SQL Injection (SQL 삽입 공격)

  • 사용자 입력을 통해 SQL 문을 조작해 DB에 무단 접근

🗒️ 예시 코드

SELECT * FROM MEMBER 
WHERE email = 'wonuk' OR 1=1 # AND password = 'pw';
  • 항상 참이 되도록 만들어 로그인 우회
  • # 뒤는 주석 처리 → 조건 무력화

🛡️ 방어 방법

방법설명
PreparedStatement 사용? 로 파라미터 바인딩
입력값 검증문자 길이, 타입, 금지어 검사
에러 메시지 숨기기DB 구조 노출 방지

⚔️ XSS (Cross Site Scripting)

  • 웹 페이지에 악성 스크립트를 삽입하여 다른 사용자에게 공격

📌 종류

유형설명예시
Stored XSS게시글 등 DB에 영구 저장 후 실행<script>alert('cookie');</script>
Reflected XSSURL 매개변수 → 즉시 반응 실행<a href="...script">
DOM-based XSS클라이언트 JS가 직접 실행location.href 등 조작됨

🛡️ 방어 방법

방법설명
입력값 필터링<, >, script 차단
출력 이스케이프HTML 렌더링 시 값 필터링
보안 라이브러리 사용OWASP ESAPI 등
Content Security Policy(CSP) 설정스크립트 실행 제한

0개의 댓글