Controller, Service, DAO, DTO

고 연우·2022년 9월 22일
1

SpringBoot

목록 보기
5/8

Controller

  • 사용자의 요청(request)을 어떻게 처리할지 결정
  • 어노테이션
    • @Controller : Controller의 역할을 수행한다고 명시해주는 어노테이션
    • @RestController
    • @PostMapping
    • @GetMapping
    • @RequiredArgsConstructor : 초기화 되지 않은 final 필드나 @NonNull이 붙은 필드에 대해 생성자 생성
      * 주로 의존성 주입(Dependency Injection)편의성을 위해서 사용

      스프링 의존성 주입
      어떠한 빈(Bean)에 생성자가 오직 하나만 있고, 생성자의 파라미터 타입이 빈으로 등록 가능한 존재라면 이 빈은 @Autowired 없이도 의존성 주입이 가능

<Controller 코드 예시>

package com.test.demo;

import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
public class userController {

    private final userService userService;

    // 회원가입을 할 수 있는 API...
    @PostMapping("/join")
    public String join(@RequestBody userDto userInfo) {

        String userId = userService.join(userInfo);

        return userId;

    }

    // 회원가입된 유저중에 특정 유저 찾음
    @GetMapping("/find")
    public String findUser(@RequestParam String id) {

        String result = userService.findUser(id);

        if (result == null) {

            return "error";

        }

        return result;
    }
}

Service

  • 사용자의 요청(request)에 대해 어떤 처리를 할지 결정
  • 어노테이션
    • @Service
      <Service 코드 예시>
package com.test.demo;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class userService {

    private final userDao userDao;

	// 회원가입된 유저중에 특정 유저 찾기
    public String findUser(String id) {

        return userDao.select(id);

    }

	// 회원가입
    public String join(userDto userInfo) {

        String key = userInfo.getId();

        String value = userInfo.getUserName();

        return userDao.insert(key, value); // key 값 리턴됨

    }
}

DAO

  • Data Access Object의 약자로 DB의 data에 접근하기 위한 객체
  • 오버헤드를 줄일 수 있다는 장점
  • 어노테이션
    • @Repository

<DAT 코드 예시>

package com.test.demo;

import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.Map;

@Repository
public class userDao {

    private static Map<String, String> userDb = new HashMap<>();

    public String insert(String key, String value) {

        userDb.put(key, value);

        System.out.println("key : " + key);
        System.out.println("value : " + value);

        return key;

    }

    public String select(String key) {

        System.out.println(userDb);

        return userDb.get(key);

    }
}

DTO

  • Data Transfer Object이 약자로 계층 간의 데이터 교환을 위한 Java Bean
  • Controller -> Service -> Dao 계층 간 데이터 교환에 쓰이는 형식
    • Controller에서 Dto 객체 생성 후 Service에 파라미터 형식으로 넘김
  • 외부에 entity 구조 (db 테이블 구조) 를 노출시키지 않기 위함
  • 직렬화,역직렬화를 편리하게 하기 위함
  • 주고받는 데이터들의 캡슐화
  • 하나의 기능(도메인?)마다 각각의 Dto 구성하는 편이 좋음

<DTO 코드 예시>

package com.test.demo;

import lombok.*;
import org.springframework.lang.Nullable;

@Getter
@Setter
// @RequiredArgsConstructor
@Builder
@NoArgsConstructor
public class userDto {

    @NonNull
    private String id;

    @NonNull
    private String userName;

    // @Builder
    public userDto(String id, String userName) {
        this.id = id;
        this.userName = userName;
    }

}

Spring Boot의 기본적인 데이터 교환 계층


참고

1개의 댓글

comment-user-thumbnail
2022년 11월 29일

최고에용

답글 달기