웹개발/SpringBoot

SpringBoot 활용

bergerac 2025. 5. 20. 09:11

1. Springboot의 계층구조

클라이언트(요청)
  → Controller (프레젠테이션 계층)
    → Service (비즈니스 계층)
      → Repository (퍼시스턴스 계층)
        → DB(MySQL)

1 ) Presentation Layer - Controller

컨트롤러는 사용자의 HTTP 요청을 처음으로 받아들이는 계층이다. 요청 URL과 메서드(GET, POST, PUT, DELETE 등)에 따라 적절한 서비스 계층의 메서드를 호출한다. 이 계층은 로직을 처리하지 않고 흐름 제어에 집중한다.

@RestController
@RequestMapping("/api/user")
public class UserController {

    private final UserService userService;

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

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        return ResponseEntity.ok(userService.getUserById(id));
    }
}

2) Business Layer – Sersvice

비즈니스 계층은 핵심 로직을 담당한다. 사용자 요청에 따라 처리할 구체적인 동작이 이 계층에서 실행되며, DB와의 직접적인 통신은 Repository에게 위임한다. 예를 들어, 유저 정보를 조회하거나, 주문 처리를 하는 등의 업무 규칙이 여기에 포함된다.

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public UserDto getUserById(Long id) {
        User user = userRepository.findById(id)
                         .orElseThrow(() -> new RuntimeException("User not found"));
        return new UserDto(user);
    }
}

3) Persistence Layer – Repository

JPA를 기반으로 하는 Repository는 실제 데이터베이스와의 통신을 담당한다. 복잡한 SQL문을 직접 작성하지 않아도, Spring Data JPA가 제공하는 메서드 명명 규칙에 따라 자동으로 쿼리를 생성할 수 있다.

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

2. DispatcherServlet

Spring Boot의 핵심은 DispatcherServlet이라는 서블릿이다. 이 컴포넌트는 모든 HTTP 요청을 받아 적절한 컨트롤러로 라우팅하고, 컨트롤러가 반환한 결과를 사용자에게 다시 응답하는 역할을 한다.

DispatcherServlet의 동작 흐름:

  1. 클라이언트가 요청을 보냄
    사용자가 /api/user/1 같은 URL로 GET 요청을 보낸다.
  2. 서블릿 컨테이너가 요청을 DispatcherServlet에 위임
    Tomcat 같은 내장 WAS가 요청을 DispatcherServlet으로 전달한다.
  3. Handler Mapping 탐색
    요청 URL에 맞는 컨트롤러를 찾는다. /api/user/**는 UserController에 매핑될 수 있다.
  4. HandlerAdapter를 통해 실행 준비
    컨트롤러를 직접 실행하지 않고, 스프링이 제공하는 어댑터를 통해 실행 환경을 설정한다.
  5. Controller 실행 → 결과 반환
    실제 컨트롤러 메서드가 실행되어 ResponseEntity나 ModelAndView를 반환한다.
  6. View Resolver가 응답 처리
    반환 결과를 JSON으로 변환하거나 뷰 템플릿(.jsp, .html)을 렌더링한다.
  7. 클라이언트에게 응답 전송
    최종 결과가 HTTP 응답으로 사용자에게 전달된다.

Postman: API 테스트 필수 도구

개발 초기에는 프론트엔드가 완성되지 않아도 백엔드 API가 정상 작동하는지 확인할 필요가 있다. 이때 사용하는 것이 Postman이다.

  • 요청 구성: URL, HTTP 메서드 선택(GET, POST 등), 헤더 및 바디 설정 가능
  • JWT 테스트: Authorization 탭에서 Bearer Token을 넣고, 인증이 필요한 요청을 테스트할 수 있다
  • 자동화 테스트: 컬렉션을 만들어 일련의 요청들을 저장하고 자동 실행 가능
  • 설치 주소: https://www.postman.com/downloads

예를 들어, 회원가입 API를 테스트하고 싶다면:

  1. POST http://localhost:8080/api/user/signup
  2. Body → raw → JSON 선택
{
  "username": "bergerac",
  "password": "1234",
  "email": "bergerac@example.com"
}

'웹개발 > SpringBoot' 카테고리의 다른 글

Jpa Repository  (0) 2025.05.22
ORM (Object-Relational Mapping)  (4) 2025.05.21
IoC(제어의 역전),DI(의존성 주입)  (1) 2025.05.19
서블릿(Servlet)vs 스프링부트(SpringBoot)  (1) 2025.05.18
HTTP 통신  (0) 2025.05.17