반응형

https://bit.ly/4hTSJNB

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

1) 공부시작

2) 강의장

3) 공부끝

 

4)

 

Mock과 Stub

Mock과 Stub은 테스트에서 외부 의존성을 대체하는 객체로, 둘 다 Test Double의 하위 개념입니다. Stub은 미리 정의된 응답을 제공하는 단순한 가짜 객체로, 주로 특정 입력에 대해 고정된 출력을 반환합니다. 예를 들어, 데이터베이스 호출을 Stub으로 대체하면 항상 동일한 데이터를 반환하도록 설정할 수 있습니다. 반면 Mock은 동작과 기대치를 검증하는 데 초점을 둡니다. Mock은 호출 여부, 호출 횟수, 순서 등을 확인하며, 테스트가 의존성의 상호작용을 검증할 때 유용합니다. 예를 들어, 메서드가 특정 API를 정확히 3번 호출했는지 확인할 때 사용됩니다.

Test Double

Test Double은 단위 테스트에서 실제 객체를 대체하는 모든 가짜 객체를 포괄하는 용어입니다. 여기에는 Stub, Mock, Fake, Dummy 등이 포함됩니다. Dummy는 단순히 자리 채우기용(값을 사용하지 않음), Fake는 실제 로직을 간단히 구현한 버전입니다. Test Double을 사용하면 테스트 대상 코드를 격리해 외부 의존성(데이터베이스, 네트워크 등)에 영향을 받지 않게 됩니다. 이는 테스트의 독립성과 재현성을 높이는 핵심 요소입니다.

Mockito

Mockito는 Java에서 널리 사용되는 Mocking 프레임워크로, Mock 객체를 쉽게 생성하고 동작을 정의하며 검증할 수 있게 해줍니다. 예를 들어, when(mockObject.method()).thenReturn(value)로 Stub처럼 응답을 설정하거나, verify(mockObject).method()로 호출 여부를 확인할 수 있습니다. Mockito의 장점은 간결한 문법과 강력한 기능(예: 예외 던지기, 호출 횟수 검증)으로, 복잡한 의존성을 가진 코드를 테스트할 때 특히 유용합니다.

Mock을 사용해 단위 테스트를 작성해야 하는 이유

Mock을 사용하면 단위 테스트의 초점을 테스트 대상 코드에만 맞출 수 있습니다. 외부 시스템(예: API, DB)이 느리거나 불안정해도 테스트가 실패하지 않으며, 격리된 환경에서 빠르고 안정적으로 실행됩니다. 또한, Mock은 특정 시나리오(예: 에러 응답)를 쉽게 시뮬레이션해 코드의 예외 처리를 검증할 수 있습니다. 예를 들어, 결제 시스템을 테스트할 때 외부 결제 API를 Mock으로 대체하면 실제 결제 없이 동작을 확인할 수 있습니다. 이는 테스트 속도를 높이고, 비용을 줄이며, 코드 품질을 보장하는 데 필수적입니다. 단, Mock을 과용하면 테스트가 실제 동작과 괴리될 수 있으니, 통합 테스트와 균형을 맞춰야 합니다.

반응형
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

1) 공부시작

 

2) 공부끝

 

3) 강의장

 

4)

 

https://bit.ly/4hTSJNB

 

1. 성능 테스트란 무엇이며, 왜 중요한가요?

답변:

성능 테스트는 시스템이 특정 부하 조건에서 얼마나 잘 작동하는지 평가하는 테스트입니다. 응답 시간, 처리량, 안정성을 측정하며, 사용자 경험을 보장하고 병목 지점을 식별하는 데 중요합니다. 예를 들어, 웹사이트가 1,000명 동시 접속을 견디는지 확인합니다.

 

2. 성능 테스트와 부하 테스트의 차이는 무엇인가요?

답변:

성능 테스트는 시스템의 전반적인 성능(속도, 확장성 등)을 평가하는 포괄적인 개념입니다. 부하 테스트는 특정 부하(예: 사용자 수 증가)에서 시스템이 어떻게 반응하는지 확인하는 하위 유형입니다. 부하 테스트는 성능 테스트의 일부라고 볼 수 있습니다.

 

