티스토리 뷰

결론부터 말씀드리면, DAO 클래스 내에서 selectList, selectOne이라는 메서드명을 직접 사용하는 방식은 JPA보다는 MyBatis(마이바티스)나 SQL Mapper 방식일 확률이 매우 높습니다.

왜 그렇게 판단하는지, 그리고 JPA와는 어떤 차이가 있는지 명확하게 짚어드릴게요.


1. 왜 MyBatis(SQL Mapper) 방식인가요?

selectList와 selectOne은 보통 MyBatis의 핵심 객체인 SqlSession이 제공하는 메서드 이름입니다.

  • MyBatis DAO의 전형적인 모습:이처럼 selectList(여러 건 조회), selectOne(단건 조회)이라는 용어 자체가 SQL 쿼리 실행 결과의 개수를 개발자가 직접 지정하는 MyBatis의 스타일입니다.
  • Java
     
    @Repository
    public class UserDAO {
        @Autowired
        private SqlSession sqlSession; // MyBatis 실행 객체
    
        public List<UserDTO> getUserList() {
            // MyBatis의 메서드를 직접 호출
            return sqlSession.selectList("mapper.getUserList");
        }
    
        public UserDTO getUser(String id) {
            return sqlSession.selectOne("mapper.getUser", id);
        }
    }
    

2. JPA라면 어떻게 다를까요?

JPA는 SQL 중심이 아니라 객체(Entity) 중심입니다. 따라서 selectList 같은 명칭 대신, 스프링 데이터 JPA의 Repository 인터페이스가 제공하는 메서드나 메서드 이름 쿼리 방식을 사용합니다.

  • JPA Repository의 모습:
  • Java
     
    public interface UserRepository extends JpaRepository<UserEntity, Long> {
        // selectList 대신 findAll()
        List<UserEntity> findAll(); 
    
        // selectOne 대신 findById()
        Optional<UserEntity> findById(Long id); 
    
        // 또는 메서드 이름으로 쿼리 생성
        UserEntity findByUserId(String userId); 
    }
    

3. DAO와 DTO의 관계 (MyBatis 환경)

MyBatis 환경에서 DAO, DTO, selectList/One의 흐름은 다음과 같습니다.

  1. ServiceDAO의 메서드를 호출합니다.
  2. DAO는 sqlSession.selectList()를 실행하며 XML에 적힌 SQL을 호출합니다.
  3. DB에서 가져온 데이터 행(Row)들을 MyBatis가 DTO 객체에 자동으로 하나씩 담아(Mapping) 리스트로 반환합니다.
  4. Service는 결과가 담긴 DTO 리스트를 받아서 비즈니스 로직을 처리합니다.

4. 한눈에 비교하기

구분 MyBatis (DAO 방식) JPA (Repository 방식)
조회 메서드 selectList, selectOne findAll, findById, find...
데이터 객체 주로 DTO나 VO에 바로 매핑 Entity 객체에 매핑 (응답 시 DTO 변환)
핵심 기술 직접 작성한 SQL 중심 자바 객체와 DB를 연결하는 ORM 중심
특징 복잡한 쿼리 처리가 직관적임 SQL 작성 없이 생산성이 높음

요약하자면

현재 보고 계신 코드는 MyBatis를 사용하는 전통적인 스프링 구조일 가능성이 99%입니다. JPA는 selectList라는 용어를 직접 구현체에서 쓰기보다는 추상화된 메서드(findAll)를 주로 사용하기 때문입니다.

혹시 지금 프로젝트의 XML 파일(MyBatis Mapper)을 확인해 보셨나요? 그 안에 <select id="selectList"> 같은 설정이 있다면 확실히 MyBatis 방식입니다.

 

※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/03   »
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 31
글 보관함