반응형

모바일 앱을 개발해 보고 싶은 마음이 들어서 유투브를 찾아보던중에 찾은 강의 입니다.

모바일 앱 개발을 위해서는 코틀린이라는 새로운 언어를 배워야 하기 때문에 가장 기본적인 입문 내용을 찾아 보았습니다.  자바로도 되지만 요즘 대세는 코틀린이라네요.

여러개의 유투브 동영상 강의중 마음에 드는 강의가 있어 정리해 보았습니다. Joyce 님의 코틀린 3강으로 끝내기 내용이고요 그 중에서 1,2강 내용을 정리한 글입니다. 

1강, 2강은 주로 코틀린 언어의 문법을 설명하고 3강에서 간단한 앱을 실제로 만들면서 강의합니다. 그래서 1강, 2강에서는 앱개발과는 살짝 다른 느낌을 받지만 기본이되는 내용이니 잘 이해하고 넘어가면 나중에 좋을 것 같습니다.

기본적인 코딩 경험이 있으시고 안드로이드 앱 개발을 배우고 싶으신 분들께 추천하는 강의 입니다. 

 

 

코틀린 3강으로 끝내기 - 1편 기본 문법

1강  =========  https://www.youtube.com/watch?v=IDVnZPjRCYg

 

 

0. IDE 설치

최신 버전의 설치파일 다운로드 주소 : https://developer.android.com/studio?gclid=Cj0KCQiA7bucBhCeARIsAIOwr--wnY7TyI53kQugOceR69MqvskUSVN9toBlgwo1hw_F6w-g_oJH5JAaAvSQEALw_wcB&gclsrc=aw.ds 

 

Download Android Studio & App Tools - Android Developers

Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.

developer.android.com

 

이전 버전의 설치파일을  다운로드하는 주소 : https://developer.android.com/studio/archive?hl=ko

 

 

1. 함수

 

 

 

2. val / var

val = value : 값 변경 불가

var = variable : 값 변경 가능

 

 

3. String 템플랫

 

 

 

4.  조건식

// if

3항 연산자가 없어서 대신 아래와 같이 사용 가능

fun whichOneIsBig (a: Int, b: Int) : Int = if(a>b) a else b

 

// when

fun checkNum (score: Int) : Bool {

    when(score) {

        0 -> println("This is zero")

        1,2 -> println("This is 1 or 2")

//        in 10..100 -> println("This is 10 ~ 100")

        else -> println("This is over2")

    }

}

 

// Expression vs Statement

Expression: 결과적으로 값을 만드는 표현, 문장, 문단(모든 코틀린 함수는 expression 왜냐하면 무엇이든 최소한 하나는 값을 반환하니까)

Statement는 Expression이 아닌 것, 명령을 지시하는, 값을 만들지 않는 표현, 문장, 문단

 

 

5. Array vs List

Array는 처음에 크기가 정해져서 생성됨

immutable(수정불가) List 와 mutable(수정가능) List 가 있음. 

fun array() {

    val array : Array<Int> = arrayOf(1,2,3)

    val list : List<Int> = listOf(1,2,3)

    val array2 : Array<Any> = arrayOf(1,"a",3.4f)

    val list2 : List<Any> = listOf(1,"a",3L)

    array[1] = 2

    var result : Int = list.get(0) // 수정불가 값을 가져올 수만 있음.

    val arrayList : ArrayList<Int> = arrayListOf<Int>() // 추가 삭제 가능

    arrayList.add(10)

    arrayList.add(20)

}

 

 

6. 반복문   for / while

 

fun forAndWhile (){

    val students : ArrayList<String> = arrayListOf("Kim", "Lee", "Park")

    for (name : String in students){

        println("${name}")

    }

}

 

for ( i :Int in 1..10 ) {     }  // 1부터 10까지 1씩 증가하며 10번 실행

for ( i :Int in 1..10 step 2 ) {     }  // 1부터 10까지 2씩 증가하며 5번 실행

for ( i :Int in 10 downTo 1 ) {      }  //10부터 1까지 감소하며 10번 실행

