프로젝트 follow

[Android Studio, Java] 스프레드시트를 데이터베이스로 사용하기1 - follow(8)

알 수 없는 사용자 2019. 7. 30. 13:30
반응형

해당 글은 번외편 2탄입니다..

 

앞서 올린 게시물들을 만들기 전에 사실 해당 사항을 apk로 만들었습니다.

android studio를 통해 다 구현한 뒤 아이폰 사용자에 대한 해결책이 없어 웹으로 전향했었습니다...

 

웹에 대한 기본적인 배경 지식이 부족했고, 주먹구구식으로 만든 것이라 웹을 좀 잘 아시는 분이 제 글을 보시면 정말 경악을 금치 못할 것 같네요..ㅎ 그래서 잠깐 제가 잘못한 부분들을 짚고 넘어가려 합니다.

 

우선 스프레드시트를 데이터베이스로 사용하기 위해서는 웹프로토콜을 사용한 데이터 전송이 필수적입니다.

즉, HTTP METHOD 를 사용한 정보의 전달을 합니다. 조금 더 추가하자면 json형식으로 데이터를 주고받습니다.

 

만약 http를 이용한 get, post의 방법과 json형식에 대한 기본적인 이해가 있으시다면 약간의 시도를 통해 스프레드시트를 데이터베이스로 사용할 수 있을 것입니다.

 

앞서 포스팅한 글들에는 get과 post를 정말 못썼는데요..

1. javascript를 처음 사용해봤다.

   써본적이 없었어요.. 더군다나 ajax같은 건 정말 생소해서 구글링 후 붙여넣기의 연속으로 만들어낸 코드였습니다.

2. 귀찮고 힘들었다.

   사실 웹으로 만들기 이전에 java를 활용한 android studio를 통해 어플을 먼저 만들었습니다. 해당 어플을 결국 배포하지는 않았지만 이 어플을 만드는데 걸린 기간이 웹을 만드는데 걸린 기간의 거진 3배에 달했습니다. ㅋㅋㅋㅋ

어플에 힘을 많이 쏟아서 웹을 좀.. 대충 만든 감이 없지않아 있네요.

 

이러한 이유로 javascript 단에서 get과 post에 대한 조금은 난잡한 사용이 반복되었는데요. 해당 게시물은 웹에서 사용하는 http프로토콜의 모두라고 할 수 있는 get과 post를 살짝 언급하며 시작하겠습니다.

 

HTTP 메소드 종류

 HTTP Method

전송 형태 

설명 

 GET

GET [request-uri]?query_string

HTTP/1.1\r\n

Host:[Hostname] 혹은 [IP] \r\n 

 GET 요청 방식은 URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청하는형태이다

 

 HTTP Method

전송 형태 

설명 

 POST

POST [request-uri]?query_string

HTTP/1.1\r\n

HOST:[Hostname] 혹은 [IP] \r\n

Content-Lenght:[Lenght in Bytes] \r\n 

\r\n

[query-string] 혹은 [데이터]

POST 요청 방식은 요청 URI(URL)에 폼 입력을 처리하기 위해 구성한 서버 측 스크립트(ASP, PHP, JSP 등) 혹은 CGI 프로그램으로 구성되고 Form Action과 함께 전송되는데, 이때 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어가게 된다. 


표는 참고용으로 보시기 바랍니다.

중요한 것은

1. GET은 url에 ?뒤에 붙어 전송된다.

2. POST는 url단에 표시되지 않는다.

3. GET은 가져오는 것이고 POST는 수행하는 것이다.

 

바로 이 점입니다. 무슨 소리인지는 코드를 통해 설명하도록 하겠습니다.

 

https://rollingpig.tistory.com/3

 

스프레드시트 스크립트편집기를 이용하여 데이터 받아오기 - follow(3)

본 게시물에서 다음 사항들은 건너뛰도록 하겠다. - firebase를 이용한 호스팅, 서버 열기 - html, css 코드에 대한 설명 위 내용들은 검색해 보면 정말 많이 나온다! 그래서 패스한다. follow-dee50.web.app Foll..

rollingpig.tistory.com

해당 게시물을 통해 스프레드시트의 스크립트편집기를 이용하여 웹앱으로 배포하는 과정을 보실 수 있습니다. 웹앱으로 배포한 url을 알고있다는 가정 하에 다음 코드를 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package church.follow;
 
import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
 
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.HashMap;
 
public class CompareForLogin {
    ProgressDialog loading;
    static boolean bool=false;
 
