답변에 포함해야 할 키워드
- 단위 테스트(Unit Test): 코드의 개별 단위를 테스트
- 통합 테스트(Integration Test): 여러 모듈이 함께 동작하는지 확인
- TDD(Test Driven Development): 테스트를 먼저 작성하고 기능을 구현하는 방식
- 디버깅(Debugging): 코드 실행 중 발생하는 오류를 찾고 수정하는 과정
- 로깅(logging): 서버 애플리케이션에서 발생하는 로그 기록 및 분석
- 테스트 자동화를 구현하는 방법과 이를 통해 얻을 수 있는 이점에 대해 설명해주세요
- 성능 테스트와 부하 테스트의 차이점을 설명해주세요
- 버그가 발생했을 때 이를 추적하는 방법과 해결 과정에 대해 설명해주세요
- 코드 품질을 유지하기 위한 정적 분석 도구를 사용한 경험이 있나요? 이를 어떻게 활용했는지 설명해주세요
- 데이터베스에서 발생하는 성능 문제를 디버깅한 경험을 설명해주세요.
1. 테스트 자동화
테스트 자동화를 구현하는 방법과 이를 통해 얻을 수 있는 이점에 대해 설명해주세요
테스트 자동화란?
- 소프트웨어의 기능과 성능을 검증하기 위해 테스트 스크립트를 작성하고 이를 자동으로 실행하는 방식
- 일반적으로 테스트 프레임 워크, 도구, 스크립트를 활용
- 수동 테스트 과정을 줄이고 반복적인 테스트 작업을 자동화함으써 효율성을 높임
주요 유형
- 단위 테스트
- 개별 모듈이나 함수가 예상대로 동작하는지 확인하는 테스트
- JUnit 등의 프레임워크 활용
- 통합 테스트
- 여러 모듈이 함께 동작할 때 정상적으로 작동하는지 확인
- @SpringBootTest 같은 기능을 활용
- API 테스트
- RESTful API가 올바르게 응답하는지 검증하는 테스트
- Postman 등을 활용
- 부하 테스트
- 시스템이 많은 사용자 요청을 받을 때 성능을 유지하는지 확인
- JMeter
테스트 자동화를 통해 얻을 수 있는 이점
- 신속한 피드백 제공
- 품질 향상 : 수동 테스트에서 발생하는 실수를 줄이고 테스트 커버리지를 높일 수 있음
- 개발 속도 향상 : CI/CD와 함께 테스트가 자동 실행되어 배포 속도 증가
- 비용 절감 : 수동 테스트 인력과 시간 절약
- 다양한 환경에서 테스트 가능
- 문서화 대체 효과
고려해야 할 점
- 초기 구축 비용, 학습 곡선
- 테스트 유지보수
- 테스트 전략 수립
2. 성능 테스트와 부하 테스트
성능 테스트와 부하 테스트의 차이점을 설명해주세요
성능 테스트
- 애플리케이션이 정상적인 조건에서 얼마나 빠르게 동작하는지 평가하는 테스트
- 시스템이 요구하는 성능을 충족하는지 확인
- 응답시간, 처리량, 리소스 사용량 등을 측정
- 일반적인 사용 환경에서 애플리케이션이 원활하게 동작하는지 평가
- 방법 : **단일 사용자 테스트, 다중 사용자 테스트
- 도구 : JMeter, Gatling
- 장점
- 병목 현상 발생 가능
- 명확한 수치를 기반으로 성능 개선 가능
- 시스템의 안정성과 신뢰도 높이는 데 도움
- 단점
- 비정상적인 과부하 상황까지 테스트 하지 않아 실제 장애를 예측하기 어려움
- 일반적인 사용환경을 가정하기 때문에 극단적인 상황 반영 X
부하 테스트
- 애플리케이션이 최대 허용 사용량까지 견딜 수 있는지 테스트
- 예상되는 사용자 수와 트래픽이 발생할 때 시스템이 정상적으로 운영되는지 확인
- 부하 임계점을 측정
- 급격한 트래픽 증가에도 시스템이 안정적으로 작동할수 있는지 평가
- 방법 : 점진적 부하 테스트, 최대 부하 테스트, 동시 접속 테스트
- 도구 : JMeter, Gatling
- 장점
- 예상되는 실제 트래픽에서 시스템이 버틸 수 있는지 평가 가능
- 고부하 상황에서도 안정적으로 운영될 수 있도록 대비 가능
- 단점
- 테스트 환경이 실제 운영 환경과 다르면 정확한 결과를 얻기 어려움
성능 테스트는 일반적인 환경에서 시스템이 원활하게 작동하는지 평가, 부하 테스트는 최대 사용량까지 시스템이 안정적으로 버틸 수 있는지 평가하는것이 핵심 차이점
3. 버그 발생 시 추적 방법과 해결 과정
버그가 발생했을 때 이를 추적하는 방법과 해결 과정에 대해 설명해주세요
버그 추적 방법
- 버그 발생 감지 및 로그 수집
- 사용자 보고, 로그 분석, 모니터링 시스템, 에러 트래킹 도구 등 활용
- 버그 재현 및 환경 파악
- 버그 발생 환경 확인
- 재현 테스트
- 테스트 케이스 추가
- 로그 및 에러 메시지 분석
- 예외 메시지 확인
- 로그 분석 도구 활용
버그 해결 과정
- 문제 원인 분석
- 코드 디버깅
- 데이터 베이스 확인 - 데이터 일관성 검토
- 버그 수정
- 소스 코드 수정
- 리팩토링
- 테스트 및 배포
- 재발 방지
- 자동화 테스트 추가
- 모니터링 강화
4. 정적 분석 도구
코드 품질을 유지하기 위한 정적 분석 도구를 사용한 경험이 있나요? 이를 어떻게 활용했는지 설명해주세요
정적 분석 기법
- 소스 코드의 실행 없이 코드의 의미를 분석해 결함을 찾아내는 코드 분석 기법
사용 이유
- 일반적인 과정 : 코드 작성 후 compile error 발견시 코드 수정
- 정적 분석 도구 : compile error가 발견되지 않더라도 결함이 있는지 추가 확인
장점
- 테스팅 단계에서의 부담을 줄이고 높은 품질의 소프트웨어 출시가 가능하게 됨
- 코드 품질 향상
- 보안 강화
- 코드 표준화
도구
- PMD