Swagger 도입 Api Test, 설명UI 깔끔 build.gradle에 추가 implementation("io.springfox:springfox-swagger2:2.9.2") implementation("io.springfox:springfox-swagger-ui:2.9.2") SwaggerConfig @Configuration @EnableSwagger2 class SwaggerConfig { @Bean fun docket(): Docket { return Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() } } 위와 같이 설명, U..
데이터 베이스 스키마 설계 Todo //Column data class Todo( var index: Int? = null, // 일정 index var title: String? = null, // 일정 title var description: String? = null, // 일정 설명 var schedule: LocalDateTime? = null, // 일정 시간 var createdAt: LocalDateTime? = null, // 생성 시간 var updatedAt: LocalDateTime? = null, // 업데이트 시간 ) fun Todo.convertTodo(todoDto: TodoDto): Todo { return Todo().apply { this.index = todoDto.i..
TodoApiController 투두 앱의 CRUD 처리를 담당하는 컨트롤러 작성(설계 단계) Reqeust 에는 필요한 Bodyt 설계 -> Valid 작업들어가기 때문에 핸들러도 작성해준다. @RestController @RequestMapping("/api/todo") class TodoApiController { // R @GetMapping(path = [""]) fun read(@RequestParam(required = false) index: Int?) { // 없으면 전체조회, 있으면 단건 조회, required -> 필수값 아닌지 정하기, Optional이므로 Valid할 필요 없다. } // C @PostMapping(path = [""]) fun create(@Valid @Reque..
본 프로젝트는 테스트 주도 개발(Test-driven development, TDD)로 만들어짐 Repository 작성과 함께 테스트도 함께 작성함 실제 데이터베이스는 사용X(JPA), 메모리DB사용 Config AppConfig // 스프링 부트 실행시, 해당 값들을 먼저 참조 -> Config Class @Configuration class AppConfig { /* val database = TodoDataBase()와 같은 형태로 static 걸어서 쓰지만 Spring의 패러다임은 자동으로 주입되게 만드는 것임.*/ @Bean(initMethod = "init") // Bean으로 등록, init지정, 빈이 만들어질때 어떤 메소드 참조할지 정한다 fun todoDataBase(): TodoDat..
Exception Annotation @RestController @RequestMapping("/api/exception") @Validated class ExceptionApiController { // 연습용 Api, 실무는 X @GetMapping("/hello") fun hello(): String { val list = mutableListOf() //val temp = list[0] return "hello" } @GetMapping("") fun get( @NotBlank @Size(min = 2, max = 6) @RequestParam name: String, @Min(10) @RequestParam age: Int ): String { //통과된 경우만 -> print(Validate..
Exception Annotation @ControllerAdvice : Global 예외 처리 및 특정 pakage / Controller 예외 처리 @ExceptionHandler : 특정 Controller의 예외 처리 GlobalControllerAdvice //@RestControllerAdvice(basePackageClasses = [ExceptionApiController::class]) -> Target 설정 가능 //@RestControllerAdvice // RestController의 Exception이 이 컨트롤러를 통하게 됨(Global : 괄호X) class GlobalControllerAdvice { // 특정 예외를 잡겠다고 지정 @ExceptionHandler(value ..
@Transient 때때로 실제 테이블에 넣고 싶지않은 컬럼이 맵핑되어 버리거나, 필요없는 컬럼을 엔티티 맵핑에서 제외 하고 싶을때 사용하는 어노테이션 엔티티 클래스의 변수들은 대부분 테이블 컬럼과 매핑된다. 그러나 몇몇 변수는 매핑되는 칼럼이 없거나 매핑에서 제외해야만 하는 경우도 있다. @Transient는 엔티티 클래스 내의 특정 변수를 영속 필드에서 제외할 때 사용한다.
Validation 필요한 이유 유효성 검증 하는 코드의 길이가 너무 길다. -> annotation 으로 해결 service logic에 대해서 방해가 된다. 흩어져 있는 경우 어디서 검증 되었는지 찾기 힘들다. 검증 로직이 변경되는 경우 테스트 코드 등, 전체 로직이 흔들릴 수 있다. -> 한 곳에 몰아서 검증 가능 JSR-380 BeanValidation build.gradle.kts 세팅 DeleteApiController // https://beanvalidation.org/2.0-jsr380/spec/ // JSR-320 // hibernate Validation // Spring boot Validation @RestController @RequestMapping("/api") @Valida..
API 작성 목적 : 모바일 어플리케이션, 웹 등에서 사용되는 API 제작 IDE : IntelliJ 1. Spring Initializer 로 프로젝트 생성 2. 파일 구성 Controller Api 컨트롤러 Model 데이터 필드 정보 코드 UserProfile package com.example.demo.model; public class UserProfile { private String id; private String name; private String phone; private String address; public UserProfile(String id, String name, String phone, String address) { this.id = id; this.name = nam..