목록Spring Framework (26)
Today I Learned

Spring Security 는 입력 값을 SHA-256 알고리즘을 사용하는 해시 함수를 이용하여 암호화 시켜 준다. - input 값을 넣으면 어떤 계산에 의해 output 을 반환하는 것이 해시 함수(Hash Function) 이다. - 이때 output 은 해시(Hash) 이라고 한다. - Hash 는 output 을 통해서 input 을 추론할 수 없다. 이것을 우리는 “비가역적” 이라고 한다. - 객체화 하는 방식, 빈으로 등록하는 방식 - spring sequrity에서는 같은 평문을 넣어도 각기 다른 해쉬문을 반환한다(sault) - 그래서 입력된 평문이 맞는지 확인하기 위해서는 제공되는 메서드를 사용 해야 한다. 단방향 암호화 sha-256 1234로 넣으면 이상한 글자로 알려줌 : 원문을..

build란? 개발한 소스를 실행 가능한 프로그램으로 변환하는 작업 우리는 지금까지 한번도 톰캣을 실행한 적이 없음, 실제 빌드를 한게 아님 - 복사해서 임시파일에 저장해놓고 쓰는 방식이었다. 개발이 다 끝나고 나면 실제 동작할 수 있는 와르 war파일을 만든다. 실제로 톰캣에서 동작해봐야 끝! 1. 맥북으로 톰캣 실행하기 경로 들어가기 cd apache-tomcat-9.0.62/bin 명령어 입력 $sudo ./startup.sh 참고 블로그 : https://jjam89.tistory.com/61 2. 종료하기 명령어 입력 : sudo sh 비밀번호 입력 /톰캣폴더 위치/apache-tomcat-9.0.62/bin/shutdown.sh 참고 블로그 : https://wickedmagic.tistory..
Scheduler 주기적인 반복작업을 위해 사용(스레드는 편리하나 구현하는데 다소 복잡할 수 있다, 특히 반복주기를 ms로만 정해야해서 요일 등의 주기를 잡기가 어렵다) 별도 라이브러리 없이 스프링에서 제공 실행과 중지를 마음대로 할 수 없다. 사용 방법 1. appservlet폴더 밑에 설정파일 추가 (요청이 들어오면 할거니까) - new - Spring Bean Configuration File - bean, task에 체크 *두가지 방식을 혼용하는 것은 위험하다* 어노테이션 방식 : 편하지만 수정할 때 번거롭다. 스케쥴 내용이 고정된다면 어노테이션 방식을 사용하는게 훨씬 편함. 빈 등록 방식 : 스케쥴 내용이 수시로 바뀌는건 빈 등록이 더 편하고,엔지니어에게 수정 요청하기 편함. 이 방법을 많이 ..

*패키지를 여러개 나눌 경우 설정이 달라짐 1. servlet-context.xml 1. com.spring 아래에 모든 파일 (이렇게 해도되는데 규모가 클수록 위험함) 2. 직접 하나하나 지정해주기 2.mybatis-context.xml - 여기도 역시 com.spring 이라고 써줘도 됨 3. log4j.xml - 여기도 역시 com.spring 이라고 써줘도 됨 AOP 관점 지향 프로그래밍 하나의 흐름에 특정한 시점에 수행되는 프로그램을 만드는 것. (특정한 시점에서 몰아서 처리) aop를 설명할 때는 interceptor가 일반적이라 예를 들면 됨 언제사용할까? > 로그인세션 처리 일일이 해주기 불편함. 이처럼 특정한 검사를 실행할 때 interceptor를 많이 사용함 사용방법 1. 설정 파일..

