JDBC 사용중에 ResultSet의 결과 값을 List에 담는 과정에서 질문이 있습니다


ResultSet의 결과값을 allEmployee라는 리스트에 VO형태로 담고 싶습니다.

리스트 인덱스의 값들이 달라야해서 인스턴스를 계속해서 생성해주고 있는데요.

이 방법이라면 데이터의 양이 많아질 경우 성능에 무리가 가지 않을까요?

preparedStatement = connection.prepareStatement(sql.toString().toUpperCase());
resultSet = preparedStatement.executeQuery();

while (resultSet.next()){
    employee = new Employee();
    employee.setEmpid(resultSet.getInt("empid"));
    employee.setName(resultSet.getString("name"));
    allEmployee.add(employee);
}            

목표는 VO가 담긴 리스트를 리턴하는 것입니다. 더 좋은 방법이 있으면 알려주시면 감사하겠습니다~

  • 2016년 06월 22일에 수정됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.
  • 2016년 06월 22일에 작성됨
    Software Engineer

조회수 209


1 답변


좋아요
1
싫어요
채택취소하기

테이블에 담긴 모든(혹은 매우 많은) 데이터를 가져오는 경우에 한해서, 데이터가 많아지면 실제로 문제가 발생할 수 있습니다.

위의 내용이 싱글유저라면 크게 문제가 없을수도 있습니다. (수백만건을 처리해도 속도가 느려지는 현상외에는 문제가 발생하지 않을 수 있읍니다.)

하지만, 웹과 같이 다수의 사용자에 대해서 서비스하는 형태라면, 위 로직에 동시에 접근하는 양에 따라서 문제가 될 수 있습니다.

기본적으로 자바 객체를 생성할 때마다, 자바가 사용할 수 있는 힙메모리를 소모하게되는데, 메모리 확보를 위해서 잦은 가비지 컬렉션을 일으켜 성능을 저하시킬수 있습니다.

실제 서비스를 목표로 하는 것이라면, 한번 가져와서 VO로 바꿔야만 하는 양을 최대한 줄이는 방향으로 설계하는 것이 좋습니다.

주. 위의 방식이 틀린 것이 아니라 많이 사용하는 방법입니다. SQL 쿼리문을 어떻게 작성하느냐에 따라, 성능에 영향을 많이 미치는 경우가 많습니다.

  • 2016년 06월 23일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 감사합니다. 그리고 답변 중에 궁금한점이 있습니다. 싱글 유저가 어떤 내용을 의미하는 건가요?? 특정 유저에 대한 처리를 말씀하시는 건가요??     김선우   2016.6.24 09:31     
  • 데스크톱 애플리케이션을 생각하시면 될것 같습니다. 동시에 여러명이 사용하는 것이 아니라, 한번에 혼자만 사용하는 경우를 의미한 것입니다.    허대영(Daeyoung Heo)   2016.6.25 00:00     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close