*/Android

[안드로이드] ec2 서버와 통신

sssbin 2022. 10. 18. 14:43

<aws>

ec2 인스턴스, rds 생성

 

<안드로이드>

build.gradle에 라이브러리 추가

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'

implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'

 

manifest 파일에 인터넷 접속 권한 주기

<uses-permission android:name="android.permission.INTERNET"/>

 

RetrofitClient 클래스 작성

package com.example.dinostudy.repository;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitClient{
    private final static String BASE_URL = "http://퍼블릭 IPv4 DNS 주소:3000/";
    private static Retrofit retrofit = null;

    private RetrofitClient() {
    }

//    static OkHttpClient okHttpClient = new OkHttpClient.Builder()
//            .connectTimeout(1, TimeUnit.MINUTES)
//            .readTimeout(30, TimeUnit.SECONDS)
//            .writeTimeout(15, TimeUnit.SECONDS)
//            .build();

    public static Retrofit getClient() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
//                    .client(okHttpClient)
                    .addConverterFactory(GsonConverterFactory.create()) // JSON 파싱을 위한 GsonConverterFactory를 추가
                    .build();
        }

        return retrofit;
    }
}

처음엔 자꾸 타임아웃 에러가 떴는데 원인을 알 수가 없으니 타임아웃 시간도 설정해줬었는데

역시 문제는 서버 연결 문제였다. 서버 제대로 올리니까 에러 안 뜸 ㅎㅎ;

 

서버 연결이 제대로 안된다면 거의 서버주소 문제 / 보안그룹 문제임,,,,,,

⭐️⭐️⭐️⭐️⭐️ ec2 인스턴스 보안그룹 편집 ⭐️⭐️⭐️⭐️⭐️

 

사용자 지정 TCP - 포트번호 3000 !!!!!!!!!

내가 서버에 대한 지식이 제대로 없다 보니,,, 포트번호 잘못 설정해놓고 왜 자꾸 서버가 안 열리지? 하고 계속 삽질했다 ㅠ

 

** 처음에 그대로 http://~~~/ 이렇게 baseUrl을 설정하면

clearText 어쩌구 오류가 뜬다

해결방법은 1. https://~~~/ 로 주소 바꿔주기 2. manifest 파일에 android:usesCleartextTraffic="true" 속성 추가

 

그리고 대부분 elastic ip를 사용하지만...

나는 ec2 사용에 익숙치 않아서 예전에 요금이 계속 부과된 안 좋은 기억이 있어서... 일단 연결 안 해놨다

필요하면 나중에 하겠지 뭐.................

 

이제 안드로이드에서 API 인터페이스, 데이터, 통신 코드 등등 작성해주고

메인 코드에서 레트로핏 호출해서 사용해주면 된다!!

ServiceApi service = RetrofitClient.getClient().create(ServiceApi.class);

 

드디어 연결됐는데 신택스에러 뜸ㅎ.ㅎ

이제 다시 오류 수정하러 가야겠다

ㅠㅠ