📌 준비사항

1. AWS 회원가입 (프리티어 이용)

2. Ubuntu 설치

 

📌 AWS EC2 인스턴스 생성하기

1. AWS 로그인 후 Amazon EC2 혹은 콘솔에 로그인 선택

 

Amazon EC2 선택했을 경우, Amazon EC2 시작하기 선택

 

 

2. 인스턴스 생성에 사용할 키 페어 생성

  • 키 페어 - 키 페어 생성 선택
  • 키 페어 생성
    • 리눅스에서 접속할 예정이므로 .pem형식으로 다운로드
    • 윈도우에서 ssh 접속프로그램을 사용할 경우 .ppk 필요
    • 키 페어 생성 버튼을 누르면 생성된 키가 자동으로 다운로드
    • 키 분실하지 않도록 주의

 

3. 인스턴스 생성

  • 인스턴스 - 인스턴스 시작
  • 아래와 같이 선택 후 이전 단계에서 생성한 키 페어 지정
  •  생성된 인스턴스 확인
  • 생성된 인스턴스 ID를 눌러 인스턴스에 연결

 

 

4. 탄력적 IP 할당

  • 탄력적 IP: 변하지 않는 고정적인 IP
  • EC2 인스턴스는 재시작할때마다 IP가 변경되기 때문에 탄력적 IP를 할당하여 고정 IP를 지정해야 편리함
  • 프리티어에서는 탄력적 IP 생성 후 연결하지 않으면 과금이 되므로 주의
  • 인스턴스 삭제 시 할당되었던 탄력적 IP도 함께 삭제해야 과금되지 않음
  • 네트워크 및 보안 - 탄력적 IP - 탄력적 IP 주소 할당 - 할당

 

  • 탄력적 IP 주소 목록 - 할당된 IPv4 주소 - 탄력적 IP 주소 연결

 

  • 인스턴스 선택, 프라이빗 IP 주소 선택 - 연결

 

 

5. 인스턴스 접속

  • 인스턴스 목록
  • 생성된 인스턴스 ID를 눌러 인스턴스에 연결

 

  • 터미널(Ubuntu) 접속하여 ssh 키로 접속
    // 키 페어 모드 변경
    sudo chmod 400 {키페어}
    
    // 키 페어를 .ssh 폴더에 카피
    sudo cp {키페어} ~/.ssh
    
    // 인스턴스 연결
    ssh -i ~/.ssh/{키페어} ec2-user@{접속할 IP}.ap-northeast-2.compute.amazonaws.com
    
    // chmod 안 될 경우
    sudo umount /mnt/c
    sudo mount -t drvfs C: /mnt/c -o metadata​

 

 

※ SSH 접속 관련 참고 

 

[Linux] ssh로 원격 서버 접속하기

📌 SSH란?- Secure Shell- 네트워크를 통해 원격으로 컴퓨터에 접속하거나 안전하게 데이터를 전송하기 위해 사용하는 프로토콜  📌 SSH 접속 명령어ssh [옵션] [사용자명]@[호스트주소] [명령어] -

apricoding.tistory.com

 

 

 

'배포 & 운영 > AWS' 카테고리의 다른 글

[AWS] IAM Access key 생성하기  (0) 2024.05.27
[AWS] 젠킨스 설정하기  (0) 2024.05.07
[AWS] 도커로 리액트 배포하기  (0) 2023.09.05
[AWS] 인스턴스에 도커 설치하기  (0) 2023.09.04

📌 SSH란?

- Secure Shell

- 네트워크를 통해 원격으로 컴퓨터에 접속하거나 안전하게 데이터를 전송하기 위해 사용하는 프로토콜

 

 

📌 SSH 접속 명령어

ssh [옵션] [사용자명]@[호스트주소] [명령어]

 

- 옵션: ssh에 적용할 옵션으로 필요에 따라 선택

- 사용자명: 원격 서버에 로그인할 사용자 이름. 생략할 경우 현재 로그인한 사용자명 사용

- 호스트주소: ssh로 접속할 원격 서버의 호스트명 혹은 주소

- 명령어: 원격서버에 로그인한 후 실행할 명령어. 생략 가능

 

 

📌 자주 사용하는 옵션

