μ›Ή κ°œλ°œμžκ°€ λ°±μ—”λ“œ λ˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ„œλ²„λ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œ 파일과 ν”„λ‘ νŠΈμ—”λ“œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ„λ‘ λΉŒλ“œλœ 에셋 νŒŒμΌλ“€μ„ ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμœΌλ‘œμ¨ λ°°ν¬ν•˜κΈ° μœ„ν•΄μ„œ λ°±μ—”λ“œ 개발자 λ˜λŠ” μ„œλ²„ μ—”μ§€λ‹ˆμ–΄κ°€ ꡬ성해놓은 인프라 ν™˜κ²½μ— μžˆλŠ” λ¦¬λˆ…μŠ€ μ„œλ²„μ— νŒŒμΌμ„ 전솑해야 ν•©λ‹ˆλ‹€. 쑰직 λ˜λŠ” μ‹œμŠ€ν…œμ— λŒ€ν•œ 인프라 ꡬ성에 λ”°λΌμ„œ μ—¬λŸ¬κ°€μ§€ λ°©μ‹μœΌλ‘œ λΉŒλ“œ νŒŒμΌμ„ 전솑할 수 μžˆλŠ”λ° 개인적인 κ²½ν—˜μ„ ν† λŒ€λ‘œ 원격 ν˜ΈμŠ€νŠΈμ— λΉŒλ“œ νŒŒμΌμ„ μ „λ‹¬ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ μ •λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

TL;DR

μ›Ή 개발자 λ˜λŠ” μ„œλ²„ μ—”μ§€λ‹ˆμ–΄κ°€ 원격 ν˜ΈμŠ€νŠΈμ— νŒŒμΌμ„ μ „μ†‘ν•˜κΈ° μœ„ν•΄μ„œλŠ” SCP λ˜λŠ” SFTP λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•  수 있으며 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ—μ„œ μ œκ³΅ν•˜λŠ” S3와 같은 μ„œλΉ„μŠ€λ₯Ό ν†΅ν•΄μ„œλ„ μ™ΈλΆ€ μΈν„°λ„·μœΌλ‘œ 접속이 λΆˆκ°€λŠ₯ν•œ ν™˜κ²½μ—μ„œλ„ νŒŒμΌμ„ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

SCP

SCP λͺ…λ Ήμ–΄λŠ” SSH ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” λ°©λ²•μœΌλ‘œμ¨ SSH 접속이 κ°€λŠ₯ν•œ λ¦¬λˆ…μŠ€ μ„œλ²„λ‘œ νŒŒμΌμ„ λ³΅μ‚¬ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

PS C:\Users\Mambo\docker\nginx.conf> ls

    디렉터리: C:\Users\Mambo\docker\nginx.conf

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----    2022-02-22  μ˜€μ „ 6:49:27                static
-a----    2022-02-22  μ˜€μ „ 6:49:27       19245297 demo-0.0.1-SNAPSHOT.jar
-a----   2022-02-22  μ˜€ν›„ 11:26:45            473 docker-compose-local.yaml
-a----   2022-02-22  μ˜€ν›„ 11:05:42            573 docker-compose.yaml
-a----   2022-02-22  μ˜€ν›„ 11:26:28            241 localhost+3-key.pem
-a----   2022-02-22  μ˜€ν›„ 11:26:28           1318 localhost+3.pem
-a----    2022-05-21  μ˜€μ „ 8:13:15           3017 nginx-local.conf
-a----   2022-02-22  μ˜€ν›„ 11:05:40           2896 nginx.conf
-a----    2022-02-22  μ˜€μ „ 6:49:27           2036 README.md
-a----    2022-02-22  μ˜€μ „ 6:49:27           1436 server.crt
-a----    2022-02-22  μ˜€μ „ 6:49:27            246 server.key

# SCP λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ 둜컬 컴퓨터에 μžˆλŠ” νŒŒμΌμ„ 원격 호슀트둜 μ „μ†‘ν•©λ‹ˆλ‹€.
PS C:\Users\Mambo\docker\nginx.conf> scp ./demo-0.0.1-SNAPSHOT.jar ubuntu@192.168.0.18:/home/ubuntu/java/
ubuntu@192.168.0.18's password:
demo-0.0.1-SNAPSHOT.jar                                                                                                                        100%   18MB  44.0MB/s   00:00

제 둜컬 μ»΄ν“¨ν„°μ—λŠ” 가상 ν™˜κ²½ 머신을 ν†΅ν•΄μ„œ 싀행해놓은 μš°λΆ„νˆ¬ λ¦¬λˆ…μŠ€(192.168.0.18)이 μ€€λΉ„λ˜μ–΄μžˆμœΌλ©° μœ„μ™€ 같이 demo-0.0.1-SNAPSHOT.jar λΌλŠ” λΉŒλ“œ 파일이 μ‘΄μž¬ν•˜μ—¬ 이것을 SCP λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ 원격 호슀트의 μ‚¬μš©μž ν™ˆ 경둜 ν•˜μœ„μ˜ javaλΌλŠ” 폴더에 λ³΅μ‚¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

SFTP

