10.29(transaction처리, Exception 생성, typeHandler )
2020. 10. 29. 20:12
프로그래밍/Spring
실제 트랜잭션의 대상이 되는것은 servlet-context에서 관리하는 bean -> service (boardService)이기때문에 전역에 설정된 빈을 servlet-context에서 가져와서 사용함 Exception만들기 패키지 설정 > 상속클래스 설정 - RuntimeException > 생성자 Generate Constructor 여러개를 한번에 insert할 때 한 개는 성공하고 한 개는 실패하면 둘 다 실패되도록 처리가 됨(@Transactional) 부모자식 참조 관계가 있는 테이블을 한 방에 쿼리로 가져오는 기능 제공 (짧은 쿼리를 여러번 날리는게 안좋은건 아님. 오히려 좋은방법일 수 있음. 내가 선택하는 것임!) collection 1:N관계 (보드 한행당 첨부파일은 여러개일 수 있음..
10.28(MultipartFile)
2020. 10. 28. 20:39
프로그래밍/Spring
Multipart에 대한 작업처리자 -> CommonsMultipartResolver라고 생각하면 됨 CommonsMultipartResolver가 파일을 받아다가 upFile에 넣어주는 역할을 함 cos.jar는 MultipartRequest하면 모든 처리가 끝났지만 commons의 작동방식은 upFile이 controller에 넘어왔을때는 아직 메모리상(RAM)에 존재하고 있다가 직접 설정한 파일명으로 transferTo 메소드를 통해 요청했을때 실제로 저장됨 파일 여러개 올리기 BoardController 파라미터 부분을 배열로 바꿔주기 > MultipartFile[] upFiles 1. 파일을 서버컴퓨터에 저장 String saveDirectory = request.getServletContext..
10.27(LoginInterceptor, MultipartFile )
2020. 10. 27. 20:56
프로그래밍/Spring
LoginInterceptor 로그인하지 않은 사용자가 글쓰기 못하도록 돌려보내주는 역할 spring\common\interceptor에 LoginInterceptor 클래스 생성 > extends HandlerInterceptorAdapter 한 후 안에 내용 채워넣기 > Interceptor등록은 servlet-context.xml에 등록 > loginInterceptor등록해주기 로그인 성공시 인덱스 페이지가 아닌 맨처음 요청이 들어간 페이지로 redirect하도록 하기위하여 interceptor에서 session에 담아두고 로그인이 성공했을때, session에 key값에 해당되는 주소값이 있는지 확인하고 그 페이지로 redirect하도록 location값을 넘겨줌! 로그인 성공 후, redirec..
10.26(RequestParam, Pointcut, rowbounds, formatDate)
2020. 10. 26. 20:58
프로그래밍/Spring
@RequestParam required속성 true여서 누락되면 X 서버단에서도 유효성 검사를 진행해주면 좋음(비밀번호 누락) -> aop의 beforeAdvice를 통해 가능 > aop 밑에 PasswordCheckAspect 클래스 생성 > bean으로 등록해야되니까 @Component 붙여주기 > Aspect로 등록하기 위해 @Aspect > @Slf4j > 메소드 위에 @Pointcut붙여주기(메시지 내용은 중요하지 않음) > beforeAdvice메소드 위에 @Befoer or 연산자는 @Before에서만 사용 가능 Pointcut 선언하기 Pointcut은 Aspectj를 통해 와일드카드를 이용한 다음 표현식을 지원함.(&&, ||, !(부정)를 지원함.) 1. execution pointc..
10.23(AOP, Weaving)
2020. 10. 23. 22:31
프로그래밍/Spring
aop 처리를 위한 weaving 의존 추가 pom.xml에 aop 처리를 위한 weaving 의존 추가 AspectJ와 한 팀임(위에 추가되어 있는 dependency) > common 밑에 aop 패키지 만들기 > common\aop 밑에 LoggerAspect 클래스 만들기 LoggerAspect 클래스 joinPoint 메소드 시그니쳐 확인 > Signature signature = joinPoint.getSignature(); 클래스 레벨에 @Component, @Aspect 선언 @Pointcut, @Around등을 설정해주고 > 이후 어노테이션들을 잘 처리하기 위해 xml에 등록이 필요함 > WEB-INF\spring\appServlet\servlet-context.xml > 아래 코드 추가..
10.22(AOP의 이해, @Slf4j)
2020. 10. 22. 20:25
프로그래밍/Spring
logger찍기 위하여 private Logger log = LoggerFactory.getLogger(getClass());로 사용한던것을 클래스 레벨의 @Slf4j 로 대체 가능 IOC : 제어의 역전 DI : 의존주입 POJO : 가장 단순한 형태의 자바클래스를 가지고 프레임워크를 사용할 수 있음 PSA : 추상화 레이어를 통해 구체화된 라이브러리를 제어할 수 있음(slf4j-log4j) AOP : 관점지향 프로그래밍(OOP와 대비되는 개념이 아니라 OOP와 같이 사용하면 모듈화를 극대화로 끌어올려줌) 관점별로 분리하여 주업무와 보조업무를 완벽하게 분리하여 모듈형식으로 삽입하여 실행 AOP 공통되는 부분을 따로 빼내어 필요한 시점에 해당 코드를 추가하여 사용 무엇을 어디에 삽입해서 사용할 것인가 파..
10.21(query & resultset logging)
2020. 10. 21. 22:18
프로그래밍/Spring
1. query & resultset logging Log4Jdbc Remix » 0.2.7 검색하여 메이븐에 작성할 의존 라이브러리 명세를 복사 (https://mvnrepository.com/artifact/org.lazyluke/log4jdbc-remix/0.2.7) > pom.xml에 붙여넣기 2. log4jdbc ProxyDatasource 빈 설정 그 이후 데이터 소스 수정이 필요함 > spring\application-context.xml 실제 데이터 소스가 있고, 데이터 소스인척을 해서 형식같은걸 지정해서 대신 sqlSessionFactory로 전달되고 날아가는 쿼리등을 찍어줌 3. log4jdbc logger 등록
10.20(Model, log4j, Handler Interceptor)
2020. 10. 20. 22:14
프로그래밍/Spring
Model? Model은 view단에 뭔가를 전달할 목적으로 사용하는 Map객체(MVC패턴의 M이 아님!) view단 처리하는 데이터의 임시저장소이며, Map객체(k,v) model에서 다루는건 보통 데이터와 viewName 1. ModelAndView(2.0) - 일반클래스 (1번을 많이 씀) - 속성추가 addObject(String, Object) - viewName setViewName(String) 2. ModelMap(2.0) - 일반 클래스 - 속성추가 addAttribute(String, Object) - viewName String리턴 3. Model(2.5) - 인터페이스 - 속성추가 addAttribute(String, Object) - viewName String리턴 뷰단처리를 위해..