스프링 부트 백엔드 개발 강좌, 카페와 빵집으로 이해하는 계층

오늘날의 소프트웨어 개발에서 백엔드 시스템은 사용자가 웹 애플리케이션이나 모바일 애플리케이션을 사용할 때 뒤에서 silently 작동하며 데이터 처리를 담당합니다. 이 강좌에서는 스프링 부트를 사용하여 백엔드를 개발하는 방법을 배우고, 이를 카페와 빵집의 비유를 통해 계층 구조를 이해해볼 것입니다.

1. 스프링 부트란?

스프링 부트(Sprint Boot)는 스프링 프레임워크를 기반으로 한 Java 기반의 프레임워크로, 복잡한 설정 없이 애플리케이션을 신속하게 구축할 수 있도록 돕습니다. 스프링 부트는 기능을 추가하기 위한 다양한 스타터 패키지와 기본적으로 제공하는 설정으로, 사용자 정의에 필요한 수고를 덜어줍니다.

2. 백엔드 개발 개요

백엔드 개발은 데이터 저장, 비즈니스 로직 처리, API 제공 등 다양한 작업을 포함합니다. 배달 음식 주문 웹사이트를 예로 들면, 사용자는 프론트엔드에서 메뉴 선택과 결제를 진행하며, 백엔드는 이를 처리하여 주문 내역을 저장하고 주방에 전달합니다.

3. 계층적 아키텍처 이해하기

계층적 아키텍처는 소프트웨어 설계의 일반적인 패턴으로, 각 레이어가 특정 역할을 수행합니다. 우리 예시로 ‘카페와 빵집’ 시스템을 생각해 보겠습니다.

  • 프레젠테이션 레이어: 사용자가 주문을 하기 위해 카페에 들어옵니다. 이는 웹 브라우저에서 표현되는 UI입니다.
  • 비즈니스 레이어: 바리스타가 고객의 요구에 따라 주문을 처리합니다. 이는 비즈니스 로직을 담당하는 서비스 계층입니다.
  • 데이터 레이어: 고객의 주문 정보가 저장되는 곳입니다. 서버의 데이터베이스에 영구적으로 저장됩니다.

4. 스프링 부트 프로젝트 생성하기

스프링 부트 프로젝트는 Spring Initializr를 통해 쉽게 생성할 수 있습니다. 다음은 Gradle을 사용하는 예시입니다.

curl https://start.spring.io/starter.zip \
    -d dependencies=web,jpa,mysql \
    -d name=cafe-bakery \
    -d packageName=com.example.cafe \
    -o cafe-bakery.zip

5. 프레젠테이션 레이어 구축

프레젠테이션 레이어는 웹 브라우저에서 요청된 내용을 처리합니다. Spring MVC를 사용하여 RESTful API를 구현할 수 있습니다.

@RestController
@RequestMapping("/api/orders")
public class OrderController {
    
    @Autowired
    private OrderService orderService;

    @PostMapping
    public ResponseEntity createOrder(@RequestBody Order order) {
        Order createdOrder = orderService.createOrder(order);
        return new ResponseEntity<>(createdOrder, HttpStatus.CREATED);
    }
}

6. 비즈니스 로직 구현하기

비즈니스 레이어는 실제 비즈니스 로직을 담당합니다. 다음은 주문을 생성하는 서비스 레이어의 예시입니다.

@Service
public class OrderService {
    
    @Autowired
    private OrderRepository orderRepository;

    public Order createOrder(Order order) {
        // 비즈니스 로직
        return orderRepository.save(order);
    }
}

7. 데이터 레이어 구축

데이터 레이어는 데이터베이스와 상호 작용합니다. 다음은 주문을 처리할 수 있는 JPA 레포지토리입니다.

@Repository
public interface OrderRepository extends JpaRepository {
}

8. MySQL 데이터베이스 설정

스프링 부트와 MySQL 데이터베이스를 연결하기 위해 application.properties 파일을 설정해야 합니다.

spring.datasource.url=jdbc:mysql://localhost:3306/cafe_bakery
spring.datasource.username=root
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update

9. 테스트와 배포

스프링 부트 애플리케이션은 JUnit과 Mockito를 사용하여 테스트할 수 있습니다. 각각의 계층을 테스트함으로써 코드가 올바르게 작동하는지 확인할 수 있습니다.

@SpringBootTest
public class OrderServiceTest {

    @Autowired
    private OrderService orderService;

    @MockBean
    private OrderRepository orderRepository;

    @Test
    public void createOrder_ShouldReturnOrder_WhenOrderIsValid() {
        Order order = new Order(...);
        when(orderRepository.save(any())).thenReturn(order); // Mock behavior
        Order createdOrder = orderService.createOrder(order);
        assertNotNull(createdOrder);
    }
}

10. 결론

이번 강좌에서는 스프링 부트를 통한 백엔드 개발의 기본적인 흐름과 계층적 아키텍처를 카페와 빵집의 비유로 설명했습니다. 각 레이어가 어떻게 협력하여 전체 시스템이 작동하는지 이해하는 것이 중요합니다. 이제 여러분은 간단한 백엔드 시스템을 구축하고 운영할 준비가 되어 있습니다.

11. 추가 자료