데이터베이스2020. 12. 26. 19:55
728x90

* 프레임워크 : Spring Boot

* 프로젝트 : Gradle

* 데이터베이스 : firebase의 firestore

 

 

[결과]

 

 

[ Firestore ]

 

우선 파이어스토어에 다음과 같이 데이터를 넣는다.

(문서IDFMgoGDQHyNQ7IfGycZ0h 이런 식으로 설정 할 필요는 없습니다!

제가 잘 모르고 자동완성ID를 한거에요ㅠ)

 

 

 

[ spring 코드 ]

 

controller / Restcontroller.java

package DSC4.cafein.controller;


import DSC4.cafein.domain.Member;
import DSC4.cafein.service.FirebaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@org.springframework.web.bind.annotation.RestController
public class RestController {
    @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);
    }
}

 

 

domain / Member.java

package DSC4.cafein.domain;



public class Member {

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String email;
    private String username;
    private String id;
    private String password;




}

 

 

 

service / FirebaseService.java

package DSC4.cafein.service;

import DSC4.cafein.domain.Member;

public interface FirebaseService {
    public String 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 / FirebaseServiceImpl.java

package DSC4.cafein.service;

import DSC4.cafein.domain.Member;
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;
import org.springframework.stereotype.Service;

@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<com.google.cloud.firestore.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<com.google.cloud.firestore.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";
    }
}

 

 

service / FirebaseInitializer.java

package DSC4.cafein.service;

import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.swing.tree.ExpandVetoException;
import java.io.FileInputStream;

@Service
public class FirebaseInitializer {
    @PostConstruct
    public void initialize(){
        try{
            FileInputStream serviceAccount=
                    new FileInputStream("./src/main/resources/serviceAccountKey.json");
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .build();

            FirebaseApp.initializeApp(options);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

 

 

build.gradle

 

implementation 'com.google.firebase:firebase-admin:6.8.1'

-> 이것만 추가해 주면 된다.

 

(전체코드)

plugins {
	id 'org.springframework.boot' version '2.3.5.RELEASE'
	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
	id 'java'
}

group = 'DSC4'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	//implementation 'android.arch.persistence.room:runtime:1.1.1'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
	implementation 'com.google.firebase:firebase-admin:6.8.1'
	//annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'


}

test {
	useJUnitPlatform()
}

 

 

[ 실행 방법 ]

 

application을 선택한 후 재생버튼 클릭

 

 

인터넷 창을 켜서 다음을 입력한다.

 

http://localhost:8080/getMemberDetail?id=문서아이디

 

※ 나의 경우 9070 port를 이용했다. ( http://localhost:9070/getMemberDetail?id=FMgoGDQHyNQ7IfGycZ0h )

 

 

id로 FMgoGDQHyNQ7IfGycZ0h을 줬기 때문에

문서idFMgoGDQHyNQ7IfGycZ0h인 것의 내용이 출력되는 것이다.

 

 


 

 

+) 참고

localhost 8080을 이용하고 있어서 9070으로 변경했다.

 

application.properties

server.port=9070

 

 

+) 참고2

serviceAccountKey.json 을 resource 폴더에 저장해서 관리했다.

하지만 이대로 깃허브에 올리면 난리가 나므로 .gitignore에 추가했다.

 

.gitignore

serviceAccountKey.json

 

 

 

반응형
Posted by mminky
데이터베이스2020. 12. 26. 12:32
728x90

spring boot와 mySQL 연결을 시도 했지만

데이터베이스에 관한 지식이 별로 없어서 성공하지는 못했습니다ㅠㅠ

 

* myBatis 등 mySQL과 웹을 연결하는 프레임워크를 공부할 것

 

더 공부한 뒤 참조하기 위해 글을 남깁니다.

 


* 언어 : spring boot

* 프로젝트 : gradle

* 데이터베이스 : mySQL


 

.domain / Member.java

package DSC4.cafein.domain;

import javax.persistence.*;

@Entity
@Table(name="member")
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private String email;
    private String username;
    private String password;

    public Member() {

    }


