Android appFirebase를 연결하는 방법 까지만 테스트 해보려고 합니다



먼저 android studio에서 Empty Activity로 앱을 하나 생성 합니다.


firebase android app


Project Name보다는 package name을 잘 기억해 둬야 됩니다.

com.copycoding.firebase 이렇게 미리 복사 해놓고 [Finish] 버튼을 눌러 작업을 진행 합니다.

 

이제는 웹에서 Firebase에 로그인을 합니다.


firebase android app


연결 하려는 프로젝트를 선택 하고 console로 이동 합니다.


firebase android app


[+앱 추가]를 선택 해서 확장 합니다.


firebase android app


추가할 플랫폼이 확장 되는데 여기에서 안드로이드 아이콘을 클릭 합니다.


firebase android app


Android studio에서 앱을 생성할 때 복사해둔 Package name을 적어주고 닉네입도 입력 합니다.  [앱 등록] 버튼을 클릭해서 2단계로 넘어 갑니다.


firebase android app


구성 파일 다운로드에서 [google-service.json 다운로드]를 클릭하면 파일이 하나 다운로드 되는데 앱에서 firebase에 연결하는데 사용되는 idkey 정보가 들어 있습니다.

다운받은 파일을 그림에서 처럼 android studio에 붙여넣기를 해주고 [다음] 버튼을 클릭 합니다.


firebase android app


안드로이드에 추가한 모습입니다.

 

3단계 Firebase SDK 추가에서는 Firebase를 사용하는데 필요한 내용을 gradle에 추가하는 방법을안내 합니다.


firebase android app


gradle에 이미 있는 내용도 있고 추가 해야할 내용도 있습니다. 직접 손으로 입력하는게 아니고 우측 복사 아이콘을 클릭하여 소스에 붙여넣기를 하면 됩니다.


firebase android app


2개의 gradle에 그림처럼 소스에 추가를 했다면 안드로이드 스튜디오 우측 상단에 나타나는 [Sync now]를 클릭해 줍니다.

잠시 후 안드로이드 스튜디오의 씽크가 종료되면 [다음] 버튼을 클릭 합니다.


firebase android app


4단계에서 앱과 Firebase가 연결 되었다는 내용을 볼 수 있습니다.  4단계에서 수고하셨습니다.”라는 내용이 나오지 않고 계속 맴도는 경우가 있습니다그럼 저는 안드로이드 프로젝트를 다시 만들어 샤용 합니다아직 코딩을 시작하기 전이니 가능 한 방법이죠.


- copy coding -


Spring Boot에서 프로젝트를 생성하여 Firestore에 있는 데이터 작업을 하려고 합니다.  


Firestore spring boot crud


Firebase에는 다음과 같이 collection을 만들어서 데이터를 입력 하였습니다.


Firestore spring boot crud


이 데이터베이스에 데이터를 조회, 추가, 수정, 삭제하는 기능을 Spring Boot를 이용하여 만들어 보려고 합니다.

 

Spring Boot에서 Spring Starter Project를 선택하여 신규 프로젝트를 생성 합니다.


Firestore spring boot crud


입력 사항은 테스트이니까 대충 적어 넣고 Next 버튼을 클릭 합니다.


Firestore spring boot crud


 

DependencySpring Web만 추가 했습니다.  Finish 버튼을 클릭 합니다.

 

pom.xmlfirebase를 추가 합니다현재 6.13.x 버전까지 나와있는데 한 단계 낮추어서 적어봤습니다.

 

               <dependency>

                   <groupId>com.google.firebase</groupId>

                   <artifactId>firebase-admin</artifactId>

                   <version>6.12.1</version>

                </dependency>

 

Firebase의 필드에 해당하는 Vo를 생성 합니다.

 

package com.copycoding.firebase;

 

public class Member {

        String id;

        String name;

        int age;

        String tel;

       

        public String getId() {

               return id;

        }

