SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
리팩터링을 통한 내실 다지기
#리팩터링 #코드리뷰 #내실다지기 #ForTeam
김동현
목차
1. 시작하게 된 계기
2. 리팩터링
3. 컨벤션과 의존성 관리
4. 모듈화
5. 느낀 점
2
1. 시작하게 된 계기
1. 시작하게 된 계기
1st P-Stage 마스크 미착용 이미지 분류
- 첫 대회가 끝났는데,, 아직 흐름을 모르겠다..
2nd P-Stage KLUE/Relation-Extraction
- 관계 추출 텍스트의 Input은 어떻게 되고 Output은 어떻게 되는 거지? 잘 모르겠는데..
3rd P-Stage Open Domain Question Answering
- ODQA 너무 큰 사이즈의 프로젝트지! Retrieval만 맡아서 해서 Reader를 잘 모르겠어..
4
리팩토링을 통한 내실 다지기 시작
P Stage 가 끝날때마다 개인 회고를 해보니.. 결국 다시 코드를 보는 것이 좋겠다!
1. 시작하게 된 계기
5
내부공사 부실.. 심지어 버그까지?
내가 만든 코드! 리팩터링을 하려고보니..
2. 리팩터링
2. 리팩터링
• 리팩터링(refactoring)이란?
소프트 웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다.
• 왜 하나요?
주로 가독성을 높이고 유지보수를 편하게 한다.
• 어떤 식으로 하나요?
사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다.
> 구현된 코드를 더 예쁘게!
> 서로 읽기 편하고 다시 사용하기 편하게!
> 구조적인 프로젝트로 한눈에 보기 쉽고 깔끔하게!
7
2. 리팩터링
8
예쁘게, PEP8을 참고해 보아요
서로 읽기 편하게, I/O 타입의 힌트와 Docstring을 적어 보아요
구조적으로, 컨벤션과 모듈화를 통해 구조를 관리해 보아요
2. 리팩터링
9
예쁘게
2. 리팩터링
10
1. Type hinting
I/O 의 객체 타입을 명시하기
2. Doc string
Input과 output의 정보 적어 주기
3. Comments
흐름이나 섹션 표시 하기
4. Logging
print는 이제 그만! 파일에도, 콘솔에도!
※ 제가 작성한 코드입니다
서로 읽기 편하게
3. 컨벤션과 의존성 관리
3. 컨벤션과 의존성 관리
12
- Poetry, conda environment를 활용!
- 장점 : Poetry를 활용해서 팀원들의 dependency를 맞출 수 있다.
- 단점 : Poetry의 특성상 기존의 패키지 자체가 의존성이 깨질 경우에는 보전하지 못한다..
방법 : Poetry로 환경 설정하기
구조적으로
3. 컨벤션과 의존성 관리
13
3. 컨벤션과 의존성 관리
14
- 컨벤션 : 우리끼리 “~~~”로 약속해~
- git commit 컨벤션
- feat) “~” : 기능이 추가되었을 경우 함수 단위로 적용
- fix) “~” : Confilct나 version 차이, 의도 하지 않는 버그를 수정한 경우
- refact) : 복잡한 분기나 루프를 발견하고 이를 같은 기능으로 처리하였을 때
- etc) : 그 외 설명하기 모호하거나 큰 내용이 없는 경우
- Git branch 전략
- feature/ : 기능 개발중인 브랜치
- exp/ : 전처리 / 모델을 다양하게 실험중인 경우
- etc/ : 그 외 설명하기 모호하거나 큰 내용이 없는 경우
구조적으로
3. 컨벤션과 의존성 관리
15
- Conda env
- Conda command를 활용 하는 shell
- 다른 가상환경으로 대체 가능함
- Poetry
- 의존성 관리 도구
- pyproject.toml 파일을 통해 관리함
구조적으로
4. 모듈화
4. 모듈화
17
- 실행파일 vs 모듈
- 실행 파일은 프로젝트의 최상위 폴더에 존재 하도록
- 실행 파일의 이름은 직관적으로
- 모듈 이름 정하기
- 비슷한 역할을 하는 함수들을 묶어서 하나의 모듈로써 관리
- 모듈에서 애매한 부분이 있다면 utills로 빼서 관리
구조적으로
5. 느낀 점
5. 느낀 점
19
1. 팀원과 코드 리뷰에 수월(★ ★ ★)하게!
내가 짠 코드가 클린 코드인지 아닌지
2. 전체 흐름을 경험 할 수 있어 실력 향상에 큰 도움(★ ★ ★ ★ ★)
3. 새로운 비둘기(버그)를 탐색 할 수 있음(★ ★ ★)
4. 구조적으로 만들어져서 파악하기 쉬움(★ ★ ★ ★)
이런 점이 좋았어요!
5. 느낀 점
20
1. 허겁지겁 실험하다가 코드를 제대로 보지 못해서 흐름을 보고싶다!
데이터 플로우는 확실하게 보입니다
2. LineByLine으로 코드 자체를 이해하고 싶다!
이것저것 바꾸다가 막히는 에러 난 것만 다 처리해도 성공!
3. 코드라인을 예쁘게 줄여보고싶다!
if,if,if,if 혹시 다른 방법은 없을까? 고민 하신분
이런 분들께 추천 드려요!
원리에 집중해서 문제를 해결할 수 있는 기본을 탄탄하게!
감사합니다
21
Q&A
22

