분류 전체보기

    AWS 타겟 그룹 헬스체크 설정으로 인한 장애 회고

    AWS 타겟 그룹 헬스체크 설정으로 인한 장애 회고

    문제 현상 운영업무의 일환으로 AWS IAM 을 이용하여 AWS 타겟 그룹을 수시로 모니터링하고 있다. 최근 모니터링 중 타겟 그룹에 있는 타겟 인스턴스의 Health status 가 계속 unhealthy 상태가 되며 타겟 그룹에서 제외되는 현상이 발생했다. 총 3개의 타겟 인스턴스가 운영 중인데, 그 중 1개의 타겟 인스턴스 CPU 사용률이 매우 올라가면, 이상하게 CPU 사용률이 낮은 다른 타겟 인스턴스가 타겟에서 제외됐다. 모니터링하는데는 AWS 에서 제공하는 ELB V2 CLI 의 describe-target-health 메서드를 이용하고 있다. 해결 AWS 헬스체크 설정을 통해 해결했다. AWS 로드 밸런싱 타겟 그룹의 헬스 체크 설정을 좀 더 느슨하게 만들었다. Unhealthy thresh..

    메이븐의 .lastupdated 확장자 파일이란?

    메이븐 repository 디렉토리 내부에는 .lastupdated 확장자를 가진 파일이 존재한다. 메이븐의 .lastupdated 파일은 소위 마커 파일 (표시용 파일) 이라 불리는 파일이다. 최근 라이브러리 (artifact) 가 언제 업데이트 되었는지를 관리하기 위한 파일이다. 메이븐 클라이언트는 이 파일의 날짜가 최신 라이브러리 업데이트 일자보다 뒤쳐져있다면, 최신 라이브러리를 다운로드 받는다. .lastupdated 파일은 메이븐 클라이언트에 의해 자동으로 생성된다.

    모던 자바스크립트, 비동기 버전의 이터레이터, 이터러블, 제너레이터

    비동기 버전의 이터레이터, 이터러블, 제너레이터 자바스크립트에서 반복을 배우다보면 만나게 되는 개념들이 있다. 이터레이터, 이터러블 제너레이터 ES2018 부터 이터레이터, 이터러블, 제너레이터의 비동기 버전이 있다. 비동기 이터레이터는 {done, value} 형태의 객체를 반환하는 것은 같은데, value 에 Promise 객체가 들어있다. asyncIterator.next() 는 {value: Promise, done: false} 와 같은 형태의 객체를 반환한다. 그런데 asyncIterator 가 비동기로 호출되어야 하기 때문에, 이용 시 asyncIterator.next().then(v => ...) 와 같은 형태가 되도록 설계되어 있다. 이터레이터의 비동기 버전 만들어보기 function f..

    모던 자바스크립트, async await

    모던 자바스크립트, async await

    async/await 구문의 특징 async/await 은 비동기 코드 작성을 단순화한다. async 함수는 암시적으로 프라미스를 만들고 반환한다. async 함수 내부 await 은 Promise 확정 전까지 대기하는 지점을 표시한다. async 함수가 Promise 확정을 기다리는 동안 스레드는 다른 코드를 실행할 수 있다. for, a + b, try/catch/finally 등 다양한 식이나 구문 안에 await 이 포함될 수 있다. await 이 포함되는 경우 비동기식이 된다. Promise 가 거절 (reject) 되는 경우, 예외이다. Promise 가 이행 (resolve, fulfill) 되는 경우, 이행 값이 await 표현식의 결과가 된다. resolve 와 reject 가 await..

    모던 자바스크립트, 제너레이터 (Generator)

    제너레이터란? function * 문법으로 생성할 수 있는 특수한 함수이다. 작업 중간에 일시 정지가 가능하다. 멋진 점은 일시정지된 상태로 진행된 작업 정보를 기억하고 있는 것이다. 값을 생성하고 선택적으로 새 값을 받아들인 다음 필요한 만큼 계속 진행할 수 있다. 내부적으로 제너레이터 함수는 제너레이터 객체를 만들고 반환한다. 이터레이터는 값만 생성하는 반면, 제너레이터는 값을 생성하고 소비할 수 있다. 단방향으로 값을 주기만하는 것이 아니라, 값을 받아들이고 그에 따른 값을 주는 것이 가능하다. 제너레이터 객체를 수동으로 생성하는 것도 가능하지만 보통은 function * 문법으로 단순화하여 생성한다. 기본 제너레이터 함수 생성하기 function* simple() { for (let n = 1; ..

    모던 자바스크립트, 이터러블 (iterable) 과 이터레이터 (iterator)

    이터레이터(iterator) 란? next() 메서드가 있는 객체이다. next() 를 호출할 때마다 시퀀스의 다음 값과 완료 여부를 나타내는 플래그를 반환한다. ex) {value: 10, done: false} 이터러블(iterable) 이란? 이터레이터를 가져오는 표준 메서드가 있는 객체이다. Symbol.iterator 프로퍼티에서 iterator 를 반환하는 메서드를 구현하면 된다. 프로퍼티로 얻어오는 것이 아니라, 메서드로 얻어오는 이유는 매번 가장 첫번째 원소를 가리키는 iterator 를 생성하여 반환하고 싶기 때문일 것이라 추측한다. for of 와 iterator iterator 를 구현하여 iterable 객체를 만들면, for of 문에 의해 반복이 가능하다. const a = ["..

    데코레이터 패턴 (Decorator Pattern) 이란?

    데코레이터 패턴 (Decorator Pattern) 이란?

    데코레이터 패턴 (Decorator pattern) 래퍼 객체를 이용해 모듈과 비슷한 방식으로 기존 객체에 기능을 추가할 수 있다. 기존 기능에 영향을 주지 않고 가능하다. 런타임에 객체에 '행위' 혹은 '기능'을 추가할 수 있게 해준다. 기존 객체를 '행위'를 가진 특별한 래퍼 객체 (데코레이터)에 넣어서 객체가 그 '행위'를 할 수 있게 만든다. 캐싱, 로깅, 검증과 같은 기능에 쓰일 수 있다. 피자 클래스 데코레이터 패턴 적용 예제 피자를 클래스로 매핑하여 만들어보려고 한다. 데코레이터 패턴 적용 전 데코레이터 패턴 적용 전의 코드를 보자 Pizza 생성 public class Pizza { protected String pizzaName() { return "피자"; } } 일반 피자를 만들었다...

    구글 애널리틱스 (Google Analytics) 와 구글 태그 매니저 (Google Tag Manager) 를 공부할 때 꼭 알아야 하는 개념

    구글 애널리틱스 (Google Analytics) 와 구글 태그 매니저 (Google Tag Manager) 를 공부할 때 꼭 알아야 하는 개념

    구글 애널리틱스 (Google Analytics) 와 구글 태그 매니저 (Google Tag Manager) 를 공부할 때 꼭 알아야 하는 개념 구글 애널리틱스 (Google Analytics) 와 구글 태그 매니저 (Google Tag Manager) 는 별개의 역할을 하는 것이다. 구글 애널리틱스 (Google Analytics) 는 트래픽 등 통계 데이터를 추적하고 통계 데이터를 이용하는 것에 도움을 주는 역할을 한다. 구글 태그 매니저 (Google Tag Manager) 는 웹사이트에 심어져서 오직 태그에 대한 관리만 한다. 구글 태그 매니저의 실제 예제 위는 실제 웹사이트에 박혀있는 구글 태그 매니저 코드이다. 태그 내부의 최상단에 위치한다. 위의 스크린샷에 그렇다면, 이 외의 태그들은 어떻게..

    자바에서 상속이 갖는 단점들

    상속이 갖는 단점들 상속은 객체지향 프로그래밍의 핵심 기능이지만, 몇가지 단점을 가지고 있다. 그래서 일반적으로는 합성(composition)을 사용하는 것이 권장된다. 강한 결합이 강제된다. 부모 클래스의 소스 코드를 그대로 내려받을 수 있다는 장점이 있지만, 그만큼 자식 클래스가 많아졌을 때 부모 클래스의 소스코드 변경이 힘들다는 말도 된다. 부모 클래스의 변화가 모든 자식 클래스에 영향을 미치게 된다. 변경하려면 자식 클래스의 구현들이 제대로 돌아갈 수 있을지 테스트를 많이 거쳐야 한다. 코드의 유지보수와 수정을 어렵게 만든다. 함부로 변경했다가 자식 클래스에서 쉽게 알아차리기 힘든 미묘한 버그를 만들어낼 수 있는 가능성도 생긴다. 접근자에 대한 제약이 강하게 걸린다. 초기에 public 으로 공개..

    2023년 2월 3.5주차 회고

    사내 정치 김영한님의 수강생 20만명 달성 기념 라이브에서 김봉진 대표님이 했던 말을 듣고 많은 생각을 했다. '업무를 잘하는 것은 사내 정치를 포함하는 것이다.' 그리고 아래와 같은 잠정적인 결론을 냈다. 사내 정치를 무조건 나쁜 시선으로만 보지 말자. 내가 원하는 바람직한 기술적 변화를 일으키기 위해 논리보다 강력한 수단이 될 수 있다. 인간은 이성보다는 감성으로 더 많이 움직인다는 것을 항상 염두에 두자. 스티브 잡스 이야기 며칠 전부터 스티브잡스에 대한 유튜브를 많이 봤다. 그는 뛰어난 능력과 대비되는 나쁜 성격으로 유명한 사람이다. 이를테면 옷을 이상하게 입었다고 직원을 해고하는 사람이다. 사실 이건 누구나에게 알려진 사실이고, 그 이외에 추가적인 그의 특이한 점을 발견했는데 인상..

    자바스크립트 모듈 (Module) 이란 무엇인가요?

    모듈은 왜 필요한가요? 애플리케이션이 고도화되면, 스크립트 소스코드의 양도 증가합니다. 결국 많은 양의 소스코드를 효율적으로 관리하기 위해서 모듈이라는 개념이 필요해집니다. 초기의 자바스크립트는 간단한 스크립트를 지향했기 때문에 모듈을 문법 차원에서 지원하지 않았습니다. ES6 (ES2015) 이후부터 공식적으로 모듈 문법인 export, import 문법을 지원합니다. 이전에는 AMD, CommonJS, UMD 와 같은 시도가 있었습니다만 이제는 사라지는 추세입니다. 자바스크립트의 모듈이란 무엇인가요? 단지 하나의 .js 파일을 의미합니다. .js 파일 내부에서는 export 와 import 문법을 이용해 함수, 변수 등을 교환하여 사용할 수 있습니다. 가져올 js 파일이 모듈이라면 strict mod..

    OSI 4계층 전송 계층 (Transport Layer) 알아보기

    OSI 4계층 전송 계층 (Transport Layer) 알아보기

    전송 계층 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 한다. 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경쓰지 않도록 만든다. 데이터가 중복되거나 누락되지 않고 오류없이 순서에 맞게 전송되도록 관리한다. 4계층을 배우기 전에 이전까지의 흐름을 알아보자. 1계층: 물리 계층 아날로그 신호를 받아 디지털 신호로 만들어 주거나 디지털 신호를 받아 아날로그 신호로 만들어준다. 더미 허브라는 통신 기기가 사용되었다. 더미 허브를 통해 브로드 캐스팅 방식으로 통신할 수 있다. 네트워크의 물리적인 특성을 정의하는 계층이다. 어떤 케이블 타입을 쓰는지, 커넥터 타입은 어떤지, 데이터 전송 속도는 얼마로 맞출건지에 대한 결정도 한다. 2계층: 데이터 링크 계층 네트워크 내 두 장치의 연결을 담당하는 계층..

반응형