SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
POSTGRES 테스트 코드로 기여하기
발표자: 이동욱
이메일: sh95119@gmail.com
PGDay.Seoul 2022
마지막 업데이트: 2022.10.24
자기소개
현재 ’씨알에스 큐브’ 회사에서 재직중
GSoC’22 Completion Certificate of Contributor.
오픈소스 기여에 많은 관심을 가지고 있습니다.
이동욱 POSTGRES 테스트 코드로 기여하기
발표 내용
테스트 코드를 작성하면 무엇이 좋은지에 대해서 알아본다.
테스트 코드를 작성하는 방법과 테스트 코드의 종류에 대해서 알아본다.
작성한 테스트 코드를 제출하여 실제 소스코드에 반영하는 절차에 대해서
알아본다.
이동욱 POSTGRES 테스트 코드로 기여하기
1. 기여를 시작하는데 테스트 코드가 좋은 이유
이동욱 POSTGRES 테스트 코드로 기여하기
1. 기여를 시작하는데 테스트 코드가 좋은 이유
테스트 코드를 읽고 분석함으로써 프로그램의 기본 동작에 대해서 쉽게
익힐 수 있다.
코드를 분석하는 시나리오 및 방향성을 잡아준다.
코드를 작성함으로써 기여를 시도해 볼 수 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - contrib
POSTGRES 익스텐션이 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - src/bin
POSTGRES 도구들이 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
2. POSTGRES 프로젝트 구조 - src/backend
메인 소스코드가 위치한 디렉터리
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류
테스트 코드 종류
1. SQL 테스트
2. TAP 테스트
3. SPEC 테스트
SQL 테스트는 SQL 문을 실행해서 나온 결과를 비교하는 테스트이다.
TAP 테스트는 Perl 의 Test::More 모듈을 이용하여 하는 테스트이다.
SPEC 테스트는 여러 세션을 이용하여 수행하는 테스트이다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
터미널에 ’make check’ 를 입력하면 sql 디렉터리 안에 있는 *.sql 파일이
실행된다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
pg_stat_statements.sql
CREATE EXTENSION pg_stat_statements;
--
-- simple and compound statements
--
SET pg_stat_statements.track_utility = FALSE;
SET pg_stat_statements.track_planning = TRUE;
SELECT pg_stat_statements_reset();
SELECT 1 AS "int";
SELECT ’hello’
-- multiline
AS "text";
...
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SQL 테스트
pg_stat_statements.out
...
SELECT pg_stat_statements_reset();
pg_stat_statements_reset
--------------------------
(1 row)
SELECT 1 AS "int";
int
-----
1
(1 row)
SELECT ’hello’
-- multiline
AS "text";
text 이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - TAP 테스트
TAP 테스트는 Perl로 작성되어 있으며 t 디렉터리 안에 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. 테스트 코드의 종류 - TAP 테스트
pg_prewarm/t/001_basic.pl
...
use PostgreSQL::Test::Cluster;
use PostgreSQL::Test::Utils;
use Test::More;
...
$node->safe_psql("postgres",
"CREATE EXTENSION pg_prewarm;n"
. "CREATE TABLE test(c1 int);n"
. "INSERT INTO test SELECT generate_series(1, 100);");
# test read mode
my $result =
$node->safe_psql("postgres", "SELECT pg_prewarm(’test’, ’read’);");
like($result, qr/^[1-9][0-9]*$/, ’read mode succeeded’);
이동욱 POSTGRES 테스트 코드로 기여하기
3. 테스트 코드의 종류 - TAP 테스트
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
spec 테스트는 여러 세션간의 동작을 테스트하며 specs 디렉터리 안에 위
치한다.
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
setup {
CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int);
INSERT INTO multixact_conflict VALUES (1, 2), (3, 4);
}
teardown {
DROP TABLE multixact_conflict;
}
...
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
session s1
step s1_begin { BEGIN; }
step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; }
step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; }
step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; }
step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; }
step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; }
step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; }
step s1_commit { COMMIT; }
session s2
step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks(’multixact_conf
lict’); }
이동욱 POSTGRES 테스트 코드로 기여하기
3. PG 테스트 코드 종류 - SPEC 테스트
pgrowlocks/spces/pgrowlocks.spec
permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit
permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit
permutation s1_begin s1_updatea s2_rowlocks s1_commit
permutation s1_begin s1_updateb s2_rowlocks s1_commit
# test multixact cases using savepoints
permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit
permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit
이동욱 POSTGRES 테스트 코드로 기여하기
4. 테스트 코드 작성이 처음이라면?
커버리지 사이트에서 테스트 커버리지가 적은 모듈을 선택해 테스트 코
드를 작성해보는 것을 추천
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
패치의 제목과 어떤 주제인지 토픽을 적는다 그리고 마지막에 메일을 보
냈을 때 생성된 쓰레드 ID를 기입하면 된다.
이동욱 POSTGRES 테스트 코드로 기여하기
5. 코드를 제출하는 방법
이동욱 POSTGRES 테스트 코드로 기여하기
6. 테스트 코드를 작성하면서 배운 것들
디버깅 능력 및 도구에 대해서 배울 수 있다.
내부 구현에 대한 이해를 할 수 있다.
몰랐던 기능들 및 익스텐션에 대해서 알 수 있다.
이동욱 POSTGRES 테스트 코드로 기여하기
7. 한 걸음 더 나아가기
PostgreSQL Person of the Week(https://postgresql.life/)
이동욱 POSTGRES 테스트 코드로 기여하기
8. 한 걸음 더 나아가기
이동욱 POSTGRES 테스트 코드로 기여하기
참고하면 좋을 링크
How (and why) to become a PostgreSQL contributor
How to create, test and debug an extension written in C for Post-
greSQL
POSTGRES 빌드 및 디버깅하는 방법
What is PostgreSQL commitfest and how to contribute
Reviewing a Patch
이동욱 POSTGRES 테스트 코드로 기여하기
이동욱 POSTGRES 테스트 코드로 기여하기

Más contenido relacionado

La actualidad más candente

[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxNeoClova
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기I Goo Lee
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용I Goo Lee
 
PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PgDay.Seoul
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱PgDay.Seoul
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기NHN FORWARD
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要Shinya Sugiyama
 
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PGPgDay.Seoul
 
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...Mydbops
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
Table partitioning in PostgreSQL + Rails
Table partitioning in PostgreSQL + RailsTable partitioning in PostgreSQL + Rails
Table partitioning in PostgreSQL + RailsAgnieszka Figiel
 
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and OptimizationPgDay.Seoul
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스PgDay.Seoul
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바NeoClova
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQLI Goo Lee
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介Shinya Sugiyama
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Jiho Lee
 

La actualidad más candente (20)

[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오
 
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要MySQL8.0 SYS スキーマ概要
MySQL8.0 SYS スキーマ概要
 
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
 
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Table partitioning in PostgreSQL + Rails
Table partitioning in PostgreSQL + RailsTable partitioning in PostgreSQL + Rails
Table partitioning in PostgreSQL + Rails
 
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQL
 
MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介MySQL SYSスキーマのご紹介
MySQL SYSスキーマのご紹介
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
Pg 클러스터 기반의 구성 및 이전, 그리고 인덱스 클러스터링
 

Similar a [pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱

TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDSuwon Chae
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol bufferknight1128
 
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]Jaeman An
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례SangIn Choung
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기Hyperledger Korea User Group
 
Cryptol 수업자료
Cryptol 수업자료Cryptol 수업자료
Cryptol 수업자료arundine
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental systemJaehoon Oh
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블YongEun Choi
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 

Similar a [pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱 (20)

TDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDD
 
S66 goos-w7
S66 goos-w7S66 goos-w7
S66 goos-w7
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
 
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.]
 
테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
 
Cryptol 수업자료
Cryptol 수업자료Cryptol 수업자료
Cryptol 수업자료
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Effective unit testing ch3. 테스트더블
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
 
데이콘 뽀개기
데이콘 뽀개기데이콘 뽀개기
데이콘 뽀개기
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 

Más de PgDay.Seoul

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기PgDay.Seoul
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기PgDay.Seoul
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposhaPgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPAPgDay.Seoul
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기PgDay.Seoul
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계PgDay.Seoul
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgresPgDay.Seoul
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우PgDay.Seoul
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종PgDay.Seoul
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진PgDay.Seoul
 
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명PgDay.Seoul
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오PgDay.Seoul
 
PostgreSQL 9.6 새 기능 소개
PostgreSQL 9.6 새 기능 소개PostgreSQL 9.6 새 기능 소개
PostgreSQL 9.6 새 기능 소개PgDay.Seoul
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기PgDay.Seoul
 
Pg report 20161010_02
Pg report 20161010_02Pg report 20161010_02
Pg report 20161010_02PgDay.Seoul
 

Más de PgDay.Seoul (17)

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
 
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
 
PostgreSQL 9.6 새 기능 소개
PostgreSQL 9.6 새 기능 소개PostgreSQL 9.6 새 기능 소개
PostgreSQL 9.6 새 기능 소개
 
pg_hba.conf 이야기
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기
 
Pg report 20161010_02
Pg report 20161010_02Pg report 20161010_02
Pg report 20161010_02
 

[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱

  • 1. POSTGRES 테스트 코드로 기여하기 발표자: 이동욱 이메일: sh95119@gmail.com PGDay.Seoul 2022 마지막 업데이트: 2022.10.24
  • 2. 자기소개 현재 ’씨알에스 큐브’ 회사에서 재직중 GSoC’22 Completion Certificate of Contributor. 오픈소스 기여에 많은 관심을 가지고 있습니다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 3. 발표 내용 테스트 코드를 작성하면 무엇이 좋은지에 대해서 알아본다. 테스트 코드를 작성하는 방법과 테스트 코드의 종류에 대해서 알아본다. 작성한 테스트 코드를 제출하여 실제 소스코드에 반영하는 절차에 대해서 알아본다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 4. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 이동욱 POSTGRES 테스트 코드로 기여하기
  • 5. 1. 기여를 시작하는데 테스트 코드가 좋은 이유 테스트 코드를 읽고 분석함으로써 프로그램의 기본 동작에 대해서 쉽게 익힐 수 있다. 코드를 분석하는 시나리오 및 방향성을 잡아준다. 코드를 작성함으로써 기여를 시도해 볼 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 6. 2. POSTGRES 프로젝트 구조 - contrib POSTGRES 익스텐션이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 7. 2. POSTGRES 프로젝트 구조 - src/bin POSTGRES 도구들이 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 8. 2. POSTGRES 프로젝트 구조 - src/backend 메인 소스코드가 위치한 디렉터리 이동욱 POSTGRES 테스트 코드로 기여하기
  • 9. 3. PG 테스트 코드 종류 테스트 코드 종류 1. SQL 테스트 2. TAP 테스트 3. SPEC 테스트 SQL 테스트는 SQL 문을 실행해서 나온 결과를 비교하는 테스트이다. TAP 테스트는 Perl 의 Test::More 모듈을 이용하여 하는 테스트이다. SPEC 테스트는 여러 세션을 이용하여 수행하는 테스트이다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 10. 3. PG 테스트 코드 종류 - SQL 테스트 터미널에 ’make check’ 를 입력하면 sql 디렉터리 안에 있는 *.sql 파일이 실행된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 11. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.sql CREATE EXTENSION pg_stat_statements; -- -- simple and compound statements -- SET pg_stat_statements.track_utility = FALSE; SET pg_stat_statements.track_planning = TRUE; SELECT pg_stat_statements_reset(); SELECT 1 AS "int"; SELECT ’hello’ -- multiline AS "text"; ... 이동욱 POSTGRES 테스트 코드로 기여하기
  • 12. 3. PG 테스트 코드 종류 - SQL 테스트 pg_stat_statements.out ... SELECT pg_stat_statements_reset(); pg_stat_statements_reset -------------------------- (1 row) SELECT 1 AS "int"; int ----- 1 (1 row) SELECT ’hello’ -- multiline AS "text"; text 이동욱 POSTGRES 테스트 코드로 기여하기
  • 13. 3. PG 테스트 코드 종류 - TAP 테스트 TAP 테스트는 Perl로 작성되어 있으며 t 디렉터리 안에 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 14. 3. 테스트 코드의 종류 - TAP 테스트 pg_prewarm/t/001_basic.pl ... use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ... $node->safe_psql("postgres", "CREATE EXTENSION pg_prewarm;n" . "CREATE TABLE test(c1 int);n" . "INSERT INTO test SELECT generate_series(1, 100);"); # test read mode my $result = $node->safe_psql("postgres", "SELECT pg_prewarm(’test’, ’read’);"); like($result, qr/^[1-9][0-9]*$/, ’read mode succeeded’); 이동욱 POSTGRES 테스트 코드로 기여하기
  • 15. 3. 테스트 코드의 종류 - TAP 테스트 이동욱 POSTGRES 테스트 코드로 기여하기
  • 16. 3. PG 테스트 코드 종류 - SPEC 테스트 spec 테스트는 여러 세션간의 동작을 테스트하며 specs 디렉터리 안에 위 치한다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 17. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec setup { CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int); INSERT INTO multixact_conflict VALUES (1, 2), (3, 4); } teardown { DROP TABLE multixact_conflict; } ... 이동욱 POSTGRES 테스트 코드로 기여하기
  • 18. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec session s1 step s1_begin { BEGIN; } step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; } step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; } step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; } step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; } step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; } step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; } step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; } step s1_commit { COMMIT; } session s2 step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks(’multixact_conf lict’); } 이동욱 POSTGRES 테스트 코드로 기여하기
  • 19. 3. PG 테스트 코드 종류 - SPEC 테스트 pgrowlocks/spces/pgrowlocks.spec permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_updateb s2_rowlocks s1_commit # test multixact cases using savepoints permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit 이동욱 POSTGRES 테스트 코드로 기여하기
  • 20. 4. 테스트 코드 작성이 처음이라면? 커버리지 사이트에서 테스트 커버리지가 적은 모듈을 선택해 테스트 코 드를 작성해보는 것을 추천 이동욱 POSTGRES 테스트 코드로 기여하기
  • 21. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 22. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 23. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 24. 5. 코드를 제출하는 방법 패치의 제목과 어떤 주제인지 토픽을 적는다 그리고 마지막에 메일을 보 냈을 때 생성된 쓰레드 ID를 기입하면 된다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 25. 5. 코드를 제출하는 방법 이동욱 POSTGRES 테스트 코드로 기여하기
  • 26. 6. 테스트 코드를 작성하면서 배운 것들 디버깅 능력 및 도구에 대해서 배울 수 있다. 내부 구현에 대한 이해를 할 수 있다. 몰랐던 기능들 및 익스텐션에 대해서 알 수 있다. 이동욱 POSTGRES 테스트 코드로 기여하기
  • 27. 7. 한 걸음 더 나아가기 PostgreSQL Person of the Week(https://postgresql.life/) 이동욱 POSTGRES 테스트 코드로 기여하기
  • 28. 8. 한 걸음 더 나아가기 이동욱 POSTGRES 테스트 코드로 기여하기
  • 29. 참고하면 좋을 링크 How (and why) to become a PostgreSQL contributor How to create, test and debug an extension written in C for Post- greSQL POSTGRES 빌드 및 디버깅하는 방법 What is PostgreSQL commitfest and how to contribute Reviewing a Patch 이동욱 POSTGRES 테스트 코드로 기여하기
  • 30. 이동욱 POSTGRES 테스트 코드로 기여하기