자바 18

JAVA 누적 방문자 수 체크

첫번째 방법: Filter를 이용하는 방법 1. filter를 상위 컨텍스트(root context)에 등록 2. delegating filter proxy를 web.xml에 등록 3. web.xml에서 등록된 filter-name을 id로 등록 이렇게 되면 filter proxy는 톰캣이 관리하지만 실제 필터는 스프링이 관리함 = Spring에서 모든 component를 인젝션 받을 수 있음. dao를 injection 받아 DB에 등록 두번째 방법: Logging Framework를 이용 1. log4j에서 getLogger 해서 로그를 찍곤 했는데, jdbcAppender를 사용하면 logger 메서드 중에 자동으로 DB에 로그를 찍어준다. 2. 이방법을 위해선 logger jdbcAppender와..

WEB Application 2020.11.18

MultipartFile 객체의 함정

@ContextConfiguration : 웹 서버를 돌리지않고 webApp 구현체를 만들어주는 역할 @WebAppConfig 붙어야 웹앱 됨. @Transactional. Advisor가 테스트 케이스에 위빙됨, 자동커밋됨 @ControllerAdvice 모든 컨트롤러를 대상으로 weaving된다. 컨트롤러가 동작할 땐 언제나 얘가 계속 조회된다. multipartfile: 비어있는 멀티파트 걸러지지않음. 첨부파일 추가하지 않아도 채워져버림. => 커맨드오브젝트의 책임은 핸들러어댑터가 진다. 데이터바인드 설정만 바꿔주면 비어있는 파트 해결 가능함. BUT 게시판에서 3개의 첨부파일이 1개의 동일한 input 태그를 쓰고있어서 데이터바인드가 동작하지 못하고 있음. -> 다른 방법을 찾아야함. @Contr..

추상 클래스로 view 만들기, properties 파일 사용해 폴더 위치 지정하기

jsp를 사용하는 이유가 '응답데이터를 html로 내보내기위해'인데 이 다운로드컨트롤러는 jsp를 사용할 이유가 딱히 없음. 그러니 MVC패턴에 맞도록 @RequestMapping("/board/download.do") public String download( @RequestParam(name="what", required=true) int att_no, Model model) throws IOException, ServletException{ AttatchVO attatch = service.download(att_no); model.addAttribute("attatch", attatch); return "downloadView"; ..

스프링 프레임워크 AOP

OP: Oriented Programming 프로그래밍 방법론은 중복을 해결하기 위해 점점 발전해왔다. AOP(Aspect Oriented Programming) : 관심사의 분리! 개발자가 각자 관심사에만 따라서 개발. 핵심관심사(Core Concern)는 타겟으로, 부가 관심사(Cross-cutting Concern)는 advice로 만든뒤 타겟, 어드바이스를 pointcut을 기준으로 걸러낸다음 joinpoint에서 weave하는 것. 부가 관심사: 여러 모듈이 공통적으로 거쳐야하는 작업 (예: 로그, 인증, 보안, 트랜잭션 관리) 장점: OOP에서도 해결되지 않은 중복을 해결 가능 업무 로직이 실행될 때 (-> core concern, target) 언제, 어떤 파라미터로, 얼마만큼의 소요시간이 ..

자바 Tiles 프레임워크 사용법과 특징

Tiles: view 단에서 페이지를 모듈화하는 과정에서 사용되는 프레임워크 - 원래는 InternalResouceViewResolver 만 썼었는데, Tiles를 사용하면 viewResolver를 여러개 쓸 수 있다. - Tiles는 Composite View Pattern을 사용한다. 1. tiles template 만들기 (design 을 갖고 있는 jsp) 2. insertAttribute . 그 세부 jsp들을 타일처럼 꽂아 넣어 3. definition이 최종적으로 뷰가 됨. xml에서 definition 만든다 http://tiles.apache.org/dtds/tiles-config_3_0.dtd preferences-> xml catalog에 이거 추가하삼 수정 전: ViewResolve..

WEB Application 2020.10.12

자바 Spring 에서 serviceImpl NullPointerException 해결하기 (리스너 관련)

해당 코드는 serviceImpl의 생성자 안에 있고, serviceImpl은 상위 컨텍스트에 생성됨. 그러면 SampleListener보다 먼저 생성돼서 NullPointer 뜸 생성자 안에 있던 코드를 init() 메서드로 만들고, postConstruct 어노테이션을 사용해 생성 이후에 실행되도록 한다. 그 과정에서 SampleListener대신 자기 자신을 context로 참조할 수 있다. 그리고 그 context는 init()보다 먼저 DI되기 때문에 SampleListener가 없이 사용이 가능하다. SampleListener 는 ServletContext를 상속받은 리스너로서, 접속 유저 정보를 저장해놓는 작업을 수행한다.

스프링 프레임워크 설치 및 테스트 (Spring)

AOP(Aspect Oriented Programming)에 따른 트랜잭션 관리 가능 (AOP : annotation만 잘 선언해놓으면 됨. ) 의존성, 결합력은 낮추고 응집력은 높이기 가능 => 많은 일들을 해주는 Enterprise Framework docs.spring.io/spring-framework/docs/4.3.29.RELEASE/spring-framework-reference/htmlsingle/ 스프링은 IoC(Inversion of Control) container로서 역할 (= DI Container) www.egovframe.go.kr/wiki/doku.php?id=egovframework:rtea3.9 egovframework:rtea3.9 [eGovFrame] www.egovf..

WEB Application 2020.10.06

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

웹에 존재하는 패턴은 아님 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를 쓰자 - 64..

WEB Application 2020.10.03

TIL 웹 프로그래밍 (Filter, Wrapper, JAVA 파일 업로드)

- 필터 체인 통과 -> FileUploadRequestWrapper덕에 원본 요청이 바뀜. -> PartWrapper로 파트 나누고 wrapping -> Front Controller에서는 req가 FileUploadRequestWrapper 가 되어 들어옴. 그안에는 partWrapperMap이 들어있음 -> HandlerInvoker -> FileUploadController - FileUploadCheckFilter: Request header에서 MIME에 multipart가 있는지 체크하는 필터. - 파라미터 대신 multipart로 되어있으면 part API 써야하는데 얘 어려우니 Part Wrapper를 쓰자. CommandHandler 만들 때 중요한 점 1. 필요한건 invoker로부터..

WEB Application 2020.09.26