스테이츠 코드(백엔드)/Main Project

[Main Project] 중요한 정보 (1)

개발하는 동그리 2022. 9. 21. 22:29
반응형
Service

  • 다른 도메인 Service 호출이 필요한 경우
    • A Domain Service 에서 B Domain Service를 호출 하는 방법 ( 1 순위 )
    • A Domain Controller에서 B Domain Service를 호출하는 방법 ( 2 순위 )
    • 가장 좋은 방법은 A/B Service 통합 클래스를 추가로 생성해서 사용하는 방법이다.  ( 0 순위 )

--> 결론 : 통합 Service class를 만드는 것이 가장 BEST

 

DTO Class

  • DTO Class는 필요한 만큼 생성하자.
  • CustomerSignUpRequest / CompanySignUpRequest 와 같이 기능을 디테일하게 이름을 구성할 것 
  • (추가 설명) Coding Test 가 아니기 때문에 네이밍할 때 줄이지 말고 알아보기 쉽게 만들 것
  • mapper 사용하는 것 보다 converter 사용을 추천 (특히 entity -> json 변환할 때)

 

여러개의 API 동시 호출

  • 일반적으로 프론트에서 API 호출을 하면 1개의 화면에 API 응답 값으로 화면을 구성한다. 
  • 프론트에서 여러 개의 API를 동시에 호출해서 한 화면에 구성할 수 있는 방법이 있다고 한다. (React)

 

도메인 분리

  • 직접적인 관계가 없다면 굳이 연관관계를 맺지 않는것이 유리하다. 
  • 연관관계 없이 연결하기 위해서 service class 에서 다른 도메인의 id를 이용해 다른 도메인 service에 접근하는 방법이 있다. 
  • 여러 도메인이 사용 될 경우 통합 service 를 따로 생성해 주는 것이 좋다.
  • input output adapter 를 사용 (추천)

 

일반 회원가입 / 기업 회원가입

 

  • 일반, 기업 도메인을 각각 생성
  • 일반 도메인에서 Spring Security를 구현
  • 일반 Controller 에서 일반 회원가입 API 와 기업 회원가입 API 를 각각 설정
    • 일반 API -> 일반 Service -> 일반 Repository 
    • 기업 API -> 일반, 기업 통합 Service -> 일반/ 기업 Service -> 일반/ 기업 Repository
  • 기업 API 호출시 일반 회원으로 등록과 동시에 기업 정보가 추가적으로 입력되어 기업 회원으로도 저장된다.
  • 기업회원의 엔티티의 경우 일반회원과 중복되는 정보를 입력하지 않고 일반회원 Id를 입력해서 기본 정보 조회

 

project Structure

  • JPA 연관 관계로 이어진 직접적인 관계가 있는 도메인은 하나의 Package로 묶어서 관리한다.
  • 위에 묶인 하나의 도메인 패키지에서 Controller / Service / Repository 패키지를 생성하고 연관관계가 있는 클래스를 패키지에 담아 관리한다.

 

 S3 데이터 업로드 / Postman 사용
@PostMapping("/create")
    public ResponseEntity createCard(@RequestPart(value = "request") registerRequest request,
                                     @RequestPart(value = "file") MultipartFile file,
                                     @AuthenticationPrincipal PrincipalDetails principalDetails) {


        DogCard dogCard = mapper.dogDtoToDogCard(dogCardDto);
        dogCardService.savedDogCard(dogCard,file,principalDetails.getCustomer());


        return new ResponseEntity<>(new SingleResponseDto<>
                ("create success"), HttpStatus.CREATED);
    }

위와 같이 @RequestPart(value = "file") MultipartFile file을 통해서 파일을 받아서 S3에 업로드 할 수 있다.
이때 value = "file" <-- 이 값과 / MultipartFile file <-- 이 값의 같아야 한다.

동시에  @RequestPart(value = "request") registerRequest request를 사용해서 text 값도 동시에 넣을 수 있다. 

 

 

반응형