Contenu connexe

Tendances

Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법YoungSu Son
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
112 deview
112 deview112 deview
112 deviewNAVER D2
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월월간 IT 슬라이드
 
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQtPyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt덕규 임
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스Dexter Jung
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Han Sung Kim
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Dong Chan Shin
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서Kyoung Up Jung
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅흥배 최
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능Dexter Jung
 
2017 새싹교실 1교시
2017 새싹교실 1교시2017 새싹교실 1교시
2017 새싹교실 1교시Han Sung Kim
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기Heo Seungwook
 
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)Jaewon Choi
 

Tendances (20)

Doxygen 사용법
Doxygen 사용법Doxygen 사용법
Doxygen 사용법
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
112 deview
112 deview112 deview
112 deview
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
 
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQtPyCon 2015 - 업무에서 빠르게 활용하는 PyQt
PyCon 2015 - 업무에서 빠르게 활용하는 PyQt
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1Project anarchy로 3 d 게임 만들기 part_1
Project anarchy로 3 d 게임 만들기 part_1
 
Django개발은 PyCharm에서
Django개발은 PyCharm에서Django개발은 PyCharm에서
Django개발은 PyCharm에서
 
KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅KGC10 - Visual C++10과 디버깅
KGC10 - Visual C++10과 디버깅
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
2017 새싹교실 1교시
2017 새싹교실 1교시2017 새싹교실 1교시
2017 새싹교실 1교시
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기리펙토링 4장 테스트만들기
리펙토링 4장 테스트만들기
 
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
오픈소스 소프트웨어 개발, 어디서부터 시작하는게 좋을까요? @ CNU(충남대)
 

