마케터를 위한 구글 애널리틱스 #1

이미지
□ 구글 애널리틱스 ■ 유니버셔 애널리틱스 → 구글 애널리틱스 4로 변경됨 ■ 퍼포먼스 마케팅/그로스해킹 - 고객획득 → 유입 후 행동 → 서비스 재사용 → 공유 → 수익 → 고객 유지 ■ 고객을 분류하고, 그룹화하여 특징을 정의하고, 그들에게 언제 어떤 메시지를 전달해야 수익이 극대화될 수 있는지 데이터를 통해 결정할 수 있어야 한다. □ Google Marketing Platform (GMP) ■ 마케팅 → 분석 → A/B 테스트 → 분석 → 개선 → 마케팅의 순환 구조 지원하는 마케팅 시스템의 집합체 ■ Google Ads - 2001/10/23 서비스 런칭 ※ 디스플레이 광고, 유튜브 광고, 앱 광고를 할 수 있도록 발전됨. ※ 장점 - 뛰어난 머신러닝 기반의 정교한 타겟팅. 여러 구글 서비스로부터 방대한 사용자 정보 및 데이터 수집 ■ Google Analytics - 2005/11/14 서비스 런칭 ※ 큰 규모의 기능 추가가 될 때마다 이름을 다르게 하여 새로운 버전의 애널리틱스를 출시함. ※ 유니버셜 애널리틱스 (Universal Analytics) - 가장 널리 사용된 버전 ※ Google Analytics 4 - 2020/10 서비스 런칭. 부가 기능으로 있던 앱 + 웹 전용 파트(속성)를 독립적인 버전으로 격상함. 머신러닝이 도입이 핵심. ※ 현재는 Universal Analytics와 Google Analytics 4가 공존하고 있으나, 2023/7/1 이전까지 GA4로 이전해야함. ■ Google Tag Manager - 태그 관리자. 2012/10/01 서비스 런칭 ※ 웹사이트 또는 모바일 앱에서 코드 및 태그라고 통칭되는 관련 코드 조각을 쉽고 빠르게 업데이트할 수 있다. ※ 웹 or 앱 분석, A/B 테스트, 행동 추적, 전환추적 부준에서 GMP의 다른 도구들을 지원한다. ※ 이전에는 모든 것을 개발자가 직접 구현으로 해야했으나, GTM에서는 마케터가 간단한 조작으로 할 수 있도록 한다. ※ 구글 시스템 이외에 여러 제공업체의 태그도

네트워크의 기본 #2 - TCP/IP 4계층

이미지
1. TCP와 IP TCP/IP는 Internet에서 사용되는 protocol이다. 1960년대 미국방성의 연구에서 시작되어 1980년대에 protocol model이 공개되었다. hardware, OS, 매체에 관계없이 동작할 수 있다. 패킷  통신 방식의 인터넷 프로토콜인 IP(Internet Protocol)와 전송 조절 프로토콜인 TCP(Transmission Control Protocol)로 이루어져있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 application protocol들이 IP 위에서 동작하기 때문에 TCP/IP로 부르기도 한다. TCP/IP protocol은 OSI 모형보다 먼저 개발되었다. TCP/IP 프로토콜은 OSI 모형과 정확하게 일치하지는 않지만, OSI 모형을 4계층 혹은 5계층으로 분류하여 적용할 수 있다. 2. 각 Layer별 기능 Layer 1 : 네트워크 연결 계층 (Network Access Layer) - Ethernet, Wi-Fi, Token ring TCP/IP 패킷을 네트워크 매체로 전달하는 것과 네트워크 매체에서 TCP/IP 패킷을 받아들이는 과정을 담당한다. 기본적으로 에러검출 / 패킷의 프레임화를 담당한다. Layer 2 : 인터넷 계층 (Internet Layer) - IP (IPv4, IPv6) 논리적인 주소 IP를 이용한 노드간 전송과 라우팅 기능을 처리하게 된다. 네트워크상 최종 목적지까지 정확하게 연결되도록 연결성을 제공한다. Layer 3 : 전송 계층 (Transport Layer) - TCP, UDP, DCCP, SCTP, IL, RUDP 자료의 송수신을 담당한다. 애플리케이션 계층의 세션과 데이터그램 통신서비스 제공한다. Layer 4 : 응용

네트워크의 기본 #1 - OSI 7계층

