Jun 19, 2020 - loaded plugins: fastestmirror

yum update 나 yum check-update 를 실행했는데 “loaded plugins: fastestmirror” 라는 메시지가 나오고 Hang on 되는 현상

  • KT olleh
    -. 기본 DNS 주소: 168.126.63.1
    -. 보조 DNS 주소: 168.126.63.2

  • SKT
    -. 기본 DNS 주소: 210.220.163.82
    -. 보조 DNS 주소: 219.250.36.130

  • LGU+
    -. 기본 DNS 주소: 164.124.107.9
    -. 보조 DNS 주소: 203.248.242.2

  • Google public
    -. 기본 DNS 주소: 8.8.8.8
    -. 보조 DNS 주소: 8.8.4.4

[root@localhost ~]# /etc/init.d/network restart
인터페이스 eth0 (을)를 종료 중:                            [  OK  ]
인터페이스 eth1 (을)를 종료 중:                            [  OK  ]
loopback 인터페이스 종료 중:                               [  OK  ]
loopback 인터페이스 활성화중 입니다:                       [  OK  ]
eth0 인터페이스 활성화중 입니다:  Determining if ip address 10.0.2.101 is already in use for device eth0...
                                                           [  OK  ]
eth1 인터페이스 활성화중 입니다:  Determining if ip address 192.168.56.101 is already in use for device eth1...
                                                           [  OK  ]

참고주소 : 제타위키

최종적으로 셋팅된 값은 다음과 같습니다.

vi /etc/sysconfig/network
GATEWAY=10.0.2.1

게이트웨이 값 추가합니다.

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0  
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.2.101
NETMASK=255.255.255.0
NM_CONTROLLED=no
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"

BOOTPROTO=static 과 게이트웨이 위치의 문제로 확인되었습니다.

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1  
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
IPADDR=192.168.56.101

간략한 정보만 남기고 나머지 정보들은 다 지웁니다.

[root@localhost ~]# vi /etc/resolv.conf
nameserver 8.8.8.8

해당값을 설정 후 reboot를 합니다.

Jun 15, 2020 - Failed to retrieve application JMX service URL and AttachProvider for the vm is not found

Failed to retrieve application JMX service URL and AttachProvider for the vm is not found

실제 원인은 build.gradle은 java 11 버전으로,
Run Configurations 의 JRE는 12 로 설정해서 발생하는 오류였습니다.

Toy project 진행시에,
경고 에러만 뜨고 정상적으로 화면은 부팅되어서,
미루고 미루다가 오늘 해결했네요.

참고주소 : https://youtrack.jetbrains.com/issue/IDEA-220666

Jun 10, 2020 - 스프링부트 다중 모듈 아키텍쳐

보통의 구조 아키텍쳐를 구성할 때는 core, common, api 로 크게 3개를 나눕니다.
core는 중요하고 거의 동작하지 않는 서버간의 연결 정도 (RDBMS, NOSQL) 등의 설정을 관리합니다.

common 은 도메인 및 dto, model등을 관리합니다.

api, sender, batch 는 각각의 설정에 따라 분리되어 동작하는 어플리케이션(Service)를 관리합니다.

- core
  - redis
  - db connetion
- common
  - util
- api(request)
  - request Api
- sender
  - local call
- batch

즉, core는 redis 등 타 lib 을 처리하며, common 은 util 성을 처리하고자 합니다.

api 는 외부에서 오는 connection 을 처리하며, sender 는 서버 to 서버 용도로 사용할 경우 각기 다른 용도로 처리하게 됩니다.
batch 는 매분, 매시간, 매일, 매달 돌아가는 배치성 프로세스가 동작할 예정이라, 해당 어플리케이션을 각각의 스프링부트로 별도 구성 예정입니다.
(soft한 MSA)

고민되는 부분이 core 랑 common 은 거의 중복되는 소스로 구성되게 되어, 실제 프로젝트는

api(Request)
   - core
   - common
   - api(request)

sender
   - core
   - common
   - sender

batch
   - core
   - common
   - batch

로 core와 common 이 중복되서 처리되게 될 가능성이 높습니다.

그래서, core 와 common을 별도의 git으로 관리하여 하나의 프로젝트로 처리하는 부분을 고려해야합니다.

즉,

api (개발자가 로컬에서 직접생성)
  - core (core 로 별도의 git 제어)
  - common (common 이라는 별도의 git 제어)
  - api (api 라는 별도의 git 제어)

형태로 처리하고자 합니다.

다만, 같은 git 이나 모듈로 관리하기 편하게 해당 명칭은 앞에 접두사를 붙이는 걸 권합니다. 예를 들어,

extCore
extCommon
extApi

로 한눈에 보이는 것으로 처리하는게 좋습니다!

core 와 common 과 api 가 이미 git에 올라가 있다고 가정했을 때,

인텔리J에서
new Project > gradle > Artifact Coordinates > GroupId 로,
기존 GroupId를 맞춥니다. (올려진 git의 group으로)

만들어진 src를 삭제합니다. 새로워진 프로젝트에는 필요하지 않습니다.

소스트리(SourceTree)를 사용하여, 만들어진 프로젝트 경로에 앞서 말한 core와 api 를 다운받습니다.
만들진 프로젝트는 다음과 같아집니다.

api
  - .gradle
  - .idea
  - gradle
  - xxxCore
  - xxxApi
  build.gradle
  settings.gradle

xxx 를 접두사로 붙여 한줄에 보이도록 조치합니다.

인텔리J에서 Project Structure 를 설정한 후 Modules 에서 new Module을 선택합니다.
new Module > grale > xxxCore 를 생성하면(이미 해당폴더는 소스트리를 통해 clone된 상태) 이미 체크아웃되어있는 git에 연결됩니다.
새롭게 모듈이 생기면서 build.gradle을 새로 갱신하는데, 롤백을 하거나, history를 보고 build.gradle 을 복원해야합니다.

xxCore 는
 - src
 - build.gradle만 설정되면 됩니다.

우선 root 의 settings.gradle 을 확인합니다.

include 'xxxCore'
include 'xxxApi'

이렇게 자동으로 추가되어있을겁니다.

이제 root 프로젝트의 build.gradle을 설정해야합니다.

group 'com.ssp'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

buildscript {
    ext {
        springBootVersion = '2.2.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE"
    }
}

/*
plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}
 */


subprojects {
    group 'com.xxx'
    version '1.0'
    apply plugin: 'java'
    apply plugin: org.springframework.boot.gradle.plugin.SpringBootPlugin
    apply plugin: 'io.spring.dependency-management'

    repositories {
        mavenCentral()
    }

    dependencies {
        // 여기 설정은 sub 프로젝트에 모두 적용됨
        compile('org.springframework.boot:spring-boot-starter-web')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
}

project(':xxxApi') {
    dependencies {
        compile project(':xxxCore')
    }
}

로 설정하면 설정이 끝나게 됩니다.

추가적으로 해당값을 설정시, 실행은 되나 build용 jar 생성에 문제가 있었습니다.

xxxCore 및 실행할 어플리케이션이 필요가 없는 build.gradle에, bootJar와 jar의 설정이 추가로 필요합니다.

bootJar {
    enabled = false
    archiveVersion = '0.0.1-SNAPSHOT'
    archiveExtension = 'jar'
}
jar {
    enabled = true
}

참고주소 : https://jojoldu.tistory.com/123