for ( i :Int in 1 untill 10 ) {      }.  // 1~ 9까지 1씩 증가하며 9번 실행

// 인덱스와 내용함께 사용하는 방법

for (( index : Int, name : String) in students.withIndex()) {

    println("${index+1}번째 학생: ${name}")

}

 

 

while

var index = 0

while (index < 10) {

    println("${index}")

    index ++

} // 0부터 9까지 10번 수행

 

7. NonNull , Nullable

NPE : Null Point Exception Error  Java에서는 런타임에 에러가 나서 확인이 어려웠는데 코틀린에서는 컴파일 타임에( 코드를 작성하는 시점에) 에러 발생을 미리 알려줌. null이 가능한 변수와 아닌변수를 미리 구분해 줌으로써 실행중에 발생하는 에러를 예방할 수 있음.

var name : String = "James"     // NonNull type 변수로 null 이 들어갈 수 없음. 에러발생

var nullableName : String? = null   // nullable 변수로 null 할당에도 에러가 없음. 이를 위해서 type옆에 ?(물음표)를 추가해줘야함

var nameInUpperCase : String = name.toUpperCase()

var nullableNameInUpperCase : String? = nullableName?.toUpperCase()   // nullableName이 null 인 경우 대문자로 변환하려하면 에러가 이니라 null을 제공함

// ?:

위와 같은 경우 null 값이 아니라 디폴트 값을 제공하고 싶은 경우 엘비스 연산자를 사용(?:)

val lastName : String? = null

val fullName : String = name + " " + (lastName?: "No last name")   // lastName 이 null 인경우 "No last name"을 사용

// !!

개발자가 null 이 아님을 보장한다는 의미. 사용 권장하지 않음. 

// ignore null

fun ignoreNulls(str : String?) {

    val email : String? = "id@email.com"

    email?.let{

        println("my email is ${email}")    

    } // email 이 null이 아니면 my email ~ 출력, null이면 null 출력

}

 

 

8. Class

생성자를 추가한 클래스. init 이 먼저 실행되고 그다음에 constructor가 실행됨

// 클래스 상속, 오버라이딩 overriding

Korean 객채 생성 후 singASong 을 실행하면 상속 받았기 때문에 Human의 메소드가 실행됨.

lalala가 출력됨

오버라이딩을 위해 모class의 singASong 메소드를 앞에서 open 해주고, 자식class(Korean)에서 override 오버라이딩 함

라라랄 이 출력됨

오버라이딩한 메소드 대신에 상위 클래스(Human)의 메소드를 그대로 사용하고 싶을땐 super를 이용하면 됨.

lalala와 라라랄 이 출력됨

상위 클래스의 프로퍼티도 사용할 수 있음. Human 에서 생성자에 name 이 있으므로 별도 할 당 없이도 디폴트 값을 읽어올 수 있음.

my name is :Anonymous 가 출력됨

 

 

 

 

 

 

 

 

 

 

코틀린 3강으로 끝내기 - 2편 고급 문법 ====================

2강 =======  https://www.youtube.com/watch?v=Q5noYbbc9uc

 

1. Lambda

아래는 정의 내용과, 입력받은 숫자의 제곱을 반환하는 square 람다를 만드는 예시. 그리고 이름, 나이를 입력받아 출력하는 람다 예시.

 

확장함수

 

람다의 인풋 파라메터가 하나인 경우 변수를 it으로 사용할 수 있다. 

아래에서 this 는 람다(introduceMyself)를 호출하는 객체(name)를 말한다. 그래서 this 대신에 ariana가 들어가서 "I am ariana and 27 years old"가 출력된다. 

// 람다의 Return

// 람다 표현 방법

정의한 ivokeLamda에 인자로 lamda 함수를 사용. 제일 아래 줄의 형태는 마지막 파라미터가 람다식일때 보여짐. 

// 익명 내부 함수     자바 인터페이스, 하나의 변수만 사용할때 사용가능

 

 

 

2. Data Class

 

 

3. Companion Object

