본문 바로가기

전체 글388

[Spring] Security 보안(인증과 권한, 인가) 로그인 방법 Spring Security 란? 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. [ 인증(Authorizatoin)과 인가(Authentication) ] 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인하는 절차 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차 Security를 해보기 위해 먼저 프로젝트를 생성한다. 시큐리티는 처음부터 달면 페이지 이동할때마다 권한 검사를 하기 때문에 매우 힘들어진다. 따라서 나중에 추가해주자. 화면을 하나 띄웠다. 화면을 띄운 후에 아까 프로젝트 생성전에 하지 않았던 Security를 추가해줬다. 오른쪽이 우리꺼고, 왼쪽 코드가 시큐리티가 적용됐을때 변경되어야 할.. 2023. 4. 19.
[Spring] 쇼핑몰 - 50 마지막 에러 잡기 상품등록 컨트롤러에서 페이지 올때는 괜찮은데, 상품을 등록하게 되면 에러가 뜬다. 메뉴를 조회할 때 메뉴코드를 가져와야하는데, menu인터셉터에서 서브 메뉴를 조회할 때 메뉴 코드 데이터를 던진다. redirect 해서 model에 담긴 데이터를 못가져간다. subMenuCode데이터를 임의로 던져주었는데, 사이드에서 상품등록 메뉴로 들어오면, 현재 getMenuCode와 subMenuCode가 null로 떨어져있다. 그래서 이때 오른쪽과 같이 값을 임의로 넣어주었다. 컨트롤러에서 이런식으로 임의로 넣어줘야할 값들이 많아 지저분해서 메소드로 만들어주자. AdminSubMenuVO VO에서 이런식으로 메소드를 만들어주었다. AdminController 컨트롤러 4줄짜리 코드를 한줄로 바꿔주었다. 컨트롤러에.. 2023. 4. 19.
[Spring] 쇼핑몰 - 49 Chart.js에 Map 데이터 조회하기 카테고리별 매출 현황 차트와 표를 띄워보자. 데이터베이스에 카테고리별 매출 현황 목록을 추가한다. AdminController 컨트롤러 메뉴코드와 서브메뉴코드 둘다 받을 수 있는 AdminSubMenuVO를 커맨드객체로 불러와주었다. 이게 있어야 정상적으로 작동한다. 그리고 Model 객체에 MENU_003 데이터를 무작위로 넣으면서 menuCode에 저장한다. IntercepterConfig 인터셉터 인터셉터에 만들었던 컨트롤러를 추가해주어 메뉴와 서브메뉴를 띄울 수 있다. sale_category_month.html 이렇게 서브메뉴와 메뉴가 성공적으로 뜨면 된다. sale_category_month.html chart.js에서 script를 가지고와줘서 html에 넣어준다. 그리고 노란색 박스처럼 j.. 2023. 4. 18.
[Spring] 쇼핑몰 - 48 select에 onchange 데이터 적용 Chart.js -2 Select 박스에서 year 데이터가 변할 때마다 그에 맞는 판매건수와 판매금액을 조회해보자. DateUtil 패키지 여기서 날짜 데이터를 만들고 년도 year을 추출해서 getYear 메소드를 호출 할때 실행되도록 리턴시킨다. AdminController 컨트롤러 컨트롤러에 model 객체에 year 이름으로 추출될 수 있도록 DateUtil에서 만든 getYear메소드를 넣어주었따. sale_status_per_month.html ${#numbers.sequence(1, 3)} 은 num에는 1, 2, 3이 들어온다. 이런식으로 해서 5개의 데이터를 추출하였다. th:selected="" 에는 조건이 들어오면 된다. admin-mapper.xml mapper에서 year 데이터에 맞는 값들이 조회되.. 2023. 4. 17.
[Spring] 쇼핑몰 - 47 Chart.js에 Ajax 데이터 전달하기 파란색 막대그래프에서는 판매금액 데이터를 가지고 올 것이다. data에 [30000, 3000, .... ] 빨간색 꺾은선 그래프는 판매 건수 데이터를 가지고 올 것이다. data에 [2, 2, ....] js에 데이터를 가지고 와야하는데, 컨트롤러에서 js로 가지고오면 된다. 컨트롤러에서 js로 가지고 오는법은 ajax를 사용하면 된다. sale_status_per_month.js html 들어오자마자 바로 js가 실행되면서 getChartDataAajx 함수가 실행되면서 ajax가 실행된다. AdminController 컨트롤러 컨트롤러에서 데이터를 ajax에 받아오기 위해 먼저 이동해준다. StatisticsVO List 데이터를 Map으로 받기 위해 위 1~12의 데이터를 return 시켜주면서 .. 2023. 4. 17.
[Spring] 쇼핑몰 - 46 Chart.js 사용해서 html에 차트 띄우기 html html에 연결할 js를 추가해주고, 경로에 맞게 js를 생성해주었다. x축 제목이 labels에 나온다. datasets 안에도 label이 있는데, 이것은 차트 위 # of Votes와 같이 나타내주는 곳이다. datasets 안의 data는 y축 데이터이다. datasets 안의 borderWidth은 막대 그래프의 테두리 두께이다. datasets의 대괄호 안에 있는 중괄호 하나가 그래프 하나를 나타낸다. 대괄호는 하나만 있어야하고, 중괄호를 추가해서 그래프들을 추가해줄 수 있다. chart.js 사이트에 가보면 div 맨위에 id가 canvas로 형태가 짜여져 있기 때문에 html에서도 canvas로 불러왔다. 이런식으로 중괄호를 추가해서 그래프들을 추가해줄 수 있다. label, ty.. 2023. 4. 17.
[Oracle / SQL] 그룹함수 -1 GROUP BY를 쓰면 SELECT 절에 올 수 있는 컬럼이 정해져있다. 1. 그룹핑한 컬럼 ( 아래에는 DEPTNO를 그룹핑했으니 DEPTNO가 올 수 있는것.) 2. 그룹함수 (데이터가 딱 1개 조회되는거) 그룹 함수란? 테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수이고 복수행 함수라고도 한다. 그룹 함수의 종류에는 COUNT, MAX, MIN, SUM, AVG, STDDEV, VARIANCE 등이 있다. EMP 테이블에는 14개의 데이터가 있다. HTML 삽입 미리보기할 수 없는 소스 은 무엇이 나올까? 오류가 떨어지는데, SUM(SAL)은 값이 하나가 나온다. 하지만 DEPTNO는 사원 수만큼 나온다. 만약 100명이면 100개의 조회결과가.. 2023. 4. 13.
[Spring] 쇼핑몰 - 45 Map데이터 활용해서 월별 매출 페이지 조회 일단 SHOP_BUY 테이블에 데이터들을 pppp1234 아이디로 1월 2월 3월 4월 5월까지 여러개 넣었다. AdminControlelr 컨트롤러 DB에 저장했던 대로 임의로 MENU_003을 model에 넣어주면서 주문 관리 메뉴의 서브메뉴로 등록해준다. IntercepterConfig 인터셉터 이후 해당 컨트롤러 saleStatusPerMonth도 인터셉터에 저장시켜주었다. sale_status_per_month.html saleStatusPerMonth 컨트롤러에서 오게 되는 해당 페이지를 만들어주면 오른쪽과 같이 화면이 구성된다. 방법 1 resultMap과 VO를 사용해서 뽑기. StatisticsVO, admin-mapper.xml 1월부터 12월까지 데이터가 저장될 객체 VO를 만들어주고.. 2023. 4. 13.
[Spring] 쇼핑몰 - 44 관리자 메뉴 목록 추가 Interceptor 관리자 계정으로 가서 관리 메뉴들을 다시 만들어보자. header.html header에서 관리자메뉴일때 메뉴이름 조회하는 곳을 찾아서 주소를 준다. 컨트롤러로 가기 전에, menuCode 데이터를 가지고 와줘야하며, 컨트롤러의 상세 주소는 데이터베이스에 SUB_MENU_URL로 만들어주었기 때문에, 데이터 값을 끌어 와주면 된다. th:each로 반복시켜 준 ${menuList} 안에 menuUrl이 들어가 있으므로, 각 순서대로 뽑아준 것을 가지고 와준다. adminMenu-mapper.xml 메뉴와 서브메뉴 쿼리는 interceptor에서 실행한다. MENU_001 자리에는 002, 003도 추가되었으니, #{menuCode} 로 바꿔줄 수 있다. Admin Service 쿼리문에서 매개변수로 me.. 2023. 4. 13.
[Spring] 쇼핑몰 - 43 Ajax 사용해 form태그 한방에 넘기기 (바로구매) 바로구매 하는 방법을 알아보자. buy-mapper.xml SHOP_BUY 테이블에서 buyCode는 자동으로 1씩 증가되고, memId도 저장되어있다. 따라서 buyPrice만 가져오면 된다. 그러기 위해선 수량데이터를 가져와야하고, 이 상품의 단가를 수량에 곱하면 가격이 나온다. 그러기 위해서는 이 쿼리도 함께 실행되어야하는데, ITEM_CODE, BUY_CNT 만 들고오면 된다. 총 단가(buyPrice), 수량(buyCnt), 상품코드(itemCode) 이렇게 3개를 가지고 온다. item_detail.html form태그에 감싸져있는 데이터는 ajax에서 가져올때 다들고 올 수 있다. item_detail.js // 자바스크립트로 폼 태그 선택 const form1 = document.query.. 2023. 4. 13.
[Spring] 쇼핑몰 - 42 사용자 sub메뉴 classappend 사용해 나타내기 classappend를 사용해보자. CategoryIntercepter 인터셉터 이전에 카테고리인터셉터에서 카테고리를 조회하는 부분을 만든 기록이 있다. IntercepterConfig 인터셉터 통합 만들어준 인터셉터를 이곳에서 메소드를 만들어 호출할 수 있는데, 어느 화면에 호출해줄지 addPathPatterns를 통해 추가해주면 된다. 현재 빨간박스와 같이 /cart 컨트롤러에 있는 모든 곳에 나타난다. 이곳에서 buys 컨트롤러에서도 모든 곳에 노란 박스가 나타날 수 있도록 추가해주었다. personal_side.html side html에서 장바구니 목록, 구매내역에 각각 임의로 만든 personalMenu 값에 1, 2 를 각각 넣어주었고, 타임리프를 이용해 각 페이지로 넘어올때마다 person.. 2023. 4. 12.
[Spring] 쇼핑몰 - 41 검색기능 추가하기 검색 버튼을 만들어 보려고한다. cart_html html에서 getBuyList 함수를 만들어 클릭하면 js에서 실행되도록 만들었다. cart_buy.js html에서 클릭되면 month라는 변수가 어떠한 이벤트로 실행되도록 코드를 만들어주었는데, month는 현재 없다. SearchVO 생성, BuyVO extends SearchVO에서 month를 하나 생성해주고, BuyVO에서 extends를 이용해서 상속해준다. 따라서 BuyVO에는 month에 대한 변수와 세터 ,게터, 투스트링 모두 사용할 수 있게 된다. cart_buy.html 폼태그는 이 끝난 이후 바로 닫아주자. 그리고 input의 type 속성도 hidden으로 바꾸었다. 버튼들이 클릭되면 0 , -1, -3이 전달되는데, 폼태크 선.. 2023. 4. 12.