[Golang] 코드 실행과정 코드 실행과정 폴더생성 .go 파일 생성 및 작성 Go 모듈 생성 빌드 실행 위의 다섯 가지 과정을 거친다. 1️⃣ 폴더 생성 Go 언어에서 모든 코드는 패키지 단위로 작성된다. 같은 폴더에 위치한 .go 파일은 모두 같은 패키지에 포함된다. 패키지명으로 폴더명을 사용한다. 폴더가 다르면 패키지도 달라진다. 2️⃣ .go 파일 생성 및 작성 Go문법을 이용하여 Go코드를 만드는 과정이다. 확장자는 반드시 .go로 끝나야 한다. 3️⃣ Go 모듈 생성 모든 Go 코드는 빌드하기 전에 모듈을 생성해줘야 한다. 1.16 버전 이후로는 Go 모듈이 기본으로 적용된다. go mod init [폴더명] 모듈에는 모듈명과 go 버전, 필요한 패키지 목록 정보가 담겨져 있다. 4️⃣ 빌드 Go 코드를 기계어로 변환하여.. Programming/Go 2년 전
[Golang] Go는 어떤 언어? 정적 컴파일 언어 vs 동적 컴파일 언어 프로그램이 동작하려면 기계어로 변환해주는 컴파일 과정이 필요하다. 바로 이 컴파일 과정을 언제 할 것이가를 언어를 나누는 기준으로 삼기도 한다. 미리 컴파일을 해두면 정적 컴파일 언어 Runtime 때 컴파일하면 동적 컴파일 언어 정적 컴파일 언어는 윈도우를 예로 들면 .exe파일이 미리 기계어로 변환된 실행파일이다. 즉 실행 파일 = 기계어 코드 다음과 같은 장점을 가진다. 실행할 때 변환 과정이 필요없어서 빠르다. 타입에러를 컴파일 시점ㅇ에서 발견할 수 있어서 타입 안정성이 뛰어나다. 동적 컴파일 언어는 런타임 떄 변환하기 떄문에 프로그램 실행 도중 변환 과정이 필요하므로 정적 컴파일 언어보다 더 느리게 동작한다. 동적 컴파일 언어는 정적 컴파일 언어보다 후에.. Programming/Go 3년 전
휴리스틱 캐싱 휴리스틱 캐싱 휴리스틱 캐싱은 캐싱정책을 사용자가 명시하지 않아도 브라우저가 가져가는 캐싱 정책임. 요청한 객체에 Cache-Control or Expires 헤더가 없고 Last-modified 헤더가 있을경우 휴리스틱 캐싱정책을 가져감. 따라서 동적인 리소스일 경우 배포를 해도 휴리스틱 캐싱 때문에 사용자에게는 적용이 안될 가능성이 있음. 휴리스틱 알고리즘 공식 (data-modified - date) * 10 *data-modifeid = last-modified 결론 운영환경에서는 캐싱 때문에 배포에 이상이 없도록 Cache-Control 혹은 Expires 헤더를 명시하는게 좋다. Reference https://www.vinaybhinde.in/2017/12/heuristic-caching-i.. Programming/Theory 3년 전
[Spring] AWS Credentials 설정 Contents 본 글은 아래의 글을 아주 간략하게 정리한 게시글 입니다. https://javabom.tistory.com/95 Spring에서 AWS 인증을 위한 제일 간단한 방법은 spring-cloud를 사용하는 것이다. 1. BasicAWSCredentials 액세스키와 시크릿키를 직접 정적으로 주입시켜주는 방법이다. (제일 간단한 방법) 2. EnvironmentVariableCredentialsProvider Java의 환경변수를 이용하여 주입시켜주는 방법이다. 설정해야 할 환경변수 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY 3. SystemPropertiesCredentialsProvider Java의 시스템 속성을 이용하여 주입시켜주는 방법이다. 4. Inst.. Etc.. 3년 전
[Terraform] README.md 작성 자동화 프로그램 ‘Terraform Docs’ 간단소개 Terraform의 리소스를 간단하게 README.md로 출력해주는 도구가 있다. Github : https://github.com/terraform-docs/terraform-docs 설치 (mac) brew install terraform-docs or brew install terraform-docs/tap/terraform-docs 사용법 terraform-docs markdown table \\ --output-file README.md \\ --output-mode inject ./ 위 명령어를 입력하면 현재 디렉터리에 존재하는 Terraform 리소스를 README.md 파일로 떨궈준다. hook을 이용하여 파이프라인과 통합시키기 1. pre-commit 설치 소스코드에 commit 작업 전.. Devops/Terraform 3년 전
[Terraform] Terraform으로 만든 AWS ECS에 Codedeploy를 이용하여 Blue/Green 배포 배포 흐름 이해를 돕기위한 미리캔버스 슬라이드 쇼 AWS ECS Blue/Green Deploy Using CodeDeploy Terraform 코드 코드의 가독성과 독자의 이해력을 높이기 위해 필요하지 않은 기타 인프라 리소스는 제외되어 있는 코드임. ecs.tf ### ECS Service resource "aws_ecs_service" "api" { name = "${local.name_prefix}-api" cluster = aws_ecs_cluster.designhub.name task_definition = aws_ecs_task_definition.api.id enable_execute_command = true launch_type = "FARGATE" desired_count = 1 ne.. Devops/Terraform 3년 전
[RDS] Aurora의 Read, Write 방식 Aurora와 RDS의 차이점 Aurora와 RDS의 가장 큰 차이점은 바로 스토리지에서 온다. Aurora는 Primary와 Replica끼리 스토리지를 공유하여 사용(Storage Cluster)하지만 RDS는 각각의 EBS 볼륨을 사용한다. Storage Cluster의 장점을 극대화하기 위해 Aurora는 내부적으로 Read, Write 시 RDS와는 다른 아키텍처를 가진다. 기본적으로 Aurora는 가용성을 확보하기 위하여 총 3개의 AZ를 가지고 각각의 AZ별로 2개의 스토리지 영역을 두고 있다. 데이터의 일관성을 보장하기 위하여 Aurora는 Quorum방식으로 Read, Write를 처리한다. 스토리지 영역이 6개이기 때문에 Read는 6개 중 3개의 스토리지에서 성공해야 완료이고 Wrti.. AWS/데이터베이스 3년 전
SNAT와 DNAT NAT란? Network Address Translation의 약자로써 사설 네트워크(Private Network)에 속한 여러개의 호스트가 하나의 공인 IP를 사용하여 인터넷에 접속하기 위한 기술이다. 동작원리 사용자는 라우터에게 구글 사이트로 접속하라는 신호를 보낸다. 라우터는 구글 사이트를 요청한 사설IP를 저장한다. 라우터의 NAT기술을 사용하여 사설IP를 공인IP로 변경한다. 구글은 해당 요청을 받고 59.6.66.238에게 페이지를 응답한다. 라우터는 응답받은 정보를 확인하고 #2번에서 기록해둔 요청한 사설 IP를 바탕으로 192.168.0.4에게 페이지를 전달합니다. NAT는 Source에 적용하느냐, Destination에 적용하느냐에 따라 SNAT와 DNAT로 구분된다. SNAT (Sou.. Computer Science/Network 3년 전