데이터는 보안이 생명

이동언·2024년 7월 25일

new world

목록 보기
15/62
post-thumbnail

7.25(목)

1. Web MVC

👉 애플리케이션의 현재 상태에 대해서 실시간으로 변경해야하고, M,V,C가 서로 공유해야하지만 웹에서는 상태라는것이 없기 때문에 실제로는 MVC가 아니라 Model2라고 불려야하지만 MVC의 구조를 사용하기 때문에 Web MVC라고 불린다.




2-1. forward란?

ex) req.getRequestDispatcher("/WEB-INF/todo/list.jsp").forward(req, resp);
👉SSR은 기존 buffer를 8kb 사용하는데, jsp에서 만든 내용만 forward를 통해서 전달한다는 의미.




2-2. setAttribute

👉 브라우저에서 요청을하면 쓰레드(기차)하나가 생성되고 응답이 완료되면 쓰레드(기차)가 소멸된다.

👉 기차(쓰레드)가 브라우저에서 요청이 되어 생성이되고, 기차역(서블릿)에서 setAttribute를 통해서 키와 값의 형태로 기차화물을 싣고 종착역(jsp)에 수화물을 내리는것(${msg} : JSP에서 화물이 잘 왔는지 확인)




2-3. Request

👉 사용자의 모든정보
👉 읽기전용임. tno를 개인적으로 변경하면 안되므로.




2-4. PreparedStatement

👉 execute(실행) 함수를 진행하기전에 ? 에 해당하는 값을 준비하는것.




3. SQL Injection 공격

👉 어플 로그인시에 아이디와 비밀번호를 입력할 때, 아이디 뒤에 비밀번호 부분을 주석처리 하여 비밀번호를 모르더라도 로그인을 할 수 있도록 하는 공격.




4. Builder

👉 lombok의 기능중 한 가지
👉 생성자 대신 빌더를 고려해야한다.
👉 모든 필드를 인자로 받는 생성자와 빌더 패턴을 동시에 제공할 수 있다.
👉 매개변수가 40-50개 들어가야하는 값을 생성하기에 편함.

주로, @Builder, @NoArgsConstructor, @AllArgsConstructor 3가지를 세트로 사용한다.




5. Cleanup

👉 자동으로 close메소드를 호출하게 되는 라이브러리
👉 try-catch문을 통한 close를 할 필요없이 객체를 생성하는 앞에 @Cleanup을 붙혀주면된다.




6. DB full Scan

👉 DB가 도서관이라고 생각하고, 1번부터 100번까지 정리되어있고, 101번부터 200번까지 정리되어있는게 아니고, 1~100까지 있었다면 다음엔 500~800번까지가 있고 다음엔 101~200번까지 되어있는것처럼 정리가 안되어있을수도 있다.

👉 table에 pk가 선언된 요소를 넣으면 별도의 인덱스 table도 생성이 된다. 그러면 인덱스 테이블과 실제테이블이 (rowid로) 1:1 mapping이 되어있는데,
기존에 1번부터 1000번까지 인덱스 테이블을 생성 되어있으니 이때 select orderby bno desc를 사용하게 되면 인덱스테이블 가장 뒤에서부터 mapping되어있는 실제 테이블 값들을 가져온다.




7. bno > 0

select rowid, bno, title
from tbl_board
order by

👉 해당코드에서 bno가 테이블 생성시 auto_increment일때, bno는 pk이므로 어차피 양수값을 가지게 된다. 그렇지만 where bno>0을 해주는 이유는?
sql에서 bno를 더 이용하도록 상기시켜주도록하는 작업이다.
그렇게 되면 인덱스를 이용하게 되므로 데이터가 많아져 효율적으로 검색하는 방법을 sql에서 모색한다.




8. 네트워크와 JDBC의 비슷한점.

📌 Socket - Connection
👉 네트워크에서의 연결은 Socket을 통하여 연결하고, 자바와 DB의 연결은 Connection을 통한다.

📌 InputStream - ResultSet
👉 InputStream은 java에서 바이트 값으로 네트워크나 파일을 통해서 데이터를 읽어올때 사용되고, ResultSet은 데이터베이스에서 가져온 데이터를 java에서 사용할수있도록 행의 단위로 가져온다.

📌 OutputStream - PreparedStatement
👉 OutputStream은 파일이나 네트워크를 통해 데이터를 작성하는데 사용되고, PreparedStatement는 JDBC에서 SQL쿼리를 실행하기 전에 미리 보낼 준비를 하는것.




9. 보안관련 단어

9-1. 커넥션 풀

👉 데이터베이스와 같은 외부 리소스에 연결하는것은 많은 비용이 소모되고, 그만큼 많은 쓰레드(user)들이 접근하게 된다면 접속에 문제가 발생할 수 있다. 이러한 연결에 대한 문제를 해결하기 위해 나타난 방법이 커넥션 풀이다.

👉 커넥션 풀은 데이터 베이스와 연결된 커넥션을 미리 만들어놓고 필요할때마다 커넥션 풀의 커넥션을 이용하고 반환하는 기법.

👉 즉 쓰레드와 데이터베이스 사이에 미리 연결을 해두고 쓰레드가 연결이 필요하다면 권한을 부여받고 사용이 끝난다면 권한을 반납하여 권한이 필요한 다른 쓰레드에게 전달하는것.




9-2. JSTL

👉 JSP파일 에서 JAVA코드를 사용하려면 <%%>태그를 사용하는데, JAVA코드를 사용하지않고 JAVA의 문법을 사용하는 방법이다.

👉 JSP파일 상위에
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%> 해당 코드를 작성하고
<c:out value="${tag}"/> 등 코드를 사용한다.




9-3. EL(Expression Launguage)

👉 JSTL 라이브러리에서 사용되는 표준언어로 ${} 와 같은 문법을 사용한다.

👉 items는 배열, var은 for문안에서의 i




9-4. XSS

👉 XSS(Cross-Site-Scripting)공격은 스크립트 코드를 삽입하여 웹사이트내로 공격시키는데, JS 코드를 통해 이루어진다. 이러한 공격을 예방하기 위해 JSTL 라이브러리를 이용한 문법을 사용한다.

👉 JSTL에서 <c:out> 태그를 사용하여, 자동으로 HTML 이스케이프를 수행하여 XSS 공격을 예방할 수 있다.




9-5. MySQL/MariaDB 페이징처리

👉 데이터베이스에서 대량의 데이터를 페이지 단위로 나누어 가져오는 기술

👉 한번에 많은 데이터를 가져오게되면 많은 시간을 소모하므로 효율성이 떨어진다. 하여 페이징처리를 통해 성능을 최적화 시키는것이 매우 중요하다.

👉 LIMIT 절 사용 : SELECT * FROM my_table LIMIT 0,10; 과 같은 LIMIT절을 이용하여 0번째부터 10개의 행을 가져오는 방법.

0개의 댓글