        public void setId(String id) {

               this.id = id;

        }

        public String getName() {

               return name;

        }

        public void setName(String name) {

               this.name = name;

        }

        public int getAge() {

               return age;

        }

        public void setAge(int age) {

               this.age = age;

        }

        public String getTel() {

               return tel;

        }

        public void setTel(String tel) {

               this.tel = tel;

        }

}

 

 

Service를 생성하기 위해 먼저 Interface 파일을 생성하고

 

package com.copycoding.firebase;

 

public interface FirebaseService {

 

        public insertMember(Member member) throws Exception;

       

        public Member getMemberDetail(String id) throws Exception;

       

        public String updateMember(Member member) throws Exception;

       

        public string deleteMember(String id) throws Exception;

}

 

 

 

Service Implement도 작성 합니다.

 

package com.copycoding.firebase;

 

import org.springframework.stereotype.Service;

 

import com.google.api.core.ApiFuture;

import com.google.cloud.firestore.DocumentReference;

import com.google.cloud.firestore.DocumentSnapshot;

import com.google.cloud.firestore.Firestore;

import com.google.cloud.firestore.WriteResult;

import com.google.firebase.cloud.FirestoreClient;

 

@Service

public class FirebaseServiceImpl implements FirebaseService {

 

        public static final String COLLECTION_NAME="member";

       

        @Override

        public String insertMember(Member member) throws Exception {

               Firestore firestore = FirestoreClient.getFirestore();

               ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(member.getId()).set(member);

               return apiFuture.get().getUpdateTime().toString();

        }

 

        @Override

        public Member getMemberDetail(String id) throws Exception {

               Firestore firestore = FirestoreClient.getFirestore();

               DocumentReference documentReference = firestore.collection(COLLECTION_NAME).document(id);

               ApiFuture<DocumentSnapshot> apiFuture = documentReference.get();

               DocumentSnapshot documentSnapshot = apiFuture.get();

               Member member = null;

               if(documentSnapshot.exists()) {

                       member = documentSnapshot.toObject(Member.class);

                       return member;

               } else {

                       return null;

               }

        }

 

        @Override

        public String updateMember(Member member) throws Exception {

               Firestore firestore = FirestoreClient.getFirestore();

               ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(member.getId()).set(member);

               return apiFuture.get().getUpdateTime().toString();

        }

 

        @Override

        public String deleteMember(String id) throws Exception {

               Firestore firestore = FirestoreClient.getFirestore();

               ApiFuture<WriteResult> apiFuture = firestore.collection(COLLECTION_NAME).document(id).delete();

              

               return "Document id :" + id + " delete";

        }

}

 

 

 

이제 마지막으로 Controller Rest Api 형식으로 작성 합니다.

 

package com.copycoding.firebase;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

public class FirebaseController {

 

        @Autowired

        FirebaseService firebaseService;

       

        @GetMapping("/insertMember")

        public String insertMember(@RequestParam Member member) throws Exception {

               return firebaseService.insertMember(member);

        }

       

        @GetMapping("/getMemberDetail")

        public Member getMemberDetail(@RequestParam String id) throws Exception {

               return firebaseService.getMemberDetail(id);

        }

       

        @GetMapping("/updateMember")

        public String updateMember(@RequestParam Member member) throws Exception {

               return firebaseService.updateMember(member);

        }

       

        @GetMapping("/deleteMember")

        public String deleteMember(@RequestParam String id) throws Exception {

               return firebaseService.deleteMember(id);

        }

}

 

여기 까지는 일반 프로젝트와 동일한 방식으로 작성을 하면 됩니다.

 

package com.copycoding.firebase;

 

import java.io.FileInputStream;

import javax.annotation.PostConstruct;

import org.springframework.stereotype.Service;

import com.google.auth.oauth2.GoogleCredentials;

import com.google.firebase.FirebaseApp;

import com.google.firebase.FirebaseOptions;

 

@Service

public class FirebaseInitialize {

 

