WEB Application

TIL (Command 패턴, jQuery 폼 플러그인 )

Tech Signal 2020. 10. 3. 09:38

<Command Pattern>

command pattern

웹에 존재하는 패턴은 아님

Receiver = commandHandler

Command가 receiver한테 명령 내려야하는 상황이되면 중간에 invoker를 통해서 command-> ConcreteCommand 에서execute()

현재 내가 짠 게시판: Front Controller Pattern + Command Pattern

 

 

bo_no(board no) 컬럼이 여러 테이블에 있으므로 bo_no대신 새로운 이름의 alias를 사용하는게 좋음

 


<암호화>

www.notion.so/techsignal/Encoding-Encrypting-d90c20475c6746a49ce9657b4bd184a9

 

Encoding & Encrypting

Encoding: 부호화

www.notion.so

- SHA-512를 쓰자

- 64byte까지 되도록 db에서 password 크기를 200byte까지로 키워줌. (for BASE64)

- KISA에서는 개인을 식별할 수 있는 생일, 지문 데이터 등은 암호화 시키기를 권장함. 

- 비밀번호 - 단방향 / 주민번호 등은 양방향 암호화

 


내가 클릭한 <td>의 form 알기: data-who 이런식으로 넣어서 


 

<jQuery Form Plugin>

 

jQuery Form Plugin

The following code controls the HTML form beneath it. It uses ajaxForm to bind the form and demonstrates how to use pre- and post-submit callbacks. // prepare the form when the DOM is ready $(document).ready(function() { var options = { target: '#output1',

malsup.com

- event.preventDefault()

- form action태그에서 URL 뽑아오기

- form의 method

- data serialize

- 요청넘기기

=> 이걸 library화시켜서 만들어진 플러그인

 

- ajaxForm(function)에 success시 할 것 바로 입력 가능

 

- 파일 업로드 시에도 비동기로 사용가능. (원래는 formData .. 사용해야함)

- Examples에 validation 보면 client-side data validation 가능. 

 

 


Q. POST 로 보낼때도 serialize(query string화) 해야하는가?

A. 네 해줘야합니다


<첨부파일 저장하기>

AttachVO: 업로드하는 첨부파일의 진짜 데이터가 아니라 mime, 어디에 뭐로 저장, 원래 크기 등을 가지고 있는 것

2진 데이터가 저장되는 게 아님. 이진데이터는 미들티어에 저장. file part에서는 2진 데이터, 메타데이터 분리해서 저장해야함

 

항상 먼저 생각할 것; 어느영역에 저장할것인가?

 

가장 먼저할일: db에 저장할 메타데이터 꺼내셈 -> db에 insert -> 그리고 2진데이터를 저장

순서이유: db는 롤백(원상복구)가 가능하니까

메타데이터의 종류를 가지고 있는 테이블 필요함 (attachVO)

 

 

package kr.or.ddit.vo;

import java.io.Serializable;
import java.util.List;

import javax.validation.constraints.Size;

import org.apache.commons.io.FileUtils;
import org.hibernate.validator.constraints.NotBlank;

import kr.or.ddit.filter.wrapper.PartWrapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Data
@EqualsAndHashCode(of="att_no")
@NoArgsConstructor //db, view 둘다에서 오자나야. builder쓸때 기본생성자 없으면 마이바티스가 객체 생성못함 
public class AttachVO implements Serializable {
	
	public AttachVO(PartWrapper att_file) {
		super();
		this.att_file = att_file;
		this.att_filename = att_file.getOriginalFileName();
		this.att_savename = att_file.getSaveName(); //아직 저장이 된건아니지만
		this.att_filesize = att_file.getSize();
		this.att_mime = att_file.getContentType();
		this.att_fancysize = FileUtils.byteCountToDisplaySize(att_filesize);
	} //client에서 오는 걸 위한 생성자

	private Integer att_no;
	private Integer bo_no;
	@NotBlank
	@Size(max = 200)
	private String att_filename;
	@NotBlank
	@Size(max = 400)
	private String att_savename;
	@Size(max = 160)
	private String att_mime;
	private Long att_filesize;
	@NotBlank
	@Size(max = 40)
	private String att_fancysize; //10000000(0 9개)mb -> 1gb로 보여줌. 
	private Integer att_downcount;
	
	private PartWrapper att_file; //클라이언트가 보내는 파트
	//생성자를 통해 집어넣거나 setter를 통해서 집어넣기
	
	//이 안에 들어갈 메타데이터는 다 pWrapper에 있삼요
	
}

**SQLdeveloper랑 java 같이 할때 트랜잭션 커밋 제대로 해야함. 왔다갔다 하면 락 안 걸립니다 ...*