1. 보안그룹 설정, RDS 연결, 탄력적 IP 할당
RDS 보안그룹의 인바운드 규칙을 추가하여, RDS를 생성한 IP주소 외에서도 접근 가능하도록 바꿔주었다. 3306 포트의 IPv4, IPv6 규칙을 추가해주어야 한다. 탄력적 IP도 할당해주었다.
2. 기능명세 + 코드 파악
- 하나의 화면에서 여러개의 API를 호출하는데, 각각 다른 controller에서 호출하는 것 보다는 하나의 controller로 묶는 것이 좋아보인다.
- member_role은 하나의 칼럼으로 처리하는 것이 편할 것 같다.
- 도메인 디렉토리가 estimate → requestEstimate → SignboardInfo로 구성되어 있는데, 간판 객체는 그냥 별도의 디렉토리로 분리하는게 나을 것 같다.
- service 로직에서 다른 도메인의 service를 참조하여 의존성을 주입하기보다는 controller에서 여러개의 service를 호출하는 쪽으로 리팩토링 진행하는 것이 좋아보인다.
3. 추가로 개발해야할 API 설계
- 유저/시공사 홈 조회 API
- 시공사
- 견적관리 조회 API - 각각 리스트의 개수도 같이 반환하도록 수정
- 요청된 견적서 조회 API - 요청한 고객 정보도 같이 반환하도록 수정
- 예상 견적 작성 API
- 유저
- ‘회원 정보와 동일’ 체크박스 선택 시 회원 정보 반환 API
- 시공 완료 팝업 API
- 제안된 견적 리스트 조회 API
- 제안된 견적 상세 조회 API
- 시공사 별점 평균 계산 API
→ 리뷰가 생성되면 자동으로 별점을 업데이트 해서 저장하거나, 조회 API를 호출할 때마다 계산하여 반환하는 방법이 있는데 더 고민해봐야겠다.
4. 빌더패턴 - @Builder.default
: @Builder 어노테이션은 빌더패턴을 통해 클래스를 생성함으로써 편리하고 명확하게 객체를 생성하도록 도와준다.
→ 필드 이름을 명시적으로 넣을 수 있어서 생성자 오버로딩시 타입을 신경쓰지 않아도 된다.
빌더패턴은 다음과 같이 코드를 생성한다.
class Example<T> {
private T foo;
private final String bar;
private Example(T foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public static <T> ExampleBuilder<T> builder() {
return new ExampleBuilder<T>();
}
public static class ExampleBuilder<T> {
private T foo;
private String bar;
private ExampleBuilder() {}
public ExampleBuilder foo(T foo) {
this.foo = foo;
return this;
}
public ExampleBuilder bar(String bar) {
this.bar = bar;
return this;
}
@java.lang.Override public String toString() {
return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
}
public Example build() {
return new Example(foo, bar);
}
}
}
생성자, 각 필드의 setter 메소드로 구성된 inner클래스를 생성하고, 그 안에서 원본 클래스의 인스턴스를 반환하는데, 이 inner클래스에는 객체 타입을 초기화하는 코드가 없고, null로 초기화 된다.
따라서
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Example{
private List<PastConstructionImage> pastConstructionImageList = new ArrayList<>();
}
다음과 같이 클래스에서 new ArrayList<>로 초기화해도 null로 초기화되어 반환된다.
→ 객체를 원하는 타입, 원하는 값으로 초기화하고 싶다면 @Builder.Default를 사용하면 된다.
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Example{
@Builder.Default
private List<PastConstructionImage> pastConstructionImageList = new ArrayList<>();
}
→ Example( pastConstructionImageList = [] ) 리스트로 초기화되어 반환!
5. Swagger 추가
swagger를 통해 개발한 api를 공유드리기로 했다. 아직은 날것의 스웨거..
'TIL' 카테고리의 다른 글
[TIL/adone] 2022-08-25~26 dto 디렉토리 구조 변경, @Embeddable (0) | 2022.08.26 |
---|---|
[TIL/fairer] 2022-05-14 jpa로직 구현 (0) | 2022.05.16 |
[TIL] 2022-01-12 (3) | 2022.01.13 |