Login으로 살펴보는 서버연동

Jungmin Lee·2021년 1월 1일
5

Android

목록 보기
3/7
post-thumbnail

✔ 요청방식(POST, DELETE, GET, PUT)

들어가며

서버와의 요청방식에는 POST, DELETE, GET, PUT이 있으며 request를 통해 데이터를 보내고 response를 통해 받아온다.
GET과 같이 보낼 것은 없고 받아올 것만 있을 경우에는 request를 비워서 보낼 뿐 결국 같은 원리로 진행된다고 볼 수 있다.

Gradle 설정

build.gradle(:app)의 dependencies에 해당 내용을 입력한다

//build.gradle(:app)

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

RequestToServer

baseUrl을 설정하는 페이지이며 이후 설정하는 RequestInterface를 호출하여 이용한다.

object RequestToServer {
    var retrofit = Retrofit.Builder()
            .baseUrl("http:baseurl을 여기에 입력")
            .addConverterFactory(GsonConverterFactory.create())
            .build()

    var service: RequestInterface = retrofit.create(
            RequestInterface::class.java)
}

RequestInterface

각 api에 해당하는 상세 경로를 형식과 함께 붙여준다. 이때 서버 요청 함수를 선언하고 필요에 따라 원하는 요청형식과 응답형식을 넘겨준다.

interface RequestInterface{
    @POST("/api/v1/members/login")
    fun requestLogin(@Body body : RequestLogin) : Call<ResponseLogin>
}

RequestLogin

로그인을 요청하기 위한 데이터 형식이다. 예시코드는 아이디와 비밀번호를 통해 로그인을 요청하는 방식이다.

data class RequestLogin(
    var userId: String,
    var password: String
)

ResponseLogin

로그인 요청에 따른 응답 형식으로 서버에서 주는 형식과 동일하게 설정해야 한다.

data class ResponseLogin(
        val code : Int,
        val success : Boolean,
        val msg : String,
        val data : SomeData?
)

data class SomeData(
        val accessToken : String,
        val refreshToken : String
)

MainActivity

activity에서 입력받은 로그인정보를 서버에 전달한다.

val requestToServer = RequestToServer

//버튼 눌렀을때 서버요청
binding.btnLogin.setOnClickListener(){
            if (binding.loginEtId.text.isNullOrBlank() || binding.loginEtPw.text.isNullOrBlank()) {
                Toast.makeText(this, "이메일과 비밀번호를 모두 입력하세요.", Toast.LENGTH_SHORT).show()
            } else {
                //로그인 요청
                requestToServer.service.requestLogin(
                    RequestLogin(
                        userId = binding.loginEtId.text.toString(),
                        password = binding.loginEtPw.text.toString()
                    )   //로그인 정보를 전달
                ).enqueue(object : Callback<ResponseLogin> {
                    override fun onFailure(call: Call<ResponseLogin>, t: Throwable) {
                        Log.d("통신 실패", "${t.message }")
                    }

                    override fun onResponse(
                        call: Call<ResponseLogin>,
                        response: Response<ResponseLogin>
                    ) {
                        if (response.isSuccessful) {
                            if (response.body()!!.success) {
                                Log.d("성공", response.body()!!.data.toString())
                                myjwt=response.body()!!.data!!.accessToken
                                startActivity(Intent(this@LoginActivity, MainActivity::class.java));
                                finish()

                            } else {
                                Log.d("실패", "실패")
                                Toast.makeText(this@LoginActivity, "아이디와 비밀번호를 확인해주세요.", Toast.LENGTH_SHORT).show()
                            }
                        }
                    }
                })
profile
금융 도메인과 개발 지식을 함께 쌓아가는 주니어 개발자입니다😊

2개의 댓글

comment-user-thumbnail
2021년 1월 1일

깔끔하게 정리하셨네요! 잘보고 갑니다

답글 달기
comment-user-thumbnail
2021년 1월 1일

안드로이드 관심있었는데 잘 보고가요🙂

답글 달기