비밀번호 컬럼의 길이를 어떻게 설정할지 고민하고 있나요? 간단하면서도 중요한 내용을 쉽게 정리해봤어요!
비밀번호는 절대 평문으로 저장하면 안 됨. 대부분의 서비스는 해시값(암호화된 값)을 저장함. 이 해시값 길이는 사용하는 알고리즘에 따라 다르기 때문에, 적절한 길이를 설정하는 것이 중요.
자주 사용되는 해시 알고리즘과 권장 길이:
| 알고리즘 | 해시 결과 길이 | 추천 컬럼 길이 |
|---|---|---|
| bcrypt | 60자 고정 | CHAR(60) 또는 VARCHAR(60) |
| Argon2 | 약 95자 내외(파라미터에 따라 다름) | VARCHAR(128) 또는 VARCHAR(255) |
| SHA-256 | 64자 (헥사) | CHAR(64) 또는 VARCHAR(64) |
| SHA-512 | 128자 (헥사) | CHAR(128) 또는 VARCHAR(128) |
CREATE TABLE users (
id SERIAL PRIMARY KEY,
password VARCHAR(255) NOT NULL
);이처럼 보편적으로 사용하는 VARCHAR(255)를 선택하면, 나중에 알고리즘을 바꿔도 무리 없이 대응할 수 있음!
TypeORM에서 길이를 생략하고 그냥 VARCHAR를 쓰면 PostgreSQL은 무제한 길이 문자열로 인식함.
예시 코드:
@Column("varchar")
password: string;이는 PostgreSQL에서는 TEXT 타입과 동일하게 작동.
대부분의 DB는 길이 설정이 필수입니다!
| DBMS | 길이 지정 필수 여부 | 안 하면 어떻게 될까? |
|---|---|---|
| MySQL | ✔️ 필수 | 오류 발생 🚫 |
| SQL Server | ✔️ 필수 | 테이블 컬럼 오류 🚫 |
| Oracle | ✔️ 필수 | 오류 발생 🚫 |
- 성능 저하: 예상보다 큰 문자열이 저장돼 시스템이 느려질 수 있어요.
- 인덱스 문제: 인덱스를 걸기 어렵거나, 제대로 동작하지 않을 수 있어요.
- 관리 문제: 나중에 길이를 바꾸려면 번거롭게 마이그레이션 작업을 해야 해요.
- 보안 문제: 입력값 검증이 어려워져 보안 이슈가 생길 수 있어요.
- 비밀번호는 꼭 암호화(해싱)된 값으로 저장하세요!
- 대부분 상황에서는
VARCHAR(255)가 가장 무난하고 좋습니다. - 명확한 길이를 설정해서 성능과 보안을 동시에 챙기세요! 😊