3. 성능 테스트를 설계할 때 어떤 단계를 거치나요?

답변:

먼저 요구사항(응답 시간, 동시 사용자 수 등)을 정의하고, 테스트 시나리오를 설계합니다. 다음으로 환경을 설정하고, 도구를 활용해 부하를 생성하며, 결과를 모니터링하고 분석합니다. 마지막으로 병목 지점을 개선합니다.

 

4. 성능 테스트에 주로 사용하는 도구는 무엇인가요?

답변:

저는 JMeter, LoadRunner, Gatling을 주로 사용합니다. JMeter는 오픈소스로 유연하고, LoadRunner는 대규모 테스트에 강력하며, Gatling은 스크립트 기반으로 정밀한 부하를 생성합니다. 프로젝트 규모와 요구사항에 따라 선택합니다.

 

5. 성능 테스트에서 병목 지점을 어떻게 식별하나요?

답변:

CPU, 메모리, 디스크 I/O, 네트워크 사용량을 모니터링하며 응답 시간이나 처리량이 떨어지는 지점을 찾습니다. 예를 들어, APM 도구(New Relic, Dynatrace)를 사용해 느린 데이터베이스 쿼리나 API 호출을 식별한 경험이 있습니다.

 

6. 성능 테스트 중 흔히 겪는 문제와 해결 방법은?

답변:

테스트 환경 불일치, 비현실적인 부하 시나리오, 데이터 부족이 흔한 문제입니다. 이를 해결하기 위해 프로덕션과 유사한 환경을 구축하고, 실제 사용자 패턴을 반영하며, 충분한 테스트 데이터를 준비합니다.

 

7. 성능 테스트 결과를 어떻게 분석하나요?

답변:

응답 시간(평균, 최대), 처리량(초당 요청 수), 오류율을 주요 지표로 분석합니다. 그래프와 로그를 통해 패턴을 파악하고, 기준치(예: 응답 시간 2초 미만)를 넘는 부분을 개선 대상으로 삼습니다. 예를 들어, JMeter 보고서를 활용합니다.

 

8. 성능 테스트를 CI/CD 파이프라인에 통합하는 방법은?

답변:

Jenkins나 GitHub Actions에서 성능 테스트 스크립트를 실행하도록 설정합니다. 빌드 후 소규모 부하 테스트를 자동 실행하고, 결과를 슬랙이나 이메일로 알림 받게 합니다. 실패 시 배포를 중단하는 조건도 추가합니다.

 

9. 대규모 시스템의 성능 테스트를 어떻게 계획하나요?

답변:

사용자 수, 트래픽 패턴, 피크 타임을 분석해 시나리오를 설계합니다. 분산 테스트 환경(클라우드 기반)을 구축하고, 여러 지역에서 부하를 생성해 글로벌 성능을 확인합니다. AWS Load Generator를 활용한 적이 있습니다.

 

10. 성능 테스트 후 개선 작업은 어떻게 진행하나요?

답변:

병목 지점(: 느린 쿼리, 서버 과부하) 식별한 , 쿼리 최적화, 캐싱 추가(Redis), 서버 스케일업/아웃 같은 조치를 취합니다. 개선 동일한 테스트를 재실행해 결과를 비교하며 목표를 달성했는지 확인합니다.

반응형
반응형

https://bit.ly/4hTSJNB

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

1) 공부시작

 

2) 공부끝

 

3)수업장

 

4)

 

 

내용

 

 

1. 통합 테스트가 무엇이며, 왜 중요한가요?

답변:

통합 테스트는 소프트웨어 시스템의 개별 모듈이나 구성 요소가 함께 작동하는지 확인하는 테스트입니다. 단위 테스트가 개별 기능을 검증한다면, 통합 테스트는 이들이 상호작용할 때 발생할 수 있는 문제를 잡아냅니다. 중요성은 시스템의 안정성과 신뢰성을 보장하며, 배포 전 결함을 줄이는 데 있습니다.

 

2. 통합 테스트와 단위 테스트의 차이는 무엇인가요?

답변:

