목록Server/Spring (27)
고래씌
1. Aop ▶ proxy-target-class : 프록시 객체를 생성할 때 interface로 혹은, class로 생성할지를 결정하는 구문 - 기본값 : true → 프록시객체 생성시 class로 생성 false → 다이나믹 프록시 인터페이스로 생성함 ▶ aop : 내가만든 공통 코드를 모듈로 관리하고자 할 때. 메소드단위로 작동시켜야함. 코드가 있을 때, 일반적으로 interceptor로 관리하지 못한 경우 사용한다. aop : 주로 트랜잭션처리(@Transactional), 로깅처리, 로그인처리 등 비즈니스단에 공통적으로 필요한 메소드를 좀 더 세밀하게 조정할 때 사용한다. ▶ interceptor : 디스패처서블릿이 컨트롤러로 호출하기 전/후로 끼어들어 실행하기 때문에, controller에게 ..
1. DB에는 존재하지 않는 파일인데 images 안에만 존재하는 파일 삭제하는 스케쥴러 * Board테이블과 BoardImg 테이블안에 있는 이미지 목록들을 모두 조회하여 * resources/images디렉토리 안에 있는 이미지, 파일들과 대조하여 * 하나도 일치하지 않는 이미지 파일들을 삭제 * → DB에는 존재하지 않는 파일인데 images 안에만 존재하는 경우 * * 매달 1월 정시에 딱한번만 실행되도록 크론표현식으로 작성하시오 * (테스트를 위해 5초간격으로 설정한후, 변경해줄것) ▶ FileDeleteScheduler.java ① board_img 안에 있는 모든 파일 목록 조회package com.kh.spring.common.scheduling; import java.io.File; im..
1. Spring Scheduler : 매일, 매분, 매초, 매주, 매달, ... 반복적으로 실행시켜야하는 작업(프로세스)가 있는 경우 스프링 스케쥴러를 사용하면 간편하게 셋팅 가능하다. 1. xml 파일만들고, task, context 스키마를 등록(하단 namespce탭을 이용) 2. 스케쥴링 관련 annotation 활성화 3. 스케쥴러로 사용할 클래스들을 bean 객체로 등록 4. web.xml에 프로그램 구동시 현재 xml에 읽혀지도록 등록 → *-context.xml로 등록했음 5. 스케쥴링을 원하는 메소드에 가서 schedule 어노테이션 추가 → ScheduleController에 추가함 ref : bean 클래스의 변수명 method : 해당 bean클래스의 스케쥴링할 메소드명 cron ..
1. 로그인 여부를 체크하는 인터셉터 다음과 같이 로그인 여부를 체크하는 인터셉터 파일을 생성 ▶ LoginInterceptor.java package com.kh.spring.common.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.web.servlet.HandlerInterceptor; import com.kh.spring.member.model.vo.Member; // 로그인 여부를 체크하는 인터셉터 // 로그인 하지 않은 사용자는 로그인 ..
1. 인터셉터 로깅처리 ▶ servelt-context.xml 여기로 가서 어떻게 가로챌건지 설정 ▶ LoggingInterceptor.java - alt + shift + S 키 누르고 아래 3가지 모두 선택 ☞ 컨트롤러마다 일일이 log.info를 하지 않아도 다 log를 찍어준다!! package com.kh.spring.common.interceptor; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.web.servlet.H..
1. 로그처리 ☞ log4j.xml 에서 수정을 하면된다!! ▶ log4j : 프로그램 작동시 로그를 넘기기위한 자바기반 오픈소스 라이브러리 로그의 레벨을 지정하여 지정한 레벨 이상의 로그정보만 기록하는 방식으로 작동. 일반 출력문보다 속도나 성능면에서 최적화되어 있음 ▶ Appenders : 추가시키는 객체. console창 또는 특정파일에 추가를 함. - ConsoleAppender : 콘솔창에 로그정보를 출력하는 클래스 - FileAppender : 파일에 로그정보를 출력하는 클래스 // 현재 콘솔객체에 대한 기본 출력 레벨 설정 - layout : 보여지는 출력문구 ▶ DailyRollingFileAppender : 일정기간 단위로 로그파일을 생성하고 기록하도록 도와주는 클래스 => log4j.x..
1. 채팅방 나가기 ▶ chat.js// 채팅방 나가기 let exitBtn = document.querySelector("#exit-btn"); exitBtn.onclick = function() { location.href = `${contextPath}/chat/chatRoom/${chatRoomNo}/exit`; } ▶ ChatController.java ☞ 채팅방 나가기 → 만약 채팅방에 마지막으로 나간 인원이 본인이라면 채팅방 삭제처리//채팅방 나가기 @GetMapping("/chatRoom/{chatRoomNo}/exit") public String exitChatRoom( @ModelAttribute("loginUser") Member loginUser, @PathVariable("chat..
1. 채팅방 메세지 실시간 전송(F5를 누르지않아도 바로 생성되도록 작업) ☞ 메시지를 db에 성공적으로 저장했다면, 전달받은 메시지를 같은방에 접속중인 클라이언트들에게 전달 ☞ ChatWebSocket.java에 추가 ☞ public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {} 메소드 안에 추가 ☞ 참여한 인원이 중복되지 않도록 DB에 제약조건 추가 ALTER TABLE CHAT_ROOM_JOIN ADD PRIMARY KEY(USER_NO, CHAT_ROOM_NO); ▶ ChatWebSocket.java /* 클라이언트로부터 메시지(message)가 도착했을 시 실행되는 함수 */ @Ov..
1. 채팅방 통신 ▶ chatRoom.jsp => 다음과 같이 수정 WebSocket 이란? - 브라우저와 웹서버간의 통신을 지원하는 프로토콜 * 전이중통신(Full Duplex) : 두대의 단말기가 데이터를 송수신하기위해, 각각 독립된 회선을 사용하는 방식 ex) 전화기 - HTML5부터 지원 - JAVA에서는 7버전부터 지원(8이상부터 사용 권장) - Spring Framework 4버전 이상부터 지원 => 맨아래에 스크립트 추가 ▶ chat.js => 반드시 JSON 형식으로 보내야한다!!!(문자열 형태로 보내야함) => send(값) : 웹소켓 핸들러로 값을 보내는 역할을 하는 함수. send로 전달된 데이터는 웹소켓핸들러 내부의 handleTextMessage함수가 수신함// 채팅메세지 보내기 ..
1. 채팅방참여, 인원수 증가, 메세지 조회=> views/chat폴더아래에 chatRoom.jsp 파일 생성 => 채팅방 배경화면 추가를 위해 아래와 같이 추가 ▶ chatRoom.jsp ▶ ChatController.java ☞ CHAT_ROOM_JOIN안에 참여한 채팅방번호(chatRoomNo)와 현재 참여한 회원번호(userNo)를 담아서 INSERT(참여인원수 증가시키기 위해서) ☞ 채팅방 참여(isnert)후, 해당 채팅방의 채팅메세지 조회(select) => 맨위에 chatRoomNo 추가함. chatRoomNo은 세션으로 데이터 이관하기 위해서 추가한다! ▶ ChatService.javaList joinChatRoom(ChatRoomJoin join); ▶ ChatServiceImpl.ja..