-p : 접속할 포트 번호 입력. 기본 포트는 22번

-i : 접속에 사용할 개인 키 파일 경로 입력

-l : 원격서버에 로그인할 사용자명 지정

 

 

📌 예시

ssh -p 2222 -i ~/.ssh/mykey.pem user1@hostsample.com ls

 

- 사용자명: user1

- 호스트주소:  hostsample.com

- 포트 번호: 2222

- ~/.ssh 폴더에 저장된 개인키 mykey.pem 사용

- 접속 후 ls 명령어 실행으로 디렉토리 내용 확인

 

 

📌 config 파일 생성하여 편리하게 접속하기

1. ~/.ssh 폴더로 이동 후 config 파일 생성 혹은 편집

   (~/.ssh/config 또는 /etc/ssh/ssh_config)

cd ~/.ssh
vi config

 

 

2. config 파일 작성

Host hostsample
    HostName hostsample.com
    User user1
    Port 2222
    IdentityFile ~/.ssh/mykey.pem

- 작성 후 esc 누르고 :wq 입력하여 저장

 

 

3. ssh host명으로 접속!

ssh hostsample

 

 

 

'배포 & 운영 > Linux' 카테고리의 다른 글

[Linux] 유닉스, 리눅스, 우분투  (0) 2023.01.15
[Linux] WSL2 설치하기  (0) 2022.01.09
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

 

 

 

📌 서비스단에 생성하여 사용

public class MyService {

    private final WebClient webClient;

    public MyService(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://test.example.com").build();
    }

    // get 요청
    public Mono<String> fetchData() {
        return webClient.get()
                .uri("/data")
                .retrieve()
                .bodyToMono(String.class);
    }
    
    // post 요청
    public Mono<String> sendData(String data) {
        return webClient.post()
                .uri("/endpoint")
                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .body(BodyInserters.fromValue(data))
                .retrieve()
                .bodyToMono(String.class);
    }
    
}

 

  • WebClient.Builder를 사용하여 baseUrl 설정
  • Mono<String>을 반환하여 비동기 처리 가능
  • GET 및 POST 메서드 모두 사용 가능

 

 

 

📌 컨트롤러에서 직접 사용  - post

public class Contoller {
  
  public Map<String, Object> fetchData(String uri, Map<String, Object> params) {

    String url = "https://test.example.com";
    MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();

    try {
      for(Map.Entry<String, Object> entry: params.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue().toString();
        formData.add(key, value);
      }

      WebClient webClient = WebClient.create(uri);

      // 요청 빌드
      Mono<String> response = webClient
        .method(HttpMethod.POST)
        .uri(uri)
        .contentType(MediaType.APPLICATION_FORM_URLENCODED)
        .body(BodyInserters.fromFormData(formData))
        .retrive()
        .bodyToMono(String.class);

      String responseBody = response.block();

      ObjectMapper objectMapper = new ObjectMapper();
      Map<String, Object> result = objectMapper.readValue(responseBody, new TypeReference<Map<String, Object>>() {})

      return result;

    } catch (Exception e) {
      LOGGER.error("에러로그 출력 = ", e);
      throw new Exception();  // 익셉션
    }
    
  }

}

 

  • WebClient.create()를 사용하여 간단하게 인스턴스 생성
  • BodyInserters.fromFormData()로 Form 데이터 전송
  • ObjectMapper를 사용해 **응답(JSON)**을 Map<String, Object>로 변환

 

 

📌 에러 상황

  • 로컬에서는 잘 호출되던 API가 서버(리눅스 환경)에서는 java.net.UnknownHostException 오류 발생
  • 외부 API 도메인 이름을 서버가 인식하지 못할 때 나타나는 에러

 

📌 에러 원인

  • 리눅스 서버에는 도메인 이름과 IP 주소 매핑이 필요
  • hosts 파일에 도메인-아이피 매핑이 설정되지 않아서 발생

 

📌 해결 방법

  1. 리눅스 서버의 hosts 파일 수정
    sudo vi /etc/hosts
  2. 도메인과 IP 주소 추가
    123.45.67.89    test.example.com
  3. 변경사항 저장 후 확인
    ping test.example.com

 

 

+ Recent posts