프라이빗 클래스의 프로퍼티나 메소드를 사용할 수 있게 해줌. java의 static 과 같은 역할 

인터페이스를 사용

 

 

4. Object

오브젝트는 실행 시 처음 한번만 만들어짐 singleton pattern

 

 

 

 

 

 

 

 

 

 

코틀린 3강으로 끝내기 - 3편 심리테스트 앱 만들기  ====================

3강 ======= https://www.youtube.com/watch?v=M1e2tLnzVPo&t=2733s 

 

 

 

반응형
반응형

 

갑자기 마우스 클릭 시 선택이 되지않고,

마치 쉬프트 키를 동시에 누른 것처럼 영역 선택이 되는 현상이 발생했습니다.

원인은 모르겠지만, 찾아보니 인텔리J에서도 이런 현상이 발생한다고 하는 군요. 아마도 버그인것 같습니다.

 

하여간 한영 변환키(한/A)를 눌러서 해결했습니다.

 

Mac Android Studio Click Error

 

 

반응형
반응형

 

사용비용을 내지 않기 위해서 모든 서비스를 삭제 했다고 생각했는데 계속해서 비용이 청구/결제 되었습니다. Cost Explorer를 보니 EC2-기타 라는 항목으로 비용이 나가고 있었습니다. 정확지는 않지만 EIP 가 생성되어있어서 이 비용으로 나가고 있는 것 같았습니다.

그래서 이를 삭제하고자 시도했습니다. 그러나, 아무리 인터넷을 검색해서 따라해 봐도 EIP 삭제가 되지 않았습니다. 아니 따라할 수가 없었습니다.  왜냐하면 일반적인 삭제 경우가 아닌 것 같았습니다. 즉, 작업 버튼의 릴리즈 기능이 아예 활성화 되지 않았습니다.

탄력적IP 메뉴에들어가서 삭제할 EIP를 선택하고 작업 버튼을 클릭해 봐도 '탄력적 IP 주소 연결해제' 또는 릴리즈라는 메뉴는 아예 활성화 되지도 않았습니다.

삭제가되지 않은 예상 원인은 EIP에 NAT 게이트웨이가 연결되어 있어서 그런것 같습니다.

그래서 해결 방법인 결론을 말씀드리면,

먼저 NAT 게이트웨이를 삭제하시고 나서 EIP 삭제(릴리즈)를 시도하시면 됩니다.

연결된 NAT 케이트웨이를 삭제하고, EIP 메뉴에서 작업 버튼의 기능 리스트를 보면, 이제는 릴리즈 기능이 활성화 되고 삭제 가능합니다.

 

'탄력적 IP 주소 릴리즈"와 '탄력적 IP 주소 연결 해제" 기능이 아래 처럼 안보였는데....

 

NAT 게이트웨이 삭제 후에는 아래와 같이 보였습니다.

 

 

사실 이 방법은 VPC삭제를 시도하다가 NAT게이트웨이 등 먼저 삭제해야할 서비스가 있다는 것을 알게되었습니다. 

비용을 안나오게 하기 위해서는 해당 VPC를 삭제하는 것이 더 좋은 것 같아 삭제 하였습니다.

참고하세요.

비용이 계속나와서 삭제하려고 했는데... 일단 서비스 삭제 작업을 했으니 한달 더 지켜봐야겠습니다.

(지켜봤더니 추가 비용이 나오지 않았습니다. ㅋ)

감사합니다.

반응형
반응형
 
 
[AWS 서비스 모니터링 및 알림을 위한 Slack 연결 방법]
 
AWS 서비스를 사용하여 개발된 어플리케이션 서비스를 모니터링하기 위해 Slack을 연결 하는 방법입니다.  미리 알고 계시면 좋은 것들은 다음과 같습니다. 먼저, AWS 서비스 들에 대한 이름, 사용목적 등에 대한 이해가 있으면 좋습니다. 그리고 슬랙은 쉽게 말하면 카톡과 같이 메시지를 보내는 별도의 서비스입니다. 이것을 이미 사용해보셨으면 더 좋고요. 그리고 간단한 파이썬개발 지식과 도커에 대한 기본 지식을 알고있으면 글의 내용을 이해하기가 더 좋습니다.
 