이미지
1. OSI 모형 (Open Systems Interconnection Reference Model) 국제표준화기구(ISO)에서 개발한 모델로 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 이 모형을 이용하면 네트워크상에서 발생하는 문제의 원인이 어디에서 발생하는지 보다 쉽게 유추가 가능하다. 2. 각 Layer별 기능  Layer 1 : 물리 계층 (Physical Layer) 네트워크의 하드웨어 전송을 담당하는 계층으로 시스템의 전기적, 물리적 표현을 나타낸다. 케이블 종류, (802.11 무선 시스템에서와 같은) 무선 주파수 링크는 물론 핀 배치, 전압, 물리 요건 등이 포함된다. 네트워킹 문제가 발생하면 많은 네트워크 전문가가 물리 계층으로 바로 가서 모든 케이블이 제대로 연결돼 있는지, 라우터나 스위치 또는 컴퓨터에서 전원 플러그가 빠지지 않았는지 확인한다. Layer 2 : 데이터 링크 계층 (Data Link Layer) - 이더넷 노드 간 데이터 전송을 제공하며, 물리 계층의 오류 검출 및 수정에 필요한 기능적, 절차적 수단을 제공한다. 여기에는 2개의 부계층(매체 접근 제어(MAC), 논리적 연결 제어(LLC))이 존재한다. 주소값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 MAC address가 정해져있다는 의미이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 이 외에도 HDLC나 ADDCCP 같은 P2P(point-to-point) 프로토콜이나 패킷 스위칭 네트워크, LLC, ALOHA 같은 근거리 네트워크용 프로토콜이 있다. Layer 3 : 네트워크 계층 (Network Layer) - 라우터 여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층으로 라우터 기능의 대부분이 이 계층에 해당한다. 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워

아스키 코드(ASCII)와 유니코드(unicode)

이미지
1. 아스키 코드(ASCII) American Standard Code for Information Interchange의 약자로, 1960년대 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다. 8비트 중에서 7비트만 사용하여 총 128개의 부호를 표기할 수 있다. 나머지 1비트는 통신 에러 검출을 위한 것으로 1의 개수가 홀수이면 1, 짝수이면 0으로 표기하였다. 이를 parity bit라고 한다. 이후 1비트를 더 확장한 ANSI 코드가 나왔으나 이것만으로는 다른 언어를 표현할 수 없었다. 이를 해결하기 위해 국제 표준 코드인 유니코드(Unicode)가 등장하게 되었다. [아스키 코드표] 2. 유니코드(Unicode) 초기 유니코드는 다양한 언어를 지원하기 위해 2바이트(=65536)로 용량을 확장하였다. 그러나 2바이트만으로는 고어(古語), 토속어 등을 담기에는 역부족이었다. 이러한 문제점을 해결하기위해 기본언어판과 보충언어판(BMP + SMP)으로 구성된 유니코드 3.0을 출시하게된다. (2019년 5월 7일 현재, 유니코드 버전 12.1) 유니코드 인코딩은 UTF-8, UTF-16, UTF-32 등이 있으며, 유니코드라 하면 일반적으로 UTF-8이 사용된다. UTF-8로 표현 가능한 길이는 최대 6바이트이나 다른 인코딩과의 호환을 위해 4바이트까지만 사용된다. 1바이트 영역은 아스키 코드와 하위 호환성을 가지며, 아스키 코드의 0~127까지는 UTF-8로 완전히 동일하게 사용된다. 아스키 코드와의 호환은 인터넷에서 가장 많이 사용되는 인코딩이 되는데 큰 이점으로 작용하였다. 유니코드가 쓰이기 전에는 대부분의 인터넷 문서들이 아스키 코드로 작성되었기 때문에 기존 인터넷 문서를 문제없이 호환된다는 것은 큰 장점이었다. UTF-8의 인코딩 규칙은 바이트가 추가될 때마다 1번째 바이트에 '1'로 표기해주는 방식이다. 1개의 바이트가 추가되었다면 '110'을, 2개의 바이트가 추가되었다면 

디자인 패턴 #6 - 커맨드 패턴 (command pattern)

이미지
1. 커맨드 패턴 (command pattern) 각종 기능을 캡슐화하여 여러 기능을 실행/관리할 수 있다. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러가지 다른 요구 사항을 집어 넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원할 수 있다. 커맨드 패턴은 (1)명령, (2)수신자, (3)발동자, (4)클라이언트로 이루어진다. - 명령(command) : 수행 동작을 담고 있는 클래스 - 수신자(receiver) : 명령 수행하는 클래스 (ex. TV, 오디오 등 각종 기기) - 발동자(invoker) : 명령 수행을 요청하는 클래스 (ex. 리모컨) - 클라이언트(client) : 어떤 명령을 수행할지 결정하는 클래스 (1) 명령 LightOnCommand 클래스는 Command 인터페이스를 구현하여, Light 객체의 On/Off를 실행할 수 있다. (2) 수신자 Light 클래스는 장소(mPlace)의 점/소등을 할 수 있다. Command 클래스의 execute() 메소드에서 호출한다. (3) 발동자 RemoteControl 클래스는 입력된 Command를 실행한다. 총 7개의 slot이 존재하고, 미리 Command를 입력한 뒤, slot 번호를 통해 명령을 실행할 수 있다. onButtonWasPushed()와 함께 slot 번호를 입력하면 slot에 해당하는 기기의 정의된 동작을 수행하게 된다. (4) 클라이언트 각 Command 객체와 RemoteControl 객체 생성한다. 명령의 실행과 시점을 결정한다. 하기에서는 main 클래스가 해당 역할을 담당한다. LivingRoom과 Kitchen의 점등과 소등 명령을 정의하였으며, onButtonWasPushed(), offButtonWasPushed()를 통해 실행할 수 있다. 2. 결과 수행 결과는 하기와 같다. 각 slot에 해당하는 사

