관리 메뉴

코딩하는 락커

[Spring Boot를 이용한 RESTful Web Services 개발] 11~12강 본문

🍃 Spring/🌱 Spring Boot를 이용한 RESTful Web Service

[Spring Boot를 이용한 RESTful Web Services 개발] 11~12강

락꿈사 2022. 2. 5. 10:56

User Domin

  • Domain : Domain Knowledge, 즉 인간 활동 영역, 혹은 자율적인 컴퓨터 활동과 같은 어떤 특정한 전문 분야에서 사용되어지는 업무 지식을 뜻함
  • 사용자 관리를 위한 Domain Knowledge(User)는 사용자 정보를 어떤 형태로 저장하고 어떤 데이터를 저장할 것인지에 대해서 나타낸 것. 사용자의 이름, id, 회원가입 날짜 같은 정보를 저장.
package com.example.restfulwebservice.user;

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;

@Data
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Date joinDate;
}

 

UserDaoService

  • Service : 비즈니스 로직을 작성하는 클래스 
  • ex) 사용자 전체 목록 조회, 사용자 정보 추가, 사용자 정보 상세 보기 등 
  • Dao : 데이터 베이스 관련 로직을 작성하는 클래스
  • 데이터베이스를 연동하지 않을 경우 Dao 클래스와 Service 클래스를 함께 작성
package com.example.restfulwebservice.user;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class UserDaoService {
    private static List<User> users = new ArrayList<User>;

    private static int userCount = 3;

    //데이터베이스에 3개의 데이터가 들어있다고 가정
    static {
        users.add(new User(1, "roxy", new Date()));
        users.add(new User(2, "yujin", new Date()));
        users.add(new User(3, "kyj", new Date()));
    }

    // 모든 사용자를 조회하는 메소드
    public List<User> findAll(){
        return users;
    }

    // 새로운 사용자를 추가하는 메소드
    // 매개변수로 전달된 user 안에 id가 존재하지 않을 경우 ++userCount 하여 id 생성. 그리고 그 값을 DB역할을 하는 List<user> users에 추가하고 id가 셋팅된 상태의 정보를 return
    public User save(User user){
        if(user.getId()==null){
            user.setId(++userCount);
        }

        users.add(user);
        return user;
    }

    //id로 사용자를 찾는 메소드
    public User findOne(int id){
        for(User user : users){
            if(user.getId() == id){
                return user;
            }
        }
        return null;
    }
}

 

User Controller

  • Bean : 스프링에서 선언되어 관리되는 인스턴스. 용도에 따라서 Contoller Bean, Service Bean, Repository Bean으로 선언해서 사용함.
  • 의존성 주입을 통해서 스프링 프레임워크가 Bean을 관리하게 함. 의존성 주입은 xml 설정 파일, Class에서 setter, 생성자, 메소드 등을 통해서 가능함.
  • 스프링 컨테이너에 등록된 Bean들을 사용하기 위해서는 컨테이너에 등록된 Bean의 참조값을 받아와서 사용해야 함.
  • User Controller도 스프링 부트가 초기에 실행하면서 메모리에 등록한 Bean의 형태로 사용되어짐
  • User Controller의 User Service도 의존성 주입을 이용해서 할당함.
package com.example.restfulwebservice.user;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
    private UserDaoService service;

    //생성자를 통한 의존성 주입
    //생성자의 매개변수를 통해서 전달하고자 하는 객체의 인스턴스를 넣어주고, 전달되어진 인스턴스를 멤버 필드로 할당하면 됨.
    //매개변수로 넣어준 UserDaoService 클래스에 @Service 어노테이션 붙여줘야 함
    public UserController(UserDaoService service){
        this.service = service;
    }

    //전체 사용자 목록을 조회하는 메소드 등록
    //endpoint로 /users를 호출했을 경우 이 메소드가 실행됨
    @GetMapping("/users")
    public List<User> retrieveAllUsers(){
        return service.findAll(); //service의 전체 사용자 목록 조회 메소드 반환
    }

    //사용자 상세보기
    //사용자의 고유한 key값(id) 필요
    //endpoint로 /users/{id}를 호출했을 경우 이 메소드가 실행됨
    //GET /users/1 or /users/10
    //path variable은 항상 문자 형태로 전달. 여기서 선언한 path variable의 타입으로 자동 변환됨
    @GetMapping("/user/{id}")
    public User retrieveUser(@PathVariable int id){ //path variable을 사용하고 있기 때문에 @PathVariable 사용
        return service.findOne(id);
    }
}

UserController bean을 등록하면서 생성자 매개변수로 userDaoService가 전달된 것을 확인할 수 있음

 

 

Comments