0. 배경 및 목적

일반적으로 어플리케이션 서비스나 기능을 배포하기 전에 단위/통합 테스트 등을 통해 개발 내용이 잘 동작하는 지를 확인하고 배포합니다. 그리고 배포한 이후에도 해당 동작이 잘동작하고 있는지 안되고 있는지에 대한 모니터링이 필요합니다. 물론 AWS의 CloudWatch를 사용하여 웹 콘솔화면에서 동작 결과를 로그로 조회하거나, AmazonSNS 같은 서비스를 통해서 결과 내용을 메일로 받아 볼 수 있게 구현할 수도 있습니다. 하지만 모니터링 목적에 따라 지표를 만들어서 알림을 설정할 필요가 있기도 하고(CW에서도 가능) 보다 복잡한 조건에 해당하는 경우를 판단해서 알림을 받고 싶은 경우가 있습니다. 예를 들면 로그 중에서 특정 서비스 요청 메시지가 미리정한 횟수보다 많아지거나 또는 특정 서비스 이용 패턴이 발견되거나, 또는 두가지 상황 모두가 발생했을 경우 등의, 조금은 복잡한 논리적 판단이 필요한 경우가 되겠습니다. 이런 경우에는 단순히 CloudWatch 를 이용하기 어려운 경우가 있습니다. 이처럼 상대적으로 복잡한 판단이나 로그 내용을 검토해서 알림 여부를 결정해야 한다면 프로그래밍 적인 처리가 필요합니다. 이럴때 우리는 CloudWatch Logs Group에 Labmda 구독 필터를 만들어서 이러한 로직 처리를 개발 할 수 있습니다. 그리고 이 람다에서 Slack Webhook를 연결하면 로그 또는 처리 내용을 메시지로 받을 수 있습니다.
 

1. 목표

이번 포스팅에서는 위에서 제시한 것 처럼 어플리케이션의 모니터링 및 알림을 위해 AWS 서비스를 이용한 어플리케이션과 Slack 알림을 구성하는 것이 목표입니다. 먼저 간단한 어플리케이션을 실행하기 위해 EC2, AWS CloudWatch, AWS Lambda를 이용하여 구성하고, Slack을 연결하여 어플리케이션에서 나온 정보를 슬랙 메시지로 받을 수 있도록 구성 합니다. 전체적인 서비스 구성은 아래 그림과 같으며, 이를 위해서 다음과 같은 순서와 단계로 진행합니다.
 
서비스 구성도
 
ECR : Amazon ECR은 어디서나 애플리케이션 이미지 및 아티팩트를 안정적으로 배포할 수 있도록 뛰어난 성능 호스팅을 제공하는 완전관리형 컨테이너 레지스트리입니다. 간단히 말씀 드리면 도커 이미지 저장소 입니다.
Lambda : AWS Lambda는 서버를 프로비저닝 또는 관리하지 않고도 실제로 모든 유형의 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행할 수 있는 이벤트 중심의 서버리스 컴퓨팅 서비스입니다. 서버 인스턴스를 만들어주는 EC2 서비스와 달리 별도의 서버를 지정하지 않아도 알아서 만들어주는 서비스 입니다.
CloudWatch : Amazon CloudWatch는 실시간 로그, 지표 및 이벤트 데이터를 자동화된 대시보드에 수집하고 이를 시각화하여 인프라 및 애플리케이션 유지 관리를 간소화합니다.
 

 

 
이후, 전체적인 이 글의 진행 순서에 대한 설명은 아래와 같습니다.
 
