일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- jsp
- Controller
- spring
- mysql
- JDBC
- Array
- MVC
- db
- 배열
- Scanner
- Eclipse
- 문자열
- Thymeleaf
- 상속
- rpa
- Database
- Uipath
- View
- Java
- React
- jquery
- string
- 이클립스
- html
- API
- git
- SpringBoot
- Board
- 조건문
- Oracle
- Today
- Total
유정잉
PostgreSQL에서 ALIAS 사용법 & MyBatis에서 #{}만 써야 하는 이유! 본문
📌 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️⃣ ${}는 절대 사용하면 안 됨 → 보안상 취약점이 생길 수 있음!
'개발자 공부 > ♡ Spring XML' 카테고리의 다른 글
Spring MVC + MyBatis로 데이터 화면에 출력! Entity, Controller, Service, Mapper, JSP (0) | 2025.02.04 |
---|---|
@RequestParam vs @PathVariable vs @RequestBody (0) | 2025.02.04 |
Spring MVC와 JSP를 이용 (0) | 2025.02.04 |
@Autowired, @Qualifier("이름"), @Resource(name="이름") (0) | 2025.02.04 |
@ComponentScan과 @Bean의 차이점 (0) | 2025.02.04 |