단위 테스트는 개별 함수나 모듈을 독립적으로 테스트하며, 외부 의존성을 모킹합니다. 반면 통합 테스트는 여러 모듈이나 시스템 간 상호작용을 검증하며, 실제 환경에 가까운 조건에서 진행됩니다. 예를 들어, API와 데이터베이스 간 연결을 확인하는 건 통합 테스트입니다.

 

3. 통합 테스트를 설계할 때 어떤 전략을 사용하나요?

답변:

주로 상향식(Bottom-Up), 하향식(Top-Down), 샌드위치(Sandwich) 전략을 사용합니다. 상향식은 하위 모듈부터 테스트하며, 하향식은 상위 계층부터 시작해 스텁을 활용합니다. 저는 시스템 구조와 의존성에 따라 적합한 전략을 선택하며, 보통 상향식을 선호합니다.

 

4. 통합 테스트에서 외부 종속성을 어떻게 관리하나요?

답변:

외부 종속성은 모킹(Mocking)이나 스터빙(Stubbing)으로 관리합니다. 예를 들어, 외부 API가 필요할 때 가짜 응답을 제공하는 모의 객체를 만들거나, 테스트 전용 데이터베이스를 설정해 실제 환경을 시뮬레이션합니다. 이렇게 하면 테스트의 독립성과 재현성을 높일 수 있습니다.

 

5. 통합 테스트에 사용하는 도구는 무엇인가요?

답변:

저는 주로 Postman(API 테스트), Selenium(웹 애플리케이션), JUnit이나 pytest(코드 기반 테스트)를 사용합니다. 데이터베이스 통합 테스트에는 H2나 Docker를 활용해 가상 환경을 설정합니다. 도구 선택은 프로젝트 요구사항과 테스트 대상에 따라 달라집니다.

 

6. 통합 테스트에서 흔히 겪는 도전 과제와 해결 방법은?

답변:

흔한 도전 과제는 환경 불일치, 데이터 의존성, 테스트 실행 시간입니다. 이를 해결하기 위해 컨테이너화(Docker)로 환경을 표준화하고, 테스트 데이터를 사전에 준비하며, 병렬 실행으로 시간을 단축합니다. 예를 들어, Jenkins에서 병렬 파이프라인을 설정한 경험이 있습니다.

 

7. 통합 테스트 실패를 디버깅하는 방법은 무엇인가요?

답변:

먼저 로그를 확인해 오류의 원인을 좁히고, 실패한 테스트 케이스를 재현합니다. 그 다음, 모듈 간 데이터 흐름을 추적하며 브레이크포인트를 설정해 디버깅합니다. 예를 들어, API 응답이 예상과 달랐을 때 Postman으로 요청을 재검증한 적이 있습니다.

 

8. CI/CD 파이프라인에서 통합 테스트의 역할은 무엇인가요?

답변:

CI/CD에서 통합 테스트는 코드 변경 후 시스템이 여전히 제대로 작동하는지 확인하는 안전망 역할을 합니다. 빌드 후 단위 테스트를 거친 뒤 통합 테스트를 실행해 배포 전 문제를 잡아냅니다. 저는 GitHub Actions에서 이를 자동화한 경험이 있습니다.

 

9. 통합 테스트 중 성능 문제를 어떻게 다루나요?

답변:

성능 문제는 JMeter나 Locust 같은 도구로 부하 테스트를 병행해 식별합니다. 통합 테스트 중 응답 시간이 느리면 병목 지점을 찾아 최적화하거나, 캐싱을 추가합니다. 예를 들어, 데이터베이스 쿼리 최적화로 성능을 개선한 적이 있습니다.

 

10. 통합 테스트를 안전한 환경에서 수행하려면 어떻게 하나요?

답변:

네트워크 격리와 접근 제어를 위해 VPN이나 로컬 테스트 환경을 설정합니다. 민감한 데이터는 마스킹하거나 더미 데이터를 사용하며, 테스트 환경을 초기화합니다. 보안 스캔 도구를 추가로 돌려 취약점을 점검하기도 합니다.

반응형
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

1)시작

 

2)끝

 

 

3) 강의장

 

4)공부기록

 

 

https://bit.ly/4hTSJNB

 

 

학습후기.

 

1) 개요
단위테스트 면접질문 나올수있는 것에 대해 학습함.