1. 어플리케이션 프로그램을 만들고 도커 이미지로 만들어서 ECR에 등록합니다.  
2. hello-world 이미지를 가져와서 실행할 어플리케이션 실행 람다 함수 생성하고 CloudWatch 로그가 생성되는지 확인합니다.
3. 쉽게 말하면 프로그램을 통해서 슬랙에 메시지를 보낼 수 있도록 코딩하기위해 필요한 주소정보(URL) 즉, 슬랙 웹훅 생성을 합니다.
4. 슬랙 메시지를 보낼 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정: 특정 로그가 들어오면 람다를 실행 시키도록 연결
6. 테스트 : 어플리케이션 실행 람다 함수 테스트 -> 로그 테스트
 
 
 

목차

1. ECR에 등록
2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 
 
 
 

 

 
 

1. ECR에 등록

2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 
 
먼저, 개발된 어플리케이션을 도커 이미지로 만들어서 ECR에 등록하는 것이 필요합니다. 이렇게 등록해 놓아야 나중에 람다에서 이 것을 가져다가 실행할 수 있습니다. 이 글의 주된 목적이 어플리케이션 개발이 아니므로 개발 내용을 깊이 다루지는 않겠습니다.

(간단한 코딩이 가능하신 분들은 Hello, World 를 프린트하는 간단한 어플리케이션 프로그램을 만들어서 도커 이미지로 빌드하셔도 됩니다. 실제로 저도 이번 연결에서는 Hello, World를 출력하는 어플리케이션과 이미지를 만들어 사용했지만 아래 내용은 (간단한 ECR 등록 방법을 설명하기 위해서) 도커 허브에 올라가 있는 이미지를 다운받아서 ECR에 등록하는 내용을 설명합니다.)

이미 만들어진 이미지를 확보하기 위해 아래의 명령으로 도커 허브에서 hello-world 이미지를 다운 받습니다. (당연히 도커가 설치되어있어야 합니다. docker를 입력해서 동작하지 않으면 도커 설치 후 진행해 주세요)
$ docker pull hello-world
이 이미지는 이미지가 실행될때 간단한 설명을 출력하는 어플리케이션 입니다. 상세 정보는 다음 주소를 참고하세요. https://hub.docker.com/_/hello-world
 

 

 
다운 받은 이미지를 ECR에 등록 합니다. 
ECR 사용을 위해 aws cli 명령어를 이용하여 ecr 에 로그인 합니다.
aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com
 
 
이미지의 tag를 수정해줍니다.
$ docker tag hello-world:latest username.dkr.ecr.us-east-1.amazonaws.com/hello-world
 

 

수정된 tag를 이용하여 이미지를 ecr에 등록/푸시 합니다.
$ docker push username.dkr.ecr.us-east-1.amazonaws.com/hello-world
Using default tag: latest

 

 
그러면 아래와 같이 ecr 관리 콘솔에서 생성된 리포지토리를 확인할 수 있습니다.  자세한 ECR 사용 상세 방법은 이전 포스팅을 참고하세요.https://bigdatamaster.tistory.com/120
 
 
 
 
 
1. ECR에 등록

2. 어플리케이션 실행 람다 함수 생성

3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 
AWS Lambda 서비스 화면에서 함수생성 버튼을 클릭합니다.
 
 
 
 
 
 
우리는 ecr의 이미지를 이용할 것이기 때문에 제일 오른쪽에 있는 컨테이너 이미지를 선택합니다. 적당한 함수이름을 넣고, 이미지 찾아보기 버튼을 이용하여 1번에서 등록한 이미지를 선택하고 함수 생성을 클릭합니다.
 
 
 
함수 생성이 완료되면 아래와 같은 이미지가 나옵니다. 여기에서 잘 동작하는지 테스트하기 위해서 테스트 탭을 클릭합니다.
 
 
 
새 이벤트 생성을 선택 하고 적당한 이벤트 이름을 입력하고 테스트 버튼을 클릭 합니다.
 
 
 