    public Member(String username,String password){
        this.email = username;
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

 

 

.repository / MemberRepository.java

package DSC4.cafein.repository;

import DSC4.cafein.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MemberRepository extends JpaRepository<Member,String> {
    Member findByUsernameAndPassword(String username,String password);
}
//public class MemberRepository {
//}

 

 

.service / MemberService.java

package DSC4.cafein.service;

import DSC4.cafein.domain.Member;
import DSC4.cafein.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MemberService {

    @Autowired
    private MemberRepository repo;

    public Member login(String username, String password){
        Member member = repo.findByUsernameAndPassword(username,password);
        return member;
    }
}

 

 

build.gradle

plugins {
	id 'org.springframework.boot' version '2.3.5.RELEASE'
	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
	id 'java'
}

group = 'DSC4'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	runtimeOnly 'mysql:mysql-connector-java'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	//implementation 'android.arch.persistence.room:runtime:1.1.1'
	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
	implementation 'com.google.firebase:firebase-admin:6.8.1'
	//annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	compile('org.springframework.boot:spring-boot-starter-jdbc')
	compile('mysql:mysql-connector-java')

}

test {
	useJUnitPlatform()
}

-> 사실 여기는 firebase와 mysql코드가 섞여있다.

 

(아래의 코드는 파이어베이스 코드이니 무시 가능)

implementation 'com.google.firebase:firebase-admin:6.8.1'

 

 

반응형
Posted by mminky
(web) 스프링2020. 11. 9. 15:20
728x90

* 프로젝트명 : hello-demo-result

* 운영체제 : 윈도우

 

우선 해당 프로젝트의 디렉토리(폴더)로 이동을 합니다.(cd 명령어 이용)

그리고 dir 명령어를 통해 gradlew 파일이 있는지 확인합니다.

dir

 

dir 명령어

 

다음의 명령어로 build를 해줍니다.

gradlew build

 

gradlew build

 

build가 성공적으로 끝나면 build 디렉토리가 생성됩니다.

다음의 명령어로 libs폴더로 이동합니다.

cd build/libs

 

cd build/libs

 

libs폴더에서 dir 명령어를 통해 ~~ -SNAPSHOT.jar 파일이 있는지 확인합니다.

dir

 

dir

 

 ~~ -SNAPSHOT.jar 파일을 확인했으면 다음의 명령어를 입력해서

jar파일을 실행합니다.

java -jar 파일명-SNAPSHOT.jar

 

이 때  ~~ -SNAPSHOT.jar 파일명이 너무 길기 때문에

몇 자만 입력하고 Tab을 누르면 자동으로 이름이 완성됩니다. (혹은 복붙 추천)

 

예를 들어 hello-demo-result-0.0.1-SNAPSHOT.jar 의 경우 hello만 입력하고 Tab 키를 누르면 자동으로 입력이 됩니다.

java -jar

jar파일 실행이 성공하면

Spring이라는 글자가 나타납니다.

그리고 Tomcat port : 8080이라고 나타납니다. (위 사진 참고)

 

 

그러면 인터넷 창을 켜서 localhost:8080에 접속을 하면

자신이 만들었던 웹 페이지가 나타나는 것을 확인 할 수 있습니다!

localhost:8080

 

 

 

 

+) 재시작 할 때 (↓)

더보기

Terminal에서 Ctrl+C를 눌러 실행중이던 spring을 종료한다.

 

그 후 Run에서 초록색 재생버튼을 클릭하면 다시 실행된다 :)

 

 

+)참고사항

 

* 서버 배포시에 jar 파일만 서버에 넣어주면 됨
* java -jar 실행시키면 서버에서도 스프링이 동작함
* tomcat으로 할 필요 x

 

 

 

※ 제 글이 도움이 되었다면 공감 부탁드려요 ◡̈

반응형
Posted by mminky
(web) 스프링2020. 11. 9. 15:19
728x90

오늘부터 스프링을 공부해보려고 합니다!

아래의 무료 강의로 스프링에 대한 전체적인 이해를 하려고 합니다!

 

inf.run/eJno

 

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다. 입문 프레임워크 및 라이브러리 웹 개발 Back-End Java Spring MVC Spring Boot 온라인 강의 백엔��

www.inflearn.com

 

* 사전 준비

  - Java11설치 (무관하나 최대한 11로 하는게 좋음) (저는 이 링크를 참조 했습니다)

  - IntelliJ 혹은 Eclipse 설치 (요즘은 IDE로 InteliJ 이용함) (이 링크를 따라했습니다)

 

  [java 설치 확인]

  cmd창에 다음을 입력한 후 확인합니다.

java -version
javac -version

 

---------------------------------------------------------------------------------------------------

※ 본 글은 스프링 입문-코드로 배우는 스프링부트, 웹MVC, DB접근기술 강의를 참고하여 작성하였습니다.

   문제가 있을 시 삭제하겠습니다.

 

※ 제 글이 도움이 되었다면 공감 부탁드려요 ◡̈

반응형
Posted by mminky