        @PostConstruct

    public void initialize() {

        try {

        FileInputStream serviceAccount =

                  new FileInputStream("./copycodingServiceAccount.json");

 

                FirebaseOptions options = new FirebaseOptions.Builder()

                  .setCredentials(GoogleCredentials.fromStream(serviceAccount))

                  .setDatabaseUrl("https://copycoding-bca04.firebaseio.com")

                  .build();

 

                FirebaseApp.initializeApp(options);

            } catch (Exception e) {

                e.printStackTrace();

            }

       

        }

}

 

추가로 Firebase에 접속하기 위한 설정 파일을 하나 생성해주면 됩니다.

이렇게 해서 프로그램이 완성 되었습니다.


이제 테스트를 해 봅니다.

귀찮으니 조회만 해 봅니다.


Firestore spring boot crud


조회가 잘 되는 군요.

성의가 없는 것 같아 삭제도 해 봅니다.


Firestore spring boot crud


삭제가 되었다고 하는데 Firebase 데이터베이스에 들어가 확인해 봅니다.


Firestore spring boot crud


document 2번이 삭제 되어 있습니다이런 식으로 작업을 하면 됩니다.


- copy coding -


csv 데이터 json 변환 사이트

 

csv 데이터를 json으로 변환해주는 웹사이트는 검색을 해보면 많이 있습니다대부분 데이터를 복사해서 붙여 넣거나 파일을 업로드 하면 자동으로 변환이 진행 됩니다.

 

id,name,age,tel

1,kim,11,000-000-0000

2,lee,22,000-000-0000

 

이런 데이터를 넣으면

[

  {

    "id": "1",

    "name": "kim",

    "age": "11",

    "tel": "000-000-0000"

  },

  {

    "id": "2",

    "name": "lee",

    "age": "22",

    "tel": "000-000-0000"

  }

]

 

이렇게 변환을 해줍니다.

그렇지만 배열이나 Object가 있는 경우는 대부분의 사이트가 해결해주지 못합니다.

 

id,name,age,tel/home,tel/mobile,shoes/0,shoes/1,shoes/2

1,kim,11,000-000-0000,111-1111-1111,red,blue,yellow

2,lee,22,010-0100-0100,020-2222-2222,green,black,white

 

이런 데이터를 넣으면

 

[

  {

    "id": "1",

    "name": "kim",

    "age": "11",

    "tel/home": "000-000-0000",

    "tel/mobile": "111-1111-1111",

    "shoes/0": "red",

    "shoes/1": "blue",

    "shoes/2": "yellow"

  },

  {

    "id": "2",

    "name": "lee",

    "age": "22",

    "tel/home": "010-0100-0100",

    "tel/mobile": "020-2222-2222",

    "shoes/0": "green",

    "shoes/1": "black",

    "shoes/2": "white"

  }

]

 

이런 결과가 나옵니다.


검색을 하다 보니 이런 문제를 해결해 주는 사이트가 있습니다.

https://www.convertcsv.com/csv-to-json.htm

 

id,name,age,tel/home,tel/mobile,shoes/0,shoes/1,shoes/2

1,kim,11,000-000-0000,111-1111-1111,red,blue,yellow

2,lee,22,010-0100-0100,020-2222-2222,green,black,white

 

이런 데이터를 넣으면

 

[

 {

   "id": 1,

   "name": "kim",

   "age": 11,

   "tel": {

      "home": "000-000-0000",

      "mobile": "111-1111-1111"

   },

   "shoes": [

      "red",

      "blue",

      "yellow"

   ]

},

 {

   "id": 2,

   "name": "lee",

   "age": 22,

   "tel": {

      "home": "010-0100-0100",

      "mobile": "020-2222-2222"

   },

   "shoes": [

      "green",

      "black",

      "white"

   ]

}

]

 

이렇게 배열도 객체도 잘 변환해 줍니다.

 

 

대용량 csv 변환

 

