Projects16 AWS EC2를 이용한 Springboot + Mysql 서비스 배포 이번에는 Springboot기반의 쇼핑몰 프로젝트를 EC2를 이용해서 배포해 보았다. 중간 중간에 발생하는 에러가 굉장히 많았지만, Stackoverflow와 많은 블로그를 참고해가며 해결했다. 후에 도움이 될 것같아 과정 설명을 해보겠따. 전체적인 flow -> EC2에 직접 mysql을 설치한 후, springboot와 연동하고, war파일을 이용해서 배포한다. 😊배포 준비 환경 AWS EC2 ubuntu20.04 jdk 11 Springboot + Maven jsp Mysql 1. 로컬에서 Ubuntu Mysql 접속, 관리하기 이 단계는 선택적으로 해도 되고 안해도 되지만, 본인의 경우 로컬에서 HeidiSQL을 사용해 원격 DB를 관리하고자 진행했다. 1-1) ubuntu mysql 외부 접속하.. 2023. 3. 31. Can not issue data manipulation statements with executeQuery() 에러 해결 문제 발생 관리자페이지에서 상품 삭제버튼을 클릭하니 삭제 실패라는 에러 문구와 함께 해당 에러가 발생했다. 실제 DB에도 확인해 본 결과 상품이 제대로 삭제되지 않았다. 원인 분석 이 오류는 INSERT, UPDATE, DELETE문을 사용할 때 executeUpdate() 메서드를 사용하지 않았기 때문에 발생한다. SELECT 쿼리를 보낼 때에는 결과를 받아와야 하기 때문에 executeQuery() 메서드를 사용해야 한다.(조회한 행의 갯수를 반환) INSERT, UPDATE, DELETE 쿼리를 보낼 때에는 결과값이 없기 때문에 executeUpdate() 메서드를 사용해야 한다. 문제 해결 INSERT, UPDATE, DELETE 쿼리를 실행할 때는 executeUpdate() 메서드를 사용하도록.. 2023. 3. 30. 트랜잭션 스크립트 패턴 > 도메인 모델 패턴으로 변환해보기 기존에 구현했던 쇼핑몰은 서비스 계층에서 대부분의 비즈니스 로직을 처리하게 만들었다. 이를 트랜잭션 스크립트 패턴이라고 하는데, 사실 쇼핑몰을 구성하는 엔티티에는 엔티티 자체를 설명해주는 속성값만 명시해놨을 뿐 그 어떤 생성자나 메서드를 적극적으로 활용하지 못했다. 사실 서비스 계층에서 처리하면 아무런 문제가 없지만, 서비스 로직을 재사용하기엔 코드의 복잡성이 크고, 가독성이 좋지 못하다는 느낌을 받았다. 그러다 김영한 강사님의 [JPA활용] 강의를 수강했고, 엔티티가 비즈니스 로직을 갖고 객체 지향의 특성을 적극 활용하는 도메인 모델 패턴에 대해서 알게 되었다. 도메인 모델을 사용하는 모습을 보고 객체 지향에 기반하여 추후에 재사용, 확장성, 유지보수가 편리할 것 같다는 생각으로,, 쇼핑몰 프로젝트를 .. 2023. 3. 3. [JUnit] Spring Security 로그인 테스트 프로젝트에 Spring Security를 활용하여 로그인을 구현했기 때문에 spring security환경에서의 로그인 테스트가 필요했다. MockMvc로 테스트 하고자 하여 MockMvc객체에 대해서 공부했다. MockMvc 객체란? 서블릿 컨테이너의 구동 없이, 시뮬레이션된 MVC 환경에 모의 HTTP 서블릿 요청을 전송하는 기능을 제공하는 유틸리티 클래스다. 즉, MockMvc객체를 생성하여 사용하면, WAS역할을 대신하기 때문에 Tomcat을 구동하지 않고 테스트를 할 수 있다. 자주 사용하는 메서드 perform : 요청을 처리한다. 리턴값으로 ResultActions 객체를 받으며, 이 객체는 리턴 값을 검증하고 확인할 수 있는 andExpect()를 제공한다. andExpect : 응답을 검.. 2023. 2. 27. [장바구니] 장바구니 기능구현(상품추가, 수량변경) 장바구니의 기능들을 구현한 것을 정리해보자. 1. 상품추가 상품상세페이지에서 장바구니를 누르면 장바구니에 추가가 되도록 구현하는 것이 목표이다. 로그인한 유저에 한해서 장바구니 이용을 제한했고, ajax로 상품데이터를 서버에 전송했다. ajax통신 시에 url에 파라미터를 주어서 넘기는 방식은 파라미터에 특수문자같은 문자가 들어올 경우 문제가 발생할 수 있어서 위험한 방법이라고는 했지만 데이터와 같이 같이 넘겨보았다. 상품추가 로직 기존 장바구니에 없는 상품이라면 새롭게 장바구니를 만들어서 저장 기존 장바구니에 있는 상품이라면 기존 장바구니에 수량을 더해주고 저장 JS function onCart(){ var productId = $("#productId").val(); var principalId = .. 2023. 1. 13. [주문] 아임포트 결제 & 결제 성공 시 주문 로직 구현 쇼핑몰 프로젝트에 주문기능을 넣어보았다. 구현했던 것을 정리해보면 크게 3가지로 나눌 수 있었다. 아임포트를 이용한 결제연동& 금액확인을 위한 결제검증 배송정보에 대한 유효성 검증 결제 성공시에 작동하는 주문 비즈니스 로직 1. 아임포트를 이용한 결제연동 & 결제검증 우선 실제로 결제가 되어야 했기에 무료로 사용 가능한 결제대행 API인 아임포트를 이용했다. 원하는 PG사를 선택하고, 가맹점 식별 코드를 이용해서 내 프로젝트에서 사용가능하도록 했다. 우선 자바스크립트 라이브러리를 추가해준다. 결제페이지에 js를 연동해서 결제 함수를 작성해준다. 결제시에 form태그를 활용해서 필요한 데이터를 서버에 줄 수 있었지만, iamport매뉴얼에 자바스크립트를 활용한 예시가 있었기 때문에 모든 데이터를 불러와서 .. 2023. 1. 9. 이전 1 2 3 다음