Similaire à [부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기

[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXTMinsuk Lee
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdfeastarJeong2
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장 Shin heemin
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Dong Chan Shin
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating IntroductionJongwook Choi
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Suho Lee
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
2015.08.01 회사원쪼꼬두유
2015.08.01 회사원쪼꼬두유2015.08.01 회사원쪼꼬두유
2015.08.01 회사원쪼꼬두유은아 정
 
3주차 language
3주차 language3주차 language
3주차 language준혁 이
 
Why Functional Programming Matters
Why Functional Programming MattersWhy Functional Programming Matters
Why Functional Programming MattersLee WonJae
 
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...Lablup Inc.
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)NAVER D2
 

Similaire à [부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기 (20)

[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬Effective c++ chapter5 6_ 131039 신동찬
Effective c++ chapter5 6_ 131039 신동찬
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
Git: A Motivating Introduction
Git: A Motivating IntroductionGit: A Motivating Introduction
Git: A Motivating Introduction
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
2015.08.01 회사원쪼꼬두유
2015.08.01 회사원쪼꼬두유2015.08.01 회사원쪼꼬두유
2015.08.01 회사원쪼꼬두유
 
5 6 1
5 6 15 6 1
5 6 1
 
3주차 language
3주차 language3주차 language
3주차 language
 
Why Functional Programming Matters
Why Functional Programming MattersWhy Functional Programming Matters
Why Functional Programming Matters
 
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
JMI Techtalk: 강재욱 - Toward tf.keras from tf.estimator - From TensorFlow 2.0 p...
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 

Plus de CONNECT FOUNDATION

부스트캠프 웹・모바일 8기 설명회 (2023년)
부스트캠프 웹・모바일 8기 설명회 (2023년)부스트캠프 웹・모바일 8기 설명회 (2023년)
부스트캠프 웹・모바일 8기 설명회 (2023년)CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspendCONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는  어떻게  재활용하는가[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는  어떻게  재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍CONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_RecoilCONNECT FOUNDATION
 
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까CONNECT FOUNDATION
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)CONNECT FOUNDATION
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
 [특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti) [특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)CONNECT FOUNDATION
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)CONNECT FOUNDATION
 
부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회CONNECT FOUNDATION
 
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 배지연_Structure of Model and TaskCONNECT FOUNDATION
 
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 신원지_Wandb Visualization[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 신원지_Wandb VisualizationCONNECT FOUNDATION
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기CONNECT FOUNDATION
 
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy StuffCONNECT FOUNDATION
 
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기
[부스트캠프 Tech talk] 황우진  딥러닝 가볍게 구현해보기[부스트캠프 Tech talk] 황우진  딥러닝 가볍게 구현해보기
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기CONNECT FOUNDATION
 
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로
[부스트캠프 Tech talk] 최영근  80x24 크기의 세계로[부스트캠프 Tech talk] 최영근  80x24 크기의 세계로
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로CONNECT FOUNDATION
 

Plus de CONNECT FOUNDATION (20)

부스트캠프 웹・모바일 8기 설명회 (2023년)
부스트캠프 웹・모바일 8기 설명회 (2023년)부스트캠프 웹・모바일 8기 설명회 (2023년)
부스트캠프 웹・모바일 8기 설명회 (2023년)
 
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
[부스트캠프 웹・모바일 7기 Tech Talk]임현택_OS 그냥 재미로
 
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
[부스트캠프 웹・모바일 7기 Tech Talk]이지훈_뉴비의 시점에서 바라본 Kotlin_suspend
 
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
[부스트캠프 웹・모바일 7기 Tech Talk]오승민_Swift의 Protocol에는 감동이 있다
 
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
[부스트캠프 웹・모바일 7기 Tech Talk]안병준_프론트엔드,어쩌다 여기까지
 
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
[부스트캠프 웹・모바일 7기 Tech Talk]이휘찬-의존성 관리 어디까지 알고있니
 
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는  어떻게  재활용하는가[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는  어떻게  재활용하는가
[부스트캠프 웹・모바일 7기 Tech Talk]박명범_RecyclerView는 어떻게 재활용하는가
 
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
[부스트캠프 웹・모바일 7기 Tech Talk]김지원_너와 나의 함수형 프로그래밍
 
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
[부스트캠프 웹・모바일 7기 Tech Talk]김성은_Recoil
 
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
 [특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti) [특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노수진(Momenti)
 
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
[특강] 현업 개발자에게 듣는 모바일 개발자의 삶과 매력 / 노현석(카카오뱅크)
 
부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회부스트캠프 웹∙모바일 7기 설명회
부스트캠프 웹∙모바일 7기 설명회
 
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
[부스트캠프 Tech Talk] 배지연_Structure of Model and Task
 
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 신원지_Wandb Visualization[부스트캠프 Tech Talk] 신원지_Wandb Visualization
[부스트캠프 Tech Talk] 신원지_Wandb Visualization
 
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
 
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
[부스트캠프 Tech Talk] 안영진_Tackling Complexity with Easy Stuff
 
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기
[부스트캠프 Tech talk] 황우진  딥러닝 가볍게 구현해보기[부스트캠프 Tech talk] 황우진  딥러닝 가볍게 구현해보기
[부스트캠프 Tech talk] 황우진 딥러닝 가볍게 구현해보기
 
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로
[부스트캠프 Tech talk] 최영근  80x24 크기의 세계로[부스트캠프 Tech talk] 최영근  80x24 크기의 세계로
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로
 

[부스트캠프 Tech Talk] 김동현_리팩터링을 통한 내실 다지기

  • 1. 리팩터링을 통한 내실 다지기 #리팩터링 #코드리뷰 #내실다지기 #ForTeam 김동현
  • 2. 목차 1. 시작하게 된 계기 2. 리팩터링 3. 컨벤션과 의존성 관리 4. 모듈화 5. 느낀 점 2
  • 4. 1. 시작하게 된 계기 1st P-Stage 마스크 미착용 이미지 분류 - 첫 대회가 끝났는데,, 아직 흐름을 모르겠다.. 2nd P-Stage KLUE/Relation-Extraction - 관계 추출 텍스트의 Input은 어떻게 되고 Output은 어떻게 되는 거지? 잘 모르겠는데.. 3rd P-Stage Open Domain Question Answering - ODQA 너무 큰 사이즈의 프로젝트지! Retrieval만 맡아서 해서 Reader를 잘 모르겠어.. 4 리팩토링을 통한 내실 다지기 시작 P Stage 가 끝날때마다 개인 회고를 해보니.. 결국 다시 코드를 보는 것이 좋겠다!
  • 5. 1. 시작하게 된 계기 5 내부공사 부실.. 심지어 버그까지? 내가 만든 코드! 리팩터링을 하려고보니..
  • 7. 2. 리팩터링 • 리팩터링(refactoring)이란? 소프트 웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. • 왜 하나요? 주로 가독성을 높이고 유지보수를 편하게 한다. • 어떤 식으로 하나요? 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다. > 구현된 코드를 더 예쁘게! > 서로 읽기 편하고 다시 사용하기 편하게! > 구조적인 프로젝트로 한눈에 보기 쉽고 깔끔하게! 7
  • 8. 2. 리팩터링 8 예쁘게, PEP8을 참고해 보아요 서로 읽기 편하게, I/O 타입의 힌트와 Docstring을 적어 보아요 구조적으로, 컨벤션과 모듈화를 통해 구조를 관리해 보아요
  • 10. 2. 리팩터링 10 1. Type hinting I/O 의 객체 타입을 명시하기 2. Doc string Input과 output의 정보 적어 주기 3. Comments 흐름이나 섹션 표시 하기 4. Logging print는 이제 그만! 파일에도, 콘솔에도! ※ 제가 작성한 코드입니다 서로 읽기 편하게
  • 12. 3. 컨벤션과 의존성 관리 12 - Poetry, conda environment를 활용! - 장점 : Poetry를 활용해서 팀원들의 dependency를 맞출 수 있다. - 단점 : Poetry의 특성상 기존의 패키지 자체가 의존성이 깨질 경우에는 보전하지 못한다.. 방법 : Poetry로 환경 설정하기 구조적으로
  • 14. 3. 컨벤션과 의존성 관리 14 - 컨벤션 : 우리끼리 “~~~”로 약속해~ - git commit 컨벤션 - feat) “~” : 기능이 추가되었을 경우 함수 단위로 적용 - fix) “~” : Confilct나 version 차이, 의도 하지 않는 버그를 수정한 경우 - refact) : 복잡한 분기나 루프를 발견하고 이를 같은 기능으로 처리하였을 때 - etc) : 그 외 설명하기 모호하거나 큰 내용이 없는 경우 - Git branch 전략 - feature/ : 기능 개발중인 브랜치 - exp/ : 전처리 / 모델을 다양하게 실험중인 경우 - etc/ : 그 외 설명하기 모호하거나 큰 내용이 없는 경우 구조적으로
  • 15. 3. 컨벤션과 의존성 관리 15 - Conda env - Conda command를 활용 하는 shell - 다른 가상환경으로 대체 가능함 - Poetry - 의존성 관리 도구 - pyproject.toml 파일을 통해 관리함 구조적으로
  • 17. 4. 모듈화 17 - 실행파일 vs 모듈 - 실행 파일은 프로젝트의 최상위 폴더에 존재 하도록 - 실행 파일의 이름은 직관적으로 - 모듈 이름 정하기 - 비슷한 역할을 하는 함수들을 묶어서 하나의 모듈로써 관리 - 모듈에서 애매한 부분이 있다면 utills로 빼서 관리 구조적으로
  • 19. 5. 느낀 점 19 1. 팀원과 코드 리뷰에 수월(★ ★ ★)하게! 내가 짠 코드가 클린 코드인지 아닌지 2. 전체 흐름을 경험 할 수 있어 실력 향상에 큰 도움(★ ★ ★ ★ ★) 3. 새로운 비둘기(버그)를 탐색 할 수 있음(★ ★ ★) 4. 구조적으로 만들어져서 파악하기 쉬움(★ ★ ★ ★) 이런 점이 좋았어요!
  • 20. 5. 느낀 점 20 1. 허겁지겁 실험하다가 코드를 제대로 보지 못해서 흐름을 보고싶다! 데이터 플로우는 확실하게 보입니다 2. LineByLine으로 코드 자체를 이해하고 싶다! 이것저것 바꾸다가 막히는 에러 난 것만 다 처리해도 성공! 3. 코드라인을 예쁘게 줄여보고싶다! if,if,if,if 혹시 다른 방법은 없을까? 고민 하신분 이런 분들께 추천 드려요! 원리에 집중해서 문제를 해결할 수 있는 기본을 탄탄하게!