728x90

public 클래스는 절대 가변 필드를 직접 노출해서는 안된다. 불변 필드라면 노출해도 덜 위험하지만 완전히 안심 할 수는 없다. 

하지만 package-private 클래스나 private  중 첩 클래스에서는 종종 (불변이든 가변이든) 필드를 노출하는 편이 나을 때도 있다.

728x90
728x90

terraform 이란 ? 

  • HCL 언어 사용
    • HshiCorp사 에서 GO 언어 기반으로 개발한 HCL 언어로 코드 작성
  • 인프라 프로비저닝
    • IaC 도구 중 인프라 프로비저닝 용도로 사용
  • Reuse 및 테스트 활용 
    • 재사용 가능한 dlsvmfk zhem 
    • 반복적인 인프라 구성 테스트 진행
  • Immutable Infrastructure
    • 환경 원활하게 변경되는 인프라 구성 가능
  • 클라이언트 아키텍처 
    • 별도의 서버구성이 필요 없는 클라이너트 기반 아키텍처만 지원
  • 다양한 Provider 지원
    •  AWS, GCP, Azure등 다양한 Provider 지원

Terraform Lice Cycle 

 


Terraform Flow

 

1. Terraform 구성 소스 - 현재 관리자가 작성/수정하고 있는 코드

2. Terraform state - 가장 최근에 배포한 테라폼 코드 형상

3. 실제 인프라 - 실제로 Cloud 환경에 배포되어 있는 인프라

 


terraform 디렉토리 레이아웃( 참고용  운영 규모에 맞게 수정하여 사용 필요)

  • main.tf - 프로비저닝할 리소스 정의 
  • variables.tf - 소스코드에 사용할 변수들을 정의
  • outputs.tf - 소스코드에 대한 실행 결과를 정의 및 출력
  • modules - 리소스를 모듈화한 단위
  • backend.tf - 형상 관리를 하기 위한 설정을 정의
  • provider.tf - 리소스 제공자와 버전등을 정의

테라폼 ec2 만들기 

간단하게 테스트 진행 

 

1. vscode 설치 

2. 테라폼 설치 설치 참조 아래 블로그 참조

https://curiousjinan.tistory.com/entry/terraform-installation-guide-mac

 

테라폼(Terraform) 사용 가이드 2:MacOS에 테라폼 설치하기

이번 포스트에서는 MacOs에 테라폼을 설치해 보자 1. 테라폼 설치: URL 직접 다운로드 직접 다운로드하기 첫 번째 방법은 URL로 직접 다운로드하는 건데, 최신 버전이나 이전 버전 모두 다운로드할

curiousjinan.tistory.com

 

3. backend.tf 파일 작성

 

4. main.tf 인스턴스 생성 할 정보 기입

 

 

5.provier.tf 에 AWS key 와 profile 등 정보를 기입한다.

 

아래는 init -> destory 까지 과정이다.

 

적용 이후 생성된 ec2

 

이후 destroy 명령어 입력하면 삭제된다.

728x90

'인강 정리 > DevOps & MSA' 카테고리의 다른 글

VPC  (0) 2024.07.30
네이밍 컨벤션  (2) 2024.07.23
SSH(Secure Shell Protocol)  (0) 2024.07.19
AWS CLI  (0) 2024.07.18
MFA, Authy 설정  (0) 2024.07.16
728x90

프로그램 요소의 접근성은 가능한 한 최소한으로 하라.

꼭 필요한 것만 골라 최소한의 public API를 설계하자.  그외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개 되는 일이 없도록 해야 한다. public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안된다. public static final 필드가 참조하는 객체가 불변인지 확인하라.

728x90
728x90

SSH란? 

Secure Shell Protocol 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.

 

SSH는 개발 혹은 운영 중에 필수적으로 접하게 된다.

대표적으로  github 이용시  giuthub 코드를 푸쉬 혹은 clone 할때 사용.

 

 

사용하는 이유?

SSH 를 사용하는 이유는 민감한 정보를 주고 받는 다면 정보를 직접 네트워크를 통해 넘기기 때문에 해당 정보를 열어볼 수 있어 보안에 상당히 취약.

