++/CS

[TIL] CS공부 10일차

writtenbyrla 2024. 3. 15. 11:09

테스트 코드를 사용하지 않고 기능 테스트를 했던 경험을 상세하게 설명해주세요

부족한 부분이 있었다면 어떠한 부분이 부족했는지 설명해주세요

테스트 코드를 작성하지 않고 Postman을 이용해 API 요청 시 상태코드와 반환되는 body값이 예상과 같은지 확인하는 방식으로 테스트하였습니다.

데이터 세팅의 번거로움
테스트를 위해 매번 수동으로 데이터를 생성하고 업데이트해야 하므로 테스트의 일관성과 효율성이 떨어진다고 느꼈습니다.

디버깅의 어려움
오류가 발생했을 때 정확한 원인을 파악하기가 어려웠습니다. 컨트롤러나 서비스 계층에서 디버깅하거나 직접 로깅을 해서 원인을 찾고 리팩토링함으로써 시간이 상당히 오래 소요되었습니다.

기존 기능의 안정성 보장의 어려움
새로운 기능을 추가하면서 기존에 잘 작동하던 기능에서 오류가 발생한 경우가 있었습니다.

 

 

 

 


 

 

 

 

JPA의 더티체킹이 어떤 방식으로 동작하는지 설명해주시고, 만약 JPA를 사용하지 않는다면 어떤 식으로 개발을 하셨을 것 같으신가요?

Dirty Checking은 데이터의 변경된 부분을 검사하는 것으로 영속성 컨텍스트가 관리하는 엔티티에만 적용됩니다. Transaction이 커밋되기 전까지 변경사항을 추적하여 스냅샷을 만들어놓고, 스냅샷과 비교해 변경된 사항이 감지되면 update 쿼리를 데이터베이스로 전달하고 커밋하여 엔티티의 변경된 상태를 반영합니다.
그 과정에서 오류가 생기면 커밋이 아닌 롤백을 하여 데이터베이스에 반영되지 않도록 합니다.

JPA를 사용하지 않았다면 변경된 부분을 확인하기 위한 로직을 직접 추가하여 개발했을 것 같습니다.

 

 

 

 


 

 

 

 

 

유닛 테스트e2e 테스트에 대해 설명해주세요.

유닛 테스트
일반적으로 단위테스트라 말하며 메서드 단위로 올바르게 작동하는지 확인하는 테스트를 말합니다.
외부 의존성을 최소화하기 위해 개발용 데이터베이스를 사용하지 않고 테스트를 위한 Mock 객체를 만들어 각 테스트 케이스마다 독립성을 유지합니다.
주로 JUnit, Mockito와 같은 유닛 테스트 프레임워크를 사용합니다.

E2E 테스트 (End-to-End Test)

개발이 완료된 후 사용자의 시나리오에 따라 애플리케이션의 전체 기능을 테스트하는 것으로, 통합테스트라고 할 수 있습니다. 실제 환경에서 실행되며 사용자와 유사한 환경으로 사용자의 행동을 시뮬레이션하여 시스템의 완전한 작동을 확인합니다.

 

 

 

 


 

 

 

 

API에서 Role마다 접근 가능/불가 기능을 구현하려면 어떻게 할 수 있을까요?

URL 단위의 권한 설정
Spring Security를 이용하여 Config 클래스에서 requestMatchers를 사용하여 특정 URL 단위로 .hasAnyRole("ADMIN")와 같이 접근 가능한 권한을 명시합니다.


메소드나 클래스 레벨의 권한 검사
또는 메소드나 클래스 레벨에서 @PreAuthorize("hasRole('ROLE_ADMIN')") 애노테이션을 이용하여 권한 검사를 수행할 수 있도록 합니다.

 

'++ > CS' 카테고리의 다른 글

[TIL] CS공부 12일차  (2) 2024.03.19
[TIL] CS공부 11일차  (1) 2024.03.18
[TIL] CS공부 9일차  (0) 2024.03.14
[TIL] CS공부 8일차  (0) 2024.03.13
[TIL] CS공부 7일차  (0) 2024.03.12