유정잉

PostgreSQL에서 ALIAS 사용법 & MyBatis에서 #{}만 써야 하는 이유! 본문

개발자 공부/♡ Spring XML

PostgreSQL에서 ALIAS 사용법 & MyBatis에서 #{}만 써야 하는 이유!

유정♡ 2025. 2. 6. 10:02

📌 PostgreSQL에서 ALIAS (알리아스 절) & #{} vs ${} 차이점 

ALIAS(별칭)는 SQL 쿼리에서 컬럼명이나 테이블명을 임시로 다른 이름으로 지정하는 기능!
MyBatis에서는 #{}를 사용해야 SQL 인젝션(SQL Injection) 공격을 방지할 수 있음! 


🔥 1️⃣ ALIAS (별칭)란?

📌 SQL에서 AS 키워드를 사용하여 테이블명, 컬럼명을 임시로 변경하는 기능
📌 쿼리를 더 읽기 쉽게 만들고, JOIN 시 같은 컬럼명이 있을 경우 충돌 방지 가능

PostgreSQL에서 ALIAS 기본 문법

SELECT column_name AS alias_name
FROM table_name;

예제 1: 컬럼명을 간단한 별칭으로 변경

SELECT username AS name, email AS mail
FROM users;

출력 결과

name      | mail
----------------------------
Tom       | tom@example.com
Alice     | alice@example.com

AS를 사용하면 컬럼명을 name, mail로 간결하게 변경 가능!

📌 예제 2: 테이블에 별칭 지정하기

SELECT u.username, u.email
FROM users AS u;

테이블명을 u로 줄여서 사용 가능!

📌 예제 3: JOIN에서 별칭을 사용하여 컬럼명 충돌 방지

SELECT u.username, o.order_date
FROM users AS u
JOIN orders AS o ON u.id = o.user_id;

테이블 users, orders의 컬럼명을 명확하게 구분 가능!


🔥 2️⃣ #{} vs ${} 차이점 (MyBatis에서 안전한 SQL 사용)

📌 MyBatis에서 SQL 변수를 사용할 때는 반드시 #{}을 사용해야 함!
📌 ${}는 직접 문자열을 삽입하기 때문에 SQL 인젝션 공격에 취약할 수 있음

✅ #{} (권장) → SQL Injection 방지

<select id="getUserById" parameterType="int" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>

#{}를 사용하면 MyBatis가 값(id)을 자동으로 바인딩하여 SQL Injection을 방지함!

실제 실행되는 쿼리 예제

SELECT * FROM users WHERE id = $1;

값이 ? 또는 $1 같은 변수 형태로 안전하게 바인딩됨!


❌ ${} (사용 금지) → SQL Injection 위험

<select id="getUserById" parameterType="int" resultType="User">
    SELECT * FROM users WHERE id = ${id}
</select>

이 방식은 사용자가 입력한 값이 그대로 SQL에 삽입됨!
해커가 "1 OR 1=1" 같은 값을 입력하면 보안 취약점 발생 가능!

💀 SQL Injection 공격 예제

SELECT * FROM users WHERE id = 1 OR 1=1;

모든 유저 데이터를 가져올 위험 발생!


🔥 3️⃣ 결론

1️⃣ PostgreSQL에서 ALIAS (별칭)은 AS 키워드를 사용하여 컬럼명 또는 테이블명을 간략하게 변경할 수 있음!
2️⃣ MyBatis에서 #{}를 사용하면 SQL Injection을 방지할 수 있음!
3️⃣ ${}는 절대 사용하면 안 됨 → 보안상 취약점이 생길 수 있음!

728x90