Sdkman
sdkman 설치
$curl -s "https://get.sdkman.io" |bash
sdkman 초기화
$source ~/.sdkman/bin/sdkman-init.sh
sdkman를 통한 환경설정
$sdk version ## sdkman 버전확인
$sdk list java ## 자바 버전 리스트조회
$sdk install 11.0.17-zulu ## 원하는 버전의 자바 설치
$sdk use java 11.0.17-zulu ## 디폴트 버전으로 설정
$sdk list gradle ## 그래들 버전 리스트 조회
$sdk install gradle 7.3.1 ## 원하는 버전의 그래들 설치
$sdk use gradle 7.3.1 ## 디폴트 버전으로 설정
Docker
Docker는 컨테이너화된 애플리케이션을 관리하기 위한 오픈 소스 플랫폼.
Docker의 장점 | |
---|---|
운영 표준화 | Docker는 컨테이너화된 애플리케이션을 동일한 방식으로 실행하고 관리할 수 있도록 표준화된 환경을 제공. 이는 개발 환경과 운영 환경 간의 일관성을 유지하고, 애플리케이션을 다른 환경에서도 쉽게 실행할 수 있도록 도움. |
높은 이식성 | Docker 컨테이너는 애플리케이션과 그 종속성을 패키지화하여 독립적으로 실행할 수 있도록 함. 이는 애플리케이션을 다른 시스템 또는 클라우드 환경으로 쉽게 이동할 수 있게 해줌. 또한, 호스트 시스템의 운영체제나 환경 설정에 구애받지 않고 동일한 방식으로 실행될 수 있기 때문에 개발 및 테스트 과정을 단순화할 수 있음 |
비용 절감 | Docker는 가상화 기술을 사용하여 하드웨어 자원을 효율적으로 활용할 수 있도록 도와줌. 여러 애플리케이션을 단일 서버에서 실행할 수 있으며, 리소스 공유 및 가상화를 통해 더 효율적으로 작동할 수 있음. 또한, 빠른 배포와 확장을 통해 인프라 관리 비용을 줄일 수 있음 |
[컨테이너]
시스템의 다른 어플리케이션이나 다른 부분들에 영향을 주지 않는 격리된 공간.
실행환경,라이브러리, 시스템도구, 코드 등을 포함.
[이미지]
컨테이너 생성과 관련된 내용이 포함된 템플릿 (ReadOnly)
한번생성된 이미지는 변경이 불가하다.
[도커레지스트리]
도커이미지를 저장하고 다운로드 할 수 있는 저장수
Docker에서 자주 쓰는 명령어
Command | Description |
---|---|
$docker image pull | Registry에서 이미지 가져오기 |
$docker image rm | 이미지 제거 |
$docker image ls $docker images |
이미지 조회 |
$docker build | Docker File로부터 도커 이미지 빌드 |
$docker start CONTAINER_ID | 컨테이너 실행 |
$docker restart CONTAINER_ID | 컨테이너 재시작 |
$docker stop CONTAINER_ID | 컨테이너 종료 |
$docker run [OPTIONS] IMAGE | 컨테이너 생성+실행 |
$docker ps | 현재 실행되고있는 컨테이너 및 상태 조회 |
$docker exec -it CONTAINER_ID /bin/bash | 실행중인 컨테이너에 명령어 실행 |
$docker logs CONTAINER | 컨테이너 로그 확인 |
사용예시 (mySql)
docker image pull mysql
: mysql 이미지 불러오기
hyunsoojo@HYUNSOOui-MacBook-Pro:~$docker image pull mysql
Using default tag: latest
latest: Pulling from library/mysql
90e2fb2facff: Pull complete
ba60eb20fd5f: Pull complete
4f509402d469: Pull complete
496c2cfa6815: Pull complete
8ec1dfa9522c: Pull complete
6dec7ba896f8: Pull complete
dc9ff75362b0: Pull complete
73e4682f9014: Pull complete
9ffdeecd6fb6: Pull complete
a4346ccfb53f: Pull complete
434c13bc32de: Pull complete
Digest: sha256:d6164ff4855b9b3f2c7748c6ec564ccff841f79a7023db0f9293143481a44b6e
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
$docker images
: 이미지 조회
hyunsoojo@HYUNSOOui-MacBook-Pro:~$docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 05db07cd74c0 4 days ago 565MB
docker run
: 컨테이서 생성 + 실행
hyunsoojo@HYUNSOOui-MacBook-Pro:~$docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=rootroot -d -p 3306:3306 mysql:latest
9aa2706093021cd3c1724cc59387349902b63f4f415956bc72ca8a168d7cde43
docker ps
: 실행중인 컨테이너 조회
hyunsoojo@HYUNSOOui-MacBook-Pro:~$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9aa270609302 mysql:latest "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-container
docker exec -it mysql-container /bin/sh
: 실행중인 컨테이너에 명령어 실행
hyunsoojo@HYUNSOOui-MacBook-Pro:~$docker exec -it mysql-container /bin/sh
sh-4.4#
sh-4.4#
sh-4.4# ls
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
sh-4.4# cd etc
sh-4.4# ls
GREP_COLORS bindresvport.blacklist dnf gnupg host.conf issue.net libaudit.conf my.cnf nsswitch.conf.bak passwd- profile rc2.d resolv.conf shadow subuid xattr.conf
X11 chkconfig.d environment group hostname krb5.conf libssh my.cnf.d openldap pkcs11 profile.d rc3.d rpc shadow- swid xdg
aliases crypto-policies ethertypes group- hosts krb5.conf.d localtime mysql opt pki protocols rc4.d rpm shells sysconfig xinetd.d
alternatives csh.cshrc exports gshadow init.d ld.so.cache login.defs netconfig oracle-release pm rc.d rc5.d sasl2 skel system-release yum.repos.d
bash_completion.d csh.login filesystems gshadow- inputrc ld.so.conf motd networks os-release popt.d rc0.d rc6.d selinux ssl system-release-cpe
bashrc default gcrypt gss issue ld.so.conf.d mtab nsswitch.conf passwd printcap rc1.d redhat-release services subgid terminfo
sh-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
sh-4.4# exit
exit
hyunsoojo@HYUNSOOui-MacBook-Pro:~$
Feign
Feign은 Java에서 RESTful 웹 서비스 클라이언트를 구현하기 위한 라이브러리.
Spring Cloud에서 사용되며, Spring 애플리케이션에서 간편하게 원격 HTTP API를 호출할 수 있는 방법을 제공.
Feign은 런타임 시에 인터페이스를 기반으로 REST 클라이언트를 동적으로 생성하는 프록시 기반 접근 방식을 사용.
Feign 인터페이스는 실제 원격 서비스의 엔드포인트, HTTP 메서드, 경로, 요청 및 응답 형식 등을 정의하는 어노테이션을 사용하여 구성. 주로 마이크로서비스 아키텍처에서 서비스 간 통신을 위해 활용.
Feign 사용 시 이점 | |
---|---|
간편한 선언적 API | Feign 인터페이스를 통해 REST API 호출을 선언적으로 정의할 수 있습니다. 메서드에 어노테이션을 추가하여 요청 URL, HTTP 메서드, 요청 및 응답 형식을 지정할 수 있습니다. |
인터페이스 기반 프록시 생성 | Feign은 런타임 시에 Feign 인터페이스를 기반으로 동적으로 REST 클라이언트를 생성합니다. 개발자는 구현 코드를 작성할 필요 없이 인터페이스를 통해 API를 사용할 수 있습니다. |
통합된 로드 밸런싱 | Spring Cloud의 서비스 디스커버리 기능과 통합되어 Feign은 로드 밸런싱을 자동으로 수행할 수 있습니다. 서비스의 여러 인스턴스 중 하나를 선택하여 API 호출을 수행하므로 확장성과 내결함성을 제공합니다. |
재시도 및 오류 처리 | Feign은 기본적으로 재시도 메커니즘과 오류 처리 기능을 제공합니다. 장애가 발생한 경우 일시적인 문제일 수 있으므로 재시도를 통해 요청을 자동으로 다시 시도할 수 있습니다. |
Spring에서 feign사용하기
gradle에 아래와 같이 의존성을 추가해주면 feign을 사용할 수 있다.
dependencies {
ext{
set('springCloudVersion',"2021.0.1")
}
implementation "org.springframework.cloud:spring-cloud-starter-openfeign"
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}