2) 예상 질문 및 답변정리

  • "단위 테스트란 무엇인가?": 이 질문은 후보자가 단위 테스트의 기본 목적과 범위를 이해하고 있는지 확인합니다. 답변에서는 개별 구성 요소 테스트의 중요성과 소프트웨어 품질 향상에 기여하는 점을 강조할 수 있습니다.
  • "단위 테스트의 이점은 무엇인가?": 여기서는 버그 조기 발견, 코드 품질 향상, 개발 속도 증가, 유지 보수 비용 감소 등이 있다.
  • "Test-Driven Development(TDD)란 무엇인가?": TDD는 테스트를 먼저 작성한 후 코드를 개발하는 접근법으로, 코드 품질 향상과 설계 개선에 기여합니다. 
  • "효과적인 단위 테스트를 작성하려면 어떻게 해야 하나?": 여기서는 테스트가 독립적이고, 빠르며, 신뢰할 수 있어야 한다는 점을 강조하며, 모킹(mock)과 Arrange-Act-Assert 패턴 사용 등이 있습니다.
  • "코드 커버리지는 무엇이며 왜 중요한가?": 코드 커버리지는 테스트가 코드의 어느 정도를 커버하는지를 나타내며, 충분한 테스트를 보장하는 데 중요합니다. 물론 커버리지가 높다고 항상 좋은것은 아닙니다.
  • "복잡한 의존성이나 개인 메서드 테스트는 어떻게 하나?": 이 질문은 모킹(mock) 또는 의존성 주입(dependency injection)을 통해서 해결합니다.
  • "단위 테스트와 통합 테스트의 차이는 무엇인가?": 단위 테스트는 개별 구성 요소를 테스트하고, 통합 테스트는 여러 구성 요소가 함께 작동하는지 확인합니다. 
  • "코드가 진화함에 따라 테스트 유지 관리는 어떻게 하나?": 코드 변경에 따라 테스트도 변경해줘야ㅑ합니다.
  • "단위 테스트에서 흔한 실수는 무엇이며, 이를 피하려면 어떻게 해야 하나?": 흔한 실수로는 테스트 커버리지 과신, 테스트 간 의존성 등이 있습니다.
  • "Agile 개발 방법론에서 단위 테스트의 역할은 무엇인가?": Agile에서는 단위 테스트가 반복적 개발과 지속적 통합을 지원하며, 품질 보증에 기여합니다.
반응형
반응형

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

1) 공부시작 

 

2) 강의 종료.

 

3) 강의장

 

 

4) 학습 인증샷.

 

https://bit.ly/4hTSJNB

 

봄맞이 특급 혜택 '하나 더 봄'🌸 1+1 이벤트 (3/4~3/9) | 패스트캠퍼스

당신의 성장도 피어날 거예요. 1+1 쿠폰으로 강의 보고 또 보고!

fastcampus.co.kr

 

 

학습후기.

 

1) 개요
최근 프로젝트에서 테스트 코드의 품질과 유지보수성을 향상시키기 위해 JUnit 5의 다양한 애노테이션에 대해 학습했습니다. 이 글에서는 이 강의 수강을 통해 주요 애노테이션의 기능과 실제 적용 사례를 통해 얻은 인사이트를 공유하고자 합니다.

2) 핵심 애노테이션 분석


@ParameterizedTest
다양한 입력 매개변수로 동일한 테스트 로직을 실행할 수 있게 해주는 강력한 기능입니다. 특히 경계값 분석이나 다양한 시나리오 테스트에 유용합니다.

 

@ParameterizedTest
@CsvSource({
    "1, true",
    "2, true",
    "3, false"
})
void isValidInput(int input, boolean expected) {
    assertEquals(expected, validator.isValid(input));
}

 

이를 통해 테스트 코드의 중복을 획기적으로 줄이고 테스트 케이스 추가가 용이해집니다.

@RepeatedTest

특정 테스트를 지정된 횟수만큼 반복 실행하여 안정성을 검증합니다. 특히 동시성 이슈나 리소스 누수 문제를 발견하는 데 효과적입니다.

