[spring Boot]_17일차_리뷰,Mybatis로 crud

youuu·2022년 11월 9일
0

SPRING

목록 보기
26/33

암호화 기법 3가지

1. 공개키 암호화

▶ 비대칭키(암호화, 복호화키가 각각있다.)

  • 🔺단점
    • 암호화에 필요한 키의 길이가 길다.
    • 암호화,복호화에 필요한 계산이 복잡 (➡ 서버 입장에서 성능저하 원인이 된다.)

2. 비공개키 암호화

▶ 대칭키 ➡➡seed aria aes

  • 🔺단점
    • 키 교환시 전송과정에서 암호화가 되어있지 않으면 키가 노출된다.
    • (RSA,Rabin, ELGamal )

3. 해시 암호화

▶ 임의의 길이 텍스트를 고정된 일정한 길이의 코드로 생성. 스프링 security. 복구 못함 초기화 해야한다.

  • 원본 데이터의 변경을 확인하는 무결성 검증에 사용(원본 데이터가 변경되면 해시 값도 변경된다.)

  • 사용자의 입력으로 해시 값을 생성하여 암호의 해시 값과 비교하여 일치 여부 확인

  • 빈으로 설정하여 실행

    • (SHA-256, SHA-512)


ORM

(Object Relational Mapping)

  • 객체-관계 매핑

  • JPA - Hibernate, iBatis의3rdParty /Sequelize/Django ORM 플러그인 제공

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 Framework

  • 각 테이블 또는 구분하고자 하는 데이터 단위로 객체를 구현하고, 데이터 간의 관계를 형성

ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.

🔺단점

⭐⭐ ORM이 모든 걸 해결해줄 수 없다.

  • ORM을 사용하면 매우 편리하지만 신중하게 설계해야한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이있다.
  1. 직접 SQL문을 작성하는 것보다 상대적으로 복잡할 수가 있고 프로젝트의 복잡성이 높아질 경우 난이도가 그 만큼 올라간다.

모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다.

  1. 기존의 기업들은 ORM을 고려하지 않은 DB를 사용하고 있어 ORM에 적합하게 변환하려면 많은 시간과 노력이 필요로 한다.

  2. DB와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해 질 수있다.

  3. DB와 ORM 프레임워크, 내부코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.

  1. DB에 직접 Query문을 보내는 것이 아니기 때문에 성능저하가 발생한다.


페이징 작업

  1. Service에서 페이징 클래스 만들기 (모듈화 시키기)

📂 com.oracle.oBootMybatis01.service

📋 Paging.java

package com.oracle.oBootMybatis01.service;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Paging {
	private int currentPage = 1; 
	private int rowPage = 10; 
	private int pageBlock = 10; 
	private int start;
	private int end;
	private int startPage;
	private int endPage;
	private int total;
	private int totalPage;
	
	//					25				
	public Paging(int total, String currentPage1) {
		this.total = total; // 140
		if(currentPage1 != null) {
			this.currentPage = Integer.parseInt(currentPage1); //2
		}
		//					1				10
		start 		= (currentPage - 1) * rowPage + 1; 			// 시작시 1	11
		end 		= start + rowPage -1; 						//시작시 10	20
		//										25		10  -> 2.5 -->3
		totalPage	= (int) Math.ceil((double)total / rowPage); //시작시 3		5	14
						// 2			2
		startPage 	= currentPage = (currentPage - 1) % pageBlock;  //시작시 1	
		endPage 	= startPage + pageBlock -1; //10
		
		//	10			14
		if(endPage > totalPage) {
			endPage = totalPage;
		}
	}
	
	
}

forward / redirect는 약간의 차이가 있다.
return "forward:list";
return "redirect:list";

변화가 있는건 redirect // 단순 조회는 forward 사용



서브쿼리 :

결과화면 :

결과화면을 보고 완성해보기. writeFormEmp


🌿 작업 순서


작업시 하였던 작업순서.

  1. 화면 만들기 (html /jsp)

  2. Controller 작성 (➡ 작성후 밑줄. create 하면 service로 넘어간다.)

  3. Service 작성(Service는 자동생성, ServiceImpl는 생성후 작성)

  4. 클릭하여 Dao에 자동생성. ➡ Dao Impl에 import

  5. 모든 걸 다 작성 후

    mapper로 와서 sql작성

📋 Emp.xml

특정 값을 통해서 조회 하는게 아니라 전체를 조회시엔 #{}를 안한다.

	<select id="tkEmpSelOne" parameterType="int" resultType="Emp">
		SELECT * FROM emp WHERE empno = #{empno}
	</select>
	
	<update id="tkEmpUpdate" parameterType="Emp">
		Update emp SET ename=#{ename}, job=#{job},  mgr=#{mgr}, 
					   sal=#{sal}, hiredate=#{hiredate}, 
					   <if test="#{comm} != null"> comm=#{comm}, </if> 
					   deptno=#{deptno}
		WHERE empno=#{empno}
	</update>
	
	<select id="tkSelectManager" parameterType="int" resultType="Emp">
		SELECT * FROM EMP WHERE empno IN (SELECT mgr FROM emp)
	</select>

profile
공부중인 주니어 개발자

0개의 댓글