/* 프로젝트 상세 조회 */
@Override
@Transactional
public Response getProject(Map<String, String> headers, ProjectGetRequestDto projectGetRequestDto) {
validateUser(headers);
Project project = validateProjectAndAuth(headers, Long.valueOf(projectGetRequestDto.getBody().getProjectId()));
GetProjectResponseDto getProjectResponseDto = GetProjectResponseDto.builder()
.projectInfo(ProjectResponseDto.builder()
.id(project.getId())
.projectName(project.getProjectName())
.menuName(project.getMenuName())
.description(project.getDescription())
.uiTemplate(project.getUiTemplate())
.version(project.getVersion())
.updateTime(project.getUpdateTime())
.status(project.getStatus())
.currentStage(project.getCurrentStage())
.build()
)
.contentList(orderStatusRepository.findByProject(project).orElse(null))
.conditionList(searchConditionRepository.findByProject(project).orElse(null))
.build();
return buildResponse(project);
}
프로젝트의 projectInfo처럼 builder 패턴을 사용하여 데이터를 넣는 방법과 repository에서 조회하여 contentList, conditionList에 데이터를 넣는 방법 중 어느 것이 더 속도나 성능 면에서 좋은지에 대해 설명드리겠습니다.
1. Builder 패턴을 사용하여 데이터 넣기
- 장점:
- 가독성: 코드가 명확해지고 읽기 쉽습니다.
- 불변성: 객체가 불변(immutable)인 경우 안전합니다.
- 유지보수성: 객체의 생성과 관련된 복잡성을 숨길 수 있어 유지보수가 용이합니다.
- 단점:
- 성능: 빌더 패턴은 일반적으로 추가적인 메모리 할당과 메서드 호출을 수반하므로 약간의 오버헤드가 발생할 수 있습니다.
2. Repository에서 데이터 조회하여 리스트에 넣기
- 장점:
- 성능: Repository에서 데이터를 직접 조회하여 할당하는 것이기 때문에 불필요한 메서드 호출을 줄일 수 있습니다.
- 간결성: 단순한 데이터 조회 및 할당이기 때문에 코드가 단순할 수 있습니다.
- 단점:
- 가독성: 빌더 패턴만큼 가독성이 높지 않을 수 있습니다.
- 유지보수성: 데이터 할당 로직이 분산될 수 있습니다.
성능 비교
- 데이터 양이 적을 때:
- 빌더 패턴의 오버헤드가 거의 무시할 수 있는 수준이기 때문에 가독성과 유지보수성 측면에서 빌더 패턴을 사용하는 것이 좋습니다.
- 데이터 양이 많을 때:
- 성능 최적화가 필요하다면 빌더 패턴보다는 repository에서 조회한 데이터를 직접 할당하는 방식이 더 나을 수 있습니다. 이는 빌더 패턴의 오버헤드가 누적될 수 있기 때문입니다.
결론
일반적으로는 빌더 패턴을 사용하는 것이 가독성과 유지보수성 측면에서 유리합니다. 그러나 성능이 중요한 경우에는 데이터를 직접 할당하는 방법이 더 나을 수 있습니다. 프로젝트의 특정 요구사항과 데이터 양에 따라 적절한 방법을 선택하는 것이 중요합니다.