Microservice SpringBoot

Introducing Microservice SpringBoot !!

Microservice SpringBoot is space to learn with SpringBoot.

Contents

Table of Contents

NoTitleRemarks
0환경설정SpringBoot환경셋팅
1커리큘럼커리큘럼
2설계실습

Learning

Table of Learning

No구분TitleDayRemarks
1온라인스프링 부트를 이용한 웹 서비스 개발2019.12.17 ~ 2020.01.16STS
2온라인Spring Cloud를 활용한 MSA 기초2019.12.29 ~ 2020.01.28Netflix OSS
3온라인JPA 프로그래밍 기초2020.03.09 ~ 2020.04.08JPA

Get Started(SpringBoot)

1. Intellij Multi Project 구성하기

2. Tibero JPA 셋팅하기

3. Swagger

compile 'io.springfox:springfox-swagger2:2.6.1'
compile 'io.springfox:springfox-swagger-ui:2.6.1'

4. Zipkin

java -jar zipkin-server-2.20.2-exec.jar

5. GCP


Data & Source

Table of Data & Source

NoTitleEducational InstitutionSourceRemarks
1syntax.sol차세대융합콘텐츠산업협회syntax.solsolidity 문법

Syllabus

1. DDD 설계

  • Event 설계

2. UI 구축

  • 윈도우 환경 기반 구축
  • Geth 설치 → 네트워크 구축 가능 (기반 SpringBoot)

3. AWS 설치

  • WEB 기반 접속
  • AWS에서 ubuntu 기반 제작 연동 → aws 가입 → 상용화 관점
    • 사설네트워크용, 서비스용 2개 구축
    • 리눅스 기반 세팅 주제
Go to Contents

Design

1. Hystrix

a. Hystrix로 Timeout 처리하기

  • Hystrix를 통해 실행 되는 모든 메소드는 정해진 응답시간 내에 반환 되어야 한다.
  • 그렇지 못한 경우, Exception이 발생하며, Fallback이 정의된 경우 수행된다.
  • Timeout 시간은 조절할 수 있다. (Circuit 별로 세부 수정 가능하며 뒷 부분에 설명)
  • 언제 유용한가 ? → 항상 !!
  • 모든 외부 연동은 최대 응답 시간을 가정할 수 있어야 한다.
  • 여러 연동을 사용하는 경우 최대 응답시간을 직접 Control하는 것은 불가능하다 (다양한timeout, 다양한 지연등..)

2. Ribbon(Client LoadBalancer)

  • Client (API Caller) 에 탑재되는 S/W 모듈
  • 주어진 서버 목록에 대해서 Load Balancing 을 수행함
  • Ribbobn 의 장점 (단점도 있지만… )
    • H/W 가 필요 없이 S/W 로만 가능 (비용 down, 유연성 up)
    • 서버 목록의 동적 변경이 자유로움 (단 Coding 필요)
    • Load Balancing Schema 이 마음대로 구성 가능 (단 Coding 필요)

a. 주의

  • Retry를 시도하다가도 HystrixTimeout이 발생하면, 즉시 에러 반환 리턴할 것이다. (Hystrix로 Ribbon을 감싸서 호출한 상태이기 때문에)
  • Retry를 끄거나, 재시도 횟수를 0으로 하여도 해당 서버로의 호출이 항상 동일한 비율 로. 실패하지는 않는다. (실패한 서버로의 호출은 특정 시간동안 Skip 되고 그 간격은 조정된 다 - BackOff)
  • classpath 에 retry 가 존재해야 한다는 점 주의

b. 정리

  • Ribbon은 여러 Component에 내장되어있으며, 이를 통해 Client Load Balancing이 수행 가능하다.
  • Ribbon에는 매우 다양한 설정이 가능하다 (서버선택, 실패시 Skip 시간, Ping 체크)
  • Ribbon에는 Retry기능이 내장 되어있다.
  • Eureka와 함께 사용될 때 강력하다 (뒤에 실습)

3. Eureka

  • Service Registry
    • 서비스 탐색, 등록
    • 클라우드의 전화번호부
    • (단점) 침투적 방식 코드 변경
  • DiscoveryClient
    • spring-cloud 에서 서비스 레지스트리 사용 부분을 추상화(Interface)
    • Eureka, Consul, Zookeeper, etcd 등의 구현체가 존재

4. Feign

  • Eureka + Ribbon + Hystrix

5. JPA

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);
  • org.hibernate 5.3.7.Final -> jpa 2.1 사용

5-1. Gradle

  • build.gradle
dependencies {
    implementation 'com.h2database:h2:1.4.200'
    implementation 'org.hibernate:hibernate-entitymanager:5.4.12.Final'
    compileOnly 'org.projectlombok:lombok:1.18.12'
    annotationProcessor 'org.projectlombok:lombok:1.18.12'

    testCompileOnly 'org.projectlombok:lombok:1.18.12'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileJava.options.encoding = "UTF-8"
tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

jar {
    manifest {
        attributes 'Main-Clas':'hellojpa.JpaMain'
    }
}
  • jpa persistence.xml
    <persistence-unit name="hello">
        <class>hellojpa.entity.Member</class>  # 추가 해야 class 찾음
        <properties>

6. API 테스트코드

POST http://localhost:8080/holder
Content-Type: application/json
{
  "holderName" : "kevin",
  "tel" : "02-1234-5678",
  "address" : "OO시 OO구"
}
POST http://localhost:8080/account
Content-Type: application/json
{
  "holderID" : "계정 생성 후 반환되는 UUID"
}
POST http://localhost:8080/deposit
Content-Type: application/json
{
  "accountID" : "계좌 생성 후 반환되는 UUID",
  "holderID" : "계정 생성 후 반환되는 UUID",
  "amount" : 300
}
POST http://localhost:8080/withdrawal
Content-Type: application/json
{
  "accountID" : "계좌 생성 후 반환되는 UUID",
  "holderID" : "계정 생성 후 반환되는 UUID",
  "amount" : 10
}

7. Kafka

  • 주키퍼 실행 ./bin/windows/zookeeper-server-start.bat config/zookeeper.properties
  • Kafka 실행 ./bin/windows/kafka-server-start.bat config/server.properties
  • 주키퍼 Consumer
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic coffee --from-beginning
./bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic coffee --from-beginning
  • 주키퍼 Producer
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic coffee
./bin/windows/kafka-console-producer.bat --broker-list localhost:9092 --topic coffee
  • Topic 생성
./bin/windows/kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic mytopic

Reference

  • gradle 3.0 이 나오면서 compile 은 deprecated 되었고, implementation 또는 api 를 써야 한다.
Go to Contents