일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Today
- Total
목록2025/02 (7)
기록
각 테스트는 하나의 목적만 가진다테스트 코드는 단순히 코드가 잘 작동하는지 확인하는 데서 끝나는 것이 아니라, 코드의 의도와 동작 방식을 명확히 보여줄 수 있어야 합니다.이를 위해 하나의 테스트는 하나의 목적만 가져야 하며, 여러 목적을 포함하면 테스트가 복잡해지고 의도를 이해하기 어려워집니다.잘못된 테스트 코드 예제 : 반복문과 조건문을 포함한 예제아래는 반복문과 조건문을 포함한 잘못된 테스트 코드 예제입니다. 이 코드는 여러 케이스를 하나의 테스트에 담아 작성되었기 때문에 가독성과 유지보수성이 떨어집니다.@DisplayName("사용자 권한이 특정 권한에 해당하는지 확인한다.")@Testvoid checkUserRole() { // given UserRole[] roles = UserRol..
1. 문제 상황얼마 전, Kafka Consumer가 특정 메시지를 받아 DB에 저장하는 기능을 담당하는 서비스를 운영하던 중 Dto를 수정하는 일이 생겼습니다. 테스트 코드를 위해 생성자가 필요했고, 이에 DTO 클래스에 @Builder 어노테이션을 추가했습니다. 이를 통해 테스트 코드에서 MyDto.builder().dataId("testId").name("testName").build()와 같이 편리하게 객체를 생성할 수 있었습니다.수정된 코드는 다음과 같습니다:@Getterpublic class MyDto { private String dataId = "11111"; private String name = "22222"; // 추가 시작 @Builder public M..
1. Mock을 사용하는 상황과 사용하지 않는 상황1.1 Mock을 사용하는 상황외부 시스템과 연계되는 테스트에서 Mock 객체를 사용하면 외부 의존성을 제거하고 독립적으로 동작을 검증할 수 있습니다. 예를 들어, 이메일 전송, API 호출 등 외부 서비스에 의존하는 로직은 Mock 객체로 대체하여 테스트에서 외부 시스템의 영향을 배제해야 합니다.1.2 Mock을 사용하지 않는 상황내부 로직만 검증하는 테스트에서는 실제 객체를 사용하여 테스트를 수행하는 것이 적합합니다. 이 경우 실제 객체의 동작을 통해 로직의 정확성을 확인할 수 있습니다.1.3 Classicist vs Mockist 논쟁Mock 사용 여부와 관련된 논쟁으로 Classicist 접근법과 Mockist 접근법이 있습니다.Classicist..
CQRS 개념CQRS(Command Query Responsibility Segregation)는 소프트웨어 아키텍처 스타일 중 하나로, 시스템의 명령(Command)과 조회(Query)를 분리하여 각자의 책임을 명확히 정의합니다. 이는 대규모 애플리케이션에서 복잡성을 줄이고 성능을 최적화하기 위한 강력한 설계 방식으로, 다음과 같은 특징이 있습니다:명령(Command): 데이터 변경 작업을 처리하며, 데이터베이스에 새로운 데이터를 삽입하거나 기존 데이터를 수정 및 삭제하는 역할을 합니다. 이러한 작업은 주로 비동기적으로 처리되며, 트랜잭션을 통해 데이터의 일관성을 보장합니다.조회(Query): 데이터를 읽는 작업으로, 시스템 상태를 변경하지 않고 필요한 정보를 클라이언트에게 반환합니다. 조회 작업은 일..
시작하면서Spring Framework에서는 Bean Validation을 통해 데이터 유효성을 간편하게 검증할 수 있습니다. 이 글에서는 주요 어노테이션, Validation 적용 위치, 그리고 실제 사용 사례를 중심으로 Spring Bean Validation을 활용하는 방법을 알아보겠습니다.1. 주요 어노테이션Bean Validation에서 자주 사용되는 어노테이션은 다음과 같습니다:@NotNull: 값이 null이 아니어야 함.@NotEmpty: 빈 문자열("")이나 null이 아닌 값이어야 함 (컬렉션, 배열 등도 지원).@NotBlank: 공백만으로 이루어진 문자열이 아닌 값을 검증.@Positive: 양수 값만 허용.@Size(min = , max = ): 문자열, 컬렉션, 배열 등의 크기 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bETsAH/btsJr1hFmI4/v4AWwnWhXKSVC5xXVqErKK/img.png)
시작하면서이 포스팅에서는 C++ Builder를 사용하여 파일을 읽고 그 내용을 화면에 표시하는 기능을 구현하는 예제를 소개합니다. 간단한 사용자 인터페이스(UI)를 설정하고, 파일을 선택하고 읽을 수 있는 버튼을 추가하여 사용자가 쉽게 파일 내용을 확인할 수 있도록 합니다.SourceUI 설정(1) TEdit을 하나 만들고, EdtFilePath로 name을 지정한다.(2) TButton을 하나 만들고, BtnOpenFile로 name을 지정한다.(3) TButton을 하나 만들고, BtnRead로 name을 지정한다.(4) TMemo를 하나 만들고, MmResult로 지정한다.Open fileBtnOpenFile 버튼을 더블클릭하여 이벤트 함수를 작성합니다.void __fastcall TFormMai..
시작하면서Spring 애플리케이션에서 각 레이어는 명확한 책임 분리를 통해 유지보수성과 테스트 가능성을 향상시키며, 각 레이어에 적합한 테스트 전략을 적용할 수 있습니다. 예를 들어, Controller Layer는 클라이언트 요청을 처리하고 Service Layer를 호출하며, Service Layer는 비즈니스 로직을 처리하고 Repository Layer는 데이터 접근을 담당합니다. 아래는 Controller, Service, Repository 레이어 각각의 테스트 방법과 그 전략을 설명합니다.1. Controller Layer역할:클라이언트의 요청(Request)을 수신하고, 적절한 Service를 호출하여 응답(Response)을 생성합니다.입력값 검증과 같은 최소한의 논리만 처리합니다.테스트..