-
여러 고객에게 정기적으로 메일 발송하기
회사에서 일하다 보면 비즈니스 부문에서 정기적으로 메일을 보내는 업무를 하는데캘린더에 특정시기에 알람을 설정해두고 그 시기가 되면 손으로 일일히 메일을 발송하는 것을 보게 됩니다.자동화시키면 신경쓰지 않아도 될텐데 그 작업을 자동화하지 않고 계속 수작업을 하는 데왜 그런지 물어보면 이런 작은 작업으로 개발팀이나 업무개선팀에 의뢰하기가 어렵다거나이정도 작업은 그냥 수작업으로 하는게 편하다던가, 그런거 할 줄 모른다가 대답의 주를 이룹니다.그래서 간단하게 특정 날짜에 리스트에 있는 고객들에게 자동으로 메일을 발송하는 방법을 알려드립니다.여러가지 방법이 있겠지만 간단하게 구현을 하기 위해서전제로서 현재 회사에서 구글 워크스페이스를 이용중인 분들을 위한 팁입니다.구글 앱 스크립트와 구글 Sheet를 이용하는 방..
2025.09.01 13:43 -
AWS에서 DDOS공격을 막기 위한 설정하기
AWS WAF, CloudFront, 그리고 Shield Standard 조합은 대규모 DDoS 공격과 과도한 다운로드 요청으로 인한 비용 급증을 효과적으로 방어하고 완화하는 강력한 전략입니다.각 서비스는 다음과 같은 역할을 수행합니다:AWS Shield Standard: 추가 비용 없이 L3/L4 DDoS 공격에 대한 기본적인 자동 보호를 제공합니다.Amazon CloudFront: 콘텐츠를 엣지 로케이션에 캐싱하여 원본 서버의 부하를 줄이고, DDoS 공격 트래픽을 엣지에서 흡수하며, WAF와 연동됩니다.AWS WAF: CloudFront에 연동되어 L7 DDoS 공격, 웹 취약점 공격, 그리고 과도한 요청(다운로드 요청 등)을 애플리케이션 계층에서 필터링하고 차단합니다.다음은 설정 순서와 각 단계별..
2025.06.27 12:35 -
테라폼에서 루프문 사용하기4
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each를 사용하는 장점1. 동적 리소스 관리for_each문은 컬렉션(map 또는 set)을 기반으로 리소스를 동적으로 생성, 관리 및 destroy를 가능하게 합니다. 이 동적 접근 방식을 통해 인프라는 Terraform 코드의 구성을 수동으로 업데이트하지 않고도 terraform.tfvars에 정의된 입력변수 데이터의 변경만으로도 자동으로 구성을 변경할 수 있습니다.예를 들어, 아래 예와 같이 프로젝트 이름 목록을 기반으로 동적 개수의 S3 버킷을 프로비저닝하기 위한 인프라 프로비저닝을 위한 IaC를 작성할 수 있습니다.variable.tf# variable.t..
2024.08.23 18:51 -
테라폼에서 루프문 사용하기3
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each의 실제 사용 사례1. 리소스 체이닝리소스 체이닝은 한 리소스의 구성이 다른 리소스의 출력에 따라 달라지는 리소스 간 종속성을 만드는 것을 포함합니다. 이는 특정 리소스를 순차적으로 프로비저닝해야 하는 인프라 설정에서 일반적입니다.리소스 체이닝을 더 잘 이해하기 위해 VPC를 설정하고 VPC 내에 서브넷을 배포하는 일반적인 시나리오를 살펴보겠습니다.variable.tf# variable.tfvariable "networks" { description = "Map of networks configurations" type = map(string({ ci..
2024.08.23 18:48 -
테라폼에서 루프문 사용하기2
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each는 어떻게 작동하나요?더 잘 이해하기 위해 for_each문의 실제 사용 사례를 살펴보겠습니다.EC2 인스턴스의 식별자인 각 키의 문자열 값과 인스턴스 유형 및 AMI ID를 포함하는 또 다른 맵인 인스턴스 구성 맵이 있다고 가정해 보겠습니다.variable.tf# variable.tfvariable "instances" { description = "Map of instance configurations" type = map(object({ ami = string instance_type = string })) defaul..
2024.08.23 18:43
-
gzip을 멀티코어를 사용해 압축해보자
파일이나 디렉토리의 gzip 압축을 수행할 때 1 코어 밖에 사용하지 않기 때문에 압축시간이 오래 걸린다. 8 코어 CPU를 활용하여 병렬에서 gzip 압축을 하고 싶다. 이런 상황에서 쓸 수 있는 좋은 방법을 소개합니다. pigz yum으로도 설치 가능한 "pigz"는 멀티 코어를 충분히 이용하여 파일 압축 성능을 올려줄 수 있습니다. 사용법 평소 사용하는 tar 명령에 --use-compress-prog옵션을 함께 사용하여 pigz을 지정합니다. # tar cf sample.tar.gz --use-compress-prog=pigz sample 데이터 디렉토리 (/var/lib/mysql)을 압축한다면 다음과 같은 형식의 커맨드로 실행하시면 됩니다. # cd /var/lib # sudo tar cf /..
-
쉘 스크립트에서 문자열이 매칭되었을 때 분기하기
쉘 스크립트에서 if문에서 찾고자 하는 문자가 포함되어 있는지를 확인하기 위한 두가지 방법에 대해 이야기 해보려 합니다. 먼저 스크립트를 보시죠 #!/bin/sh VAR_STR1="This is test string" VAR_STR2="test" if [[ "${VAR_STR1}" == *"test"* ]];then echo "1st find it" fi if [[ "${VAR_STR1}" =~ "test" ]];then echo "2nd find it" fi첫번째는 아스테리스크(*)를 사용하여 "test" 라는 문자열에 포함된 것을 찾아 분기한 것이고 두번째는 쉘 스크립트의 if문의 기능을 이용한 것입니다. 참고로 "=~"는 bash 버전3 이상일 때 지원합니다. 개인적으로는 두번째 패턴을 좋아합니다만..
-
쉘 스크립트에서 특정조건의 파일을 찾아 이동, 복사하기
첫번째 방법 먼저 mv, cp 커맨드의 Source부분을 검색결과로 매칭하는 방법이 있습니다. 특정 디렉토리안의 첫번째 계층에서 이름으로 매칭되는 파일 찾아 이동, 복사하기 mv $(find . -maxdepth 1 -name "*.bak") /복사할경로 cp -p $(find . -maxdepth 1 -name "*.bak") /복사할경로 특정 디렉토리안의 첫번째 계층의 파일 전체를 찾아 이동, 복사하기 mv $(find /test/files -maxdepth 1 -type f) /복사할경로 cp -p $(find /test/files -maxdepth 1 -type f) /복사할경로 두번째 방법 find 명령어의 옵션인 exec을 사용하여 매칭된 파일을 이동하거나 복사하는 방법이 있습니다. 특정 디렉..
-
맥에서 최신 Bash 사용하기
맥에서 사용되는 터미널 CLI의 버전은 모하비의 경우 bash3.2.57를 사용하고 있습니다. bash 쉘의 최신 버전을 설치하고 싶거나 필요한 경우 아래와 같은 방법으로 업그레이드가 가능합니다. 직접 파일이나 소스를 받아서 설치하는 방법도 있습니다만 기본적으로 맥의 패키지 관리 툴인 HomeBrew를 사용해서 업데이트 하는 방법을 설명하도록 하겠습니다. 1. HomeBrew 설치 먼저 패키지 관리툴인 HomeBrew가 설치되어 있는 지 확인 후 $ brew --version 설치가 되어 있다면 아래와 같이 버전 정보가 표시됩니다. Homebrew 2.1.11 Homebrew/homebrew-core (git revision c4300; last commit 2019-09-12) 설치되어 있지 않다면 설..
-
AWS에서 DDOS공격을 막기 위한 설정하기
AWS WAF, CloudFront, 그리고 Shield Standard 조합은 대규모 DDoS 공격과 과도한 다운로드 요청으로 인한 비용 급증을 효과적으로 방어하고 완화하는 강력한 전략입니다.각 서비스는 다음과 같은 역할을 수행합니다:AWS Shield Standard: 추가 비용 없이 L3/L4 DDoS 공격에 대한 기본적인 자동 보호를 제공합니다.Amazon CloudFront: 콘텐츠를 엣지 로케이션에 캐싱하여 원본 서버의 부하를 줄이고, DDoS 공격 트래픽을 엣지에서 흡수하며, WAF와 연동됩니다.AWS WAF: CloudFront에 연동되어 L7 DDoS 공격, 웹 취약점 공격, 그리고 과도한 요청(다운로드 요청 등)을 애플리케이션 계층에서 필터링하고 차단합니다.다음은 설정 순서와 각 단계별..
-
쉘 스크립트에서 계산하기 [expr]
expr 기본적으로 expr은 커맨드로 별도로 존재하고 있습니다. /usr/bin/expr 하지만, bash 쉘은 expr를 built-in으로 내장시켜 쉘스크립트에서 expr 명령어를 사용하면, /usr/bin/expr를 사용하지 않고 내장된 build-in 명령어를 실행합니다. 실행속도도 build-in 명령이 외부 명령보다 빠릅니다. expr로 연산할 수 있는 내용은 아래 4가지 입니다. 산술 + : 더하기 - : 빼기 * : 곱하기('\*'로 사용) / : 나누기를 한 후의 몫의 값 % : 나누기를 한 후의 나머지 값 논리 | : 어느 한쪽이 조건에 만족하면 참(or) & : 양쪽 조건이 모두 만족하면 참(and) 관계 = : 같음 > : 왼쪽이 오른쪽보다 큼 >= : 왼쪽이 오른쪽보다 크거나 같..
-
삼바 서버 설정하기
1. 삼바 패키지 설치 먼저 Samba를 설치합니다. sudo yum -y install samba 2. 삼바 관련 포트 개방 방화벽이나 AWS의 경우는 Security Group에 Samba관련 포트 설정을 추가합니다. 외부에서 Samba에 액세스 할 수 있도록 다음 포트 inbound을 열어 둡니다. · UDP 137 번 포트 : NetBIOS 이름 서비스 (이름 등록 등) 용 · UDP 138 번 포트 NetBIOS 데이터 그램 서비스 (검색 등) 용 · TCP 139 번 포트 : NetBIOS over TCP (파일 / 인쇄 서비스 등) 용(리눅스) · TCP 445 번 포트 : 직접 호스트 SMB (파일 / 인쇄 서비스 등) 용(윈도우즈) 3. 삼바 유저 설정 먼저 일반유저를 생성해줍니다. 유저..
-
커피 마시면 잠 못자도 녹차 마시고는 잘자는 이유
제가 원래 커피를 마시면 잠을 못 이루는 체질이라 커피를 기피해왔는데요 어느정도이냐면 아침에 커피 한잔 마시면 그날은 꼴딱 밤을 세거나 아침녁에 잠들곤 하고 커피의 양이 많거나 진한 커피를 마시게 되면 심장이 뛰고 손이 떨릴 정도로 카페인에는 민감하게 반응을 합니다. 그런데 특이하게 커피 못지 않게 카페인이 함유되어 있다는 녹차를 자주 마시는데도 잠못든다든지 하는 증상이 나타나지 않았습니다. 그래서 녹차와 커피의 차이가 무엇일까 오래전부터 궁금해 해오다 작정하고 구글님의 도움을 받아 정보를 수집해보았습니다. 흔히 녹차에 함유된 카페인 때문에 많은 사람들이 녹차가 불면증을 일으킬 수 있다고 생각하지만, 우리가 마시는 차 한 잔에 들어있는 카페인은 25mg 정도로 커피 한 잔에 들어있는 65~112mg 정도..