전체 글
-
[appling] 나머지 Controller 작업 및 Test Code 추가 작성appling 프로젝트 2024. 9. 8. 23:44
🔴 나머지 Controller 작업🟠 put, get🟢 put@ApiController@RequiredArgsConstructor@Tag(name = "Product", description = "Product API Documentation")public class ProductController { private final ProductService productService; ... @PutMapping("/product") @Operation(summary = "상품 수정", description = "상품 수정 api") @ApiResponses(value = { @ApiResponse(responseCode = "200", descriptio..
-
[appling] Controller 예외처리 (Advice, Validation)appling 프로젝트 2024. 9. 8. 16:40
🔴 Controller 예외처리🟠 Controller 유효성 검사 예외처리@ApiController@RequiredArgsConstructor@Tag(name = "Product API", description = "Product API Documentation")public class ProductController { private final ProductService productService; @PostMapping("/product") @Operation(summary = "상품 등록", description = "상품 등록 api") @ApiResponses(value = { @ApiResponse(responseCode = "201", descri..
-
[appling] Controller 추가하기 (Api Annotation 추가, Swagger 적용)appling 프로젝트 2024. 9. 8. 13:10
🔴 Controller 만들기지금까지 Service만 작성하고 실제로 Controller는 작성하지 않았다. 이제 Controller를 적용해보자.🟠 Controller 적용하기🟢 기존 Controller 쓰기@RestController@RequestMapping("/api/v1")public class ProductController {}RestController를 적용하고 기본 값으로 /api/v1을 붙여주려고 한다. 근데 만드는 Controller마다 붙이는게 너무 귀찮을거 같아 Annotation으로 설정하려고 하다.🟢 @ApiController 만들기@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@RestController@Re..
-
읽기 좋은 코드 작성[4] 상속과 조합개인 공부/읽기 좋은 코드 2024. 9. 7. 10:02
🔴 객체 지향🟠 상속 보다는 조합을 사용하자상속은 시멘트처럼 굳어지는 구조다. 수정이 어렵다.상속은 부모와 자식의 결합도가 높다. 조합과 인터페이스를 활용해서 유연한 구조로 짜자🟢 상속으로 해결포켓몬이 타입에 따라 공격하는 부분을 리팩토링 해보려고 한다.먼저 상속을 받은 경우를 해보자.public class Battle { private ConsolePrint consolePrint; public Battle(ConsolePrint consolePrint) { this.consolePrint = consolePrint; } public int attack(PocketMon pocketMon) { int damage = 0; damage = ..
-
[appling] Querydsl 적용하기 (with. SpringBoot 3.3, build.gradle.kts)appling 프로젝트 2024. 9. 5. 08:52
🔴 Querydsl리스트를 불러오려고 했는데 페이징 처리가 필요해졌다. 페이징 처리를 할때 Querydsl을 적용하여 진행하면 좋을거 같아. Querydsl을 적용시키려고 한다.🟠 설정🟢 gradledependencies { ... // ✅ querydsl을 설치합니다. ":jakarta"를 꼭 설정합니다 implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta") annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta") // java.lang.NoClassDefFoundError(jakarta.persistence.Entity) 발생 대응 annotationProces..
-
[appling] Domain 테스트코드 작성appling 프로젝트 2024. 9. 4. 13:28
🔴 Domain🟠 jacoco 수정tasks.jacocoTestCoverageVerification { violationRules { rule { enabled = true element = "CLASS" // 라인 커버리지를 최소한 80% limit { counter = "LINE" value = "COVEREDRATIO" minimum = "1.00".toBigDecimal() } // 브랜치 커버리지를 최소한 90% limit { cou..
-
[appling] Product 수정appling 프로젝트 2024. 9. 4. 12:46
🔴 Product 상품 수정🟠 도메인 정리🟢 Request@Getter@Builder@AllArgsConstructor@NoArgsConstructorpublic class PutProductRequest { @JsonProperty("product_id") @NotNull(message = "상품 번호를 입력해 주세요.") private Long productId; @NotNull(message = "상품명을 입력해 주세요.") @JsonProperty("product_name") private String productName; @NotNull(message = "상품 무게를 입력해 주세요.") @JsonProperty("product_weight") ..
-
[appling] poroduct 등록appling 프로젝트 2024. 9. 4. 12:35
🔴 Product 상품 등록상품은 다음과 같이 domain을 작성하였었다. 이 설계에 맞춰서 상품을 작성해보자.🟠 도메인 정리🟢 Entity@MappedSuperclasspublic class CommonEntity { protected LocalDateTime createdAt; protected LocalDateTime modifiedAt; @PrePersist public void prePersist() { this.createdAt = LocalDateTime.now(); this.modifiedAt = LocalDateTime.now(); }}createdAt, modifiedAt의 경우 모든 Entity가 동일하게 가져갈 구조라 해당 값..