ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Endpoint란
    Web 2020. 7. 13. 12:31

    계속 보이더라.

    팀원들과 프로젝트를 하며 OAuth를 다룰 때나 Spring을 공부하며 프론트와 API 통신을 주고받을 때와 같은 여러 상황에서 Endpoint라는 용어가 눈에 들어왔다. 그때마다 자세히 찾아보지 않고 어렴풋이 알고 있는 개념만으로 넘어갔다. (그래도 돌아는 갔으니까!!)
    그렇지만 이제는 알고 싶다. 엔드포인트가 뭔지!

    포스팅을 작성하는 초반인 지금은 엔드포인트를 막연하게 요청이 최종적으로 도달할 URI로 생각하고 있다. 과연 내 생각이 맞을지 여러 자료들을 보며 확인해보자.

     


     

    an endpoint is simply one end of a communication channel.
    (stackoverflow)

     

    벌써 정답이 나온듯하다. 커뮤니케이션 채널의 한 쪽 끝이라니. 쉽다. 그러나 너무 추상화가 많이 되어있다. 출처의 답변 작성자께서는 OAuth를 예시로 들어 구체화하셨다. OAuth에서는 세 개의 엔드포인트가 있으니 고려해야 한다고. 

     

    1. Temporary Credential Request URI(Request Token URL)

    서버에 인증되지 않은 요청 토큰을 얻기 위해 요청을 보낼 URI

    2. Resource Owner Authorization URI(User Authroization URL)

    사용자가 Temporary Credential Request URI에서 얻은 토큰을 승인하도록 하는 URI

    3. Token Request URI(Access Token URL)

    승인된 요청 토큰을 액세스 토큰으로 교환하기 위해 요청을 보내는 URI, 보호된 자원에 대한 접근을 얻는 데 이용할 수 있다.

     

    어느 정도 이해가 간다. 한마디로 OAuth라는 서비스를 이용할 때 사용하는 커뮤니케이션 채널의 한쪽 끝에 해당하는 URI.

    이해도가 올라갔다. 그렇지만 10년도 넘은 글이기에 OAuth 1.0으로 예시를 드셨고 OAuth에 치우친 설명이기에 일반적인 엔드포인트에 대한 예시를 더 찾아보자.

     


     

    갑분 API.

     

    엔드포인트에 대해 검색하다 보니 API와 함께 설명하는 글이 많았다.

    알다시피 API는 프로그램 혹은 시스템 간의 통신하는 창구다. 작은 단위로는 응용프로그램에서 사용할 수 있도록 OS나 프로그래밍 언어가 제공하는 기능을 사용/제어할 수 있게 하는 인터페이스를 의미한다. 자바를 예로 들자면 JDK 1.8에서 추가된 Stream API가 있다. Stream이라는 기능을 사용하기 위해 제공된 명세를 API라고 할 수 있다. (명세에 대해서 이해가 잘 되지 않는다면 자바의 Interface 개념을 생각해보면 좋을 듯하다)

     

    Stream에서 사용되는 filter 메서드

     

    우리는 Stream의 filter 기능을 사용하기 위해 filter 메서드를 이용한다. 물론 사용자는 이 메서드가 어떻게 구성되었나 와 같은 내부 구현을 알 필요는 없다.

    API에 대한 간단한 설명을 뒤로하고 이번 글의 주제인 엔드포인트를 이해하기 위해 웹에서 사용하는 API에 대해 알아보자.

     

    웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 일컫는다.
    예를 들어 블로그 API를 이용하면 블로그에 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.
    그 외에 우체국의 우편번호 API, 구글과 네이버의 지도 API 등 유용한 API들이 많으므로, 요즘은 홈페이지 구축이나 추가 개편 시 따로 추가로 개발하지 않고 이런 오픈 API를 가져와 사용하는 추세다.
    출처: https://ko.wikipedia.org/wiki/API

     

     

    한마디로 서비스 간의 요청과 응답을 위한 명세로 정리할 수 있다. 글의 초반부에서 참고한 stackoverflow의 내용과 연결점이 있다. 엔드포인트는 서비스를 사용가능하도록 하는 서비스에서 제공하는 커뮤니케이션 채널의 한쪽 끝. 즉 요청을 받아 응답을 제공하는 서비스를 사용할 수 있는 지점을 의미한다.

    예를 들어 지하철 최단 거리 경로를 제공하는 웹 서비스가 있다고 하자. 이 서비스를 이용하는 사용자는 출발역과 도착역을 설정하고 최단 경로를 찾는 버튼을 누른다.

    우테코 미션에서 구현한 지하철 최단 거리 경로 찾는 서비스


    이때 최단 거리 경로를 구하는 서비스를 이용하기 위한 요청이 향하는 URI가 엔드포인트이다. 이 웹 서비스는 유효한 형태로 엔드포인트에 요청이 전달되었을 경우 사용자가 알 필요 없는 서비스 내부 로직을 실행하고 응답을 반환한다.

    // 위의 검색 버튼을 누르면 해당 API로 요청을 보낸다. 
    @RestController
    public class PathController {
    	private final PathService pathService;
    
    	public PathController(PathService pathService) {
    		this.pathService = pathService;
    	}
    
    	@GetMapping("/paths") // 이 부분이 최단 경로 기능의 엔드포인트
    	public ResponseEntity<PathResponse> findPath(@RequestParam String source,
    						@RequestParam String target,
    						@RequestParam PathType type) {
    		return ResponseEntity.ok(pathService.findPath(source, target, type));
    	}
    }

    로컬 상황에서 서비스를 구동 중이기에 http://localhost:8080/paths라는 URI에 해당 API가 유효하다고 여기는 파라미터를 포함해서 요청을 보내야 한다. 
    바로 이렇게 http://localhost:8080/paths?source=시청&target=신도림&type=DISTANCE

     


     

     

    엔드포인트에 대한 궁금증으로부터 시작하여 OAuth로 의미를 파악해보고 API에 대해 탐구를 해보고 다시 엔드포인트로 돌아왔다. 다른 분들이 작성해주신 글과 예시를 통해 얕은 지식에 깊이를 더해가는 게 재미있었다. 그리고 실제로 구현해본 프로젝트에 적용된 엔트포인트 개념을 확고히 하며 지식이 연결되는 짜릿함도 느꼈다. 비록 사소한 개념일지 몰라도 지식을 탐구하는 방법과 성취감이 앞으로의 학습에 도움이 될 거 같다. 

     

     

    나름대로의 생각을 정리한 글이라 부족한 부분이 있을 수 있습니다. 의견을 남겨주시면 수정하여 보다 나은 글로 만들어보겠습니다. 감사합니다.

     

     

     

     

     

     

     

    'Web' 카테고리의 다른 글

    Module federation이란  (0) 2022.01.30
    Meta Tag & Open Graph Tag & Google Analytics 리액트에 적용하기  (0) 2020.08.13

    댓글

Toneyparky Blog