왕초보일지

231227 | Todo Step1

다시은 2023. 12. 27. 21:21

과제 만들면서 수시로 테스트 해보기 

 

 

쿼리 테스트

application.yml 에서 spring 하위에 설정을 추가하여 쿼리가 의도대로 잘 되고 있는지 확인할 수 있다.

(데이터베이스 연결은 application.yml이 아닌 config-환경변수를 통해 설정해서 연결정보 숨기기)

 

~흐름 익히기~

Use Case Diagram /API 작성 / ERD 작성

프로젝트 생성 - swagger dependency 설정 - 패키지 구조 설계 (우리는 domain기준으로 했다.) Web layer : dto, controller 작성 - Service layer 작성 :비즈니스 로직, 트랜잭션, 예외  - controller 와 연결 - controller 구현부 작성 - repository 작성

여러번 해보는 수밖에 없는 것 같다.

 

 

그리고 양방향 단방향 관계 설정같은 경우

step1에서는 필요하지 않아서 작성하지 않았는데

강의에서 따라할 때 아주아주아주 어려웠다. 어떤거는 fetch를 붙이고 mappedby 로는 누굴 표시해야하는지 등등

step2이후부터는 추가되는게 더 많아서 복잡해질 텐데 이 부분은 강의를 더 공부해야겠다.

 

 

테스트

1 올바르지 않은 Id 를 넣고 GET / PUT 할 때

정상

2 올바르지 않은/ 올바른 Id 를 넣고 DELETE 할 때

ModelNotFoundException 이 실행되지도 않고 삭제도 안 된다! 204 는 잘 뜬다!

 

=> controller 의 delete 구현을 안 했었다.....반성....

 

 

이 외에 목록 조회, 생성까지 다 정상적으로 작동된다.

다음 질문의 답만 생각해내면 되는데 쉽지 않다.

 

1. 수정, 삭제 API의 request 를 어떤 방식으로 사용하였나요? (param, query, body)
수정 api는 업데이트할 데이터를 requestbody에 담아서 데이터를 수정하고 저장했다.


2.  RESTful 한 API를 설계하였나요? 어떤 부분이 그렇고 그렇지 않나요?
url의 마지막에 /를 포함하지 않았고 소문자를 사용했으며 method는 포함하지 않았다. 

클라이언트의 다음 작업을 위한 응답은 아직 하지 못했고 level2까지 한 것 같다.


3.  적절한 관심사 분리를 적용하였나요? (Controller, Service, Repository)
Controller layer 에서 http상태코드와 body를 반환하고 있고

Service layer 에서 CRUD 기능 구현을,

Repository layer 에서 jparepository 를 상속받아 card Entity를 관리하고 있다.

 

4. API 명세서 작성 가이드라인을 검색하여 직접 작성한 API 명세서와 비교해보세요

 명세서의 response 부분을 줄글이 아니라 반환 형태 그대로 넣는게 더 알아보기 좋은 것 같다.  

 

 

 


내일 할 일 

1 중간중간 필요에 따라 종속성을 추가하는데 적어도 지금 사용중인게 무엇인지는 알아야 할 것 같다 (혹시라도 잘못 설정했을 때 어떻게 찾나 생각해봤다.😫)

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("com.h2database:h2")

    runtimeOnly("org.postgresql:postgresql")

    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

implementation("org.springframework.boot:spring-boot-starter-web")

: Spring MVC를 사용한 RESTful 서비스를 개발하는데 사용

implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

: data 클래스는 빈 생성자를 가질 수 없다/주생성자를 사용한 일반 클래스는 빈 생성자가 없다 => 이를 개선하기 위해 사용

jsonproperty 속성 이름이 응답과 다른 경우 추가??

kotlin에서 나오는 문제 같은데

https://proandroiddev.com/parsing-optional-values-with-jackson-and-kotlin-36f6f63868ef

 

implementation("org.jetbrains.kotlin:kotlin-reflect")


 implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")

:
 implementation("org.springframework.boot:spring-boot-starter-data-jpa")

:
 implementation("com.h2database:h2")

:

runtimeOnly("org.postgresql:postgresql")

:
annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
:

testImplementation("org.springframework.boot:spring-boot-starter-test")

:

 

 

2 얘는 뭔가

fun main(args: Array<String>) { runApplication<ToDoStep1Application>(*args)}

 

3 step2 구상, 시작