    public void CompareName(final String cpname, final String birth, Context context){
 
        loading =  ProgressDialog.show(context,"Loading","please wait",false,true);
        StringRequest stringRequest = new StringRequest(Request.Method.GET,
"https://script.google.com/macros/s/웹앱으로배포한url주소/exec?action=getItems",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
 
                        ArrayList<HashMap<StringString>> list = new ArrayList<>();
 
                        try {
                            JSONObject jobj = new JSONObject(response);
                            JSONArray jarray = jobj.getJSONArray("items");
 
 
                            for (int i = 0; i < jarray.length(); i++) {
 
                                JSONObject jo = jarray.getJSONObject(i);
 
                                String name = jo.getString("name");
                                String id = jo.getString("birth");
                                String job = jo.getString("job");
 
 
                                HashMap<StringString> item = new HashMap<>();
                                item.put("name", name);
                                item.put("birth", id);
                                item.put("job",job);
 
                                list.add(item);
 
                            }
                        } catch (JSONException e) {
                            Log.e("ERR","ERRRRRR");
                            e.printStackTrace();
                        }
 
 
                        for(int i=0; i<list.size();i++) {
                            if(cpname.equals(list.get(i).get("name"))){
                                if(birth.equals(list.get(i).get("birth"))){
                                    MakeUserInfo.setJob(list.get(i).get("job"));
                                    CompareForLogin.bool =true;
                                    break;
                                }
                            }
                        }
                        loading.dismiss();
                    }
                },
 
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                }
        );
 
        int socketTimeOut = 50000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
 
        stringRequest.setRetryPolicy(policy);
 
        RequestQueue queue = Volley.newRequestQueue(context);
        queue.add(stringRequest);
 
    }
 
}
cs

해당 코드는 위에 링크를 걸어놓은 게시물에서 다룬 내용과 같은 일을 수행합니다. 안드로이드스튜디오에서 작성된 코드이며, 사용된 언어는 Java입니다. 자세한 설명은 윗 링크를 통해 참고 바랍니다.

 

이 코드를 통해 말하고 싶은 점은 http프로토콜을 사용하고, JSON형식의 데이터를 처리할 수만 있다면 언어와 상관없이 스프레드시트를 데이터베이스로 사용 가능하다는 것입니다. 이때, 데이터를 받아오는 경우는 GET을 쓰는 것이 일반적이며 url상으로 노출되면 안되는 정보가 있다면 POST를 사용하여 받아오는 것이 나을 수도 있습니다.

 

POST를 활용한 예시코드도 같이 올리겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package church.follow;
 
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
 
import java.util.HashMap;
import java.util.Map;
 
public class AddPray extends AppCompatActivity {
    Button buttonAddPray;
    EditText Pray;
    static String myname;
    ProgressDialog loading;
 
    protected void onCreate(Bundle savedInstanceState) {
        final Context context =this;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.forpray);
        buttonAddPray=(Button)findViewById(R.id.addpray);
        Pray=(EditText)findViewById(R.id.et_pray);
        buttonAddPray.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                String prays = Pray.getText().toString();
                prays= prays.replace("\n"," ");
                addItemToSheet(context,myname,prays,"pray");
 
            }
        });
 
 
 
    }
 
    private void   addItemToSheet(Context context, String Name, String Grade, String Date) {
        final String name=Name;
        final String grade=Grade;
        final String date=Date;
        loading =  ProgressDialog.show(context,"Loading","please wait",false,true);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, "https://script.google.com/macros/s/웹앱으로배포한url/exec",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
 
                        loading.dismiss();
                        Toast.makeText(AddPray.this,response,Toast.LENGTH_LONG).show();
                        AddPray.this.finish();
 
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                    }
                }
        ) {
            @Override
            protected Map<StringString> getParams() {
                Map<StringString> parmas = new HashMap<>();
 
                //here we pass params
 
                parmas.put("action","update3");
                parmas.put("name",name);
                parmas.put("grade",grade);
                parmas.put("date",date);
 
                return parmas;
            }
        };
 
        int socketTimeOut = 50000;// u can change this .. here it is 50 seconds
 
        RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        stringRequest.setRetryPolicy(retryPolicy);
 
        RequestQueue queue = Volley.newRequestQueue(this);
 
        queue.add(stringRequest);
    }
}
cs

해당 코드는 다음 게시물과 상응되는 코드입니다.

https://rollingpig.tistory.com/8?category=807974

 

엑셀을(스프레드시트) 데이터베이스로 활용하기 - follow(6)

해당 포스트의 제목을 무엇으로 해야 이 프로젝트가 필요한 사람들이 쉽게 찾을 수 있을 지에 대한 살짝의 고민 결과 엑셀을 데이터베이스로 활용하기 라는 제목을 붙였다. 해당 프로젝트는 실제로 엑셀 그 자체를..

rollingpig.tistory.com

어떠한 동작을 하는지 보는것이 아닌 http프로토콜을 사용한 get과 post의 사용법을 보고 가셨으면 좋겠습니다.

위와 같은 동작은 무슨 언어에서도 사용 가능한 방법입니다.

반응형