일반적으둜 FTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 파일 전솑을 μˆ˜ν–‰ν•˜λŠ”λ°μš”. μ‹€λ¬΄μ—μ„œλŠ” SFTPλ₯Ό μ‚¬μš©ν•˜λ©° 터미널 λͺ…λ Ήμ–΄λ³΄λ‹€λŠ” 파일질라(FileZilla)와 같은 GUIλ₯Ό μ œκ³΅ν•˜λŠ” FTP ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” νŽΈμž…λ‹ˆλ‹€. SFTPλŠ” μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ λ°©μ‹μ΄λ―€λ‘œ SCP의 단일 λͺ…λ Ήμ–΄λ‘œ νŒŒμΌμ„ μ „μ†‘ν–ˆλ˜ 것과 λ‹€λ₯΄κ²Œ λŒ€ν™”ν˜• λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€.

PS C:\Users\Mambo\docker\nginx.conf> sftp ubuntu@192.168.0.18
ubuntu@192.168.0.18 password:
Connected to ubuntu@192.168.0.18.
sftp> lls

 C:\Users\Mambo\docker\nginx.conf 디렉터리

2022-02-27  μ˜€μ „ 10:59    <DIR>          .
2022-02-27  μ˜€μ „ 10:59    <DIR>          ..
2022-02-22  μ˜€μ „ 06:49        19,245,297 demo-0.0.1-SNAPSHOT.jar
2022-02-22  μ˜€ν›„ 11:26               473 docker-compose-local.yaml
2022-02-22  μ˜€ν›„ 11:05               573 docker-compose.yaml
2022-02-22  μ˜€ν›„ 11:26               241 localhost+3-key.pem
2022-02-22  μ˜€ν›„ 11:26             1,318 localhost+3.pem
2022-05-21  μ˜€μ „ 08:13             3,017 nginx-local.conf
2022-02-22  μ˜€ν›„ 11:05             2,896 nginx.conf
2022-02-22  μ˜€μ „ 06:49             2,036 README.md
2022-02-22  μ˜€μ „ 06:49             1,436 server.crt
2022-02-22  μ˜€μ „ 06:49               246 server.key
2022-02-22  μ˜€μ „ 06:49    <DIR>          static
              10개 파일          19,257,533 λ°”μ΄νŠΈ
               3개 디렉터리  51,521,728,512 λ°”μ΄νŠΈ λ‚¨μŒ

# java ν΄λ”λ‘œ μ΄λ™ν•œ ν›„ νŒŒμΌμ„ λ³΅μ‚¬ν•©λ‹ˆλ‹€.
sftp> cd java
sftp> put demo-0.0.1-SNAPSHOT.jar
Uploading demo-0.0.1-SNAPSHOT.jar to /home/ubuntu/java/demo-0.0.1-SNAPSHOT.jar
demo-0.0.1-SNAPSHOT.jar                                                                                                                        100%   18MB  68.8MB/s   00:00

둜컬 μ»΄ν“¨ν„°μ—μ„œ λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œ 둜컬(l)이 뢙은 llsλ₯Ό λ¨Όμ € μ‹€ν–‰ν•˜μ—¬ 둜컬 μ»΄ν“¨ν„°μ—μ„œ λ°”λΌλ³΄λŠ” 경둜λ₯Ό ν™•μΈν•˜κ³  원격 ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•΄μ„œ νŒŒμΌμ„ λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. 그러면 SCP λͺ…λ Ήμ–΄κ°€ μžˆλŠ”λ°λ„ λΆˆκ΅¬ν•˜κ³  SFTP ν”„λ‘œν† μ½œμ„ λ³„λ„λ‘œ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒμš”?

SFTP ν”„λ‘œν† μ½œμ„ λ³„λ„λ‘œ μ‚¬μš©ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄μ„œλŠ” μžμ„Ένžˆ λͺ¨λ¦…λ‹ˆλ‹€. λ‹€λ§Œ, 개인적인 싀무 κ²½ν—˜μ„ ν† λŒ€λ‘œ μ΄μ•ΌκΈ°ν•΄λ³΄μžλ©΄ 배슀천 ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ SSH 접속 μ‹œ OTP둜 2FA 인증을 μš”κ΅¬ν•˜λ©° 배슀천 ν˜ΈμŠ€νŠΈμ— λŒ€ν•œ λͺ…λ Ήμ–΄ μˆ˜ν–‰μ„ κΈ°λ‘ν•˜κΈ° μœ„ν•΄μ„œ SCP λͺ…령어와 같이 μΈν„°λž™μ…˜ μ„Έμ…˜μ΄ μ•„λ‹Œ 직접 λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것은 μ œν•œλ˜μ–΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    =============================================================
=====================================================================

 /#######                        /##     /##
| ##__  ##                      | ##    |__/
| ##  \ ##  /######   /####### /######   /##  /######  /#######
| #######  |____  ## /##_____/|_  ##_/  | ## /##__  ##| ##__  ##
| ##__  ##  /#######|  ######   | ##    | ##| ##  \ ##| ##  \ ##
| ##  \ ## /##__  ## \____  ##  | ## /##| ##| ##  | ##| ##  | ##
| #######/|  ####### /#######/  |  ####/| ##|  ######/| ##  | ##
|_______/  \_______/|_______/    \___/  |__/ \______/ |__/  |__/


