동석쿠
프로그래밍 공부
동석쿠
전체 방문자
오늘
어제
  • 공부 (80)
    • 공부기록 (64)
      • 웹개발 (6)
      • Java (7)
      • cs 공부 (3)
      • http 웹 기본 지식 (8)
      • 자바 스프링 (20)
      • 개인 미니프로젝트 (3)
      • 알고리즘 공부 (6)
      • 면접준비 (2)
      • 프론트공부 (8)
      • 파이썬 플라스크 (1)
    • 항해99 기록 (14)
      • 회고록 (10)
      • 팀프로젝트 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프링
  • 프로그래머스
  • Java
  • Post
  • Get
  • 리프레쉬토큰
  • 알고리즘
  • API
  • lombok
  • 스프링부트
  • 리프레시토큰
  • 리스트
  • 리액트
  • 상속
  • 파이썬
  • 자바스크립트
  • 문법
  • JPA
  • 항해99
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
동석쿠

프로그래밍 공부

Java (네트워킹)
공부기록/Java

Java (네트워킹)

2022. 1. 10. 02:59

네트워킹 - Retrofit, OpenAPI

네트워킹(Networking)

  • 두 대이상의 컴퓨터를 케이블 또는 인터넷으로 연결하여 네트워크를 구성하는 것을 말한다.

네트워크의 기본적인 개념

  • 클라이언트(Client) / 서버(Server) (컴퓨터간의 관계를 역할로 구분)
  • 서버 : 서비스를 제공하는 컴퓨터, 요청에 응답하는 컴퓨터
  • 클라이언트 : 서비스를 사용하게 되는 컴퓨터, 요청을 하는 컴퓨터

IP주소

-컴퓨터를 구별하는데 사용되는 고유한 값으로 인터넷에 연결이 되어있는 모든 컴퓨터는 IP주소를 갖는다.

 

URL

-URL은 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것

(우리가 네이버, 구글을 검색할 때도 URL을 이용하여 접근을 하는 것)

-URL의 형식

'프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조'의 형식을 띄고있다.

→ 프로토콜은 복수의 컴퓨터 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약을 의미한다

대표적인 예시로는 Http가 있다.

 

포트번호

: 통신에 사용되는 서버의 포트번호

- 포트(port)는 보통 항구나 공항을 의미하는 것인데 컴퓨터에서도 포트는 비슷한 역할을 지닌다.

외부의 다른 장비와 접촉하기 위한 플러그 역할을 하는 것. 즉, 포트번호는 어떤 프로그램에 접속 할 것인지를 식별하는 역할이다 아무것도 입력하지 않으면 기본값은 http는 80번, https는 443번이다.

 

API (Application Programming Interface)

응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어 할 수 있게 해주는 인터페이스를 의미한다. client - server 관점에서 API는 요청과 응답의 형식에 대한 약속.

 

Retrofit 라이브러리를 활용하여 API 호출하기

왜 Retrofit을 사용해야 할까?

  • Retrofit을 사용하지 않고 원시적인 방법으로 구현을 하려면, JSON 파싱, 캐싱 등 구현해야할 부분이 너무나 많다.
  • Retrofit 라이브러리를 사용하게 될 경우 복잡한 구현들을 감소시켜준다. 즉, API에 대한 접근을 보다 쉽게 만들어준다.
  • 각종 에러처리를 쉽게 해결할 수 있으며 원시적인 방법에 비해 가독성도 좋다.
  • 실제로 프로젝트나 프로그램을 만들 때 공공 데이터 API를 많이 활용하곤 한다. 그래서 이번에는 Retrofit 라이브러리를 활용해서 JSON으로 구조화된 API를 호출하는 실습을 해보겠다.

Retrofit 라이브러리 실습 준비 단계

Retrofit을 사용하기 위해서는 아래의 3가지 라이브러리가 필요합니다. build.gradle 파일의 dependencies{} 코드블럭에 넣어야한다. 

(다른 곳에 구현된 코드를 라이브러리(library)라고 한다. 라이브러리는 빌드도구인 Gradle를 통해서 import 된다. 즉, 우리가 Retrofit 라이브러리를 사용한다고 했으니 필요한 라이브러리를 import하는 것.)

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.8.5'

build.gradle의 dependencies{}안에 위의 세줄을 넣기

이제 우리가 가져올 데이터는 reqres.in 사이트에 위치한 JSON 데이터다. 아래 사이트는 간단하게 Retrofit 라이브러리를 사용한 실습 코드를 확인하기 좋은 사이트다.

