Spring/spring_old

02. project coding

slow333 2023. 1. 25. 15:27

1. entity 구성

UUID를 통해 id 자동 생

@Getter
@Setter
@ToString
public class User {
  private String id;
  private String name;
  private String email;
  private String regDate;

  public User(){
    this.id = UUID.randomUUID().toString();
    this.regDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  }

  public User(String name, String email) {
    this();
    this.name = name;
    this.email = email;
  }

  public static User sample(){
    return new User("스프링 ", "vm@myvms.com");
  }

  public static void main(String[] args) {
    User user = new User("kim", "ok@abc.com");

    System.out.println(new Gson().toJson(user));
  }
}

2. store(bean repository)

interface 구성

public interface UserStore {

  String create(User newUser);
  void update(User newUser);
  User retrieve(String id);
  void delete(String id);
  List<User> retrieveAll();
}

store logic 구성(interface 구현체)

세부 구성은 service에서 구현(예: 예외처리)

@Repository
public class UserStoreLogic implements UserStore {

  Map<String, User> userMap ;

  @Autowired
  public UserStoreLogic(){
    this.userMap = new HashMap<>();
  }

  @Override
  public String create(User newUser) {
    this.userMap.put(newUser.getId(), newUser);
    return newUser.getId();
  }

  @Override
  public void update(User newUser) {
//   예외 처리는 서비스 에서 수행...
    userMap.put(newUser.getId(), newUser);
  }

  @Override
  public User retrieve(String id) {
    return userMap.get(id);
  }

  @Override
  public void delete(String id) {
    userMap.remove(id);
  }

  @Override
  public List<User> retrieveAll() {
    return new ArrayList<>(userMap.values());
  }
}

3. service 구현

interface 구성

public interface UserService {

  String register(User newUser);
  void modify(User newUser);
  User find(String id);
  void remove(String id);
  List<User> findAll();
}

service logic(interface 구현)

di 방식에는 

  • 방식(1) : lombok 의 @RequiredArgsContructor를 사용 

private final UserStore userStore; ==> final을 해야함

생성자 필요없음

  • 방식(2)   : 생성자를 통해...

  private final UserStore userStore;
 @Autowired
  public UserServiceLogic(UserStore userStore) {
    this.userStore = userStore;
  }

@RequiredArgsConstructor
@Service
public class UserServiceLogic implements UserService {

  private final UserStore userStore;
//  @Autowired
//  public UserServiceLogic(UserStore userStore) {
//    this.userStore = userStore;
//  }

  @Override
  public String register(User newUser) {
    return this.userStore.create(newUser);
  }

  @Override
  public void modify(User newUser) {
    this.userStore.update(newUser);
  }

  @Override
  public User find(String id) {
    return this.userStore.retrieve(id);
  }

  @Override
  public void remove(String id) {
    this.userStore.delete(id);
  }

  @Override
  public List<User> findAll() {
    return this.userStore.retrieveAll();
  }
}

3. controller 구성

@RestController
public class UserController {

  private final UserService userService;

  @Autowired
  public UserController(UserService userService) {
    this.userService = userService;
  }

  @PostMapping("/users")
  public String register(@RequestBody User newUser) {
    return userService.register(newUser);
  }

  @GetMapping("/users/{id}")
  public User find(@PathVariable String id) {
    return userService.find(id);
  }

  @GetMapping("/users")
  public List<User> findAll(){
    return userService.findAll();
  }

  @PutMapping("/users")
  public void modify(@RequestBody User newUser) {
    userService.modify(newUser);
  }

  @DeleteMapping("/users/{id}")
  public void remove(@PathVariable String id) {
    userService.remove(id);
  }
}

'Spring > spring_old' 카테고리의 다른 글

04. Spring Cloud, Microservices 관련  (0) 2023.01.25
03. Test 구성  (0) 2023.01.25
Spring boot project 개요  (0) 2023.01.25
07. Project를 spring-boot로 전환  (0) 2023.01.20
06. service logic 구현  (0) 2023.01.20