Spring_Mapper는 Interface? XML?

윤일권·2022년 11월 23일
0

Spring

목록 보기
3/3

프로젝트는 2주간 가볍게 spring프로젝트를 만드는 거였고,
우리는 '밀키트 판매 사이트'를 제작했다.
프로젝트 결과 구조 : Controller -> Service -> Dao -> Mapper Interface
밀키트 프로젝트

프로젝트를 진행하며 나는 의문이 생겼다.

"아니 우리 프로젝트를 보면 왜 Interface에 쿼리문을 작성하는거야??"

위 궁금증은 프로젝트 관련 구글링을 하던 중 쿼리문을 xml에 작성하여 관리하는 것을 보았다. 그저 한 두개가 아니라 대다수가 그랬다...

이 때 당시 우리가 진행하던 쿼리문 작성은 아래와 같다.

@Repository
public interface UserMapper {

	@Insert("insert into User "
     + " (email, password,name,tel,address,authority)"
+ " values(#{email}, #{password},#{name},#{tel},#{address},#{authority})")
	void insert(User user);
}

이런 의문점을 던질 때 한 팀원이 나에게 말했다.

어차피 다 똑같아 어노테이션이 더 좋아

인정할 수 없었다. 기본적으로 "Spring은 쪼개야 맛이다." 라는 생각을 가지고 있고, 무작정적인 "그게 더 좋아"를 받아 들일 수 없었다...

그래서 '한이음 ICT 멘토링'으로 만난 멘토님께 여쭤보았다.

  • 나 : 혹시 스프링 쿼리문 작성할때 구글링해보면 xml로 많이들 하던데, 저는 어노테이션이 유지보수성이 더 좋다고 알고 있습니다.
    사람들이 어노테이션이 아닌 xml을 사용하는 이유가 있을까요?
    그리고 현업에서는 실제로 어떤 방식이 더 많이 쓰일까요...?
  • 멘토님 : 아 어노테이션으로 하는건 DAO이고 쿼리문은 따로 작성하잖아요.
    따로 만드는 건 spring의 ORM 프레임워크 추가한 Mybatis 사용하는거예요.
    회사에선 어노테이션을 이용한 mapper 해주고 마이바티스 이용해서 쿼리만 따로 xml에 저장하는 거예요.
    관리하기 편하고 결합도가 낮아지니까요.
    실무에서는 보통 마이바티스 즉 xml로 하죠.

멘토님께서는 내가 원하는 답장을 해주셨다...
추가적으로 찾아보니 실제로는 결과 구조에 따라 유동적으로 사용한다고 한다.

  • controller - service - repository 혹은 dao - mapper.xml
  • controller - service - repository 혹은 dao - mapper.java - mapper.xml
  • controller - service - mapper.java - mapper.xml
  • controller - service - dao - mapper.java

아마 위에 방식말고도 내가 모르는 여러 구조가 존재할 것이다.

느낀점
스프링을 하며 여러 구현 방식이 존재하고 객체관리가 존재하고 너무나도 유동적이고 또, 스프링이 점점 변화해가는 과정을 공부하며 매력적으로 다가왔다. 이번 포스팅도 spring의 매력을 느낄 수 있는 시간이 되었다.
현재는 매우 작은 프로젝트로써 xml에 대한 소중함을 느끼지 못 할 수도 있지만 현업에 들어서면 쿼리문을 xml에 따로 저장하여 관리와 결합도를 낮추기 위한 결과 구조가 소중하게 다가올 것이라고 상상할 수 있는 기회가 되어 유익한 시간이였다.

profile
생각하는 개발자가 되겠습니다!!

0개의 댓글