properties란? - Spring 에서는 주요 정보를 properties 파일에 저장해 놓거나 불러와서 사용(설정할 때 많이 씀 ) - Xml 이나 properties 는 정보를 컴파일 하지 않기 때문에 쉽게 읽고 수정이 가능 - 그런데 xml은 잘모르는 사람이 봤을 때 읽기 힘듦 - 유지보수를 위한 엔지니어등을 위해 설정은 properties파일을 많이 씀 - 하지만 보안 성 측면에서는 위험할 수 있다. - 자바의 웹인터페이스를 구현받음(?) classpath : classes 폴더를 말함. 파일 경로를 쓸 때 사용 properties를 사용하기 위한 설정 root-context.xml 설정 추가 classpath:props/*.properties 2. src/main/resources밑에 pro..

커넥션 풀 - 커넥션 풀에 대한 설정을 해줘야 할 때가 있다 - 커스텀마이징을 해야할 때 설정을 해줌 - 예를 들어 동시접속자가 500명이 넘을 때 기본적으로 커넥션풀에 커넥션이 500개는 있어야한다? - 설정을 안한 디폴트에는 관련 설정이 없다 - 커넥션 풀 설정을 하지 않는다고 안돌아가는건 아니다 설정 방법 1, mybatis.xml에 property 추가 2.config 폴더밑에 pool-config.xml파일 만들기 (오른쪽 마우스 - other - xml파일) 내용 추가 default ="" : 여러 설정이 있을 경우, 이게 우선이다 transactionManager [jdbc | manager] : 트랜잭션 처리 여부를 JDBC 또는 마이바티스에게 위임한다. datasource [POOLED ..

web.xml 설정 변경 - 소스를 파악해야할 때 열어서 확인해야 하는 파일 - 초기설정이 다다르기때문에 web.xml 에 들어가서 읽기 - 이 안에 시작하자마자 읽는 파일, 요청이 오면 읽는 파일 설정을 볼 수 있음 - 시작하자마자 읽는 파일은 root폴더 밑에 *-context.xml로 끝나는 파일을 모두 읽는다 (spring 밑에 root 폴더 만들고 거기 Root-context.xml 넣어주기) - 요청이 들어올 때 읽는 설정 파일은 appServlet폴더 밑에 *-context.xml로 끝나는 파일을 모두 읽는다 - 이 설정을 하기전엔 datasource.xml, mybatis.xml 따로 파일을 만들어주고, servlet-context.xml import해줬지 web.xml 설정 변경을 해줌!..

aliase: 별칭 : dto 타입으로 파라메터를 가져올 때, mapper에 dto를 풀경로로 써줬었다. 이제는 aliase설정을 해서 원하는 dto를 불러올 때 간단히 불러올 수 있음! 1. mybatis.xml에 설정 추가 2. config폴더 밑에 aliase.xml 생성 (other - xml) 3. aliase.xml에 내용 추가 - mapper가 아니기 때문에 선언문과 다른 부분이 있음! - 특정 패키지 단위로 등록하는 방식을 씀(패키지명 잘 확인하기) 4. 이름 지어주기 패키지 단위로 등록을 했으니, 그 패키지 밑 무슨 dto를 불러올 때 어떤 이름으로 부를건지 정해주기

transaction(트랜잭션)이란? : 데이터베이스에서 사용되는 쪼갤 수 없는 업무처리의 단위 하나의 작업 내부의 과정이 잘못되면 전부 취소됨 , 한쪽에서 실패하면 다 실패 all or nothing 예시 송금하려고 출금 - 입금 출금에서안되면 임금도안됨 링크클릭 - 조회수 올라감 - 불러오는데 실패 그럼 조회수도 안올라가게되는 실제 작업은 1개가 아닌데 1개처럼 움직여야함 한쪽에서 실패하면 다 실패 작업이 분리되면 안된다. 한번 commit 되면 되돌릴 수 없음 Commit 안되면 rollback 할수 있음 - 두가지 작업이 하나로 묶여있을 때 *transaction을 쓴다 두개의 쿼리가 하나처럼 움직임 예시) 상세보기와 조회수 & 결제하기 : 상세보기를 불러오는걸 못했으면 조회수도 올리면 안됨/ 결..

ModelAndView 서비스에서 처리해서 메세지 만들어서 전달하는데(?) 굳이 컨트롤러에서 뿌려줄 필요는 없잖아? 서비스에서 처리해서 메세지 보내기! *model과 ModelAndView 차이점 model 은 인터페이스_ Controller에서만 사용 할 수 있다 modelandview는 객체이기 때문에 객체화를 해야함, 어디서든 객체화해서 쓸 수 있음 Model&View (모델하고 뷰가 섞인 형식): 컨트롤러의 반환타입이 String이 아니게 된다. 취향차이일 뿐이다(mav가 많이 사용되고 있는 추세 ) modelandview 에서만 쓸 수 있는게 있다 그걸 쓰려고 이거 쓰지 그 외에는 model만 써도된다 주의사항: page에 redirect를 쓰면 메세지가 안나감 response 객체를 쓰기 때문..