0531 - 0606


# 0531 - 0606

# 0531 - hal+json

# Hypertext Application Language (HAL)

HAL은 JSON 또는 XML 코드 내의 외부 리소스에 대한 링크와 같은 하이퍼 미디어를 정의하기위한 인터넷 초안 표준 규칙.

# HAL 예

{
"_links": {
  "self": {
    "href": "http://example.com/api/book/hal-cookbook"
  }
},
"id": "hal-cookbook",
"name": "HAL Cookbook"
}

# 0601 - jmap으로 JVM heap 상태 확인

JDK에 포함된 jmap 명령으로 실행 중인 JVM의 heap 상태를 확인해보자.

$ jps
또는
$ ps -ef | grep java
$ jmap -heap PID
$ jmap -histo:live PID | more
$ jmap -dump:format=b,file=heap.PID.hprof PID

# 0602 - jenkins를 이용해서 배포하기

# 젠킨스의 큰 기능 두가지

# 젠킨스 설치

# jenkins
sudo yum install wget
sudo yum install maven
sudo yum install git
sudo yum install docker

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
sudo systemctl start jenkins
sudo systemctl status jenkins
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

# 배포시 젠킨스 인스턴스만 접속할 수 있게 하기

// 공개키 & 개인키 생성
ssh-keygen -t rsa -f ~/.ssh/id_rsa

// 키 복사
vi ~/.ssh/id_rsa.pub    // 해당내용 복사

*** gcp 환경에서는 authorized_keys 수정 불가능

// authorized_keys 파일 끝에 공개키 복사
vi ~/.ssh/authorized_keys 
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# 배포스크립트 관리 및 빌드

sudo chmod 666 /var/run/docker.sock

# 정리

  1. 소스코드는 GitHub가 가지고 있다.
  2. 애플리케이션 실행은 인스턴스에서 되어야 한다.
  3. 인스턴스에서 바로 GitHub에 있는 소스코드를 가져와서 빌드 후 실행시킬 수도 있지만, 이러면 매번 인스턴스에 접속해야한다.
  4. 인스턴스가 여러개면 여러개의 인스턴스에 각각 다 접속해서 3번을 해야한다. 비효율적
  5. 중간에 Jenkins 라는 미들웨어를 두고, GitHub에서 소스코드를 가져와서 빌드하고 인스턴스에 배포/실행 할 수 있다.
  6. 5번을 위해 Jenkins에 GitHub 저장소 URL을 등록하고, 빌드 스크립트를 작성하고, 배포될 인스턴스에 SSH로 접속할 수 있도록 세팅한다.
  7. 6번까지 완료되었으면 이제 Jenkins에서 간단히 배포할 수 있다.
// 1. jenkins-instance 서버 명령어
$ sudo yum install wget
$ sudo yum install maven
$ sudo yum install git
$ sudo yum install docker
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
$ sudo yum install jenkins
$ sudo systemctl start jenkins
$ sudo systemctl status jenkins

// 2. cpu-instance 서버 명령어
$ vi authorized_keys
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ sudo chmod 666 /var/run/docker.sock

# 0605 - @Bean 과 @Component 차이

# @Bean 과 @Component 차이

# @SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {