Hacktoberfest 3주차에 저는 작지만 유망한 프로젝트인 온라인 경매 시스템에 기여하기로 결정했습니다. 프로젝트는 아직 초기 단계이지만 이미 성장 가능성을 보여주고 있으며 코드베이스를 개선하는 데 도움을 줄 수 있는 기회를 보았습니다. 제가 맡은 임무는 중복되는 코드를 줄이고 전체 구조를 개선하여 프로젝트를 리팩토링하여 유지 관리 및 확장성을 높이는 것이었습니다.
내 작업의 핵심 목표는 반복적인 코드 패턴을 식별하고 이를 리팩토링하여 코드베이스를 더욱 깔끔하고 유지 관리하기 쉽게 만드는 것이었습니다. 코드 중복으로 인해 불일치가 발생하고 향후 업데이트가 더 어려워지며 버그 발생 가능성이 높아질 수 있습니다. 코드를 간소화하여 기능 변경 없이 효율성을 높이는 것을 목표로 삼았습니다.
1. 중앙 집중식 비동기 오류 처리: Express.js 프로젝트의 일반적인 문제 중 하나는 비동기 경로의 오류를 처리하기 위한 반복적인 try-catch 블록입니다. 이 문제를 해결하기 위해 모든 비동기 함수를 래핑하여 모든 오류를 자동으로 포착하고 앱 전체에서 일관되게 처리하는 asyncHandler라는 유틸리티 함수를 도입했습니다.
// utils/asyncHandler.js const asyncHandler = (fn, errorMessage = "Internal server error") => (req, res, next) => Promise.resolve(fn(req, res, next)).catch((error) => { console.error(`Error: ${error.message}`); res.status(500).json({ error: errorMessage }); }); module.exports = asyncHandler;
이러한 변경으로 중복된 try-catch 블록이 제거되었을 뿐만 아니라 코드가 더 깔끔해지고 오류 처리보다는 비즈니스 로직에 더욱 집중하게 되었습니다.
2. 데이터베이스 유틸리티 기능: 이 프로젝트에는 데이터베이스와 직접 상호 작용하는 여러 경로가 있었으며 종종 비슷한 쿼리를 반복했습니다. 중복성을 줄이기 위해 구매자 정보 가져오기 또는 거래 검색과 같은 일반적인 데이터베이스 쿼리를 처리하는 재사용 가능한 유틸리티 기능 세트를 만들었습니다.
// utils/dbUtils.js const getBuyerById = async (buyerId) => { const query = "SELECT * FROM Buyers WHERE Buyer_ID = "; const { rows } = await pool.query(query, [buyerId]); return rows.length > 0 ? rows[0] : null; }; const getTransactionsByBuyerId = async (buyerId) => { const query = "SELECT * FROM Transactions WHERE Buyer_ID = "; const { rows } = await pool.query(query, [buyerId]); return rows; }; module.exports = { getBuyerById, getTransactionsByBuyerId };
이제 각 경로에서 직접 SQL 쿼리를 작성하는 대신 코드베이스가 이러한 유틸리티 기능을 활용하여 중복을 줄이고 로직을 더 쉽게 관리할 수 있습니다.
3. 통합 응답 처리: 또 다른 개선 영역은 응답 처리였습니다. 여러 경로에는 성공 및 오류 응답 전송 패턴이 일관되지 않았습니다. 이를 표준화하기 위해 send404, send500, sendSuccess와 같은 유틸리티 함수를 도입했습니다.
아직 초기 단계이기 때문에 쉽게 만들 수 있었던 POST, DELETE, PUT과 같은 경로가 누락된 것을 발견했습니다. 하지만 저는 제가 요청한 이슈만 고수하기로 결정했습니다.
댓글로 알려주세요. 더 많은 기여를 할 수 있는 이런 상황을 보통 어떻게 처리하시나요? 새 이슈를 여시나요, 그냥 만들고 끌어오기 요청을 하시나요? 당신의 경험담을 읽고 싶습니다.
위 내용은 Hacktoberfest Week 온라인 경매 시스템의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!