이번에는 사용자 데이터를 나타내기 위한 User Domain을 추가해보려고 한다.
도메인이라는 것은 각 회사에서 사용하는 주소, name을 뜻하는 것이 아니라 도메인 지식, 인간활동의 영역이나 컴퓨터 활동에 같은 특정한 전문분야에서 사용되어지는 업무지식이라는 의미이다.
사용자 정보를 어떤 형태, 데이터를 저장할 것인지 나타낸 것으로 이름, 날짜, 회원정보 등을 정의해본다.
※ intelliJ에서 패키지 작업을 하는 방법
원하는 이름의 패키지로 수정을 한다. 패키지 위에서 Alt + Enter 단축키를 입력하면 이러한 창이 뜬다. 내가 설정한 패키지로 이동시키냐는 문구이다.
첫번째것을 선택 후 내가 저장하고자 하는 파일 위치를 설정한다. main안에 있어야 하니 main으로 설정한다!
패키지들이 다 옮겨진 것들을 볼 수 있다.
[ 실습 ]
package com.example.restfulwebservice.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Date;
@Data
@AllArgsConstructor
public class User { //Lombok사용으로 간단하게 선언만 해줌
private Integer id;
private String name;
private Date joinDate;
}
package com.example.restfulwebservice.User;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
// 도메인 정보를 이용해서 사용자 전체 목록 조회, 추가, 상세보기와 같은 비즈니스 로직 추가 예정
// 비즈니스 로직은 Service에 구현
public class UserDaoService {
//관계형 데이터 베이스는 JPA시간에 하도록 함
private static List<User> users = new ArrayList<>();
private static int usersCount = 3;
static {
users.add(new User(1,"Kenneth", new Date()));
users.add(new User(2,"Alice", new Date()));
users.add(new User(3,"Elena", new Date()));
}
//전체 데이터 조회
public List<User> findAll(){
return users;
}
//사용자 등록
public User save(User user){
if(user.getId() == null){
user.setId(++usersCount); //덧셈으로 usersCount 추가
}
users.add(user);
return user;
}
//개별 데이터 조회
public User findOne(int id){
for(User user : users){
if(user.getId() == id){
return user;
}
}
return null;
}
}
이렇게 User 도메인 정보를 선언하고 Service에서 조회, 등록, 상세조회 서비스들 을 만들어보았다.
이번에는 사용자 요청을 처리할 수 있는 Controller 를 생성해보려고 한다.
Service 인스턴스를 선언 후 비즈니스 메서드를 호출하려고 한다.
package com.example.restfulwebservice.User;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
//User라는 인스턴스 값을 new라는 키워드로 생성하는 것이 아닌
// private UserDaoService service = new ;
//의존성 주입 DI 사용
private UserDaoService service;
public UserController(UserDaoService service){
this.service = service;
}
}
Spring 에서 선언되어 관리되고 있는 인스턴스를 Bean이라고 부르고 용도에 따라 Controller, Service, Repository 등과 같이 부른다. 스프링에서는 선언된 빈을 의존성 주입이라는 형태로 관리하고 있다.
의존성주입 : xml 파일을 통해 설정 가능하고, setter 함수, 생성자 등을 통해 가능
스프링 컨테이너, IoC에 등록된 Bean은 개발 도중에 변경 할 수 없어 일관성있는 인스턴스를 사용할 수 있다.
UserController 클래스에서 service를 생성하여 주입하면 오류가 나는데 이는 UserDaoService에서 @Service를 이용해 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 {
//User라는 인스턴스 값을 new라는 키워드로 생성하는 것이 아닌
// private UserDaoService service = new ;
//의존성 주입 DI 사용
private UserDaoService service;
//생성자를 통한 주입
public UserController(UserDaoService service){
this.service = service;
}
@GetMapping("/users") //endpoint : /users
//전체 사용자 목록 반환 메서드
public List<User> retrieveAllUsers(){
return service.findAll();
}
//GET /users/1 or /users/10 -> String 형태로 전달
@GetMapping("/users/{id}")
//사용자 1명 반환 메서드
public User retrieveUser(@PathVariable int id){
return service.findOne(id);
}
}
웹 브라우저에서 확인해보면 이러한 화면을 볼 수 있다.
개별 사용자를 조회해보면,
이런식으로 개별 사용자가 조회되는 것을 확인해볼 수 있다.
'프로그래밍 > SPRING BOOT' 카테고리의 다른 글
[인프런 : spring-boot] HTTP Status Code 제어/예외처리 활용 (0) | 2022.08.30 |
---|---|
[인프런 : spring-boot] POST-HTTP Method (0) | 2022.08.30 |
[인프런 : spring-boot] Path Variable 사용 (0) | 2022.08.30 |
[인프런 : spring-boot] Spring Boot 동작 원리 (0) | 2022.08.30 |
[인프런 : spring-boot] HelloWorld Bean 추가 (0) | 2022.08.29 |