웹 개발자를 준비하는 개발자호소인이라면 상대의 기술을 잘 알아야한다. 예컨데 프론트개발자라면 백개발자의 큰그림을 이해해야 하고, 반대의 경우도 마찬가지다. 그러기 위해선 내가 개발하는 웹의 기본적인 동작 원리부터 알아야할 것이다! 😅
웹의 본질은 주고(response) 받는(request) 것이다.
요청-반환의 주체는 브라우저와 서버 단 2개다!
요청과 반환에는 기본적으로 REST API를 사용하고 예외적으로 GraphQL도 사용한다.
위의 설명으로 MSA가 서버를 여러 개 둔 방식이라는 것을 짐작했을것이다. 규모가 크지 않은 프로젝트를 할때는 대개 모놀리딕 방식을 사용했을 것이다.

시스템의 한 부분이 고장 났을 때 전체 시스템의 작동을 멈추게 하는 위험을 의미한다.
이러한 차이점을 고려하여 프로젝트의 규모와 요구에 맞는 아키텍처를 선택해야 한다.
앞에서 언급했든 웹은 REST API를 기반으로 동작한다.
HTTP 메서드, URL, 헤더, 그리고 선택적으로 본문을 포함하는 HTTP 요청을 사용하여 데이터를 주고받는 방식으로 구성되어있는데 이 포스팅에서는 Method + URL 이라는 2가지 요소로만 간단하게 정리하겠다.
https://aaron.com = 장소https://aaron.com/users/aaron/favorite-things = 장소 내 지정CRUD를 구현한 간단한 스프링 예제 코드를 보자.
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.PathVariable;
@RestController // 이 클래스가 RESTful 서비스를 위한 컨트롤러임을 나타냄
public class SimpleController {
// GET 요청 처리: 모든 사용자 데이터를 조회할 때 사용
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String getUsers() {
return "모든 사용자 정보 반환";
}
// GET 요청 처리: 특정 사용자의 데이터를 조회할 때 사용
@RequestMapping(value = "/users/{userId}", method = RequestMethod.GET)
public String getUserById(@PathVariable String userId) {
return "사용자 ID " + userId + "에 해당하는 정보 반환";
}
// POST 요청 처리: 새로운 데이터를 생성할 때 사용
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String addUser(@RequestParam String name) {
return "새 사용자 " + name + " 추가";
}
// PUT 요청 처리: 기존 데이터를 수정할 때 사용
@RequestMapping(value = "/users/{userId}", method = RequestMethod.PUT)
public String updateUser(@PathVariable String userId, @RequestParam String newName) {
return "사용자 ID " + userId + "의 이름을 " + newName + "으로 수정";
}
// DELETE 요청 처리: 데이터를 삭제할 때 사용
@RequestMapping(value = "/users/{userId}", method = RequestMethod.DELETE)
public String deleteUser(@PathVariable String userId) {
return "사용자 ID " + userId + " 삭제";
}
}
이처럼 서버에서 클라이언트로 데이터를 주고받을 때 특정 형식에 맞게 특정 주소로 데이터를 요청하고 응답받는다. 각 요청이 독립적이고, URL로 어떤 데이터를 요청하는지 명확히해서 쉽고 직관적이게 사용 가능하다.
문장마다 메서드를 만드는 REST API와는 달리, 문장을 하나의 쿼리로 준다. 클라이언트가 필요한 데이터를 정확히 지정해서 서버에 요청한다. 이렇게 하면 서버는 요청받은 데이터만 처리해서 보내줘서 오버페칭이나 언더페칭을 줄일 수 있어 통신이 더 효율적이다. REST API보다 더 유연하게 데이터를 다룰 수 있는 장점이 있지만, 구현이 조금 복잡하고 각 비즈니스 도메인마다 API를 일일이 만들어야 해서 번거롭다.