ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 데이터베이스 만들고 PCF 어플리케이션과 연동하자
    스프링개발자/201 - 일반 2020. 7. 15. 06:03

    [요약]

    어플리케이션이 비지니스 로직을 담당하는 곳이라면,

    데이터베이스는 비지니스의 데이터들을 저장하고 업데이트하는 곳이다. 

    PCF에서 제공하는 서비스인 ClearDB MySQL Database를 만들고, 내가 만든 어플리케이션과 연동해서 작동을 확인해보자.


    1. PCF에 데이터베이스 만들기

    2. 데이터베이스 정보 확인

    위의 만든 서비스에 들어가서 다음의 세가지 정보를 확인한다. 

    Hostname, Username and Password

     

    3. 테스트 데이터 추가

    DataGrip등의 프로그램에서 제공하는 UI를 이용해서 손쉽게 데이터 베이스에 접속하고, query를 작성할 수 있다

    테이블 만들기
    데이터 입력
    쿼리 자동생성

    4. 어플리케이션에서 데이터를 꺼내보자

     

    생각해보자. 어떻게 구현할까?

    일단 어플리케이션이 데이터베이스 정보를 알아야 한다. -> 데이터베이스가 PCF서비스로 등록되어 있으니, 서비스를 바인드 하면 될듯하다

    어플리케이션이 테이블이름을 알아야 한다. -> 내가 알려줘야겠지

    어플리케이션에 Employee 모델 클래스가 있어서 데이터베이스에서 읽은 값들을 받을 수 있어야 한다. -> 모델 클래스를 만들어보자

    어플리케이션이 이 모든 정보를 가지고 데이터베이스를 call해야 한다.결과값을 모델클래스를 이용해서 담자

     

    4번항목 여기서는 코딩들을 구현하자.

     

     

    추가 엔드포인트 노출; employeeRepository를 인젝트 받아서 사용한다.

    5. 로컬에서 클라우드 데이터베이스에 접속해보자

    spring.datasource.url=jdbc:mysql://us-cdbr-east-02.cleardb.com:3306/ad_c91762cf7ca78d6
    spring.datasource.username=
    spring.datasource.password=

     

     

    6. PCF에서 클라우드 데이터베이스에 접속해보자

    향후에 로컬데이터베이스와 클라우드 데이터베이스가 따로 있다면, PROFILE을 설정해야 할거 같다.

    일단은 클라우드 데이터베이스만 연결하자.

     

    로그인 cf login -a api.run.pivotal.io

    푸쉬 cf push -f pathToManifest/manifest.yml

     

     


    [TroubleShooting]

    1.테이블 만들기 위의 스샷은 에러가 있어서 몇가지 옵션을 바꿨다

    2. database-dev 서비스를 만들어서 내 어플리케이션에 바인딩 시켰는데도 불구하고, 데이터베이스 정보를 제공하고 있다.

    저절로 하는 방법이 있을것이다.

    3. 로컬에서 클라우드데이터베이스를 호출할때, 어떻게 할까? 한번 알아보자.

    어플리케이션 프로퍼티에서 logging.level.root=debug을 설정한다

    어플리케이션을 띄우고, /demo/employees 엔드포인트를 호출하고 인텔리제이에서 로깅을 확인하자

    hql, hibernate, jpatransactionmanager 등등이 나오는데, restTemplate같은 내가 익숙한 호출프로토콜은 못찾았다.

    JpaTransactionManager, EntityManagerFactory, PoolBase등등을 살펴보다가

    com.mysql.cj.jdbc.ConnectionImpl에 보면 데이터베이스 커넥션에 대해 잘 나와있다. 궁금하면 찾아보자.

     

    4. max user가 4명인데, 지금 전부 사용중이라고 에러가 나오며 데이터베이스를 호출하지 못한다.

    cleardb 데이터베이스 포탈에 접속해서 슬립하고 있는 connection을 지우면 된다.

    java.sql.SQLSyntaxErrorException: User 'XXXXX has exceeded the 'max_user_connections' resource (current value: 4)

Designed by Tistory.