회사

JSP + JqGrid + Spring + SQL + ... + 암튼 공부

daykim 2023. 10. 24. 21:47

Session


  • 웹 사이트 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법이다.
  • 사용자가 브라우저를 닫아, 서버와의 연결을 끝내는 시점까지를 세션이라고 한다.
  • 쿠키와의 차이점
    • 쿠키 : 클라이언트 측 컴퓨터에 모든 데이터를 저장한다.
    • 세션은 서비스가 돌아가는 서버측에 데이터를 저장하고, 세션의 키 값만 클라이언트 측에 남겨둔다.
    • 쿠키는 보안에 취약하고, 세션이 이를 보완해주는 역할을 한다.

 

 

Cookie


  • 내가 만든 쿠키~
  • 웹 브라우저가 보관하고 있는 데이ㅓ다.
  • 웹 서버에 요청을 보낼 때 헤더에 담아서 전송한다.
  • 웹 브라우저는 쿠키가 삭제되기 전까지, 웹 서버에 쿠키를 전송한다.
  • 정보가 로컬 즉 사용자 컴퓨터에 저장되기 때문에 보안에 위협을 받을 수 있다.
String cookieCheck = request.getHeader("Cookie");
  • 이걸로 쿠키값을 가져올 수 있나보다.
  • 그러면 Spring에서 세션에 있나 확인하면 될 것 같다.
  • 참고

 

 

JSP, Spring 로그인 세션 처리


  • 클라이언트가 요청할 때마다 세션을 확인해 유효한 사용자인지 확인해야 한다.

HttpSession

@PostMapping
public String hello(..., HttpSession session) {
    ...
}
  • HttpSession 타입 객체를 추가하면, 메서드를 호출할 때 MVC가 HttpSession 객체를 생성하고 전달한다.
  • 만약 객체가 이미 존재한다면, 전달만 한다.

 

@PostMapping
public String hello(..., HttpServletRequest req) {
    HttpSession session = req.getSession();
}

req.getSession(true);
// 세선이 있으면, 기존 세션 반환
// 세션 없으면, 생성해서 반환

req.getSeesion(false);
// 세션이 있으면, 기존 세션 반환
// 세션 없으면, null 반환
  • getSession() 메서드를 이용해, HttpSession을 생성하거나 호출한다.
  • 앞의 방법과 달리 필요할 때만 생성하는 것이 가능하다.

 

 

SQL + Mybatis 동적 쿼


<![CDATA[...]]

  • Mapper의 sql 쿼리 내에서 <= or >= 를 사용했을 때 에러가 났었다.
  • XML 문법으로 착각하지 말라고 <![CDATA[...]]를 써놓아야 했다.

 

<if test="..."></if>

<if test="name != null">
	sql
</if>
  • 단일 조건문
  • if 문의 test의 결과가 true 일 경우 태그 안의 SQL문이 동작한다.
<choose>
    <when test="">
    <when test="">
    ...
</choose>
  • 다중 조건

 

JqGrid


그리드 안에 버튼 넣기

 

Virtual Scroll

  • scroll: -1 로 설정하면, 레코드를 한 번에 보여준다는 설정이다.
  • 이게 데이터가 많아서 timeout이 발생했다.
$("#ptGrid").jqGrid({
        ...
        scroll    : 1,
        rowNum    : 50,
        ...
});
  • 이렇게 설정하면, virtual scroll을 사용한다는 것이다.
  • 50개 단위로 레코드 로딩? 아무튼 불러온다는 설정
  • 참고

 

Formatter

  • 참고
  • form, inline, cell 편집에서 셀 내용의 고급 포맷팅을 제공한다.
  • 기본 형식과 사용자 정의 형식 2가지 방법이 있다. -> 여기선 사용자 정의 형식
  • jqGrid의 Formatter 모듈이 로딩이 되어야 사용이 가능하다.
function myformatter (cellvalue, options, rowObject) {
    // 뭔가 작업
    return new_formated_cellvalue;
}
  • cellvalue : farmat을 지정할 값
  • options : rowId, colModel을 포함하는 객체
  • rowObject : datatype 옵션에 정의된 형식으로 표현된 row 데이터 (xml or json)
  • 올바르게 작동하기 위해선 return 반환해야한다.

 

 

Spring Interceptor


 

 

JSP / JS Scope / jQuery / DOM(Document Object Model)


1. 웹 브라우저 시작

2. 웹 문서 읽기

3. DOM 생성

  • DOM 생성 후 ready 메소드 실행

4. 이미지 포함한 요소들 로드

5. 페이지 로딩 완료

  • 모든 요소들이 로드되면, load 메소드가 실행된다.

 

DOM / .ready()

$(document).ready();
  • DOM이 완전히 불러와지면 실행되는 Event다.
  • .ready() Event는 계속 발생한다.

 

  • 참고 : document.ready()에서 함수 선언 방법에 따른 실행 여부

 

 

시도해볼거

var allData = [];
var totalPages = $("#yourGridId").getGridParam("lastpage");
for (var i = 1; i <= totalPages; i++) {
    var pageData = $("#yourGridId").jqGrid("getCol", "yourColumnName", i);
    allData = allData.concat(pageData);
}
  • 모든 페이지에서 데이터 수집: 모든 페이지에 대해 getCol 메소드를 사용하여 데이터를 수집해야 합니다. 이를 자동화하기 위해 jqGrid의 API나 JavaScript 코드를 작성할 수 있습니다.
    1. var totalPages = $("#yourGridId").getGridParam("lastpage");: jqGrid의 lastpage 속성을 사용하여 페이징된 페이지의 총 수를 가져옵니다. 이 속성은 jqGrid의 설정에 따라 다를 수 있으며 페이지 수를 결정합니다.
    2. for (var i = 1; i <= totalPages; i++) { ... }: for 루프를 사용하여 모든 페이지에 대해 반복합니다. i 변수는 페이지 번호를 나타냅니다.
    3. var pageData = $("#yourGridId").jqGrid("getCol", "yourColumnName", i);: getCol 메소드를 사용하여 현재 페이지(i)에서 지정된 열(yourColumnName)의 데이터를 가져옵니다. 이 데이터는 pageData 변수에 저장됩니다.

 

document.getElementById와 $() 차이

 

 

SQL 성능


 

multiple join

 

ansi sql

 

between과 부등호

 

SSO


Claim 정보

  • 사용자에 대한 정보를 포함하는 데이터 조각
  • 사용자 식별, 권한 부여 및 인증에 사용된다.
  • 토큰 형태로 제공된다.

 

web.xml


  • 한 폴더에 위에 해당하는 모든 파일이 있다면,
  • 위에서부터 비교해 매칭되는 걸로 적용하고, 뒤에는 무시된다.

 

Module path vs class path


 

 

response.sendRedirect()


 

IDP / SP


 

 

'회사' 카테고리의 다른 글

[MariaDB] VARCHAR에서 한글은 몇글자로 계산할까?  (0) 2024.03.20
Mybatis <selectKey>  (0) 2024.03.18
Comparable 과 Comparator  (0) 2024.02.16
10월 후기  (0) 2023.10.16
9월 후기  (0) 2023.10.16