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

PgDay.Seoul
PgDay.SeoulPgDay.Seoul
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 테스트 코드로 기여하기
1 of 30

Recommended

[pgday.Seoul 2022] PostgreSQL구조 - 윤성재 by
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재PgDay.Seoul
410 views23 slides
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정 by
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정PgDay.Seoul
187 views33 slides
Mvcc in postgreSQL 권건우 by
Mvcc in postgreSQL 권건우Mvcc in postgreSQL 권건우
Mvcc in postgreSQL 권건우PgDay.Seoul
3.7K views42 slides
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG by
[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PGPgDay.Seoul
1.9K views20 slides
[Pgday.Seoul 2020] SQL Tuning by
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL TuningPgDay.Seoul
1.2K views44 slides
PostgreSQL WAL for DBAs by
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PGConf APAC
4.6K views35 slides

More Related Content

What's hot

Deep dive into PostgreSQL statistics. by
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
22.9K views53 slides
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL by
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQLPgDay.Seoul
420 views20 slides
PostgreSQL Deep Internal by
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep InternalEXEM
2.5K views134 slides
Introduction to PostgreSQL by
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJoel Brewer
881 views33 slides
[pgday.Seoul 2022] PostgreSQL with Google Cloud by
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
218 views49 slides
[2019] 200만 동접 게임을 위한 MySQL 샤딩 by
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩NHN FORWARD
542 views50 slides

What's hot(20)

Deep dive into PostgreSQL statistics. by Alexey Lesovsky
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
Alexey Lesovsky22.9K views
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL by PgDay.Seoul
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
PgDay.Seoul420 views
PostgreSQL Deep Internal by EXEM
PostgreSQL Deep InternalPostgreSQL Deep Internal
PostgreSQL Deep Internal
EXEM2.5K views
Introduction to PostgreSQL by Joel Brewer
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
Joel Brewer881 views
[pgday.Seoul 2022] PostgreSQL with Google Cloud by PgDay.Seoul
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
PgDay.Seoul218 views
[2019] 200만 동접 게임을 위한 MySQL 샤딩 by NHN FORWARD
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
NHN FORWARD542 views
mongodb와 mysql의 CRUD 연산의 성능 비교 by Woo Yeong Choi
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
Woo Yeong Choi31.7K views
Advanced Postgres Monitoring by Denish Patel
Advanced Postgres MonitoringAdvanced Postgres Monitoring
Advanced Postgres Monitoring
Denish Patel9.6K views
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기 by PgDay.Seoul
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
PgDay.Seoul3.1K views
Pgday bdr 천정대 by PgDay.Seoul
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
PgDay.Seoul1.6K views
Mastering PostgreSQL Administration by EDB
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
EDB7.2K views
MySQL/MariaDB Proxy Software Test by I Goo Lee
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
I Goo Lee2K views
あなたの知らないPostgreSQL監視の世界 by Yoshinori Nakanishi
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi19.1K views
PostgreSQL Performance Tuning by elliando dias
PostgreSQL Performance TuningPostgreSQL Performance Tuning
PostgreSQL Performance Tuning
elliando dias4.1K views
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱 by PgDay.Seoul
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
[Pgday.Seoul 2017] 2. PostgreSQL을 위한 리눅스 커널 최적화 - 김상욱
PgDay.Seoul931 views
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자 by PgDay.Seoul
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
PgDay.Seoul4.3K views
Let's scale-out PostgreSQL using Citus (English) by Noriyoshi Shinoda
Let's scale-out PostgreSQL using Citus (English)Let's scale-out PostgreSQL using Citus (English)
Let's scale-out PostgreSQL using Citus (English)
Noriyoshi Shinoda3.1K views
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver] by MongoDB
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
MongoDB5.4K views
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015 by PostgreSQL-Consulting
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015

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

TDD&Refactoring Day 03: TDD by
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDDSuwon Chae
1K views61 slides
S66 goos-w7 by
S66 goos-w7S66 goos-w7
S66 goos-w7한재 제
110 views40 slides
TDD.JUnit.조금더.알기 by
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기Wonchang Song
3.9K views71 slides
자바야 놀자 PPT by
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
5.4K views286 slides
Google Protocol buffer by
Google Protocol bufferGoogle Protocol buffer
Google Protocol bufferknight1128
12.9K views40 slides
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.] by
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
547 views61 slides

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

