본문 바로가기

Study Information Technology

간단한 전자상거래 애플리케이션 구축하기 Spring Boot 활용

728x90
반응형

간단한 전자상거래 애플리케이션 구축하기: Spring Boot 활용

Overview

이 글에서는 Spring Boot를 사용하여 간단한 전자상거래 애플리케이션을 구축하는 방법에 대해 자세히 설명하겠습니다. 이 과정에서는 사용자 인증, 제품 관리, 주문 처리와 같은 중요한 기능들을 다루며, 이를 통해 실무 경험을 쌓을 수 있습니다. Spring Boot는 자바 기반의 프레임워크로, 빠른 개발과 배포를 가능하게 해줍니다. 다음의 단계별 설명을 통해 구현 방법과 각 기능에 대한 이해를 높여보세요.

1. 프로젝트 초기 설정

Spring Boot 애플리케이션을 시작하기 위해서는 먼저 프로젝트를 초기화해야 합니다. Spring Initializr를 사용하여 필요한 의존성을 추가한 기본 프로젝트를 생성할 수 있습니다.

  • 의존성 선택: Spring Web, Spring Data JPA, Spring Security, H2 Database 등을 선택합니다.
  • 프로젝트 메타데이터 설정: Group, Artifact, Name 등을 입력하고, Gradle 또는 Maven을 선택합니다.

이후 생성된 ZIP 파일을 다운로드하여 IDE에서 열어줍니다.

2. 사용자 인증 구현

전자상거래 애플리케이션에서 사용자 인증은 매우 중요한 부분입니다. Spring Security를 사용하여 사용자 인증 기능을 구현할 수 있습니다.

2.1. User 엔티티 및 Repository 생성

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String username;
private String password;

// Getters and Setters
}
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUsername(String username);
}

2.2. Security Configuration

Spring Security 설정을 추가하여 사용자 인증을 처리합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/login", "/register").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
}
}

2.3. 사용자 등록과 로그인 처리

컨트롤러를 통해 사용자가 회원가입 및 로그인을 할 수 있도록 처리합니다.

@Controller
public class AuthController {
@Autowired
private UserRepository userRepository;

@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String password) {
User user = new User();
user.setUsername(username);
user.setPassword(new BCryptPasswordEncoder().encode(password));
userRepository.save(user);
return "redirect:/login";
}
}

이제 사용자는 /register 경로에서 회원가입할 수 있으며, 인증 후에는 /login 페이지로 리다이렉트됩니다.

3. 제품 관리 기능 구현

제품을 관리하는 기능도 전자상거래 애플리케이션에서 필수입니다. 제품 엔티티를 생성하고 이를 관리할 수 있는 Repository와 Service를 구현합니다.

3.1. Product 엔티티 및 Repository

@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private double price;
private String description;

// Getters and Setters
}
public interface ProductRepository extends JpaRepository<Product, Long> {
}

3.2. Product 서비스 및 컨트롤러

서비스 클래스를 통해 제품 관리 로직을 구현합니다.

@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;

public List<Product> findAll() {
return productRepository.findAll();
}

public Product save(Product product) {
return productRepository.save(product);
}

public void delete(Long id) {
productRepository.deleteById(id);
}
}

이제 제품을 추가, 수정 및 삭제할 수 있는 API를 구현합니다.

@Controller
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;

@GetMapping
public String list(Model model) {
model.addAttribute("products", productService.findAll());
return "product/list";
}

@PostMapping("/add")
public String add(@ModelAttribute Product product) {
productService.save(product);
return "redirect:/products";
}

@GetMapping("/delete/{id}")
public String delete(@PathVariable Long id) {
productService.delete(id);
return "redirect:/products";
}
}

이제 제품을 관리할 수 있는 기본적인 기능이 구현되었습니다.

4. 주문 처리 기능 구현

주문 처리 기능은 전자상거래의 핵심입니다. 사용자가 제품을 선택하고 주문을 생성하는 기능을 구현합니다.

4.1. Order 엔티티 및 Repository

@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
private User user;

@ManyToMany
private List<Product> products;

private LocalDate orderDate;

// Getters and Setters
}
public interface OrderRepository extends JpaRepository<Order, Long> {
}

4.2. Order 서비스 및 컨트롤러

주문 생성을 처리하는 서비스를 추가합니다.

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

public Order save(Order order) {
return orderRepository.save(order);
}
}

주문 생성 API를 구현합니다.

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

@PostMapping("/create")
public String createOrder(@ModelAttribute Order order, Principal principal) {
// 현재 사용자 설정
User user = userRepository.findByUsername(principal.getName()).orElse(null);
order.setUser(user);
order.setOrderDate(LocalDate.now());
orderService.save(order);
return "redirect:/orders";
}
}

이제 사용자는 제품을 선택하여 주문을 생성할 수 있습니다.

5. 에러 처리 및 최적화

애플리케이션 개발 중에 발생할 수 있는 일반적인 에러와 그 해결 방법을 소개합니다.

5.1. 데이터베이스 관련 에러

예시 에러: org.springframework.dao.DataIntegrityViolationException: Duplicate entry ...

  • 해결책: 데이터베이스에 중복된 데이터가 들어가는 경우 발생합니다. 이를 피하기 위해 @UniqueConstraint를 추가하여 중복 체크를 구현해야 합니다.
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
public class User {
// 필드 및 메소드
}

5.2. 인증 실패 에러

예시 에러: org.springframework.security.authentication.BadCredentialsException: Bad credentials

  • 해결책: 잘못된 사용자 이름이나 비밀번호를 입력한 경우 발생합니다. 이를 처리하기 위해 로그인 페이지에서 적절한 메시지를 사용자에게 제공해야 합니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.failureUrl("/login?error=true")
.defaultSuccessUrl("/home", true);
}

이렇게 하면 로그인 실패 시 오류 메시지를 사용자에게 보여줄 수 있습니다.

6. 결론

Spring Boot를 사용한 간단한 전자상거래 애플리케이션의 구축 과정에서 사용자 인증, 제품 관리, 주문 처리 등 핵심 기능을 구현하는 방법을 알아보았습니다. 이 과정에서 발생할 수 있는 일반적인 에러와 그 해결 방법도 살펴보았습니다. 이러한 실습은 실제 애플리케이션 개발에 많은 도움이 될 것입니다.

참고문서

반응형