테스트 실행후 로그 보기 연결 버튼을 클릭하거나, CloudWatch 서비스 화면으로 이동후 로그 그룹 중 /aws/labmda/lambda-name 으로 생성된 로그 그룹을 선택하고, 로그 스트림 탭에서 최근 로그 스트림을 클릭하면 어플리케이션 람다 실행중에 나온 로그 정보를 확인할 수 잇습니다. 
아래 보이는 로그는 hello-world 이미지 실행으로 인한 로그가 아니고 Hello, World를 1초마다 프린트하는 어플리케이션을 이미지로 만들어 놓은 것을 실행 시킨 결과 입니다. Hello, World를 1초 마다 프린트하는 어플리케이션을 이미지로 만드는 방법은 다음의 글을 참고해주세요.https://faun.pub/hello-world-in-docker-using-python-9b3eb418fb15

 

 
 
 
1. ECR에 등록
2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 

 

 
1번과 2번에서 ECR에 이미지도 만들었고 이를 활용해서 어플리케이션을 실행시키는 람다함수도 만들었고 실행했을때 로그가 출력 되는 것도 확인하였습니다.
이제 슬랙에 메시지를 보내기 위해서 슬랙 웹훅을 만드는 방법에 대해서 알아보겠습니다.
 
슬랙에서 웹훅을 만들려면    
가. 먼저 슬랙 앱을 만들고.
나. 앱을 워크스페이스에 연결해주어야 합니다.
다. 그리고 생성된 url로 테스트 하면 됩니다.
 
 

가. 슬랙 앱 생성

api.slack.com에 접속 후 로그인 합니다.  중앙 왼쪽에 보이는 Create an app 버튼을 클릭 합니다.
 
 
 
 
그러면 아래와 같은 내용이 팝업 됩니다. (Creat New App을 누르면 나오는 동일한 내용입니다.)  여기서  from scratch를 선택합니다.
 
 
 
아래의 화면과 같이 뜨면 앱이름과 앱이 사용할 워크스페이스를 선택해줍니다.
 
 
 
 
 
 
Create App을 클릭하면 아래와 같은 화면이 뜹니다. 여기서 Incoming Webhooks 를 클릭합니다.
 
 
 

나. 앱을 워크 스페이스에 연결

이전 작업까지해서 슬랙 앱 생성이 완료되었습니다. 이제부터 앱과 워크 스페이스 채널을 연결합니다.
오른쪽 위에 off 를 클릭하여 On으로 바꾸어 줍니다. 그러면 아래와 같이 정보가 표시됩니다.  이제부터 앱과 워크스페이스를 연결해주는 작업을 합니다. 제일 아래의 Add New Webhook to Workspace를 클릭합니다.
 
 
 
 
 
그러면 아래와 같은 화면이 나옵니다. 아래의 Search for channel 리스트 박스를 클릭하여 연결가능한 채널을 선택하고 Allow를 클릭 합니다.
 
 
 
그러면 아까 페이지와 유사한 페이지가 다시 나타납니다. 다만 이페이지에는 이전 페이지와 달리 아래쪽에 추가된 Webhook URL 정보가 추가된 것을 볼 수 있습니다.  Sample 로 나와있는 내용중 Copy버튼을 클릭하여 Sample 명령어를 클립보드에 복사합니다.
 
 
 

다. 웹 훅 URL 테스트

복사한 (URL을 포함한 명령어) 내용을 (윈도우에서는) cmd 창이나 (맥에서는) 터미널을 열어서 붙여 넣은 후 엔터를 입력합니다.
 
 
그러면 슬랙을 통해 아래와 같이 새로 작성된 메시지를 볼 수 있습니다.
 
 
연결에 문제가 없음을 확인 했으므로 해당 Webhook URL을 이용하여 프로그램에서 호출할 수 있도록 코팅을 할 수 있습니다.
 
지금까지 슬랙 웹훅 연결을 위해서 슬랙 앱 생성, 워크스페이스 연결, 그리고 태스트를 진행해보았습니다.
 
 
 
 
 
 
 
1. ECR에 등록
2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 
AWS Lambda 서비스에서 함수 생성을 클릭 하고 아래와 같이 새로 작성을 선택합니다. 적당한 함수이름을 입력하고 실행 런타임을 선택 합니다. 
 
함수가 생성되면 아래와 같은 화면이 보입니다.
 
