Programing_Java

[Servlet] ๊ฐœ๋ณ„ ์ƒํ’ˆ & ์กฐํ•ฉ ์ƒํ’ˆ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€ ๋กœ์ง ํ†ตํ•ฉํ•˜๊ธฐ ๐Ÿš€ ๋ณธ๋ฌธ

๐Ÿญ Projects

[Servlet] ๊ฐœ๋ณ„ ์ƒํ’ˆ & ์กฐํ•ฉ ์ƒํ’ˆ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€ ๋กœ์ง ํ†ตํ•ฉํ•˜๊ธฐ ๐Ÿš€

Joyfullyever 2025. 3. 27. 23:38

1๏ธโƒฃ ๊ธฐ์กด ๋ฐฉ์‹ : ๊ฐœ๋ณ„ ์ƒํ’ˆ๊ณผ ์กฐํ•ฉ ์ƒํ’ˆ์„ ๋”ฐ๋กœ ๊ด€๋ฆฌ

• ๊ธฐ์กด ProductSingle๊ณผ ProductCombo๋ฅผ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ๊ฐ์˜ ์„œ๋ธ”๋ฆฟ์„ ๋งŒ๋“ฌ

• /AddCartSingleProductServlet → ๊ฐœ๋ณ„ ์ƒํ’ˆ ์ถ”๊ฐ€

• /AddCartComboProductServlet → ์กฐํ•ฉ ์ƒํ’ˆ ์ถ”๊ฐ€

: ์ฒ˜์Œ ๊ตฌํ˜„ ์‹œ ์ง๊ด€์ ์ด์—ˆ์ง€๋งŒ, ๋‘๊ฐœ์˜ ์„œ๋ธ”๋ฆฟ์ด ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ™•์ธ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€

 

2๏ธโƒฃ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌ

• ProductSingle๊ณผ ProductCombo๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐœ์„ 

• isComboProduct ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํ’ˆ ์œ ํ˜•์„ ๋จผ์ € ํŒ๋ณ„ ํ›„ → ๋™์ผํ•œ ๋กœ์ง์œผ๋กœ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹

@WebServlet("/AddCartProductServlet")
public class AddCartProductServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("application/json; charset=UTF-8");
		PrintWriter out = response.getWriter();

		HttpSession session = request.getSession();
		ArrayList<Object> shoppingCart = (ArrayList<Object>) session.getAttribute("shoppingCart");
		if (shoppingCart == null) {
			shoppingCart = new ArrayList<>();
			session.setAttribute("shoppingCart", shoppingCart);
		}

		try {
			int productNumber = Integer.parseInt(request.getParameter("productNumber"));
			int cartProductCount = Integer.parseInt(request.getParameter("cartProductCount"));
			boolean isComboProduct = Boolean.parseBoolean(request.getParameter("isComboProduct"));

			boolean alreadyIn = false;

			if (isComboProduct) {
				ProductComboDAO productComboDAO = new ProductComboDAO();
				ProductComboDTO productComboDTO = productComboDAO.selectOne(new ProductComboDTO(productNumber));

				if (productComboDTO == null) {
					throw new IllegalArgumentException("ํ•ด๋‹น ์กฐํ•ฉ ์ƒํ’ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
				}

				for (Object cartProduct : shoppingCart) {
					if (cartProduct instanceof ProductComboDTO) {
						ProductComboDTO alreadyInProduct = (ProductComboDTO) cartProduct;
						if (alreadyInProduct.getProductComboNumber() == productComboDTO.getProductComboNumber()) {
							alreadyInProduct.setProductComboCount(alreadyInProduct.getProductComboCount() + cartProductCount);
							alreadyIn = true;
							break;
						}
					}
				}

				if (!alreadyIn) {
					productComboDTO.setProductComboCount(cartProductCount);
					shoppingCart.add(productComboDTO);
				}

			} else {
				ProductSingleDAO productSingleDAO = new ProductSingleDAO();
				ProductSingleDTO productSingleDTO = productSingleDAO.selectOne(new ProductSingleDTO(productNumber));

				if (productSingleDTO == null) {
					throw new IllegalArgumentException("ํ•ด๋‹น ๊ฐœ๋ณ„ ์ƒํ’ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
				}

				for (Object cartProduct : shoppingCart) {
					if (cartProduct instanceof ProductSingleDTO) {
						ProductSingleDTO alreadyInProduct = (ProductSingleDTO) cartProduct;
						if (alreadyInProduct.getProductSingleNumber() == productSingleDTO.getProductSingleNumber()) {
							alreadyInProduct.setProductSingleCount(alreadyInProduct.getProductSingleCount() + cartProductCount);
							alreadyIn = true;
							break;
						}
					}
				}

				if (!alreadyIn) {
					productSingleDTO.setProductSingleCount(cartProductCount);
					shoppingCart.add(productSingleDTO);
				}
			}

			session.setAttribute("shoppingCart", shoppingCart);

			JSONObject jsonResponse = new JSONObject();
			jsonResponse.put("success", true);
			out.print(jsonResponse);
		} catch (NumberFormatException e) {
			response.sendError(HttpServletResponse.SC_BAD_REQUEST, "์ž˜๋ชป๋œ ์ž…๋ ฅ๊ฐ’์ž…๋‹ˆ๋‹ค.");
		} catch (IllegalArgumentException e) {
			response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
		} finally {
			out.flush();
		}
	}

 

3๏ธโƒฃ ๊ฐœ์„  ํ›„ ๊ธฐ๋Œ€ ํšจ๊ณผ

โœ… ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ – ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์—์„œ ๊ฐœ๋ณ„ ์ƒํ’ˆ๊ณผ ์กฐํ•ฉ ์ƒํ’ˆ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌ
โœ… ์ž…๋ ฅ๊ฐ’ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•ํ™”  NumberFormatException ๋ฐ null ์ฒดํฌ ์ถ”๊ฐ€
โœ… ์ƒํ’ˆ ์กฐํšŒ ์‹คํŒจ ์‹œ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ – ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ œ๊ณต

 

4๏ธโƒฃ ๋งˆ๋ฌด๋ฆฌ

• ProductSingle๊ณผ ProductCombo๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋ธ”๋ฆฟ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ๊ด€๋ฆฌ์— ์šฉ์ด