하지만 SSH  사용시 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 뛰어나기 떄문에 "보안"의 목적을 위해 사용한다.

 

 

SSH 대칭키방식과 비대칭키 방식 모두를 사용하여 인증 및 암호화를 진행 

대칭키 방식 - 동일한 키 값으로 암호화와 복호화를 진행하는 방식

 

비대칭키 방식- 암호화에 사용되는 키와 복호화에 사용되는 키가 서로 다른 방식

기본적으로 SSH는 한쌍의 key를 통해 접속하려는 컴퓨터와 인증과정을 거친다. 

public key - 공개키, 공개되어도 비교적 안전한 키, 공개키를 통한 암호화는 가능하지만, 복화화는 불가.

pirvate key - 비공개키, 외부에 노출이되어서는 안되는 키, 시스템 내부에 저장되어 있고, 암호화된 메시지를 복호화 할 있도록 돕는 역할.

 

서버 인증

  • 클라이언트 난수 생성 , 난수에 대한 해시를 생생하여 저장
  • 클라이언트 생성한 난수 값을 public key를 통해 암호화하여 데이터를 전송
  • 서버 측에서는 암호화된 데이터를 private key를 통해 복호화 한 후 난수값을 확인
  • 복호화된 난수값을 통해 해시를 생성 후, 다시 클라이언트 전송
  • 클라이언트에서는 전송 받은 해시와 젖아하고 있는 해시를 비교 정상적인 서버인지 확인

 

클라이언트 인증 

  • 서버 난수 생성, 해시 생성하여 저장
  • 서버 생성한 난수 값을 public key를 통해 암호화하여 데이터를 전송
  • 클라이언트에서는 암호화된 데이터를 private key를 통해 복호화 한 후 난수값을 확인
  • 복호화된 난수값을 통해 해시를 생성, 해시 값을 서버로 전송
  • 서버는 자신이 가지고 있는 해시와 전송받은 해시를 비교하여 사용자 체크

 

서버, 클라이언트의 인증이 모두 끝나면 , 비대칭 키를 통해 서로 대칭키(세션 키)를 교환하게 된다.

이 후 통신 되는 모든 데이터는 세션키를 통해서 암호화가 이루어지고 접속 해제시  세션키는 폐기

 

HTTPS와 SSH를 비교해 보자면, 데이터를 암호화 한다는 점은 공통적인 부분.
HTTPS는 브라우저를 통해, 브라우저에서의 통신을 위해 이루어지는 프로토콜이라 한다면,
SSH는 더 깊이 OS까지의 통신 및 접근을 가능.

 

 

 

 

 

 

728x90

'인강 정리 > DevOps & MSA' 카테고리의 다른 글

네이밍 컨벤션  (2) 2024.07.23
terraform  (0) 2024.07.22
AWS CLI  (0) 2024.07.18
MFA, Authy 설정  (0) 2024.07.16
IAM 유저 생성  (1) 2024.07.16
728x90

CLI 란?

AWS Command Line Interface (AWS CLI) 는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 최소 구성으로 AWS CLI 를 사용하면 터미널 프로그램의 명령 프롬프트에서 브라우저 AWS Management Console 기반에서 제공하는 것과 동일한 기능을 구현하는 명령을 실행할 수 있습니다.

 

1. https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

해당 링크로 들어가 아래와 같은 커맨드라인을 복사 하여 터미널에 설치한다 .

 

 

설치 완료후에 aws 라고  타이핑 하면 아래와 같이 나오면 설치 완료!

aws configure  입력 후  아래와같이  입력값이 나오면 설정 완료

 

 

 

*중복 계정 이용중인 경우 

aws configure --profile [id]

입력하면 아래처럼 추가 프로파일 이 생성된다 

 

사용시에는 exprot AWS_PROFILE=[id] 를통해  등록된 프로파일을 선택하여 사용 가능

 

 

 

 

 

** CLI 자동완성

728x90

'인강 정리 > DevOps & MSA' 카테고리의 다른 글

