토요일, 1월 30, 2021

[B급 프로그래머] 1월 4주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: 이루다 사태 요약. 너무 쉽게 봤음 via @elliptickitten)
  1. 빅데이터/인공지능
  2. 읽을거리 보너스: Infographic: Building the Machine Learning Model via @Dost__M
    EOB

금요일, 1월 29, 2021

[유튜브 방송] (즐겁게 배우는 SQL #42) 제약 조건 - AUTOINCREMENT 제약

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 42편을 공개해드리겠다. 42편은 AUTOINCREMENT 제약 조건을 소개한다.

2021년 1월 29일자 [즐겁게 배우는 SQL #42] 제약 조건 - AUTOINCREMENT 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 ROWID 소개
  • 03:35 PK와 ROWID 연계 방안 소개
  • 11:29 AUTOINCREMENT 제약 예제

원본 학습자료는 SQLite AUTOINCREMENT를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: ROWID 소개
    1. SQL> CREATE TABLE people ( first_name TEXT NOT NULL, last_name TEXT NOT NULL );
    2. SQL> INSERT INTO people (first_name, last_name) VALUES('John', 'Doe');
    3. SQL> INSERT INTO people (first_name, last_name) VALUES('Lily', 'Bush');
    4. SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
  • 단계 2: PK와 ROWID 연계 방안 소개
    1. SQL> DROP TABLE people;
    2. SQL> CREATE TABLE people ( person_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL );
    3. SQL> INSERT INTO people (person_id,first_name,last_name) VALUES( 9223372036854775807,'Johnathan','Smith');
    4. SQL> INSERT INTO people (first_name,last_name) VALUES('William','Gate');
    5. SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
    6. SQL> CREATE TABLE t1(c text);
    7. SQL> INSERT INTO t1(c) VALUES('A');
    8. SQL> INSERT INTO t1(c) values('B');
    9. SQL> INSERT INTO t1(c) values('C');
    10. SQL> INSERT INTO t1(c) values('D');
    11. SQL> SELECT rowid, c FROM t1;
    12. SQL> DELETE FROM t1;
    13. SQL> INSERT INTO t1(c) values('E');
    14. SQL> INSERT INTO t1(c) values('F');
    15. SQL> INSERT INTO t1(c) values('G');
    16. SQL> SELECT rowid, c FROM t1;
  • 단계 3: AUTOINCREMENT 제약 예제
    1. SQL> DROP TABLE people;
    2. SQL> CREATE TABLE people ( person_id INTEGER PRIMARY KEY AUTOINCREMENT, first_name text NOT NULL, last_name text NOT NULL );
    3. SQL> INSERT INTO people (person_id,first_name,last_name) VALUES(9223372036854775807,'Johnathan','Smith');
    4. SQL> INSERT INTO people (first_name,last_name) VALUES('John','Smith');
    5. SQL> SELECT rowid, _rowid_, oid, first_name, last_name FROM people;
EOB

목요일, 1월 28, 2021

[유튜브 방송] <마이크로서비스 도입, 이렇게 한다> 도서 증정 이벤트

[독서광] (신간 번역서) 마이크로서비스 도입, 이렇게 한다에서 이미 소개드린 샘 뉴먼의 신간 번역서 출간을 기념해 애독자와 애청자 여러분을 위한 이벤트를 준비했다. 유튜브 애청자 세 분을 추첨해 신간을 증정하는 이번 이벤트에 많은 참여 부탁드린다.

여느 때와 마찬가지로 이벤트 응모 방법은 정말 간단하다. 채널 박재호 유튜브 채널을 구독하고 나서 다음 영상에 응원의 댓글을 달면 끝!

슬라이드 셰어에 올린 방송 스크립트는 다음과 같다.

EOB

수요일, 1월 27, 2021

[유튜브 방송] (즐겁게 배우는 SQL #41) 제약 조건 - CHECK 제약

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 41편을 공개해드리겠다. 41편은 CHECK 제약 조건을 소개한다.

2021년 1월 27일자 [즐겁게 배우는 SQL #41] 제약 조건 - CHECK 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 CHECK 제약 기본 형식 소개
  • 03:06 컬럼 CHECK 예제
  • 06:02 테이블 CHECK 예제
  • 08:04 기존 테이블에 CHECK 제약 걸기

원본 학습자료는 SQLite CHECK constraints를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: CHECK 제약 기본 형식
    CREATE TABLE table_name(
        ...,
        column_name data_type CHECK(expression),
        ...
    );
    
    CREATE TABLE table_name(
        ...,
        CHECK(expression)
    );
    
    BEGIN;
    -- create a new table 
    CREATE TABLE new_table (
        [...],
        CHECK ([...])
    );
    -- copy data from old table to the new one
    INSERT INTO new_table SELECT * FROM old_table;
    
    -- drop the old table
    DROP TABLE old_table;
    
    -- rename new table to the old one
    ALTER TABLE new_table RENAME TO old_table;
    
    -- commit changes
    COMMIT;
    
  • 단계 2: 컬럼 CHECK 예제
    1. SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT OT NULL CHECK (length(phone) >= 10) );
    2. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','408123456');
    3. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
  • 단계 3: 테이블 CHECK 예제
    1. SQL> CREATE TABLE products ( product_id INTEGER PRIMARY KEY, product_name TEXT NOT NULL, list_price DECIMAL (10, 2) NOT NULL, discount DECIMAL (10, 2) NOT NULL DEFAULT 0, CHECK (list_price >= discount AND discount >= 0 AND list_price >= 0) );
    2. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #1',2000,1000);
    3. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New Product #2',900,1000);
    4. SQL> INSERT INTO products(product_name, list_price, discount) VALUES('New XFactor',1000,-10);
  • 단계 4: 기존 테이블에 CHECK 제약 걸기
    1. SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL );
    2. SQL> INSERT INTO contacts(first_name, last_name, phone) VALUES('John','Doe','(408)-123-456');
    3. SQL> BEGIN;
    4. SQL> CREATE TABLE new_contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT, phone TEXT NOT NULL CHECK (length(phone) >= 10) );
    5. SQL> INSERT INTO new_contacts SELECT * FROM contacts;
    6. SQL> DROP TABLE contacts;
    7. SQL> ALTER TABLE new_contacts RENAME TO contacts;
    8. SQL> COMMIT;
EOB

화요일, 1월 26, 2021

[유튜브 방송] (즐겁게 배우는 SQL #40) 제약 조건 - UNIQUE 제약

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 40편을 공개해드리겠다. 40은 UNIQUE 제약 조건을 소개한다.

2021년 1월 26일자 [즐겁게 배우는 SQL #40] 제약 조건 - UNIQUE 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 UNIQUE 기본 형식 소개
  • 02:11 UNIQUE 예제(하나)
  • 04:43 UNIQUE 예제(여러 개)
  • 06:55 UNIQUE와 NULL

원본 학습자료는 SQLite UNIQUE Constraint를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: UNIQUE 기본 형식 소개
    CREATE TABLE table_name(
        ...,
        column_name type UNIQUE,
        ...
    );
    
    CREATE TABLE table_name(
        ...,
        UNIQUE(column_name)
    );
    
    CREATE TABLE table_name(
        ...,
        UNIQUE(column_name1,column_name2,...)
    );
    
  • 단계 2: UNIQUE 예제(하나)
    1. SQL> CREATE TABLE contacts( contact_id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, email TEXT NOT NULL UNIQUE );
    2. SQL> INSERT INTO contacts(first_name,last_name,email) VALUES ('John','Doe','john.doe@gmail.com');
    3. SQL> INSERT INTO contacts(first_name,last_name,email) VALUES ('Johnny','Doe','john.doe@gmail.com');
  • 단계 3: UNIQUE 예제(여러 개)
    1. SQL> CREATE TABLE shapes( shape_id INTEGER PRIMARY KEY, background_color TEXT, foreground_color TEXT, UNIQUE(background_color,foreground_color) );
    2. SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','green');
    3. SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','blue');
    4. SQL> INSERT INTO shapes(background_color,foreground_color) VALUES('red','green');
  • 단계 4: UNIQUE와 NULL
    1. SQL> CREATE TABLE lists( list_id INTEGER PRIMARY KEY, email TEXT UNIQUE );
    2. SQL> INSERT INTO lists(email) VALUES(NULL),(NULL);
    3. SQL> SELECT * FROM lists;
EOB

월요일, 1월 25, 2021

[개발자 이야기] (1월 23일) 프론트엔드 성능 점검 항목 – 2021 버전

2021년 1월 23일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2021년 1월 23일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 오늘 방송 주요 내용 소개
  • 06:28 js;dr
  • 08:35 풀 스택 vs 풀 사이클 개발자
  • 13:07 GCP, AWS, Azure 누가 누가 잘하나
  • 15:52 AWS 엘라스틱 라이선스 변경에 대한 대응 방안 발표
  • 20:40 오라클에서 PostgreSQL로 마이그레이션할 때 주의 사항
  • 22:45 클라우드플레어 waiting room
  • 26:40 프론트엔드 성능 점검 항목 – 2021 버전
  • 32:47 gradle의 문제점
EOB

토요일, 1월 23, 2021

[B급 프로그래머] 1월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 분산 컴퓨팅의 여덟가지 오류)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
EOB

금요일, 1월 22, 2021

[유튜브 방송] (즐겁게 배우는 SQL #39) 제약 조건 - NOT NULL 제약

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 39편을 공개해드리겠다. 39편은 NOT NULL 제약 조건을 소개한다.

2021년 1월 22일자 [즐겁게 배우는 SQL #39] 제약 조건 - NOT NULL 제약 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 NOT NULL 기본 형식 소개
  • 03:14 NOT NULL 예제

원본 학습자료는 SQLite NOT NULL Constraint를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: NOT NULL 기본 형식 소개
    CREATE TABLE table_name (
        ...,
        column_name type_name NOT NULL,
        ...
    );
    
  • 단계 2: NOT NULL 예제
    1. SQL> CREATE TABLE suppliers( supplier_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
    2. SQL> INSERT INTO suppliers(name) VALUES(NULL);
EOB

목요일, 1월 21, 2021

[유튜브 방송] (즐겁게 배우는 SQL #38) 제약 조건 - 외래 키

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 38편을 공개해드리겠다. 38편은 외래 키 제약 조건을 소개한다.

2021년 1월 21일자 [즐겁게 배우는 SQL #38] 제약 조건 - 외래 키 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 외래 키 기능 확인
  • 03:47 외래 키 예제
  • 06:41 외래 키 제약 행위(SET NULL)
  • 12:21 외래 키 제약 행위(RESTRICT)
  • 15:00 외래 키 제약 행위(CASCADE)

원본 학습자료는 SQLite Foreign Key를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 외래 키 기능 확인
    FOREIGN KEY (foreign_key_columns)
       REFERENCES parent_table(parent_key_columns)
          ON UPDATE action 
          ON DELETE action;
    
    1. 참고: 3.6.19 버전 이후에 외래 키를 지원
    2. 주의: SQLite을 컴파일할 때 SQLITE_OMIT_FOREIGN_KEY나 SQLITE_OMIT_TRIGGER를 정의하면 외래 키 제약을 사용할 수 없다
    3. 외래 키를 보고, 끄고 켜는 방법:
    4. SQL> PRAGMA foreign_keys;
    5. SQL> PRAGMA foreign_keys = OFF;
    6. SQL> PRAGMA foreign_keys = ON;
  • 단계 2: 외래 키 예제
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> CREATE TABLE suppliers ( supplier_id integer PRIMARY KEY, supplier_name text NOT NULL, group_id integer NOT NULL );
    3. SQL> CREATE TABLE supplier_groups ( group_id integer PRIMARY KEY, group_name text NOT NULL );
    4. SQL> DROP TABLE suppliers;
    5. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER NOT NULL, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) );
    6. SQL> INSERT INTO supplier_groups (group_name) VALUES ('Domestic'), ('Global'), ('One-Time');
    7. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES ('HP', 2);
    8. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Inc.', 4);
  • 단계 3: 외래 키 제약 행위(SET NULL)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DROP TABLE suppliers;
    3. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE SET NULL ON DELETE SET NULL );
    4. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 3);
    5. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 3);
    6. SQL> DELETE FROM supplier_groups WHERE group_id = 3;
    7. SQL> SELECT * FROM suppliers;
  • 단계 4: 외래 키 제약 행위(RESTRICT)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DROP TABLE suppliers;
    3. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE RESTRICT ON DELETE RESTRICT );
    4. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
    5. SQL> DELETE FROM supplier_groups WHERE group_id = 1;
    6. SQL> DELETE FROM suppliers WHERE group_id =1;
    7. SQL> DELETE FROM supplier_groups WHERE group_id = 1;
  • 단계 5: 외래 키 제약 행위(CASCADE)
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> DELETE FROM supplier_groups;
    3. SQL> DROP TABLE suppliers;
    4. SQL> CREATE TABLE suppliers ( supplier_id INTEGER PRIMARY KEY, supplier_name TEXT NOT NULL, group_id INTEGER, FOREIGN KEY (group_id) REFERENCES supplier_groups (group_id) ON UPDATE CASCADE ON DELETE CASCADE );
    5. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('XYZ Corp', 1);
    6. SQL> INSERT INTO suppliers (supplier_name, group_id) VALUES('ABC Corp', 2);
    7. SQL> UPDATE supplier_groups SET group_id = 100 WHERE group_name = 'Domestic';
    8. SQL> SELECT * FROM suppliers;
    9. SQL> DELETE FROM supplier_groups WHERE group_id = 2;
    10. SQL> SELECT * FROM suppliers;
EOB

수요일, 1월 20, 2021

[유튜브 방송] (즐겁게 배우는 SQL #37) 제약 조건 - 기본 키

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 37편을 공개해드리겠다. 37편은 기본(주) 키 제약 조건을 소개한다.

2021년 1월 20일자 [즐겁게 배우는 SQL #37] 제약 조건 - 기본 키 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 기본 키 형식 소개
  • 06:07 기본 키 예제
  • 08:06 기본 키 추가하기

원본 학습자료는 SQLite Primary Key를 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 기본 키 형식 소개
    CREATE TABLE table_name(
       column_1 INTEGER NOT NULL PRIMARY KEY,
       ...
    );
    
    CREATE TABLE table_name(
       column_1 INTEGER NOT NULL,
       column_2 INTEGER NOT NULL,
       ...
       PRIMARY KEY(column_1,column_2,...)
    );
    
    
    PRAGMA foreign_keys=off;
    
    BEGIN TRANSACTION;
    
    ALTER TABLE table RENAME TO old_table;
    
    -- define the primary key constraint here
    CREATE TABLE table ( ... );
    
    INSERT INTO table SELECT * FROM old_table;
    
    COMMIT;
    
    PRAGMA foreign_keys=on;
    
  • 단계 2: 기본 키 예제
    1. SQL> CREATE TABLE countries ( country_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
    2. SQL> CREATE TABLE languages ( language_id INTEGER, name TEXT NOT NULL, PRIMARY KEY (language_id) );
    3. SQL> CREATE TABLE country_languages ( country_id INTEGER NOT NULL, language_id INTEGER NOT NULL, PRIMARY KEY (country_id, language_id), FOREIGN KEY (country_id) REFERENCES countries (country_id) ON DELETE CASCADE ON UPDATE NO ACTION, FOREIGN KEY (language_id) REFERENCES languages (language_id) ON DELETE CASCADE ON UPDATE NO ACTION );
    4. SQL> INSERT INTO addresses ( house_no, street, city, postal_code, country ) VALUES ( '3960', 'North 1st Street', 'San Jose ', '95134', 'USA ' );
    5. SQL> INSERT INTO people ( first_name, last_name, address_id ) VALUES ('John', 'Doe', 1);
    6. SQL> DROP TABLE addresses;
  • 단계 3: 기본 키 추가하기
    1. SQL> CREATE TABLE cities ( id INTEGER NOT NULL, name text NOT NULL );
    2. SQL> INSERT INTO cities (id, name) VALUES(1, 'San Jose');
    3. SQL> PRAGMA foreign_keys=off;
    4. SQL> BEGIN TRANSACTION;
    5. SQL> ALTER TABLE cities RENAME TO old_cities;
    6. SQL> CREATE TABLE cities ( id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL );
    7. SQL> INSERT INTO cities SELECT * FROM old_cities;
    8. SQL> DROP TABLE old_cities;
    9. SQL> COMMIT;
    10. SQL> PRAGMA foreign_keys=on;
EOB

화요일, 1월 19, 2021

[유튜브 방송] (즐겁게 배우는 SQL #36) 데이터를 정의하자 - 청소(Vacuum)

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 36편을 공개해드리겠다. 36편은 테이블 청소 방법을 소개한다.

2021년 1월 19일자 [즐겁게 배우는 SQL #36] 데이터를 정의하자 - 청소(Vacuum) 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 SQLite에서 청소(Vacuum)가 필요한 이유
  • 04:55 VACUUM 명령과 pragma를 사용한 VACUUM 방식 지정
  • 05:35 VACUUM INTO 살펴보기

원본 학습자료는 SQLite VACUUM을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: SQLite에서 청소(Vacuum)가 필요한 이유
    1. DROP이나 DELETE 등으로 자료를 삭제하더라도 데이터베이스 파일 크기는 그대로 --> 향후 사용을 위해 확보된 상태로 유지
    2. INSERT/DELETE 등으로 데이터를 삭제하면, 색인과 테이블이 조각화되는 상황이 발생
    3. 이런 문제점을 보완하기 위해 VACUUM을 도입(비고: PostgreSQL)
    4. 주의: VACUUM은 임시 데이터베이스 파일을 만들고 조각모음을 수행하고 다시 원본 데이터베이스 파일에 반영하므로 실시간성이 떨어짐
    5. 큰 테이블이나 색인을 데이터베이스에서 삭제하고 나면 수작업으로 VACUUM을 실행할 필요가 있음
    6. 주의: 3.9.2 버전에서 main 데이터베이스에만 VACUUM 명령을 실행할 수 있음
    7. 참고: SQLite는 자동으로 VACUUM 명령을 수행할 수 있지만, 제약으로 인해 수동으로 돌리는 편이 바람직함
  • 단계 2: VACUUM 명령과 pragma를 사용한 VACUUM 방식 지정
    1. SQL> VACUUM; # 수동으로 VACUUM
    2. SQL> PRAGMA auto_vacuum = FULL; # 전체
    3. SQL> PRAGMA auto_vacuum = INCREMENTAL; # 증분
    4. SQL> PRAGMA auto_vacuum = NONE; # 하지 않음
  • 단계 3: VACUUM INTO 살펴보기
    1. SQL> VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
EOB

월요일, 1월 18, 2021

[유튜브 방송] (즐겁게 배우는 SQL #35) 데이터를 정의하자 - 테이블 제거

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 35편을 공개해드리겠다. 35편은 테이블 제거 방법을 소개한다.

2021년 1월 18일자 [즐겁게 배우는 SQL #35] 데이터를 정의하자 - 테이블 제거 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 테이블 제거 방법 소개
  • 02:00 테이블 제거 예제
  • 05:21 FK 문제 해결 방안

원본 학습자료는 SQLite Drop Table을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 테이블 제거 방법 소개
    DROP TABLE [IF EXISTS] [schema_name.]table_name;
    
  • 단계 2: 테이블 제거 예제
    1. SQL> PRAGMA foreign_keys = ON;
    2. SQL> CREATE TABLE IF NOT EXISTS people ( person_id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, address_id INTEGER, FOREIGN KEY (address_id) REFERENCES addresses (address_id) );
    3. SQL> CREATE TABLE IF NOT EXISTS addresses ( address_id INTEGER PRIMARY KEY, house_no TEXT, street TEXT, city TEXT, postal_code TEXT, country TEXT );
    4. SQL> INSERT INTO addresses ( house_no, street, city, postal_code, country ) VALUES ( '3960', 'North 1st Street', 'San Jose ', '95134', 'USA ' );
    5. SQL> INSERT INTO people ( first_name, last_name, address_id ) VALUES ('John', 'Doe', 1);
    6. SQL> DROP TABLE addresses;
  • 단계 3: FK 문제 해결 방안
    1. SQL> PRAGMA foreign_keys = OFF;
    2. SQL> DROP TABLE addresses;
    3. SQL> UPDATE people SET address_id = NULL;
    4. SQL> PRAGMA foreign_keys = ON;
EOB

[개발자 이야기] (1월 16일) 마이크로서비스 도입, 이렇게 한다

2021년 1월 16일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2021년 1월 16일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 오늘 방송 주요 내용 소개
  • 06:54 (신간 소개) 마이크로서비스 도입, 이렇게 한다
  • 16:18 PHP 잘못된 방식으로 배우기
  • 21:33 클라우드플레어 레이더 2020년 리뷰
  • 23:55 엘라스틱 라이선스 변경
  • 28:07 Learn X by Doing Y – 프로젝트 기반 학습 검색 엔진
  • 29:59 안전한 Dockerfile 만들기
  • 33:07 오라클, 블록체인DB와 AutoML 지원
  • 36:49 PostgreSQL vs MySQL 누가 누가 빠를까?
  • 39:14 윈도우에서 엄청나게 많은 파일을 지우는 방법
EOB

토요일, 1월 16, 2021

[B급 프로그래머] 1월 2주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: 베트남국립대 작년 기말시험지 4. 우는 건 허용되지만 조용히 우세요 5. 시험지에 눈물 닦지 마세요 via @slowersloth)
  1. 빅데이터/인공지능
  2. 읽을거리
EOB

금요일, 1월 15, 2021

[유튜브 방송] (즐겁게 배우는 SQL #34) 데이터를 정의하자 - 테이블 열 이름 변경

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 34편을 공개해드리겠다. 34편은 테이블 열 이름 변경 방법을 소개한다.

2021년 1월 15일자 [즐겁게 배우는 SQL #34] 데이터를 정의하자 - 테이블 열 이름 변경 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 테이블 열 이름 변경 방법 소개
  • 01:14 테이블 열 이름 변경 예제
  • 02:30 테이블 열 이름 변경 예제(2)

원본 학습자료는 SQLite Rename Column을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 테이블 열 이름 변경 방법 소개
    ALTER TABLE table_name
    RENAME COLUMN current_name TO new_name;
    
  • 단계 2: 테이블 열 이름 변경 예제
    1. SQL> CREATE TABLE Locations( LocationId INTEGER PRIMARY KEY, Address TEXT NOT NULL, City TEXT NOT NULL, State TEXT NOT NULL, Country TEXT NOT NULL );
    2. SQL> INSERT INTO Locations(Address,City,State,Country) VALUES('3960 North 1st Street','San Jose','CA','USA');
    3. SQL> ALTER TABLE Locations RENAME COLUMN Address TO Street;
    4. SQL> SELET * FROM Locations;
  • 단계 3: 테이블 열 이름 변경 예제(2)
    1. 참고: 3.25.0 이전에 사용하는 옛날 방식
    2. SQL> DROP TABLE IF EXISTS Locations;
    3. SQL> CREATE TABLE Locations( LocationId INTEGER PRIMARY KEY, Address TEXT NOT NULL, State TEXT NOT NULL, City TEXT NOT NULL, Country TEXT NOT NULL );
    4. SQL> INSERT INTO Locations(Address,City,State,Country) VALUES('3960 North 1st Street','San Jose','CA','USA');
    5. SQL> BEGIN TRANSACTION;
    6. SQL> CREATE TABLE LocationsTemp( LocationId INTEGER PRIMARY KEY, Street TEXT NOT NULL, City TEXT NOT NULL, State TEXT NOT NULL, Country TEXT NOT NULL );
    7. SQL> INSERT INTO LocationsTemp(Street,City,State,Country)
    8. SQL> SELECT Address,City,State,Country FROM Locations;
    9. SQL> DROP TABLE Locations;
    10. SQL> ALTER TABLE LocationsTemp RENAME TO Locations;
    11. SQL> COMMIT;
    12. SQL> SELECT * FROM Locations;
EOB

목요일, 1월 14, 2021

[유튜브 방송] (즐겁게 배우는 SQL #33) 데이터를 정의하자 - 테이블 변경

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 33편을 공개해드리겠다. 33편은 테이블 변경 방법을 소개한다.

2021년 1월 14일자 [즐겁게 배우는 SQL #33] 데이터를 정의하자 - 테이블 변경 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 테이블 변경 방법 소개
  • 03:28 테이블 이름 변경 예제
  • 05:04 테이블 열 추가 예제
  • 07:42 테이블 열 삭제 예제

원본 학습자료는 SQLite Rename Column을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 테이블 변경 방법 소개
    ALTER TABLE existing_table
    RENAME TO new_table;
    ) [WITHOUT ROWID];
    
    ALTER TABLE table_name
    ADD COLUMN column_definition;
    
    ALTER TABLE table_name
    RENAME COLUMN current_name TO new_name;
    
    
    -- disable foreign key constraint check
    PRAGMA foreign_keys=off;
    
    -- start a transaction
    BEGIN TRANSACTION;
    
    -- Here you can drop column
    CREATE TABLE IF NOT EXISTS new_table( 
       column_definition,
       ...
    );
    -- copy data from the table to the new_table
    INSERT INTO new_table(column_list)
    SELECT column_list
    FROM table;
    
    -- drop the table
    DROP TABLE table;
    
    -- rename the new_table to the table
    ALTER TABLE new_table RENAME TO table; 
    
    -- commit the transaction
    COMMIT;
    
    -- enable foreign key constraint check
    PRAGMA foreign_keys=on;
    
  • 단계 2: 테이블 이름 변경 예제
    1. SQL> CREATE TABLE devices ( name TEXT NOT NULL, model TEXT NOT NULL, Serial INTEGER NOT NULL UNIQUE );
    2. SQL> INSERT INTO devices (name, model, serial) VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
    3. SQL> ALTER TABLE devices RENAME TO equipment;
    4. SQL> SELECT name, model, serial FROM equipment;
  • 단계 3: 테이블 열 추가 예제
    1. SQL> ALTER TABLE equipment ADD COLUMN location text;
  • 단계 4: 테이블 열 삭제 예제
    1. SQL> CREATE TABLE users( UserId INTEGER PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL, Email TEXT NOT NULL, Phone TEXT NOT NULL );
    2. SQL> CREATE TABLE favorites( UserId INTEGER, PlaylistId INTEGER, FOREIGN KEY(UserId) REFERENCES users(UserId), FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId) );
    3. SQL> INSERT INTO users(FirstName, LastName, Email, Phone) VALUES('John','Doe','john.doe@example.com','408-234-3456');
    4. SQL> INSERT INTO favorites(UserId, PlaylistId) VALUES(1,1);
    5. SQL> SELECT * FROM users;
    6. SQL> SELECT * FROM favorites;
    7. SQL> PRAGMA foreign_keys=off;
    8. SQL> BEGIN TRANSACTION;
    9. SQL> CREATE TABLE IF NOT EXISTS persons ( UserId INTEGER PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL, Email TEXT NOT NULL );
    10. SQL> INSERT INTO persons(UserId, FirstName, LastName, Email) SELECT UserId, FirstName, LastName, Email FROM users;
    11. SQL> DROP TABLE users;
    12. SQL> ALTER TABLE persons RENAME TO users;
    13. SQL> COMMIT;
    14. SQL> PRAGMA foreign_keys=on;
    15. SQL> SELECT * FROM users;
EOB

수요일, 1월 13, 2021

[독서광] (신간 번역서) 마이크로서비스 도입, 이렇게 한다

작년 10월 말에 출간된 게임 엔진 블랙 북: 울펜슈타인 3D에 이어 오늘은 신간 번역서 소식 하나 전해드리겠다. 오늘의 주인공은 마이크로서비스 아키텍처 구축: 대용량 시스템의 효율적인 분산 설계 기법으로 유명해진 샘 뉴먼이 집필한 Monolith To Microservices의 번역서인 마이크로서비스 도입, 이렇게 한다: 기업의 유연성과 확장성을 높이는 마이크로서비스 마이그레이션 패턴과 현장 사례다.

이 책은 마이크로서비스를 기업에서 도입하는 과정에서 겪게될 여러 가지 어려움을 미리 볼 수 있는 수정 구슬을 제공하며, 구체적으로 마이크로서비스를 도입해야 할지 말아야 할지, 도입한다면 어떤 과정을 거쳐 도입해야 할지, 도입하는 과정에서 따르면 좋을 패턴 23가지와 문제에 부딪혔을 때 도움이 되는 해법을 소개한다. 쿠버네티스와 클라우드 네이티브만 도입하면 저절로 마이크로서비스 아키텍처를 멋지게 달성할 수 있지 않을까라는 막연한 희망을 품고 있는 분들이게 성공 확률을 높이는 비법은 무엇일까?

2020년 7월 15일 오라일리 테크 레이더에서 발표한 Microservices Adoption in 2020에서 조사한 결과를 여기서 잠깐 정리해보겠다.

  • 채택한 대다수 회사는 마이크로서비스로 성공을 거뒀다: 소수(10% 이하)만 '완벽한 성공'을 보고했지만, 명백히 대다수(54%)가 최소한 '거의 성공했으며', 92%의 응답자가 최소한 어느 정도 성공을 거뒀다고 보고했다. 전혀 성공을 거두지 못한 회사는 10%에 못미쳤다.
  • 마이크로서비스 우수 사례는 놀랄만큼 성숙되었다: 응답자의 대략 28%가 조직이 최소한 3년 정도 마이크로서비스를 사용해왔다고 응답했으며, 2/3(61%)의 응답자는 1년 이상 마이크로서비스를 사용해왔다고 응답했다.
  • 채택한 회사들은 마이크로서비스에 거액의 판돈을 걸었다: 거의 1/3에 해당하는(29%) 응답자들은 마이크로서비스를 사용해 대다수(50% 이상) 시스템을 구현하거나 이주했다고 말했다.
  • 마이크로서비스 성공은 소프트웨어 생명주기의 소유를 의미한다: 대다수(74%) 응답자는 팀이 소프트웨어 생명주기의 빌드-테스트-배포-유지 단계를 소유하고 있다고 응답했다. 생명 주기를 소유한 팀은 그렇지 못한 팀과 비교해 18% 더 높은 비율로 성공했다.
  • 컨테이너의 성공: 응답자 중에 마이크로서비스 배포에 컨테이너를 사용한 조직이 그렇지 않은 조직과 비교해 더 많은 성공을 거두었다. 응답자를 대상으로 컨테이너 사용은 마이크로서비스 성공을 판단하는 가장 강력한 예측 요인이었다.
  • 마이크로서비스는 문화다: 마이크로서비스를 채택한 많은 조직은 채택 과정에서 문화와 마인드 장벽을 언급했다. 모놀리스 애플리케이션을 마이크로서비스로 분해하는 작업은 상당한 도전이지만, 복잡도는 그 중에서도 가장 큰 도전으로 다가온다.

이렇듯 마이크로서비스가 점차 퍼져나가고 있음에도 불구하고 주의 사항이 있다. 대다수 성공 사례는 백지에서 시작한 경우보다는 기존 사업 이해도가 높은 경우에 해당하고 비교적 조직 규모가 큰 경우에 해당한다는 사실이다. 따라서 처음부터 마이크로서비스 아키텍처를 구성하는 방식보다는 기존 모놀리스를 점진적으로 마이크로서비스 아키텍처로 이동하는 방식이 성공 확률을 높인다는 샘 뉴먼의 경험적인 교훈을 잘 새겨 들어야 한다. 다시 말해, 마이크로서비스를 도입하고 싶은 마음이 급할수록 돌아가야한다. 이 책을 읽으면서 마이크로서비스 아키텍처와 관련된 문제를 솔직하게 평가하고, 심지어 마이크로아키텍처로 향하는 여정의 시작이 각자에게 적합한지 이해하자. 이렇게 차근차근 전진하다보면 여러분도 마이크로서비스로 성공한 일원이 되어 있을 것이다. 아무쪼록 마이크로서비스 여정을 떠나는 독자 여러분의 행운을 빈다!

한국어판에만 있는 보너스: '부록 C 한국어판 특별 부록: 기술의 진화로 짚어보는 마이크로서비스 도입의 허와 실'를 한국어판 독자들을 위해 특별히 작성했다.

현재 절찬 예약 판매 중이며, 애독자 여러분들의 많은 성원 부탁드리겠다.

  • ▶️ 교보문고 https://bit.ly/3q9C5P8
  • ▶️ 예스24 https://bit.ly/2LBHakh
  • ▶️ 알라딘 http://aladin.kr/p/ryuUD
  • ▶️ 인터파크 https://bit.ly/2XxnhxG
EOB

[유튜브 방송] (즐겁게 배우는 SQL #32) 데이터를 정의하자 - 테이블 생성

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 32편을 공개해드리겠다. 32편은 테이블 생성 방법을 소개한다.

2021년 1월 13일자 [즐겁게 배우는 SQL #32] 데이터를 정의하자 - 테이블 생성 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 테이블 생성 방법 소개
  • 05:17 테이블 생성 예제

원본 학습자료는 SQLite Create Table을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 테이블 생성 방법 소개
    CREATE TABLE [IF NOT EXISTS] [schema_name].table_name (
    	column_1 data_type PRIMARY KEY,
       	column_2 data_type NOT NULL,
    	column_3 data_type DEFAULT 0,
    	table_constraints
    ) [WITHOUT ROWID];
    
  • 단계 2: 테이블 생성 예제
    1. SQL> CREATE TABLE contacts ( contact_id INTEGER PRIMARY KEY, first_name TEXT NOT NULL, last_name TEXT NOT NULL, email TEXT NOT NULL UNIQUE, phone TEXT NOT NULL UNIQUE );
    2. SQL> CREATE TABLE groups ( group_id INTEGER PRIMARY KEY, name TEXT NOT NULL );
    3. SQL> CREATE TABLE contact_groups( contact_id INTEGER, group_id INTEGER, PRIMARY KEY (contact_id, group_id), FOREIGN KEY (contact_id) REFERENCES contacts (contact_id) ON DELETE CASCADE ON UPDATE NO ACTION, FOREIGN KEY (group_id) REFERENCES groups (group_id) ON DELETE CASCADE ON UPDATE NO ACTION );
EOB

화요일, 1월 12, 2021

[유튜브 방송] (즐겁게 배우는 SQL #31) 데이터를 정의하자 - SQL 데이터 타입

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 31편을 공개해드리겠다. 31편은 SQL 데이터 타입을 소개한다.

2021년 1월 12일자 [즐겁게 배우는 SQL #31] 데이터를 정의하자 - SQL 데이터 타입 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 데이터 타입 유형 소개
  • 02:17 typeof() 함수 소개
  • 03:12 데이터 타입 예제
  • 05:47 데이터 타입 정렬 순서 확인

원본 학습자료는 SQLite Data Types을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 데이터 타입 유형 소개
    • NULL: NULL
    • INTEGER: 정수(1, 2, 4, 8 가변 바이트)
    • REAL: 실수(8바이트)
    • TEXT: 문자열(가변 바이트)
    • BLOB(Binary Large OBject): 이진 데이터(x 로 시작하고 가변 바이트)
  • 단계 2: typeof() 함수 소개
    1. SQL> SELECT typeof(100), typeof(10.0), typeof('100'), typeof(x'1000'), typeof(NULL);
  • 단계 3: 데이터 타입 예제
    1. SQL> CREATE TABLE test_datatypes ( id INTEGER PRIMARY KEY, val );
    2. SQL> INSERT INTO test_datatypes (val) VALUES (1), (2), (10.1), (20.5), ('A'), ('B'), (NULL), (x'0010'), (x'0011');
    3. SQL> SELECT id, val, typeof(val) FROM test_datatypes;
  • 단계 4: 데이터 타입 정렬 순서 확인
    1. 순서는: (가장 우선 순위가 낮은) NULL < INTEGER = REAL < TEXT < BLOB (가장 우선 순위가 높은)
    2. SQL> SELECT id, val, typeof(val) FROM test_datatypes ORDER BY val;
EOB

월요일, 1월 11, 2021

[유튜브 방송] (즐겁게 배우는 SQL #30) 트랜잭션이 뭐지?

[유튜브 방송] (즐겁게 배우는 SQL) 기획 소개에서 설명드린 즐겁게 배우는 SQL 30편을 공개해드리겠다. 30편은 트랜잭션의 개념/기본 원리와 예를 소개한다.

2021년 1월 11일자 [즐겁게 배우는 SQL #30] 트랜잭션이 뭐지? 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 즐겁게 배우는 SQL에서 확인할 수 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 트랜잭션 기본 원리 소개
  • 04:51 트랜잭션 예제(정상적인 경우)
  • 11:07 트랜잭션 예제(롤백하는 경우)

원본 학습자료는 SQLite Transaction을 참고하고, 방송에 사용한 실제 실습 자료는 다음을 참고한다:

  • 단계 1: 트랜잭션 기본 원리 소개 - ACID
    • 원자성(Atomic): 트랜잭션 내에서는 모든 연산이 모두 완료되거나 모두 실패하거나 둘 중 한 가지 상태를 보증한다. 어떤 이유로든 시도하는 변경 내역이 실패하면 전체 연산은 중단되고 마치 아무런 변경사항도 없는 것처럼 보인다.
    • 일관성(Consistent): 데이터베이스가 변경되면, 유효하며 일관된 상태로 유지된다.
    • 격리(Isolation): 여러 트랜잭션이 간섭 없이 동시에 작동할 수 있다. 이는 어떤 트랜잭션 중에 이뤄진 모든 중간 상태 변경이 다른 트랜잭션에 보이지 않게 하는 방법으로 달성된다.
    • 내구성(Durable): 일단 트랜잭션이 완료되고 나면 시스템 오류가 발생하는 상황에서도 데이터가 손실되지 않는다고 보장한다.
    BEGIN TRANSACTION;
    COMMIT;
    ROLLBACK;
    
  • 단계 2: 트랜잭션 예제(정상적인 경우)
    1. SQL> CREATE TABLE accounts ( account_no INTEGER NOT NULL, balance DECIMAL NOT NULL DEFAULT 0, PRIMARY KEY(account_no), CHECK(balance >= 0) );
    2. SQL> CREATE TABLE account_changes ( change_no INTEGER PRIMARY KEY AUTOINCREMENT, account_no INTEGER NOT NULL, flag TEXT NOT NULL, amount DECIMAL NOT NULL, changed_at TEXT NOT NULL );
    3. SQL> INSERT INTO accounts (account_no,balance) VALUES (100,20100);
    4. SQL> INSERT INTO accounts (account_no,balance) VALUES (200,10100);
    5. SQL> BEGIN TRANSACTION;
    6. SQL> UPDATE accounts SET balance = balance - 1000 WHERE account_no = 100;
    7. SQL> UPDATE accounts SET balance = balance + 1000 WHERE account_no = 200;
    8. SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(100,'-',1000,datetime('now'));
    9. SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(200,'+',1000,datetime('now'));
    10. SQL> COMMIT;
    11. SQL> SELECT * FROM accounts;
    12. SQL> SELECT * FROM account_changes;
  • 단계 3: 트랜잭션 예제(롤백하는 경우)
    1. SQL> BEGIN TRANSACTION;
    2. SQL> INSERT INTO account_changes(account_no,flag,amount,changed_at) VALUES(100,'-',20000,datetime('now'));
    3. SQL> UPDATE accounts SET balance = balance - 20000 WHERE account_no = 100;
    4. SQL> SELECT * FROM account_changes;
    5. SQL> ROLLBACK;
    6. SQL> SELECT * FROM account_changes;
EOB

[개발자 이야기] (1월 9일) 내가 소프트웨어 업계에서 45년 동안 배운 교훈

2021년 1월 9일자 방송은 다음에서 볼 수 있으며, 전체 방송 플레이리스트는 재미있는 개발 이야기(w/ 허광남-박재호)에서 확인할 수 있다.

2021년 1월 9일자 방송 스크립트는 전체 공개되어 있으며, 슬라이드셰어에서 보거나 다운로드 받을 수도 있다.

하이라이트를 요약 정리하면 다음과 같다:

  • 00:00 오늘 방송 주요 내용 소개
  • 04:00 서버쪽 웹어셈블리 와스머 GA 버전 공개!
  • 07:46 우리가 클라우드를 싫어하는 11가지 이유
  • 12:22 닛산, 깃 저장소 설정 오류로 코드 유출
  • 13:47 내가 소프트웨어 업계에서 45년 동안 배운 교훈
  • 18:45 (SQL) Correlated Subquery
  • 20:45 페북이 앱에서 수집하는 정보 범위는?
  • 22:22 아틀라시안 클라우드 사용 약관 중…
EOB

토요일, 1월 09, 2021

[B급 프로그래머] 1월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: 디지털 시대의 시 via @ham_zzal)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스