본문 바로가기
기록해보기

유저 조회 API 개발과 테스트

by titlejjk 2023. 6. 2.

이번에는 유저 조회 API를 만들어 보겠다.

먼저 유저 조회 명세에 대해 적어보겠다.

  • HTTP Method : GET
  • HTTP Path : /user
  • 쿼리 : 없음
  • 결과반환
JSON
[{
	"id" : Long,
    "name" : String (null 불가능)
    "age" : Integer
},...]

조회 API같은 경우에는 HTTP Method는 GET 이여야하며 HTTP Path 는 /user 그리고 이 API를 호출하면 전체 user 데이터를 줄 것이기 때문에 쿼리는 딱히 받지 않는다. 함수의 매개변수가 없는 것이다.

결과는 위에 코드와 같이 List안에 ID, NAME, AGE를 가지고 있는 즉 사용자를 표현한 객체들이 쭉 들어 있어야 하는데 여기서 두가지 포인트가 있다.

첫번째로는 위 코드는 List안에 객체들이 들어있는 형식인데 이것이 JSON으로 결과반환이 되도록 되어있다.. 이것이 어떻게 가능하냐면 Controller에서 getter가 있는 객체를 반환하면 JSON이 된다.

두번째로는 user객체에서 id를 만들지 않았는데 id라는 것이있다. 이 id라는 것은 일반적으로 각데이터들 끼리 겹치지 않는 유일한 번호를 의미한다. 유저가 5명이 있으면 첫번째부터 1,2,3,4,5 라고 번호를 부여받게된다. 유저별로 겹치지 않는 유일한 번호이다.

List에 담겨있는 유저의 순서를 id로 반환해줄 것이다.

 

이제 userController에서 유저를 조회할 API 만들어 보겠다.

먼저 @GetMapping("/user")로 똑같이 해주고 그리고 함수를 만들어준다. (틀만 만들어둔 상태)

@GetMapping("/user")
    public void getUser(){
        
    }

위 코드 안에서 user 정보를 id, name, age를 넣어줄 것인데 이제 필요한 것은 데이터를 담아둘 DTO를 만들어 보겠다.

이번에 작성하는 API는 응답하는 API이기때문에 새로운 response라는 package를 만들어서 시작하겠다.

Class이름은 UserResponse이고 이안 에 id와 name이랑 age가 들어가고 이 세가지에 대해서 생성자와 getter를 만들어준다.

package com.group.libraryapp.dto.user.response;

public class UserResponse {

    private long id;
    private String name;
    private Integer age;

    public UserResponse(long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

다음으로 UserController Class에 가서 만들어둔 getUser의 메소드를 UserResponse를 반환하게 바꾸어 주고 

메소드 구현부에는 List data type 인 users 객체를 이용해 UserResponse 바꾸어 반환해 주도록 하겠다.

그 다음에 반복문을 돌면서 새로운 UserResponse를 만들어주는데 이때

id를 1부터 시작하도록 셋팅해주고 이름,나이에는 원래있던users에 담겨있는 index번째를 가져와서 반복문을 돌도록 구현해보는 메소드를 만들어 보겠다.

 

@GetMapping("/user")
    public List<UserResponse> getUser(){
        List<UserResponse> responses = new ArrayList<>();
        for(int i = 0; i < users.size(); i++){
            responses.add(new UserResponse(i + 1, users.get(i).getName(), users.get(i).getAge()));
        }
        return responses;
    }

비어있는 List를 만들고 저장 API에 저장해두었던 List users를 반복문을 통해 하나씩 만들어 UserResponse를 만들고 만들어 두었던 결과 List에 추가해주었고 최종적으로 responses 를 return해주는 메소드를 만든 것이다.

반복문에서 .getName(), getAge()를 받기 위해 User Class에 getter를 만들어주어야한다.

package com.group.libraryapp.domain.user;

public class User {

    private String name;
    private Integer age;

    public User(String name, Integer age) {
        if(name == null || name.isBlank()){
            throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다", name));
        }
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
}

getUser 메소드를 조금더 깔끔하게 만들어 보겠다.

UserResponse 생성자에서 이름과 나이를 직접받는게 아니라 User를 직접 받도록 하기위해 name에 user.getName()을 age에 user.getAge()로 바꾸어주고

이것을

 

 

 

 

이렇게

 

 

 

 

 

 

 

그리고 UserController로 가서

이렇게 바꿔주었다.

이렇게 user만 찾아서 넣어주면 생성자에서 알아서 name은 name으로 age는 age로 mapping이 될 것이다.

이제 한번 테스트를 해보겠다.

PostMan으로가 서버를 재시작해주고

미리 만들어두었던 http://localhost:8080/v1/index.html도 켜준뒤에

사용자 등록에 이름 나이를 입력해주면

등록에 성공했다!

이렇게 user의 이름, 나이를 입력하면 저장할 수 있는 API를 만들어보았다!

'기록해보기' 카테고리의 다른 글

Database와 MySQL  (1) 2023.06.02
정리한번 하고 갈께요 🧑‍💻  (0) 2023.06.02
유저 생성 API 개발  (0) 2023.06.01
POST API를 개발하고 테스트하기  (0) 2023.05.28
GET API 개발하고 테스트  (0) 2023.05.28

댓글