위 화면의 lambda function 탭의 코딩 내용을 작성 합니다. 내용은 바로 슬랙 웹훅 URL을 호출하는 간단한 스크립트이며 아래와 같습니다.
 
 
 
 
환경변수에 채널과 웹훅 주소를 설정해 줍니다. 이를 위해서 람다에서 구성 탭을 선택후 '환경 변수’를 선택하고 편집 버튼을 클릭합니다.
 
 
키와 키에 해당하는 값을 입력하고 저장 버튼을 누릅니다.
 
슬랙 발송 람다를 통해 슬랙 알림이 잘가는지 테스트 해 봅니다.
테스트 버튼의 아래로 삼각형 모양을 클릭하여 테스트에 필요한 설정을 해줍니다.
 
 
적당한 이름을 주고 저장 버튼을 클릭합니다.
 
 
저장후 테스트 버튼을 클릭하여 테스트 이벤트를 실행합니다. 문제 없이 진행되었다면 해당 슬랙 채널에 메시지가 전송되고 람다 관리콘솔에서는 아래과 같이 성공 메시지를 볼 수 있습니다.
 
 
 
 
 
1. ECR에 등록
2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트

 

 
 
CloudWatch 서비스로 이동합니다. 그리고 로그 그룹에서 어플리케이션 람다 동작시 로그 스트림이 생성되는 CloudWatch 로그 그룹을 찾습니다.
해당 로그 그룹을 선택하고 오른쪽 아래에 있는 생성 버튼을 클릭하면 아래와 같이 리스트가 나오며 리스트중에서 Lambda 구독 필터 생성을 클릭 합니다.
 
 
연결할 Lambda 함수를 선택해주고 적당한 구독필터패턴과 이름을 정해 줍니다. 아래는 "START RequestId"와 정확하게 일치하는 경우에 필터링되게 하기위한 방법입니다. (더 많은 구독 필터 패턴을 설정하는 방법은 아래의 주소를 참고해 주세요)  테스트할 로그를 선택하고 패턴 테스트 버튼을 클릭하면 실제로 필터링되는 로그가 어떤 것이 있는지 확인할 수 있습니다.
 
 
 
 
테스트 결과 아래처럼 하나의 로그가 걸러졌네요, 이처럼 정상적으로 필터링된다면 스트리밍 시작 버튼을 클릭하여 이후 로그의 패턴 검사를 시작합니다.
 
 
 
 
 
 
 
 
 
1. ECR에 등록
2. 어플리케이션 실행 람다 함수 생성
3. 슬랙 웹훅 생성
4. 슬랙 발송 람다 생성
5. CloudWatch Log 필터 설정
6. 테스트
 
 
 
이제 마지막으로 모든 연결이 잘 되었는지 확인을 위해 테스트를 진행합니다.  람다 서비스화면으로 이동 후 어플리케이션 람다인  hello-world-lambda 를 선택합니다. 아래와 같이 적당한 이름을 입력하고 테스트 버튼을 클릭하면 앞에서 테스트했던 슬랙 채널에 새로운 알림 메시지가 도착한 것을 확인 할 수 있습니다.
 
 
 
 
이렇게 해서 모든 구성을 완료하였습니다. CloudWatch 로그에 다양한 '구독 로그 필터' 적용을 통해 언제 슬랙 메시지 발송이 필요한지를 정의 할 수있습니다. 또한 슬랙 발송 람다에서 로그 내용을 파악해서 발송 여부를 결정할 수 도 있습니다. 이러한 방법을 통해 원하는 알림 메시지를 보낼 수 있습니다. 또한 관련 정보나 연결이 필요한 페이지 링크 등을 알림 메시지에 포함하면 더 상세한 내용을 알수도 있고 빠르게 조치도 할 수 있습니다.
 
진행이 안되는 목차 번호와 내용을 댓글로 남겨주세요.
잘못된 내용이나 궁금한 사항도요.
 
좋아요, 구독, 댓글, 감사합니다.
 

 

 
 
 
 
 
반응형

+ Recent posts