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 혹시 다른 방법은 없을까? 고민 하신분
이런 분들께 추천 드려요!
원리에 집중해서 문제를 해결할 수 있는 기본을 탄탄하게!