TDD&Refactoring Day 03: TDD by Suwon Chae
TDD&Refactoring Day 03: TDDTDD&Refactoring Day 03: TDD
TDD&Refactoring Day 03: TDD
Suwon Chae1K views
TDD.JUnit.조금더.알기 by Wonchang Song
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
Wonchang Song3.9K views
자바야 놀자 PPT by JinKyoungHeo
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
JinKyoungHeo5.4K views
Google Protocol buffer by knight1128
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
knight112812.9K views
Advanced Python Testing Techniques (Pycon KR 2019) [Korean Ver.] by Jaeman An
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 An547 views
테스터가 말하는 테스트코드 작성 팁과 사례 by SangIn Choung
테스터가 말하는 테스트코드 작성 팁과 사례테스터가 말하는 테스트코드 작성 팁과 사례
테스터가 말하는 테스트코드 작성 팁과 사례
SangIn Choung10.7K views
Sonarqube 20160509 by 영석 조
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
영석 조3.8K views
Cryptol 수업자료 by arundine
Cryptol 수업자료Cryptol 수업자료
Cryptol 수업자료
arundine360 views
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018 by Kenneth Ceyer
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
Kenneth Ceyer3.4K views
Okjsp 13주년 발표자료: 생존 프로그래밍 Test by beom kyun choi
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
beom kyun choi10.3K views
Legacy code refactoring video rental system by Jaehoon Oh
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
Jaehoon Oh3K views
Angular2 가기전 Type script소개 by Dong Jun Kwon
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon2.1K views
Effective unit testing ch3. 테스트더블 by YongEun Choi
Effective unit testing   ch3. 테스트더블Effective unit testing   ch3. 테스트더블
Effective unit testing ch3. 테스트더블
YongEun Choi1.7K views
Clean code chapter9 by ukjinkwoun
Clean code chapter9Clean code chapter9
Clean code chapter9
ukjinkwoun508 views
[2D4]Python에서의 동시성_병렬성 by NAVER D2
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
NAVER D230.5K views

More from PgDay.Seoul

[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization by
[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
238 views107 slides
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기 by
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기PgDay.Seoul
498 views17 slides
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기 by
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기PgDay.Seoul
940 views40 slides
[Pgday.Seoul 2019] Advanced FDW by
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
412 views30 slides
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개 by
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개PgDay.Seoul
3K views13 slides
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha by
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposhaPgDay.Seoul
1.1K views37 slides

More from PgDay.Seoul(19)

[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization by PgDay.Seoul
[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.Seoul238 views
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기 by PgDay.Seoul
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기
PgDay.Seoul498 views
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기 by PgDay.Seoul
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
PgDay.Seoul940 views
[Pgday.Seoul 2019] Advanced FDW by PgDay.Seoul
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
PgDay.Seoul412 views
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개 by PgDay.Seoul
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
PgDay.Seoul3K views
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha by PgDay.Seoul
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
PgDay.Seoul1.1K views
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA by PgDay.Seoul
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
PgDay.Seoul786 views
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기 by PgDay.Seoul
[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
PgDay.Seoul1.2K views
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계 by PgDay.Seoul
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
PgDay.Seoul1.6K views
[Pgday.Seoul 2018] replacing oracle with edb postgres by 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.Seoul606 views
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우 by PgDay.Seoul
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
PgDay.Seoul4.5K views
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종 by PgDay.Seoul
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
PgDay.Seoul434 views
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진 by PgDay.Seoul
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
PgDay.Seoul2.4K views
[Pgday.Seoul 2017] 4. Composite Type/JSON 파라미터를 활용한 TVP구현(with C#, JAVA) - 지현명 by 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.Seoul572 views
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오 by 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.Seoul1.4K views
PostgreSQL 9.6 새 기능 소개 by PgDay.Seoul
PostgreSQL 9.6 새 기능 소개PostgreSQL 9.6 새 기능 소개
PostgreSQL 9.6 새 기능 소개
PgDay.Seoul3.2K views
pg_hba.conf 이야기 by PgDay.Seoul
pg_hba.conf 이야기pg_hba.conf 이야기
pg_hba.conf 이야기
PgDay.Seoul831 views
Pg report 20161010_02 by PgDay.Seoul
Pg report 20161010_02Pg report 20161010_02
Pg report 20161010_02
PgDay.Seoul342 views
PostgreSQL 공간관리 살펴보기 이근오 by PgDay.Seoul
PostgreSQL 공간관리 살펴보기 이근오PostgreSQL 공간관리 살펴보기 이근오
PostgreSQL 공간관리 살펴보기 이근오
PgDay.Seoul2.1K views

[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 테스트 코드로 기여하기