온라인으로 csv 데이터를 json으로 변환하는 방법은 데이터가 대용량인 경우에는 불가능 합니다이런 경우에는 csvtojson을 이용해서 변환하면 됩니다.

먼저 설치를 하고

 

>npm i csvtojson


csv to json

 

csvtojson.js 파일 위치를 확인 하여 절대 경로나 상대 경로로 실행을 하면 됩니다.

D:\copycoding\node_modules\csvtojson\bin>csvtojson d:\copycoding\test.csv > d:\copycoding\test.json

 

이렇게 하면 몇 십만 건도 변환이 되는걸 테스트 해 보았는데 잘 변환 됩니다

 

- copy coding -



빨간 나비를 보는 꿈 해몽

 -> 정치인이나 공무원 교사 등 공적인 직업을 갖게 될 조짐이다.


호랑나비가 어깨나 치마 앉는 꿈 해몽

 -> 자신을 줄기차게 따라다니며 괴롭히는 사람이 생길 것을 암시하고 있다.


나비가 꽃에 앉은 것을 보는 꿈 해몽

 -> 미혼자는 연애를 하게 되며 반가운 사람을 만나기도 한다.


나비가 날아다니는 것을 보는 꿈 해몽

 -> 매사에 불길한 기운이 감돌고 있으니 주의를 요하는 꿈이다.


나비가 공중을 날아다니는 것을 보는 꿈 해몽

 -> 이성과 연관된 일로 신경을 쓰게 되는데, 특히 상대방의 바람기로 인해 낭패를 볼 수 있다.


나비가 되어 날아 다니는 꿈 해몽

 -> 작업을 잘 마무리짓거나 작품을 발표하여 널리 명성을 떨치게 된다.


나비가 떼지어 날아 다니는 꿈 해몽

 -> 집안에 경사가 생겨서 기쁨이 있는 세월을 보내게 된다.


butterfly dream 나비 꿈 해몽



나비가 죽거나 다치는 꿈 해몽

 -> 부인에게 나쁜 일이 일어나고, 외도하던 상대방과 말썽이 생길 징조이다.


죽은 나비의 꿈 해몽

 -> 위험에 빠질 수 있으니 조심해야 한다.


나비나 잠자리 등이 부화하는 꿈 해몽

 -> 사업이 크게 확장되거나 이득을 보게 된다.


나비를 잡으려다가 넘어지는 꿈 해몽

 -> 허황된 꿈을 이루려고 하다가 정신과 물질의 손실만 보게 된다.


나비와 벌이 꽃에 날아드는 꿈 해몽

 -> 연애가 순조롭게 진행되고 행복한 생활이 계속될 것이다.


나비와 벌이 서로 어울려 있는 꿈 해몽

 -> 진행하던 일이 잘못되거나 말썽이 생겨서 손실을 보게 된다.


불 속으로 나비가 날아다는 꿈 해몽

 -> 일이 중도에 좌절되거나 경쟁자에게 패하는 등의 불길한 일이 일어날 징조이다.


나비, 나방의 애벌레의 꿈 해몽

 -> 질투의 증거로 누군가 당신에게 수치스러운 일을 하려고 한다.


별이 떨어진 주위를 나비 여러 마리가 나는 꿈 해몽

 -> 자손이 여러 사람과 깊은 인연을 맺는다.


화려한 무늬를 가진 나비 꿈 해몽

 -> 더 이상 바랄 나위가 없을 정도로 생활이 만족스러워진다.


나비가 조명 주위를 날고 있는 꿈 해몽

 -> 현재 자신이 이룩한 업적은 오래가지 못할 것이다.


하늘 위로 파란 나비가 날아가는 꿈 해몽

 -> 기분이 상쾌해지고 추진하는 일들이 잘 풀리거나, 승진, 당선, 합격 등에서 길한 조짐이 있다.


- copy coding -


1···37383940414243···118

+ Recent posts