오픈 소스 라이선스 (Open Source License)

이미지
1. 정의 소프트웨어 혹은 하드웨어의 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어 혹은 오픈 소스 라이선스에 준하는 모든 통칭을 일컫는다. 2. 특징 - 소스 코드가 공개되어 있어 원하는대로 사용/복사/재배포 가능하다. - 공개된 소스의 무료 사용 권리가 있으나, 그에 따른 법적 책임이 뒤따른다. - 권한 및 책임의 종류에 따라 약 1,000가지의 다양한 open source license가 존재한다. - OSI(Open Source Initiative)에서 인증한 라이선스는 약 70여개가 있다. * 법적 위험을 피하기 위해 open source에 대해 잘 이해하고 대응해야 한다. 3. 소프트웨어 지적재산권 - 저작권(copyright) : 등록과 같은 절차 없이, 창작과 동시에 권리가 발생한다. 저작권자의 허가없이 저작물의 사용/복제/배포/수정이 불가능하다. - 특허권(patent) : 발명에 관하여 발생하는 권리로 출원의 절차가 필요하다. 특허 기술을 사용하기 위해서 특허권자의 허락이 필요하다. - 사용허가권(license) : 소프트웨어를 사용할 수 있는 권리를 의미한다. 4. 오픈 소스 라이선스 비교 - GPL : 미국 자유소프트웨어 재단이 만들었으며, open source의 53%를 차지하고, 공개범위가 넓다. Sourceforge의 60%이상을 차지하고 있는 대표적인 lisence. 대표적인 사례로는 Linux kernel, GNU tools(gcc, gdb 등), Samba등이 있다. - LGPL : 자유소프트웨어 재단이 open source 활성화를 위해 GPL의 소스 공개 의무를 완화한 lisence이다. 독점 library가 표준이 되는 것을 방지하기 위해 만들어졌다. 대표 소프트웨어는 GNU C library (glibc, uclibc)가 있다. - MPL : open source의 상용 제품 적용을 용이하게 하기 위해 모질라 재단에서 만들었다. 상용 소

디자인 패턴 #5 - 컴포지트 패턴 (composite pattern)

이미지
1. 컴포지트 패턴 (composite pattern) 객체들의 관계를 트리 구조로 구성하여 부분-전체를 나타내는 계층 구조로 만들 수 있다. 이 패턴을 이용하면 클라이언트에서 단일 객체와 여러 객체들로 구성된 복합 객체 모두 동일하게 다루도록 한다. 쉽게 표현하자면 담는 그릇과 내용물을 동일하게 다루는 것으로 디렉토리 트리 구조가 이에 해당한다. 파일 관리자와 같은 디렉토리 트리 구조는 디렉토리와 파일을 동일한 개념으로 다룬다. 사용자가 디렉토리의 depth를 변경하며 이동할 수 있고, 특정 디렉토리에 속한 디렉토리와 파일 목록을 보여준다. 디렉토리와 파일을 담고 있는 디렉토리도 같은 레벨의 파일과 동일하게 취급하게 된다.(이해가 어려우면 당장 핸드폰의 파일관리자를 실행해보라.) 파일관리자와 클래스 다이어그램을 비교하자면 Composite 클래스는 디렉토리를, Leaf를 파일을 의미한다. Composite 클래스와 Leaf 클래스는 Component 추상 클래스를 상속받았기 때문에 동일하게 취급할 수 있다. 이러한 composite 패턴의 특징을 이용해 디렉토리 트리 구조를 만들고, 다룰 수 있다. Component는 추상 클래스로 Directory의 reference를 가지고 있다. add(), getChildren()은 필요 시 하위 클래스에서 override하여 구현한다. mParentDirectory는 부모 디렉토리 참조이며, getAbsolutePath() 호출 시 재귀호출을 통해 절대 경로를 완성한다. 클래스 다이어그램에 나타난 것과 같이 Directory 클래스는 하위 클래스를 가질 수 있고, 이를 지원하기 위한 메소드를 override하여 정의한다. File 클래스는 Leaf에 해당하는 클래스로 트리 구조의 마지막에 위치한다.

이 블로그의 인기 게시물

아스키 코드(ASCII)와 유니코드(unicode)

네트워크의 기본 #2 - TCP/IP 4계층

네트워크의 기본 #1 - OSI 7계층