들어가기에 앞서 - CURL 구현하기

김태훈·2023년 6월 28일
0

목적

HTTP 통신에 대한 이해를 높이기 위해 CURL을 구현합니다.
따라서 완전하게 동작하는 CURL을 만들기보다, HTTP 통신을 이해할 수 있는 수준으로 구현을 하려 합니다.

CURL이란?

다양한 프로토콜로 데이터를 전송하는 명령줄 도구로, Http, Https, ftp 등의 프로토콜을 사용할 수 있습니다.
아래는 www.example.com이라는 주소로 Http 요청을 보내는 예시입니다.

// 터미널에서 입력
curl www.example.com

목표

우리는 HTTP의 이해를 돕기 위해 cURL을 만들고 있습니다. 따라서 HTTP 1.1 버전만을 지원할 생각입니다.
아무튼 cURL에는 다양한 기능(옵션)이 존재하는데, 아래 기능들을 구현할 생각입니다.

  • 입력한 args 내의 파라미터 파싱
  • 입력한 URL로 HTTP 요청을 보내 응답을 받아오기
  • HTTP 메서드를 지정하기 (플래그 -X)
  • 헤더 지정하기 (플래그 -H)
  • 데이터 입력하기 (플래그 -d)

만약 cURL 자체의 사용법이 궁금하다면 해당 글을 참고하세요.

CURL의 역할

CURL은 크게 아래 역할들을 필요로 합니다.

  1. 사용자가 입력한 플래그로 HTTP 요청 만들기
  2. 특정 서버로 HTTP 요청 보내기
  3. 해당 서버에서 HTTP로 응답을 받기

초기작업

테스트에 사용할 Arguments는 -request GET -H accept:*/* -H User-Agent:curl/7.79.1 localhost:8080 입니다.
아래와 같이 세팅이 가능합니다.

  1. 인텔리제이 우측 상단의 실행 버튼 왼쪽 버튼을 클릭합니다(아래 사진에서 Main)

  2. 파란색 블록을 쳐둔 부분에 위 Arguments를 복사합니다.

다른 Arguments로 사용하고 싶으신 분들은 curl 명령어를 참고해 만들어주세요.

구현

간단하게 CURL 객체부터 잡아두고 가겠습니다. 아래 코드를 복사해서 사용하세요.

package org.kimtaehoondev;

public class Main {
    public static void main(String[] args) {
        MyCurl myCurl = new MyCurl();
        myCurl.run(args);
    }
}
package org.kimtaehoondev;

public class MyCurl {

    public void run(String[] args) {
		// 입력값을 통해 Http 요청을 만든다
        // 특정 서버로 해당 요청을 보낸다
        // 해당 서버에서 받은 응답을 Http로 만든다
    }
}

자, 이제 준비는 다 끝났습니다. 다음 글부터는 CURL을 점차적으로 구현해볼 생각입니다.

profile
작은 지식 모아모아

0개의 댓글