Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_2

2023. 3. 1. 17:04·공부/Spring
반응형

 

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Users Microservice - 사용자 조회

User의 전체 사용자 목록과 상세 정보 보기 기능을 추가해보자.

UserController의 각 메서드 uri 매핑 주소에 prefix 격으로 '/user-service/'가 들어간다. 그러므로 클래스 블럭에 있는 @RequestMapping() 어노테이션에 해당 uri를 기재하고, 각 메서드 XXXMapping()에 적혀있는 '/user-service/'는 지워주자.

@RequestMapping("/user-service/")
public class UserController { ... }

 

ResponseUser vo에 회원 주문 목록을 볼 수 있도록 필드를 하나 추가한다. 아직 ResponseOrder vo를 만들지 않아 빨간 줄이 뜨는데 mac 기준 커맨드 + 엔터 단축키를 입력하고 Create class 'ResponseOrder'를 클릭하면 해당 vo 클래스를 생성할 수 있다.

  • ResponseUser.java
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseUser {
    private String email;
    private String name;
    private String userId;

    private List<ResponseOrder> orders;
}

 

  • UserDto.java
private List<ResponseOrder> orders;

UserDto에도 미리 orders 필드를 추가해놓는다.

 

@JsonInclude(JsonInclude.Include.NON_NULL) 어노테이션은 객체를 JSON 포맷으로 변경할 때 필드의 값이 'null'일 경우 해당 필드는 JSON 포맷 시 제외된다. 

{
    "name" : "test",
    "age" : 14,
    "phoneNumber" : null
}

// 어노테이션 사용 시
{
    "name" : "test",
    "age" : 14
}

 

 

  • ResponseOrder.java
@Data
public class ResponseOrder {

    private String productId;
    private Integer qty;
    private Integer unitPrice;
    private Integer totalPrice;
    private LocalDateTime createdAt;

    private String orderId;
}

강의에서는 createdAt 필드를 Date 타입으로 생성했다. Date 타입은 deprecated 되었으므로 나는 LocalDateTime 패키지를 사용했다.

 

 

  • UserService.interface
UserDto getUserById(String userId);
Iterable<UserEntity> getUserByAll();

userId를 이용해 상세 정보를 가져오는 기능을 하는 메서드 getUserById는 UserDto 타입으로 반환해줄 것이다.

그리고 사용자의 전체 목록을 가져오는 메서드 getUserByAll()은 DB에 저장되어있는 데이터 그대로를 반환해줄 것이기 때문에 UserEntity 타입을 사용해 Iterable로 반환한다. 만약 DB에 가져오는 데이터를 가공할 것이라면 UserDto 타입으로 반환해도 좋다.

 

 

  • UserServiceImpl.java

UserService.interface에서 두 개의 메서드를 생성했으니 구현체에도 두 개의 메서드 getUserById와 getUserByAll 메서드를 구현한다.

@Override
public Iterable<UserEntity> getUserByAll() {
    return userRepository.findAll();
}

getUserByAll() 같은 경우는 이미 JPA에서 findAll()이라는 메서드를 제공하기 떄문에 별 다른 로직 없이 해당 메서드의 반환 값을 리턴해주면 끝이 난다.

 

@Override
public UserDto getUserById(String userId) {
    UserEntity userEntity = userRepository.findByUserId(userId);

    if(userEntity == null)
        throw new UsernameNotFoundException("User not found");

    // UserEntity -> UserDto로 변환
    UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);

    List<ResponseOrder> orders = new ArrayList<>();
    userDto.setOrders(orders);
    
    return userDto;
}

userRepository에 findByUserId() 메서드는 기본으로 제공해주지 않기 때문에 따로 만들어줘야한다. UserRepositoy.Interface에 해당 메서드를 추가해준다.

 

  • UserRepository.interface
UserEntity findByUserId(String userId);

 

 

Controller도 작성해주자.

  • UserController.java
@GetMapping("/users")
public ResponseEntity<List<ResponseUser>> getUsers() {
    Iterable<UserEntity> userList = userService.getUserByAll();

    //userEntity > ResponseEntity로 변경
    List<ResponseUser> result = new ArrayList<>();
    userList.forEach(v -> {
        result.add(new ModelMapper().map(v, ResponseUser.class));
    });
    return ResponseEntity.status(HttpStatus.OK).body(result);
}

 

 

서버 실행 후 포스트맨 확인

POST Method로 사용자를 하나 생성 후

 

전체 사용자를 조회한다.

 

 

  • UserController.java

하나의 사용자에 대한 상세 정보를 가져오는 method를 구현하자.

@GetMapping("/users/{userId}")
public ResponseEntity<ResponseUser> getUser(@PathVariable("userId") String userId) {
    UserDto userDto = userService.getUserById(userId);

    //userDto > ResponseUser로 변경
    ResponseUser result = new ModelMapper().map(userDto, ResponseUser.class);
    return ResponseEntity.status(HttpStatus.OK).body(result);
}

 

서버 재실행 후 확인

POST Method로 사용자 하나 추가 후 아이디를 복사해서 조회한다.

 

 

 

 


- 출처 : 인프런 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의

반응형
저작자표시 비영리 변경금지 (새창열림)
'공부/Spring' 카테고리의 다른 글
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_4
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_3
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_1
  • Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Users Microservice-1-2
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MSA
    Java
    react
    방통대
    기출문제
    스프링부트
    인프런
    코딩테스트
    프론트엔드
    springboot
    개발자
    운영체제
    토비의스프링부트
    JPA
    QueryDSL
    egov
    oracle
    토이프로젝트
    전자정부프레임워크
    백준
    알고리즘
    RESTful
    SQL
    IT
    SpringBoot를 이용한 RESTful Web Service 개발
    자바스크립트
    프로그래머스
    에러해결
    넥사크로
    Spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_2
상단으로

티스토리툴바