본문 바로가기

분류 전체보기

(644)
92일차 - 테라폼과 AWS 엔드 포인트, RDS 생성 엔드 포인트 생성 - VPC 안의 S3와의 원활한 통신을 위하여 생성 ... # 기존 코드 # 인터넷 게이트웨이 resource "aws_internet_gateway" "igw_1" { vpc_id = aws_vpc.vpc_1.id tags = { Name = "${var.prefix}-igw-1" } } # 추가 resource "aws_vpc_endpoint" "s3_endpoint" { vpc_id = aws_vpc.vpc_1.id service_name = "com.amazonaws.${var.region}.s3" route_table_ids = [aws_route_table.rt_1.id] } ... 서브넷 추가 - RDS 사용을 위해선 최소 2개의 서브넷이 필요하다. => 다른 가용영역을 써..
91일차 - 테라폼과 AWS 클라우드 프론트 클라우드 프론트(CloudFront) # 새 버킷 생성 resource "aws_s3_bucket" "bucket_2" { bucket = "${var.prefix}-bucket-${var.nickname}-2" tags = { Name = "${var.prefix}-bucket-${var.nickname}-2" } } # 템플릿 데이터 소스 생성 data "template_file" "template_file_1" { template = "Hello" } resource "aws_s3_object" "object" { bucket = aws_s3_bucket.bucket_2.id key = "public/index.html" content = data.template_file.template_file_..
[이펙티브 자바 3/E] 아이템4 - 인스턴스화를 막으려거든 private 생성자를 사용하라 public class UtilityClass { private UtilityClass() { throw new AssertionError(); } ... } - 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. ===> 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. - 명시적 생성자가 private이니 클래스 바깥이서는 접근할 수 없다. - 꼭 AssertionError를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다. - 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아준다. - 상속을 불가능하게 하는 효과도 있다. - 그러나 그다지 직관적이지 않으므로 적절히 주..
[이펙티브 자바 3/E] 아이템3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴 - 인스턴스를 오직 하나만 생성할 수 있는 클래스 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. => 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 싱글턴을 만드는 방식 - 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 1. public static 멤버가 final 필드인 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public void leaveTheBuilding() {...} } - public이나 pr..
[이펙티브 자바 3/E] 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴(telescoping constructor pattern) - 필수 매개변수만 받는 생성자 ... 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식 => 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다. 자바빈즈 패턴(JavaBeans pattern) - 매개변수가 없는 생성자로 객체를 만든 후, 세터(setter)메서드를 호출해 원하는 매개변수의 값을 설정하는 방식 => 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히 생성되기 전까지는 일관성이 무너진 상태에 놓이게 된다. 빌더 패턴(Builder pattern) - 필수 매개변수만으로 생성자(혹은 정적 팩터리)를 호출해 빌더 객체를 얻는다. 그런 다음 빌더 객체가 제공하..
[이펙티브 자바 3/E] 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. - 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다.(ex. BigInteger.probablePrime) - 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩터리 메서드로 바꾸고 각각의 차이를 잘 드러내는 이름을 지어주자. 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. - 이 덕분에 불변 클래스(immutable class; 아이템 17)는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다. - (특히 생성 비용이 큰) ..
90일차 - 테라폼의 리소스 생성 순서, AWS 엘라스틱 IP, Virtual Domain 테라폼으로 버킷 생성 시 리소스 생성 순서 테라폼은 종속성 그래프(DAG)를 만들고 그것을 통해 리소스 생성 순서를 결정한다. 따라서 코드 상에서 리소스를 기술한 순서는 기본적으로 리소스 생성 순서에 직접적인 영향을 미치지 않는다. 그러나 테라폼이 인식하지 못하는 의존성에 대해서는 직접 depends_on으로 설정해주어야 한다. # 기존 코드 ... # 버킷 생성 resource "aws_s3_bucket" "bucket_yuri_1" { bucket = "${var.prefix}-bucket-yuri-1" tags = { Name = "${var.prefix}-bucket-yuri-1" } } # 정책 설정 resource "aws_s3_bucket_policy" "bucket_yuri_1_policy..
89일차 - 테라폼, AWS EC2, IAM Role, 인스턴스 프로파일, S3와 버킷 AWS EC2 생성 # 기존 코드 ... resource "aws_instance" "ec2_1" { ami = "ami-04b3f91ebd5bc4f6d" # AMI 코드 instance_type = "t2.micro" subnet_id = aws_subnet.sub_1.id vpc_security_group_ids = [aws_security_group.sg_1.id] tags = { Name = "${var.prefix}-ec2-1" } } 공인 IP 할당 ... resource "aws_subnet" "sub_1" { vpc_id = aws_vpc.vpc_1.id cidr_block = "10.0.1.0/24" availability_zone = "${var.region}a" map_public_i..