db 3

DB에 패스워드는 어떻게 저장하고 관리할까?

데이터베이스에 민감 정보를 저장하고 관리하는 것은 중요한 일이다. 패스워드를 평문으로 저장하면 안된다. 평문일 경우 데이터베이스에 접근할 수 있는 누구든지 데이터를 확인할 수 있게 된다. 데이터베이스에 패스워드를 안전하게 저장하기 위해서는 어떻게 하면 될까? Open Web Application Security Project (OWASP)에서는 안전한 패스워드 저장에 대한 가이드라인을 제시하고 있다. Use a modern hashing algorithm Salt the password 해시 함수를 통해 단방향 암호화를 진행함으로써 복호화가 불가능하게 한다. OWASP 가이드 라인에 따르면 Salt는 랜덤하고 유니크한 문자열이다. Password에 Salt를 추가한 뒤 해시 함수를 통해 더 안전하게 암호..

'DB 커넥션풀'에 대해 알아보자

백엔드 서버와 디비 서버가 있다. 백엔드 서버가 api 요청을 받아 처리하다가 디비에 접근하여 데이터를 조회할 일이 생기면 디비 서버로 쿼리를 요청한다. 디비 서버는 쿼리 요청에 맞게 데이터를 찾아 백엔드 서버로 응답해 줄 것이다. 백엔드 서버는 쿼리 응답을 받고 추가적인 작업을 맞춘 뒤 api 응답을 진행할 것이다. 위 상황을 조금만 더 자세히 들여다보자. 백엔드 서버와 디비 서버는 각각 서로 다른 컴퓨터에서 동작을 하기 때문에 쿼리를 요청하고 응답받는 과정에서 네트워크 통신이 일어났을 것이다. 일반적으로 백엔드 서버와 디비 서버 간의 네트워크 통신은 TCP 기반으로 동작한다. TCP 기반의 통신은 높은 송수신 신뢰성이라는 강점을 가진다. TCP 기반의 통신은 연결 지향적인 특징을 가지고 있으므로 본격..

'DB 인덱스'에 대해 알아보자

DB 쿼리 속도 최적화를 위한 '인덱스'에 대해서 많이 들어보았을 것이다. 오늘은 이 인덱스란 녀석에 대해서 알아보자. Index, 왜 중요할까? 100만 명이 등록되어 있는 user 테이블이 있다. 이때 이름을 기반으로 유저를 조회하려고 한다. select * from user where user_name = "hyunjun" hyunjun이라는 이름을 가진 계정을 찾기 위해서는 100만 개의 row를 모두 scan 해야 한다. (full scan, O(N)) 만약 user_name에 index를 걸어두었다면? B-tree index 기반으로 O(logN)의 시간 복잡도로도 충분히 찾을 수 있다. 정리하자면 index를 사용하는 이유는 특정 조건을 만족하는 데이터들을 빠르게 찾기 위함이다! 상황에 따라..