@RepeatedTest(100)
void testConcurrentAccess() {
    // 동시성 테스트 로직
}



@Disabled

이 애노테이션은 테스트를 삭제하지 않고 문서화된 방식으로 비활성화할 수 있어 추적성을 유지합니다.

 

@Disabled("TICKET-123: 데이터베이스 스키마 변경 후 수정 예정")
@Test
void testDatabaseQuery() {
    // 테스트 로직
}


@Tag
테스트를 카테고리화하여 선택적 실행을 가능하게 합니다. CI/CD 파이프라인에서 특히 유용하게 활용됩니다.

@Tag("integration")
@Test
void testExternalSystem() {
    // 통합 테스트 로직
}



@Nested
관련 테스트를 계층적으로 구성하여 가독성과 구조를 개선합니다. 특히 복잡한 클래스나 다양한 상태를 테스트할 때 효과적입니다.

 

@Nested
class WhenEmpty {
    // 빈 상태 테스트
}

@Nested
class WhenFull {
    // 가득 찬 상태 테스트
}



@Timeout
테스트 실행 시간에 제한을 두어 성능 저하나 무한 루프를 방지합니다.

@Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
@Test
void testPerformanceCriticalMethod() {
    // 성능 테스트 로직
}

 


실무 적용 시 얻은 인사이트


1) 테스트 독립성 확보
@BeforeEach와 @AfterEach를 활용하여 각 테스트가 독립적인 환경에서 실행되도록 보장했습니다. 이를 통해 테스트 간 상호 영향을 제거하고 테스트 실패 원인 파악이 용이해졌습니다.

@BeforeEach
void setup() {
    testRepository.clear();
    // 테스트 환경 초기화
}



2) 코드 재사용성 향상
@ParameterizedTest를 도입함으로써 테스트 코드량을 획기적으로 감소시켰으며, 테스트 케이스 추가 시간도 크게 단축되었습니다. 특히 API 응답 검증이나 유효성 검사 로직 테스트에서 큰 효과를 보았습니다.

3) 테스트 구조화 및 관리 개선
@Nested와 @Tag를 조합하여 테스트 스위트를 논리적으로 구성했습니다. 이는 대규모 프로젝트에서 테스트 관리와 실행 효율성을 크게 향상시켰습니다.

도입 시 고려사항
JUnit 5 애노테이션을 효과적으로 활용하기 위해서는 몇 가지 고려사항이 있습니다:

1)적절한 추상화 수준 유지: 너무 복잡한 매개변수화는 오히려 테스트 가독성을 저하시킬 수 있습니다.
2)테스트 실행 환경 고려: @BeforeAll과 같은 애노테이션은 병렬 실행 환경에서 예상치 못한 동작을 일으킬 수 있습니다.
3)성능 영향 분석: 과도한 @RepeatedTest 사용은 빌드 시간을 증가시킬 수 있으므로 적절한 균형이 필요합니다.

 

반응형
반응형

표준 출력 스트림은 컴퓨터 프로그램에서 "표준적으로" 입력으로 받고 출력으로 보내는 데이터와 매체를 총칭하는 용어입니다. 프로그램은 표준 출력 스트림을 사용하여 화면, 파일 또는 네트워크와 같은 다양한 장치에 데이터를 출력할 수 있습니다.

표준 출력 스트림은 C 언어에서 stdout이라는 이름으로 지정됩니다. stdout에 데이터를 출력하려면 printf() 함수를 사용할 수 있습니다. 예를 들어 다음 코드는 "Hello, world!"라는 문자열을 표준 출력 스트림에 출력합니다.

반응형
반응형

1. 액션과 계산, 데이터 구분

일단 액션이냐 아니냐로 구분

그리고 호출가능성 여부로 계산이냐 데이터냐 구분.

 

2. 일급추상.

반응형
반응형

1. 코루틴은 바로실행되는게 아니다.

2. asyncio 이벤트루프에 넣어야 실행된다.

3. asyncio.run은 여러가지 기능을 함.

- 이벤트를 생성하고 끝낼때까지 돌림.

- 다끝내고 클린업도함.

- 이벤트루프를 닫음.

- 일종의 엔트리포인트 역할.

반응형

+ Recent posts