[JAVA][SPRING] REST API Backend 요청 처리 과정

더지두·2023년 2월 2일

backend

목록 보기
2/2

request가 서버로 온 시점부터 response를 return하는 시점에 대한 설명입니다.

최초 요청


Dispatcher Servlet으로 최초 request가 오면 Handler Mapping을 통해 전달할 Controller를 찾습니다. 전달할 요청을 위임할 Handler Adapter에게 전달합니다.
Controller는 Handler Adapter에게 request를 받아 Service로 Data를 전달하고, Service에서 가공 및 Repository에 Query를 수행 후 Response를 전달합니다.
Controller에서 Client로 Response를 전달합니다.
간단하게 사용자ID를 전송하면 이름을 return해주는 과정을 작성해보겠습니다.

TestController.class

@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를 지정할 수 있습니다.

TestService.class

@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를 받을 수 있습니다.

TestRepository.class

@Mapper
public interface TestRepository() {
	public String selectUserName(@Param("userId") String userId);
}

[Mapper]
마커 인터페이스
sql을 메소드로 쓰기 위해서 xml파일과 mapping해주는 annotation입니다.

Users.xml

<?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로 반환되게 됩니다.

profile
풀스택 개발자를 꿈꾸는

0개의 댓글