문제 개요
이번 프로젝트에서 Spring Boot와 JDBC를 이용하여 일정 관리 API를 구현하면서 다양한 문제와 이슈를 경험하였다. 이 문서는 발생한 문제의 원인과 해결 방법을 정리하여, 향후 유사한 상황에서 빠르게 대응할 수 있도록 도움을 주기 위해 작성되었다.
발생한 문제 및 해결 방법
2.1. 데이터베이스 연결 실패
문제 설명
데이터베이스에 연결할 수 없는 경우, 애플리케이션이 시작되지 않거나 SQL 쿼리 실행 중에 예외가 발생하였다.
원인
데이터베이스 URL, 사용자명 또는 비밀번호가 잘못 설정되어 있거나
데이터베이스 서버가 실행되고 있지 않거나
방화벽 설정으로 인해 연결이 차단되었을 가능성이 있다.
해결 방법
application.properties 파일을 확인하여 데이터베이스 URL, 사용자명, 비밀번호가 올바른지 검토하였다.
데이터베이스 서버가 정상적으로 실행되고 있는지 확인하였다.
방화벽 설정을 점검하여 필요한 포트(예: 3306 for MySQL)가 열려 있는지 확인하였다.
2.2. SQL 쿼리 오류
문제 설명
SQL 쿼리를 실행할 때 SQLException이 발생하여 일정을 조회하거나 삽입할 수 없었다.
원인
SQL 문법 오류, 테이블 또는 컬럼 이름 오타
데이터 타입 불일치(예: Long 타입에 문자열 삽입 시도)
해결 방법
SQL 쿼리 문법을 재검토하고, DB에 해당 테이블과 컬럼이 존재하는지 확인하였다.
데이터 타입이 맞는지 확인하고, 필요시 데이터 변환 코드를 추가하였다.
2.3. NullPointerException 발생
문제 설명
일정을 조회하거나 수정할 때 NullPointerException이 발생하였다.
원인
findById 메서드에서 resultSet.next()가 false일 경우, null을 반환하는 것을 제대로 처리하지 않아서 발생하였다.
해결 방법
findById 메서드에서 null 체크를 추가하여, 해당 ID가 존재하지 않을 경우 적절한 예외를 발생시키도록 수정하였다.
예외 처리 로직을 강화하여 클라이언트에게 명확한 오류 메시지를 전달하였다.
2.4. 데이터 중복 삽입
문제 설명
동일한 데이터가 데이터베이스에 중복으로 삽입되는 경우가 발생하였다.
원인
클라이언트에서 API 요청을 여러 번 전송하거나, 사용자가 버튼을 여러 번 클릭하여 요청이 중복되어 발생할 수 있다.
해결 방법
API 요청 처리 시 중복 요청 방지를 위한 논리를 추가하여, 요청이 들어오면 데이터베이스에서 중복 여부를 확인하고, 중복된 경우 적절한 오류 메시지를 반환하도록 하였다.
클라이언트 측에서도 버튼 클릭 시 임시 비활성화하여 중복 전송을 방지하도록 개선하였다.
2.5. 보안 문제
문제 설명
비밀번호가 평문으로 저장되고, 외부에 노출될 수 있는 위험이 있었다.
원인
비밀번호 해싱 및 암호화 처리 로직이 없어서 발생하였다.
해결 방법
BCrypt와 같은 해싱 알고리즘을 사용하여 비밀번호를 안전하게 해싱한 후 저장하도록 구현하였다.
API 요청 시 클라이언트에서 전달된 비밀번호와 데이터베이스에 저장된 해시된 비밀번호를 비교하는 로직을 추가하였다.
2.6. API 문서화 부족
문제 설명
API 사용자가 요청 및 응답 형식에 대한 정보를 알지 못하여 혼란을 겪었다.
원인
API 문서가 부족하거나, Swagger와 같은 문서화 도구를 사용하지 않았기 때문이었다.
해결 방법
Swagger를 이용하여 API 문서화를 진행하였고, 각 API의 요청 및 응답 형식을 명확히 기재하였다.
API 사용 매뉴얼을 작성하여 팀원들과 공유하여 혼란을 최소화하였다.
3. 결론
이번 프로젝트를 통해 다양한 문제를 경험하고, 이를 해결하면서 많은 것을 배웠다. 데이터베이스 연결 문제부터 보안 문제까지 다양한 이슈가 발생하였지만, 체계적인 접근 방식과 문제 해결 과정을 통해 모두 해결할 수 있었다. 향후 프로젝트에서 유사한 문제를 예방하기 위해, 사전에 충분한 테스트 및 검토 과정을 거치는 것이 중요하다는 점을 다시 한 번 깨달았다.
또한, 지속적으로 코드의 품질을 높이기 위한 개선 작업을 진행하고, 보안을 강화하는 방향으로 나아갈 예정이다.