DB의 데이터가 기본적으로 정적 인 경우 그렇습니다. 그렇게 할 수 있습니다. DB의 데이터가 동적 인 경우, 아니요, 권장하지 않습니다. 그렇지 않으면 DB와 servletcontext 변수를 동기화 상태로 유지하기 위해 꽤 많은 코드를 작성해야합니다. 새 사용자가 webapp에 등록하면 당연히이 사용자가 로그인 할 수있게됩니다.
DB에 1 백만 명의 사용자가 있다면 어떻게해야합니까? 이 모든 것을 서버의 메모리에 실제로 복사 하시겠습니까? 무슨 목적으로? 이것은 DB의 목적을 완전히 무효로 만듭니다. 로그인을 확인 하시겠습니까? 로그인을 확인하는 것이 서버의 메모리에 전체 DB의 복사본이 필요하다는 비싼 이유가 무엇인지 상상할 수 없습니다. 이것은 약간 괜찮은 DB가 1 밀리 초 이내에 할 수있는 직업입니다. 문제의 원인은 분명히 다른 곳에서 해결되어야합니다.
아마도 SQL WHERE
절을 사용하는 대신 전체 DB를 Java 메모리로 불필요하게 복사하고 행 단위로 Java에서 유효성 검사를 완전히 수행하고 있습니까? 이 같은?
resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
if (username.equals(resultSet.getString("username")) && password.equals(resultSet.getString("password"))) {
valid = true;
break;
}
}
이것은 데이터베이스를 처음 사용하고 SQL의 능력을 이해하지 못하는 초보자에게 자주 발생하는 실수입니다.
statement = connection.prepareStatement("SELECT id FROM users WHERE username=? AND password=md5(?)");
statement.setString(1, username);
statement.setString(2, password);
resultSet = statement.executeQuery();
valid = resultSet.next();
은 예,의 ServletContext 속성이 사용될 수있다 : 당신은뿐만 아니라 사용자 이름 컬럼 인덱스 암호 컬럼에
UNIQUE
인덱스를 설정하면, 다음과 같은 상황이 훨씬 더 효율적 방법입니다. –싱글 톤은 너무 과대 평가되어 오해되고 학대 당한다. 왜 당신이 정말로 필요한지 이해할 때까지 그것에 대해 생각하지 마십시오. – BalusC