✨ Back-end/Spring-Boot93 [Spring] 쇼핑몰 - 21 상품 이미지 등록 쿼리 UploadUtil 클래스 먼저, imgVO를 선언과 동시에 null로 생성을 해주었다. 그래서 첨부가 안돼면 null로 리턴이 된다. 첨부가 됐을 때 객체를 만들어 줄것이다. 파일 업로드가 되고 나면, 첨부에 문제가 되지 않았을 때, try문에 내가 첨부하고자 하는 orginfilename 파일명을 imgVO에 넣어줬다. 원본 파일명도 넣어줄 것이다. AdminController 상품하나는 이미지 여러개를 가질 수 있다. admin-mapper foreach문의 item ="img" 여기서 img는 imgVO를 의미한다. select의 서브 쿼리 조회는 IMG_CODE를 의미한다. EX) IMG_001 ... IMG_002 ... 와 같은 형태로 나타난다. 위에서 imgList를 변수로 추가해줬기 때문.. 2023. 3. 30. [Spring] 쇼핑몰 - 20 상품 이미지 등록 UploadUtil 클래스 아주 간단하게 컨트롤러에서 코드 한줄로 이미지 등록을 해볼 것이다. UploadUtil 클래스 util 패키지를 생성해서 UploadUtil 클래스를 만들어 준다. 이후 uploadFile 메소드와 multiFileUpload 메소드를 만들어 주면서 위 코드는 main이미지, 밑 코드는 sub이미지 코드이다. 메소드의 기본 성질은 default로 같은 패키지가 아니면 공유를 하지 않는다. 그래서 static을 이용해 다른 패키지에서도 사용할 수 있도록 붙여줘야한다. AdminController 컨트롤러 컨트롤러에서 UploadUtil 클래스에 있는 메소드 uploadFile과 multiFileUpload 메소드를 불러와 변수를 넣어주면 단 두줄만에 이렇게 컨트롤러에서 이미지 첨부를 할 수 있게 된다. r.. 2023. 3. 30. [Spring] 쇼핑몰 - 19 상품 이미지 등록 SubImg 하드코딩 이렇게 subImg 객체 MultipartFile을 만들어 주었다. 단, mainImg 파일은 하나의 파일만 들어오지만, subImg는 여러장의 파일을 받기 때문에 MultipartFile[ ] 을 사용한다. subImg는 자료형이 배열이기 때문에 substring도 못쓰고, isEmpty를 비교한 if 문을 사용하지 못한다. 하지만, for문을 주면서 이를 해결할 수 있다. subImg를 MultipartFile로 반복을 돌려서 나온 img 하나를 isEmpty()로 비교하면된다. 이렇게 하면 등록이 잘 된 것을 확인할 수 있다. 하지만, 컨트롤러에 이렇게 난잡하게 이미지 등록 코드를 작성하면 되게 번잡하므로 , 각 한줄로 처리해보자. 다음 포스팅에서는 이미지 Util에 대해 알아보자. 2023. 3. 30. [Spring] 쇼핑몰 - 18 상품 이미지 등록 MainImg 하드코딩 reg_item.html multiple은 이미지 파일을 여러개 선택할 수 있게 할 수 있다. form태그에 enctype="multipart/form-data" 을 반드시 적어주어야 이미지 파일을 넘길 수가 있다. SUB IMAGE 파일 선택 버튼을 누르면 이렇게 두개가 선택되는 것을 확인할 수 있다. AdminController 컨트롤러 @PostMapping으로 컨트롤러로 넘어와서 매개변수에 MultipartFile 라는 인터페이스를 받아와서 mainImg변수를 생성해준다. mainImg는 html에서 Main 이미지의 name 속성 값이다. mainImg 첨부파일에 대한 원본 파일명을 불러오는 것이다. UUID는 아이디를 랜덤한 문자열을 만들어 줄 수 있는 기능이 있다. String str = ".. 2023. 3. 30. [Spring] 쇼핑몰 - 17 상품 등록(INSERT) DB , ItemVO 먼저, 상품을 등록할 테이블 하나 생성후, ItemVO로 변수들을 생성해준다. admin-mapper 상품을 등록할 쿼리문을 하나 만들어준다. AdminService 인터페이스, AdminServiceImpl 클래스 reg_item.html form태그로 th:action을 주어 경로를 admin 컨트롤러에 있는 regItem에 넣어주고, method를 post로 한다. 각 name 속성을 각각 알맞게 넣어준다. AdminController 컨트롤러 상품등록 페이지에서 이전에 만들었던 쿼리문을 model에 넣어 리스트를 조회한다. reg_item.html 컨트롤러에서 이름을 지정해준 catagoryListInUse 객체를 category라는 이름으로 카테고리 이름을 반복 출력해준다... 2023. 3. 29. [Spring] 쇼핑몰 - 16 페이지 권한 막기 (IntercepterConfig) 위와 같이 관리자 전용 관리페이지를 띄울 시 로그인이 안되어있는데, 지금은 악의적으로 사용자가 주소창에 주소를 쳐서 들어올 수 있는 보안에 아주 취약한 사이트이다. 이걸 막아줘보자. 하지만, 관리자페이지에 연관되어있는 곳에마다 다 해주면 또 응집도가 떨어질 수 있으니, intercepter를 사용해서 해보자. AuthoIntercepter 클래스 preHandle을 Override로 받아와주었다. preHandle은 특정 메소드가 실행되기 전에 가장 처음으로 호출해준다. 위와 같이 HttpSession을 이용해서 session 값을 요청받아왔고, MemberVO 객체에 loginInfo 데이터를 저장했다. 이후 조건문을 주어 페이지 이동처리를 하였다. intercepterConfig 클래스 AuthoIn.. 2023. 3. 29. [Spring] 쇼핑몰 - 15 IntercepterConfig로 응집도▲ AdminController 메뉴목록, 서브메뉴 목록 조회 쿼리문 삭제 해도 정상 실행. MenuIntercepter 클래스 intercepter 패키지를 하나 만들고 그 안에 MenuIntercepter 클래스를 만든다. 이후 HandlerInterceptor를 implemnets한다. 즉, MenuIntercepter에서 HandlerInterceptor를 구현하게 만들어주었다. 그리고 @Override를 통해 postHandle을 가지고왔다. 이후 생성되어있는 ModelAndView를 통해 Object 객체에 AdminController에 있는 adminService쿼리문을 넣어주었고, 각각 이름을 menuList, subMenuList로 Html로 넘겨주게 된다. AdminController 컨트.. 2023. 3. 29. 응집도를 높이는 기능 Intercepter 사용법. 응집도를 높이는 기능 intercepter Admin컨트롤러에 있는 카테고리 관리 페이지나 상품 등록 페이지 상품 재고관리 페이지 상품 정보 수정 페이지에 있는 메뉴 목록 조회, 서브 메뉴 목록 조회 model 을 쓴것과 같이 이 기능들은 어쩔수 없이 화면에 보여지기 위해 컨트롤러에 계속 반복해서 집어 넣었다. 이런 중복된 코드들을 없애서 좀 더 단편화된 코드로 바꿔보자. 그렇게 해야 응집도가 높아지면서 보다 나아진다. 이렇게 응집도를 낮추는 intercepter에 대해서 공부해보자. 먼저 프로젝트를 하나 만든다. 이번 프로젝트에서는 Lombok, Spring Boot DevTools, Spring Web, Thymeleaf 이 4개를 쓸 것이다. html을 t1, t2 ,t3 이렇게 3개 만들어주었다... 2023. 3. 29. [Spring] 쇼핑몰 - 14 서브메뉴 클릭시 classappend 적용하기 사이드 메뉴에서 메뉴를 출력할때마다 subMenuCode가 콘솔창에 출력되니까, subMenuCode를 데이터로 넘겨준다. 따라서 admin 컨트롤러로 가서 상품등록페이지 컨트롤러에 해당 커맨드 객체를 추가해주면 된다. AdminSubMenuVO 커맨드 객체 추가. 커멘드 객체는 내가 굳이 html로 데이터를 보내지 않더라도 자동으로 넘어간다. admin_side.html 이곳에서 위 컨트롤러에서 추가한 커맨드 객체를 불러와준다. 따라서 4개의 subMenu페이지에서 상품등록 페이지만 아래와 같이 SUB_MENU_002가 뜨는 것을 확인할 수 있다. 왜? 상품등록 페이지 컨트롤러에서만 커맨드 객체를 추가 해줬으니까. 카테고리 관리 컨트롤러와 상품 재고 관리 컨트롤러, 상품 정보 수정 페이지 컨트롤러에도 .. 2023. 3. 29. [Spring] 쇼핑몰 - 13 관리자 메뉴, 서브메뉴 띄우기 side_layout 상품 정보 테이블과 상품 이미지 정보 테이블 두개를 만들었다. 관리자 메뉴와 관리자 서브 메뉴 데이터 베이스도 만들어주었다. AdminController 컨트롤러 이곳에 메뉴 목록이 조회될 쿼리문이 들어올 것이다. adminMenu-mapper.xml 관리자 메뉴 정보 DB를 끌어와 resultMap에 데이터를 저장시켜준다. AdminService 인터페이스 매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성) 매개변수 : 쿼리 실행 시 빈 값을 채울 용도 1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음 2. 채워줄 값이 하나일 경우 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나 3. 채워줄 값이 여러.. 2023. 3. 28. [Spring] 쇼핑몰 - 12 Session이용해서 로그인, 로그아웃시키기 header.html header.html에 회원가입에도 id가 memId가 있고, 로그인에도 id가 memId가 있다. 중복으로 줬는데 오류는 안나지만 썩 좋은 코드는 아니다. 하지만 잘 갖고만 오면 문제는 없다. 자바스크립트에서 이런식으로 memId를 불러온다면 코드 젤 처음에 실행된 memId를 가지고온다. 따라서 이런식으로 loginModal 안에 있는 memId를 들고오겠다고 정확하게 명칭을 줘야한다. MemberController 컨트롤러 member-mapper STATUS에 != 3 을 준 이유는 위와 같이 데이터베이스에서 3은 탈퇴회원으로 분류하였기 때문이다. MemberService 인터페이스 매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성) 매개변수 : 쿼리 실행 시.. 2023. 3. 28. [Spring] 쇼핑몰 - 11 회원가입시 다음 API로 주소 넣기 https://postcode.map.daum.net/guide#usage Daum 우편번호 서비스 우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다. postcode.map.daum.net 위 주소로 들어가게 되면 API를 사용할 수 있는 코드들을 확인해볼 수 있다. 위 첫번째 줄에 있는 script 태그를 복사해서 html에 붙여넣기 해준다. admin_layout.html 과 user_layout.html 복사 위치는 내용에 나오는 js보다 위에 해주면 된다. 이후 위 스크립트 안에 있는 코드 내용들을 복사해서 js파일에 붙여넣어주면 되는데, header.js 이렇게 함수를 생성.. 2023. 3. 28. 이전 1 2 3 4 5 6 7 8 다음