-
광고 프로젝트 - 개발 일기project 2022. 6. 1. 22:16

DDD 로 인강에서 배운대로 개발해 보자. 어떤 이슈가 있었는지 적어 보자.
1. 요구사항 분석 - 명세를 잘 읽어보자.
2. 도메인 모델 설계
이 과제의 경우 기본적인 컬럼이 다 명시되어 있다. DDL 을 직접 작성하는거 보다 jpa 로 만들고 DB tool 로 필요하면 수정하자.
3. 엔티티 설계 / 테이블 설계
PK 가 10자리수로 제한이 있다. H2 에서 어떻게 해야 할까? 자동 생성으로 하고 싶다. (수동은 귀찮다!)
hibernate-orm/H2Dialect.java at main · hibernate/hibernate-orm · GitHub
위 글을 보면 H2 에서 sequence 를 서포트 한다. 따라서 sequence 전략을 쓰고, generator 를 전역으로 적용하면 될 거 같다. Generator 를 어디에 생성할 지 고민인데, 일단 아무 엔티티에나 적어놓자.

PK 가 10자리수로 바꼈다.
여기서 10자리수의 의미는 long 으로 하자는 거다. Int 는 10자리수를 넘을수가 없다.
4. Rest API 설계
Controller 메소드를 만들고, mockmvc 로 테스트하자. Dto 필드를 wrapper 로 할까, primitive 로 할까?
이렇게 pros / cons 를 생각할 수 있고, 받아오는 dto 는 사이클이 immutable 이므로 wrapper class 로 만들자. (읽기만 할 뿐 바꿀 일이 없고, null 로 넘어와도 괜찮다.)이펙티브 자바 item 61 에서 wrapper 타입의 단점이 적혀 있다. 잘 모르고 쓰던 부분이다. 되도록 primitive 로 사용할 것을 책에서 권장하고 있다.
Input 으로 들어온 dto 에 따라 테스팅 해야 하는데, JUnit 5 에 기능이 있었다. @ParameterizedTest 를 이럴 때 쓸 수 있다.
Dto 를 받는 방법은 1. query param 2. form 3. json body 가 있는데 3번으로 선택했다. (Ajax 가 json 으로 하므로 -> 고민?)
5. MVC layer 개발
Service 에서 실제 비지니스 로직을 구현하자.
Service 끼리 depend 하게 구성할 건데, cycle 이 생기지 않도록 조심해야 한다. 이 과제에서는 CompanyService 가 밑에 있고 Commercial, Contract 는 위에 있다. 개념적으로 계층구조가 존재해서 참조해도 괜찮을 것 같다.
테스트 코드로 모든걸 다 검증할 수는 없나? 토비의 스프링에 어떤 경우는 테스트 코드를 작성하기도 어렵고 길이도 늘어난다고 써져있다. 지금은 테스트 코드가 만능이 아니라는걸 기억해 놓자.
API Documentation 으로 Swagger 와 Spring rest docs 를 선택해야 하는데, 가장 큰 차이점은 Swagger 는 실행 환경을 제공한다는 점이다. 즉, 이 경우에는 UI 를 개발하지 않을 것이기 때문에 Swagger 가 더 좋은 선택인 것 같다.
6. Spring batch 개발
처음 접하는 개념이다. 매우 간단하게는 해야 할 작업의 단위를 작성하고, 스케쥴에 따라 실행하는 개념이다.
https://jojoldu.tistory.com/324
1. Spring Batch 가이드 - 배치 어플리케이션이란?
Spring Batch In Action이 2011년 이후 개정판이 나오지도 않고 (2019.03 기준), 한글 번역판도 없고, 국내 Spring Batch 글 대부분이 튜토리얼이거나 공식 문서 중 일부분을 짧게 번역한 내용들이라 대용량 시
jojoldu.tistory.com
향로님 블로그에 좋은 글이 있다. 꼼꼼하게 읽어보는 것이 좋을 것 같다.
'project' 카테고리의 다른 글
cs 수업 과제 정리 (0) 2022.06.17 MGP 과제를 하며 느낀 점 - 테스트의 중요성 (0) 2022.06.11 SnsChats - 개발 일기 (0) 2022.05.25 Docker 시작 (0) 2022.05.22 Spring security 5 OAuth2 공부한거 (0) 2022.05.06