사이트에 있는 많은 데이터중 우리는 아래의 LIST USERS로 된 데이터를 호출할 것이다.

  • 오른쪽창에서 JSON 데이터가 어떻게 들어가 있는지 확인할 수 있다. API를 호출하려면, api가 위치한 페이지 URL을 확인해야 하는데. Request라고 되어있는 부분을 보면 우리가 찾을 데이터는 /api/users?page=2에 있다.
  • 전체 URL은 https://reqres.in/api/users?page=2 인데 이 주소는 다음과 같은 의미를 가집니다.
    • 통신 프로토콜은 https 를 사용한다.
    • GET은 HTTP METHOD중 하나로, 해당하는 데이터를 가져온다.
    • 요청을 하는 도메인(홈페이지 또는 서비스의 주소)은 [reqres.in](<http://reqres.in>) .
    • 요청을 하는 API의 위치는 /api/users 이다.
    • 요청을 하는 API에 전달할 데이터는 page=2 이다. API의 의도는 해당 API의 2페이지를 줘! 라는 의미이다.

쿼리스트링(Query String)

→ url 주소에 ?는 쿼리스트링을 작성하겠다는 신호. 쿼리스트링은 사용자가 입력 데이터를 전달하는 방법중 하나다

 

https://reqres.in/api/users?page=2

이 주소를 부라우저 주소창에 입력해보면 데이터가 무엇이 있는지 볼 수 있다. 그러나 가독성이 좋지않아 보기 힘든데

JSON View를 설치하여 확인하면 가독성이 좋아진다.

<JSON View는 웹개발 종합 수업에서 설치하였다>

이제 어떤 구조와 데이터가 있는지 알게 되었다. 그렇다면 이제 실제로 API를 호출해보자

public interface RetrofitService {
    @GET("/api/users/")
    Call<Object> retrofitTest(@Query("page") int page);
}
//@Query는 Retrofit 라이브러리를 이용할 때 쿼리스트링을 입력하는 방법입니다.
//이렇게 파라미터 변수로 작성해놓으면 함수를 호출할 때 파라미터를 바꿔가며 원하는 페이지를 조회할 수 있습니다.
```
public class RetrofitClient {
    private static final String BASE_URL = "https://reqres.in/";
		//BASE_URL에는 변하지 않는 URL주소를 입력해 주면 됩니다. 데이터의 위치에 따라 변하지 않는 주소를 말이죠.

    public static RetrofitService getApi() {
        return getInstance().create(RetrofitService.class);
    }//getInstance 메소드를 통해 인스턴스를 반환하게됩니다.

    private static Retrofit getInstance() {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();//통신을 할 때 JSON 사용 및 해당 객체로의 파싱을 위해 생성합니다.
        return new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();//서버에서는 JSON으로 응답하므로 우리는 build.gradle에 설정한 gson을 이용합니다.
    }
}
public class Main {
    public static void main(String[] args) {
        Call<Object> retrofitTest = RetrofitClient.getApi().retrofitTest(2);//우리는 2페이지를 확인할 것이기 때문에 2를 삽입하겠습니다.
				//Call은 retrofit라이브러리의 인터페이스이며 서버에서 응답하는 값을 담는 역할을 합니다.
        try {
            System.out.println(retrofitTest.execute().body());//서버에서 받은 데이터를 확인해보겠습니다.
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

출력결과로는 우리가 사이트에서 확인한 데이터가 한줄로 길게 출력이 된다.

이처럼 우리는 여러 사이트에서 제공하는 API를 받아와 활용할 수 있다.

 

여기까지 스파르타코딩에서 제공해주는 자바 강의이다.

쉬운 부분도 있고 어렵고 이해하기 힘든 부분도 존재한다. 그러나 이 모든것을 전부 다 외울필요는 없다고 생각한다. 

이 강의에서 가장 중요한건 자바에 어떠어떠한 기능들이 존재하는지 알고, 필요할 때 그 기능을 떠올려서 검색하고 찾아서 사용할 수 있는 능력을 기르는 것이다. 

 

'공부기록 > Java' 카테고리의 다른 글

Java (Getter)(Setter)  (0) 2022.01.21
Java 해쉬함수  (0) 2022.01.15
Java (제네릭스)(람다)(스트림)  (0) 2022.01.09
Java (예외,에러처리)(날짜와 시간 다루기)(컬렉션)  (0) 2022.01.08
Java 객체지향언어 (클래스,인스턴스,메소드,생성자,상속,접근제어자,추상클래스,인터페이스)  (0) 2022.01.06
    '공부기록/Java' 카테고리의 다른 글
    • Java (Getter)(Setter)
    • Java 해쉬함수
    • Java (제네릭스)(람다)(스트림)
    • Java (예외,에러처리)(날짜와 시간 다루기)(컬렉션)
    동석쿠
    동석쿠

    티스토리툴바