terraform  (0) 2024.07.22
SSH(Secure Shell Protocol)  (0) 2024.07.19
MFA, Authy 설정  (0) 2024.07.16
IAM 유저 생성  (1) 2024.07.16
AWS Organization  (0) 2024.07.16
728x90

재직중인 회사에서 개발 서버 배포중  아래와 같은 에러가 발생하였다. 

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fbe00000, 27262976, 0) failed; error='Not enough space' (errno=12)

 

위에 러는 말그대로 메모리가 충분하지 않아 발생한다. 

 

해결책으로는 여러가지 방법이 있는걸로 화인되었다.

 

  • 시스템의 메모리 로드 줄이기 
  • 물리적 메모리 또는 SWAP 공간 늘리기
  • SWAP 백킹 저장소가 가득차 있는지 확인
  • 64비트 OS 64비트 Java 사용 
  • JAVA 힙 크기 줄이기 (-Xmx/ -Xms)
  • java 스레드 수 줄이기
  • java 스레드 스택 크기 줄이기 (-Xss)

다양한 방법이 있는데 나의 겨우   swap 공간을 확인후 할당하는 방향으로 해결하기로 했다. 

swap 이란?

스왑은 Linux 기반 운영 체제에서 가상 메모리로 작동하는 저장 장치(예: HHD, SSD, 가상 저장 장치)의 전용 공간이다. 시스템의 사용 가능한 메모리가 부족할 때 물리적 RAM(Random Access Memory)을 보충하는 데 사용된다. 스왑 공간을 통해 운영 체제는 덜 자주 사용되는 데이터를 RAM에서 스왑 영역으로 이동하여 더 중요하거나 자주 액세스하는 데이터를 위해 RAM의 공간을 확보할 수 있다. 

스왑 공간은 스왑 파티션 또는 스왑 파일의 형태일 수 있다. 스왑 파티션은 저장 장치의 전용 파티션인 반면 스왑 파일은 기존 파일 시스템 내의 파일이다. 둘 다 동일한 목적을 수행한다.

 

 

메모리 및 swap 메모리 확인

 

아래와 같이  dd 명령어로 파일 생성

dd if=/dev/zero of=/var/spool/swap/swapfile bs=1MiB count=2048

 * 해당 디렉토리가 없는 경우  직접 디렉토리 생성

 

번에 1MiB(1MB)씩 2048번 반복하여 null문자로 채워진 파일을 만든다. (1MB * 2048 = 2GB)

fallocate 명령어를 이용하여 대용량 파일 생성도 가능 하나 리눅스 버전에 따라 swapfile 인식 안될수 있어

dd 명령어와 /dev/zero 활용하여 swap 파일을 만드는 것을 권장한다.

 

퍼미션  변경

sudo chmod 600 /var/spool/swap/swapfile

swap 포맷 변환 및 swap 할당

sudo mkswap /var/spool/swap/swapfile
sudo swapon /var/spool/swap/swapfile

 

 

 

 

swap 파일 시스템 등록(필요한 경우)

vim /etc/fstab
UUID=09934798-af72-4741-b12f-aa84a5850aa1  /    ext4    defaults    1 1
/var/spool/swap/swapfile                none    swap    defaults    0 0

*swapon 명령어를 이용하면 시스템에 swap파일을 등록할 수 있지만, OS를 재부팅할 경우 다시 리셋이 됨.

swap파일 등록을 영구히 하기 위해서는, 리눅스 파일시스템 테이블에 등록하면 가능.
/etc/fstab 에는 swap파일 이외에 마운트폴더 영구 적용.

위의 코드의 맨아래줄과 같이 swap파일을 등록하면 끝.

 

 

 

 

 

 

최종 적용 결과

 

 

 

 

728x90

'코드 > dev' 카테고리의 다른 글

OSI 7계층  (0) 2025.04.02
네트워크 기초  (4) 2024.07.23
배포시 테스트코드 profile 적용 안되는 오류  (2) 2024.07.10
sync vs async, blocking vs non-blocking 차이  (0) 2024.04.13
@async와 @transactional  (0) 2024.04.01

+ Recent posts