스프링으로 간단한 개발 해보기
지난 포스팅에서 말한 스프링으로 간단한 하나의 레이어 개발해보는 것을 준비했다.
- 유저 id로 Feedid 가져오기 개발
이걸 응용해서 자신들이 개발할 것들을 개발하기 바라요!
1.DB 쿼리 짜기
- User id 리스트를 가져오는 쿼리
SELECT id
FROM USER
- 조건을 건다. 우리의 조건은 유저의 아이디로 조건 걸기
SELECT id
FROM USER
WHERE user_id = 유저 아이디
- 유저 아이디에 테스트 01을 넣어 보고 실행이 된다면 이제 코드에 집어넣기를 한다.
- 우리는 Mybatis를 사용할 것이다.
- 아마 스프링 설정을 하였으면 Mybatis를 설정했을 것이다.
하지만!! 이전에 해야 할 것이 있다. 바로 Model 클래스를 만드는 것
2.Model 클래스 만들기
- 여기서 Model은 DTO(DataTransferObject)의 용도로 사용이 될 것이다.
- 이것은 데이터를 이동시킬 때 여기 모델의 gettet/setter에 데이터를 매핑시킨 후 데이터를 이동시키기 위함이다.(자세한 설명은 생략 더 궁금하면 나에게 물어보세요)
- 원래는 DB 스키마와 똑같이 만들어주는 게 좋다. 하지만 간단히 테스트 용도로 만들 것 이기 때문에 단순한 데이터를 넣겠다.
Feed 모델 클래스이다.
public class Feed {
privateint id;
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
}
(getter/setter 는 메뉴의 Source -> 제너레이트 게터 세터를 누르면 된다.)
- Feed를 조회할 데이터 내용이 모두 들어가야겠지만, 테스트이기 때문에 id만 넣겠다.
그다음은 ValueObject이다.
- 모두가 다 같은 생각을 하는 것은 아니지만 일반적으로 VO(ValueObject)는 입력 값을 담아놓는 Object라고 말하는 경우가 많다.
- 우리는 UserId가 필요하기 때문에 UserId에 대한 ValueObject를 만들어 야한다.
public class UserValue {
private String userId;
publicString getUserId() {
returnuserId;
}
publicvoid setUserId(String userId) {
this.userId= userId;
}
}
3.MyBatis 사용하기
- MyBatis는 DB ORM?이라고 하기에도 조금 뭐하고 뭐 어쨌든 그냥 편하게 동적 쿼리를 쓸 수 있는 프레임워크이다. Spring을 쓸 때 가장 일반적으로 쓰이는 퍼시스턴스 프레임워크이다.
(사실 동적 쿼리는 그냥 순수 자바에서도 쓸 수 있다.)
- 모델 객체에 매핑을 쉽게 할 수 있다는 장점이 있다.
- MyBatis 매퍼 경로가 설정된 곳에 xml을 만든다
<? xml version="1.0"encoding="UTF-8"?>
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="feedDAO">
<selectid="findAllByUserId" resultType="co.gamseong.app.domain.Feed"parameterType="co.gamseong.app.domain.UserValue" >
SELECTid
FROMFEED
WHEREuser_id = ‘${userId}’
</select>
</mapper>
- resultType 은 말 그대로 데이터가 나오는 타입
- paprameterType은 말 그대로 파라미터 타입
4. DAO, Service, Controller레이어 구현
-DAO(DataAccessObject)
- 말 그대로 DB에 접근하는 객체
@Repository
public class FeedDAO extends AbstractDAO {
@SuppressWarnings("unchecked")
publicArrayList <Feed> findAllByUserId(UserValue value){
return(ArrayList <Feed>)selectList("feedDAO.findAllByUserId", value);
}
}
- Service
- 비즈니스 로직을 구현
@Service
public class FeedService {
@Autowired
privateFeedDAO feedDAO;
publicArrayList <Feed> findAllByUserId(UserValue value){
returnfeedDAO.findAllByUserId(value);
}
}
- Controller
- url요청이 들어왔을 때 제어해주는 객체
@Controller
public class FeedController {
@Autowired
privateFeedService feedService;
@RequestMapping(value= "/feed" , method =RequestMethod.GET)
public @ResponseBodyArrayList <Feed> findAllByUserId(@ModelAttributeUserValue value){
returnfeedService.findAllByUserId(value);
}
}
말 그대로 간단하게 하나의 레이어를 쭉 개발하는 것이다. 사실 생각보다 친구들이 개발을 잘해줬다. 하지만 개발이 문제라기보다는 스프링의 기본구조를 설명해줄걸 이라는 생각을 했다. 생각보다 기본 설정을 블로그 보고 따라 하는 것이 어려웠던 것 같다. 우선은 프로젝트를 하고 그 이후에 기회가 된다면 스프링의 구조를 한번 설명해주어야겠다.