클라우드 컴퓨팅 자원(하드웨어, 소프트웨어)을 네트워크를 통해 서비스 형태로 제공하는 서비스이다. 자원(서버 등)을 필요한 만큼 거의 실시간으로 할당받아 사용하고, 사용한 만큼 요금을 지불한다. 탄력적으로 필요한 만큼의 자원을 유지하는 것이 중요하다. 클라우드 컴퓨팅이 없었다면? 서버/네트워크/스토리지의 구매 및 설정을 직접 수행해야 한다. 데이터센터를 만들 공간을 직접 확보해야 한다. 데이터센터를 확장할 경우, 공간을 먼저 확보해야 한다. 보통 서버를 구매하고 프로그램을 설치하는데 적어도 두세달은 걸린다. Peak time을 기준으로 용량을 계획해야 한다.(널널한 시간에도 피크타임 기준으로 운영된다) 유휴자원들이 많아지는 현상이 발생한다. 클라우드 컴퓨팅의 장점 초기 투자 비용이 크게 줄어든다. CAP..
DDL CREATE TABLE Primary key 속성 지정을 통해 유일키 보장을 설정할 수 있다. 성능 향상을 위해 인덱스를 지정할 수 있다. CREATE TABLE raw_data.user_session_channel ( user_id int, session_id varchar(32) primary key, channel varchar(32) ); DROP TABLE DROP TABLE 테이블이름; 없는 테이블을 지우려고 하는 경우 에러를 낸다. 따라서 DROP TABLE IF EXISTS table_name; 을 사용할 수 있다. ALTER TABLE 새로운 컬럼 추가 ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입; 기존 컬럼 이름 변경 ALTER TABLE 테이블이름 RE..
SQL (Structured Query Language) DDL (Data Definition Language): 테이블의 구조를 정의한다. DML (Data Manipulation Language): 테이블에서 검색/추가/삭제/갱신을 하는데 사용하는 언어이다. 모든 대용량 데이터 웨어하우스는 SQL기반이다. Redshift, Snowflake, BigQuery, Hive Spark(SparkSQL), Hadoop(Hive): SQL 언어 지원 단점 구조화된 데이터를 다루는데 최적화가 되어있다. 정규표현식을 통해 비구조화된 데이터를 어느 정도 다루는 것은 가능하나 제약이 심하다. 대부분의 관계형 데이터베이스들은 JSON같이 nested형은 지원하지 않는다. BigQuery는 nested structure..
시스템 구성 더보기 (과거) 시스템 구성의 변화: 2tier 보통 데스크탑 응용프로그램에서 사용되는 아키텍쳐 클라이언트 - 서버의 2티어로 구성 비즈니스 로직은 보통 클라이언트에 위치한다. 클라이언트 티어: 사용자가 사용하는 UI, 프론트엔드 서버 티어: 데이터베이스, 백엔드 (현재) 시스템 구성의 변화: 3tier 웹 서비스에서 많이 사용되는 아키텍쳐 프레젠테이션 티어: 프론트엔드 (사용자단) 애플리케이션 티어: 백엔드 (비즈니스 로직) 데이터 티어: 백엔드 (데이터베이스 로직) 관계형 데이터베이스의 중요성 어떤 구조이건 데이터베이스는 꼭 필요한 컴포넌트이다. 데이터베이스를 잘 다루는 것은 좋은 개발자가 되기 위해 필요하며, 기본은 SQL을 잘 아는 것이다. 백엔드 개발자로써 중요한 부분이다. 데이터 ..
서비스를 통해 만들어지는 데이터 저장을 위한 데이터베이스 프로덕션 관계형 데이터베이스 (RDBMS) 웹/앱 서비스 운영에 필요한 관계형 데이터베이스를 지칭한다. 서비스의 운영에 필요한 데이터들을 저장하는 곳이다. OLTP (Online Transaction Processing) 빠른 처리속도가 중요하다. 사양이 낮거나 최적화가 안 되어있다면 속도가 느려질 수 있다. 데이터를 구조화된 테이블들의 집합으로 구성하여 저장하고 관리한다. 관계형 DB의 언어를 SQL이라고 한다. ex) MySQL, PostgreSQL 데이터 분석을 위한 데이터베이스 데이터 웨어하우스 OLAP(Online Analytical Processing) 빠른 처리속도보다 구조화된 큰 데이터를 처리할 수 있는지에 중점을 둔다. 회사 관련 ..
Null Pointer Exception. 아마 자바를 사용하면서 많이 보게 되는 에러중에 하나일 것이다. 자바에서는 거의 모든 것들이 레퍼런스이기 때문에, 거의 모든 것들이 null이 될 가능성이 있다. 따라서 항상 null을 확인할 필요가 있다. (기존에는) //User.java public class User { public static User EMPTY = new USER(0, ""); private int age; private String name; public User(int age, String name) { this.age = age; this.name = name; } } //Main.java public class Main { public static void main(String[..
Iterator는 여러 데이터의 묶음을 풀어서 하나씩 처리할 수 있는 수단을 제공한다. iterator.next()를 통해서 다음 데이터를 조회할 수 있다. 다음 데이터를 읽을 수 있지만, 이전 데이터를 읽을 수는 없다. Iterator를 사용하면서 데이터들에 대해 map이나 filter를 적용할 수는 없다. //Main.java public class Main { public static void main(String[] args) { List list = Arrays.asList("A", "AB", "ABC", "ABCD", "ABCDE"); Iterator iter = list.iterator(); while (iter.hasNext()) System.out.println(iter.next()); ..
여러 데이터의 묶음을 컬렉션이라고 한다. Collection List LinkedList ArrayList Set HashSet SortedSet TreeSet Map은 Collection Interface에 포함되지 않는다. Map Hashtable HashMap LinkedHashMap SortedMap TreeMap 메소드 체이닝 예제 //MyCollection.java public class MyCollection { private List list; public MyCollection(List list) { this.list = list; } public MyCollection map(Function function) { // T타입으로부터 U타입을 만드는 function을 인자로 받는다. //..