
Dispatcher Servlet으로 최초 request가 오면 Handler Mapping을 통해 전달할 Controller를 찾습니다. 전달할 요청을 위임할 Handler Adapter에게 전달합니다.
Controller는 Handler Adapter에게 request를 받아 Service로 Data를 전달하고, Service에서 가공 및 Repository에 Query를 수행 후 Response를 전달합니다.
Controller에서 Client로 Response를 전달합니다.
간단하게 사용자ID를 전송하면 이름을 return해주는 과정을 작성해보겠습니다.
@RestController("TestController")
public class TestController {
@Autowired
private TestService testService;
@RequestMapping(value = "/api/test/getUserName", method = RequestMethod.GET)
private String getUserName(@RequestParam(name="userId") String userId) {
String userName = testService.getUserName(userId);
return userName;
}
}
[Autowired]
스프링 컨테이너에 등록한 빈에게 의존관계주입이 필요할 때, DI(의존성 주입)을 도와주는 어노테이션
즉, class파일에 필요한 인스턴스를 주입해주는 annotation입니다.
[RequestMapping]
client에서 요청한 url에 controller를 mapping해주는 annotation
value로 url을, method로 http method를 지정할 수 있습니다.
@Service
public class TestService {
@Autowired
private TestRepository testRepository
public String getUserName(String userId) {
String userName = testRepository.selectUserName(userId);
return userName;
}
}
Service에서는 데이터를 가공하거나, repository를 통해 mapping된 query를 수행하여 data를 받을 수 있습니다.
@Mapper
public interface TestRepository() {
public String selectUserName(@Param("userId") String userId);
}
[Mapper]
마커 인터페이스
sql을 메소드로 쓰기 위해서 xml파일과 mapping해주는 annotation입니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.innotium.api.repository.TestRepository">
<select id="selectUserName" resultType="String">
SELECT
user_name
FROM tb_users
WHERE
user_id = #{userId}
</select>
</mapper>
mapper namespace를 통해 mapping 된 repository를 지정하고 CRUD에 id를 부여해 repository에서 해당 query를 호출합니다.
위 프로세스를 수행하면 query가 실행되어 userName이라는 변수에 데이터가 담겨 Client로 반환되게 됩니다.