티스토리 뷰
결론부터 말씀드리면, 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의 흐름은 다음과 같습니다.
- Service가 DAO의 메서드를 호출합니다.
- DAO는 sqlSession.selectList()를 실행하며 XML에 적힌 SQL을 호출합니다.
- DB에서 가져온 데이터 행(Row)들을 MyBatis가 DTO 객체에 자동으로 하나씩 담아(Mapping) 리스트로 반환합니다.
- 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에서 작성되었습니다.
'WEB > 자바' 카테고리의 다른 글
| DAO - selectUserList - xml 어느파일에 있는줄 알고 가져와요? (0) | 2026.03.25 |
|---|---|
| MyBatis 환경에서 DAO와 XML(Mapper) (0) | 2026.03.25 |
| Dao는 어떤경우에 쓰나요? (0) | 2026.03.25 |
| 자바 스프링 기반 웹 애플리케이션의 전체적인 동작 흐름 (0) | 2026.03.25 |
| 자바 스프링프레임워크란? (0) | 2026.03.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 연명의료결정제도 #사전연명의료의향서 #사전연명의료의향서등록기관 #광주사전연명의료의향서
- 탭메뉴자바스크립트
- // 사진직: 데이터가 없으면 DEFAULT_IMG 사용 const profileSrc = (d.img && d.img !== "") ? d.img : DEFAULT_IMG;('#user-photo').attr('src'
- 무료폰트 #무료웹폰트 #한수원한돋움 #한수원한울림 #한울림체 #한돋움체
- 광주분식 #광주분식맛집 #상추튀김 #상추튀김맛집 #광주상추튀김
- 좋은책
- 와이파이증폭기추천 #와이파이설치
- sw기술자평균임금 #2025년 sw기술자 평균임금
- 파비콘사이즈
- 썬크림 #닥터지썬크림 #내돈내산 #내돈내산썬크림 #썬크림추천 #spf50썬크림 #닥터지메디유브이울트라선
- SQL명령어 #SQL
- 정보처리기사 #정보처리기사요약 #정보처리기사요점정리
- 자바스크립트break
- 증폭기 #아이피타임증폭기
- css미디어쿼리 #미디어쿼리 #mediaquery
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- 자바스크립트countiue
- 쇼팬하우어 #좋은책
- jdk #jre
- 자바스크립트정규표현식
- thymeleaf
- 자바스크립트 #javascript #math
- 테스크탑무선랜카드 #무선랜카드 #아이피타이무선랜카드 #a3000mini #무선랜카드추천
- lg그램pro #lg그램 #노트북 #노트북추천 #lg노트북
- echart
- 파비콘 #파비콘 사이트에 적용
- iptime와이파이증폭기 #와이파이증폭기설치
- 좋은책 #밥프록터 #부의원리
- 바지락칼국수 #월곡동칼국수 #칼국수맛집
- ajax
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함

