이 페이지에서는 Fess 개발의 표준 워크플로우를 설명합니다. 기능 추가, 버그 수정, 테스트, 코드 리뷰 등 개발 작업 진행 방법을 배울 수 있습니다.
개발 기본 플로우
Fess 개발은 다음과 같은 흐름으로 진행합니다:
각 단계에 대해 자세히 설명합니다.
Step 1: Issue 확인·작성
개발을 시작하기 전에 GitHub의 Issue를 확인합니다.
기존 Issue 확인
Fess의 Issue 페이지 에 접속
작업하고 싶은 Issue 찾기
Issue에 코멘트하여 작업 시작 의사 전달
팁
처음 기여하는 경우 good first issue 라벨이 붙은 Issue부터 시작하는 것을 권장합니다.
새로운 Issue 작성
새로운 기능이나 버그 수정의 경우 Issue를 작성합니다.
New Issue 클릭
Issue 템플릿 선택
필요한 정보 기입:
제목: 간결하고 알기 쉬운 설명
설명: 상세한 배경, 예상되는 동작, 현재 동작
재현 절차: 버그의 경우
환경 정보: OS, Java 버전, Fess 버전 등
Submit new issue클릭
Issue 작성 예시
다음은 Issue를 작성할 때의 예시 형식입니다.
버그 리포트:
기능 요청:
Step 2: 브랜치 생성
작업용 브랜치를 생성합니다.
브랜치 명명 규칙
브랜치명은 다음 형식을 따릅니다:
type 종류:
feature: 새 기능 추가fix: 버그 수정refactor: 리팩토링docs: 문서 업데이트test: 테스트 추가·수정
예:
브랜치 생성 절차
최신 main 브랜치 가져오기:
새 브랜치 생성:
브랜치가 생성되었는지 확인:
Step 3: 코딩
기능 구현이나 버그 수정을 수행합니다.
코딩 규약
Fess 에서는 다음 코딩 규약을 따릅니다.
기본 스타일
인덴트: 공백 4개
줄 길이: 140자 이내 권장
인코딩: UTF-8
개행 코드: LF(Unix 스타일)
명명 규칙
클래스명: PascalCase(예:
SearchService)메서드명: camelCase(예:
executeSearch)상수: UPPER_SNAKE_CASE(예:
MAX_SEARCH_SIZE)변수: camelCase(예:
searchResults)
주석
Javadoc: public 클래스와 메서드에는 필수
구현 주석: 복잡한 로직에는 일본어 또는 영어로 설명 추가
예:
null 처리
가능한 한
null을 반환하지 않음Optional사용 권장null체크는 명시적으로 수행
예:
예외 처리
예외는 적절히 캐치하여 처리
로그 출력 수행
사용자에게 이해하기 쉬운 메시지 제공
예:
로그 출력
적절한 로그 레벨을 사용합니다:
ERROR: 오류 발생 시WARN: 경고해야 할 상황INFO: 중요한 정보DEBUG: 디버그 정보TRACE: 상세 추적 정보
예:
개발 중 테스트
개발 중에는 다음 방법으로 테스트합니다:
로컬 실행
IDE에서 org.codelibs.fess.FessBoot 클래스를 실행하고 동작을 확인합니다. 자세한 내용은 빌드 및 테스트 을 참조하세요.
디버그 실행
IDE의 디버거를 사용하여 코드 동작을 추적합니다.
단위 테스트 실행
변경과 관련된 테스트를 실행합니다:
자세한 내용은 빌드 및 테스트 을 참조하세요.
Step 4: 로컬 테스트 실행
커밋 전에 반드시 테스트를 실행합니다.
단위 테스트 실행
통합 테스트 실행
코드 포맷 검사
모든 검사 실행
Step 5: 커밋
변경 사항을 커밋합니다.
커밋 메시지 규약
커밋 메시지는 다음 형식을 따릅니다:
type 종류:
feat: 새 기능fix: 버그 수정docs: 문서만 변경style: 코드 의미에 영향이 없는 변경(포맷 등)refactor: 리팩토링test: 테스트 추가·수정chore: 빌드 프로세스나 도구 변경
예:
커밋 절차
변경 사항 스테이징:
커밋:
커밋 이력 확인:
커밋 단위
하나의 커밋에는 하나의 논리적 변경 포함
큰 변경은 여러 커밋으로 분할
커밋 메시지는 알기 쉽고 구체적으로
Step 6: 푸시
브랜치를 원격 리포지토리에 푸시합니다.
첫 푸시의 경우:
Step 7: 풀 리퀘스트 작성
GitHub에서 풀 리퀘스트(PR)를 작성합니다.
PR 작성 절차
Fess 리포지토리 에 접속
Pull requests탭 클릭New pull request클릭베이스 브랜치(
main)와 비교 브랜치(작업 브랜치) 선택Create pull request클릭PR 내용 기입(템플릿 따름)
Create pull request클릭
PR 작성 예시
다음은 Pull Request를 작성할 때의 추천 형식입니다.
PR 설명
PR 설명에는 다음을 포함합니다:
변경 목적: 왜 이 변경이 필요한가
변경 내용: 무엇을 변경했는가
테스트 방법: 어떻게 테스트했는가
스크린샷: UI 변경의 경우
Step 8: 코드 리뷰
메인테이너가 코드를 리뷰합니다.
리뷰 관점
리뷰에서는 다음 사항이 체크됩니다:
코드 품질
코딩 규약 준수
테스트 충실도
성능에 대한 영향
보안 문제
문서 업데이트
리뷰 코멘트 예
승인:
수정 요청:
제안:
Step 9: 리뷰 피드백 대응
리뷰 코멘트에 대응합니다.
피드백 대응 절차
리뷰 코멘트 읽기
필요한 수정 수행
변경 사항 커밋:
푸시:
PR 페이지에서 코멘트에 답변
코멘트 답변
리뷰 코멘트에는 반드시 답변합니다:
또는:
Step 10: 병합
리뷰가 승인되면 메인테이너가 PR을 병합합니다.
병합 후 대응
로컬 main 브랜치 업데이트:
작업 브랜치 삭제:
원격 브랜치 삭제(GitHub에서 자동 삭제되지 않은 경우):
자주 발생하는 개발 시나리오
기능 추가
Issue 작성(또는 기존 Issue 확인)
브랜치 생성:
feature/xxx-description기능 구현
테스트 추가
문서 업데이트
PR 작성
버그 수정
버그 리포트 Issue 확인
브랜치 생성:
fix/xxx-description버그를 재현하는 테스트 추가
버그 수정
테스트가 통과하는지 확인
PR 작성
리팩토링
Issue 작성(리팩토링 이유 설명)
브랜치 생성:
refactor/xxx-description리팩토링 실행
기존 테스트가 통과하는지 확인
PR 작성
문서 업데이트
브랜치 생성:
docs/xxx-description문서 업데이트
PR 작성
개발 팁
효율적인 개발
작은 커밋: 자주 커밋
초기 피드백: Draft PR 활용
테스트 자동화: CI/CD 활용
코드 리뷰: 다른 사람의 코드도 리뷰
문제 해결
어려움이 있을 때는 다음을 활용합니다:
GitHub의 Issue 코멘트
다음 단계
워크플로우를 이해했다면 다음 문서도 참조하세요:
빌드 및 테스트 - 빌드 및 테스트 상세
기여 가이드 - 기여 가이드라인
아키텍처 및 코드 구조 - 코드베이스 이해