=====================================================================
    =============================================================
Verification code: ******
This bastion supports interactive sessions only. Do not supply a command

이와 같은 인프라 ν™˜κ²½μ—μ„œλŠ” SFTP μ„œλ²„μ— μ—…λ‘œλ“œλ˜λŠ” νŒŒμΌλ“€μ€ 배슀천 호슀트의 νŠΉμ • κ²½λ‘œμ— λ§ˆμš΄νŠΈλ˜μ–΄ SSH 접속을 μˆ˜ν–‰ν•œ ν›„ SCP λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ μ‹€μ œ λ¦¬λˆ…μŠ€ μ„œλ²„λ‘œ νŒŒμΌμ„ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. SFTP λͺ…령어에 λŒ€ν•œ 더 μžμ„Έν•œ λ‚΄μš©μ„ μ•Œκ³ μ‹Άμ€ 경우 How To Use SFTP to Securely Transfer Files with a Remote Serverλ₯Ό μ°Έκ³ ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

S3

μš”μ¦˜μ—λŠ” IDC와 같은 μ˜¨ν”„λ ˆλ―ΈμŠ€ ν™˜κ²½λ³΄λ‹€λŠ” AWS와 같은 ν΄λΌμš°λ“œ μ„œλΉ„μŠ€ ν™˜κ²½μ— 인프라λ₯Ό κ΅¬μ„±ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. AWS μ—μ„œλŠ” S3λΌλŠ” μŠ€ν† λ¦¬μ§€ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ”λ° S3 버킷에 λŒ€ν•œ κΆŒν•œμ„ κ°€μ§€λŠ” IAM의 자격증λͺ…을 μ‚¬μš©ν•΄μ„œ μ‰½κ²Œ νŒŒμΌμ„ μ—…λ‘œλ“œν•  수 있고 EC2 μΈμŠ€ν„΄μŠ€ 역할에 S3 버킷에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•΄λ†“μœΌλ©΄ EC2 μΈμŠ€ν„΄μŠ€ λ‚΄μ—μ„œλ„ S3 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ νŒŒμΌμ„ κ°€μ Έμ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

# 둜컬 컴퓨터에 μžˆλŠ” νŒŒμΌμ„ S3 버킷에 λ³΅μ‚¬ν•©λ‹ˆλ‹€.
aws s3 cp demo-0.0.1-SNAPSHOT.jar s3://mambo.kr/java/ --profile mambo

# EC μΈμŠ€ν„΄μŠ€ λ‚΄μ—μ„œ S3 버킷에 μžˆλŠ” νŒŒμΌμ„ λ³΅μ‚¬ν•©λ‹ˆλ‹€.
aws s3 cp s3://mambo.kr/java/demo-0.0.1-SNAPSHOT.jar ./

ν˜„μž¬ μ‘°μ§μ—μ„œλŠ” 퍼블릭 μ•‘μ„ΈμŠ€κ°€ λΆˆκ°€λŠ₯ν•œ 버킷에 도메인 μΈμ¦μ„œ λ˜λŠ” 일뢀 λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ 패치 슀크립트 등을 μ—…λ‘œλ“œν•˜κ³  λ¦¬λˆ…μŠ€ μ„œλ²„μ— μ ‘μ†ν•˜μ—¬ ν•΄λ‹Ή νŒŒμΌλ“€μ„ λ³΅μ‚¬ν•˜μ—¬ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 퍼블릭 μ•‘μ„ΈμŠ€κ°€ κ°€λŠ₯ν•˜λ„λ‘ μ„€μ •λœ 버킷에 νŒŒμΌμ„ μ—…λ‘œλ“œν•΄λ‘λ©΄ 쑰직의 μ™ΈλΆ€λ‘œ νŒŒμΌμ„ κ³΅μœ ν•΄μ•Όν•  λ•Œ HTTP μ—”λ“œν¬μΈνŠΈλ₯Ό 전달할 수 μžˆμœΌλ―€λ‘œ λ‹€μ–‘ν•˜κ²Œ ν™œμš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

이처럼 원격 ν˜ΈμŠ€νŠΈμ— νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” 방법은 인프라 ꡬ성에 λ”°λΌμ„œ λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©ν•΄μ•Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. IT λΆ„μ•Όκ°€ μ–΄λ €μš΄ μ΄μœ λŠ” 생각보닀 λ‹€μ–‘ν•œ 뢀뢄에 λŒ€ν•΄μ„œ μ •λ‹΅μ΄λΌλŠ” 방식이 μ—†κΈ° λ•Œλ¬Έμ— κ°œλ°œμžλ§ˆλ‹€ μ‘°μ§μ—μ„œ μ–΄λ– ν•œ 방식을 μ·¨ν•˜λŠλƒμ— 따라 λ‹€μ–‘ν•œ κ²½ν—˜μ„ ν•  수 μžˆλ‹€λŠ” 것에 μžˆμŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.