<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 같이 할때 트랜잭션 커밋 제대로 해야함. 왔다갔다 하면 락 안 걸립니다 ...*
'WEB Application' 카테고리의 다른 글
스프링 프레임워크 설치 및 테스트 (Spring) (0) | 2020.10.06 |
---|---|
Front Controller Pattern 복습, CKEditor 파일 올리기 (0) | 2020.10.05 |
TIL 웹 프로그래밍 (Filter, Wrapper, JAVA 파일 업로드) (1) | 2020.09.26 |
TIL 웹 프로그래밍 (인증 / 인가 처리, 자바로 웹 파일 업로드 ) (3) | 2020.09.24 |
웹 프로그래밍 (front controller 패턴에 resolvers 더하기) (1) | 2020.09.23 |