JSP에서 Thymeleaf로 옮겨가면서 채팅메세지가 중복으로 오는 현상이 발생했다. 채팅 내용을 받기 위해 message 이벤트를 등록하고 messageHandler 함수를 호출하게끔 개발이 되어있었다. 중복으로 메세지가 오는 것의 원인은 채팅 페이지를 열 때 마다 이벤트가 등록이 되었기 때문이다. window.addEventListener('message', messageHandler); window 객체가 변경 되는 것은 일반적으로 페이지 전환 또는 새로운 브라우저 창을 열 때 발생하는데 SPA에서는 페이지를 새로 로드하지 않고 콘텐츠만을 변경하므로 window객체는 그대로 유지된다. 따라서, 채팅이 있는 페이지를 여러면 열면, 연 만큼 window.addEventListener가 호출 되어 이벤트..
박람회를 앞두고 마지막 시연을 하는데 갑자기 잘 되던 기능이 안되는 현상이 발생했다. 개발서버와 데모서버가 있었고, 개발 서버에서는 잘 되는데 데모서버에서는 안되고, 해당 기능과 관련된 소스의 마지막 커밋과 푸쉬를 한달도 전에 했기 때문에 이해가 안되는 상황이었다. 심지어 데모에서는 어제까지만 해도 분명히 되었다! 그래서 차이점이 뭔지 보니..데모에서 갑자기 url에 view가 붙는것이 확인이 되었다. 나는 view를 붙인 적이 없는데..? 문제는 뭐였을까? axios로 get 요청을 하는데 아래처럼 앞에 슬래시('/') 를 붙여주여야 루트 경로에서부터 URL을 생성하는데, const response = await axios.get(`/vdo/contents/file/list/1000002`, {para..
let event = new Event('change') // change, click etc. dispatchEvent(event) 카테고리에서 1분류를 선택하면 자동으로 1분류에 해당하는 2분류의 option이 2분류의 selectbox에 셋팅 되어야한다. 그래서 각각의 selectbox에는 change 이벤트가 등록되어있다. 그러나 change이벤트는 사용자가 직접 변경을 했을 때 일어난다. 따라서 자동으로 값을 1분류에 셋팅만 해주는 것은 이벤트가 연속적으로 일어나지 않는다. 이 때 사용 할 수 있는 것이 dispatchEvent 이다. https://developer.mozilla.org/ko/docs/Web/API/EventTarget/dispatchEvent EventTarget.dispat..
프로젝트를 진행하면서 컨텐츠 이동 기능을 만들어달라는 추가 요청이 있어 기능을 구현하다 컨텐츠가 동적으로 하나 추가 될 때마다, 하나의 array에 값을 보관하고 있다는 것을 알게되었다. 이 array에 담긴 순서대로 화면에 표시되니, array 안의 값들의 순서를 변경해주어야 했다. 그때 사용한게 javascript 구조 분해 할당이다. 구조 분해 할당 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 javascript 표현식 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 구조 분해 할당 - JavaScript | MDN 구조 분해 할당 구문은 배열이..
axios는 기본적으로 비동기이기 때문에, 순서대로 실행되지 않는다. 처음 착각한 부분은 요청하고 바로 데이터를 받아와서 then 구문이 실행한다고 생각한 부분이다. 아래 코드는 forEach로 반복을 하고 있는데 나는 요청/응답-요청/응답-요청/응답 이렇게 실행 되는 줄 알았는데, 아래 코드는 요청-요청-요청-응답-응답-응답 이런식으로 실행돼었다. 그래서 원하는 데이터를 가지고 로직을 수행 할 수 없었다. ❎ 기존 코드 function contentsList(intentList) { _.forEach(intentList, (intent)=> { let intentId = intent.intentId; if(!contentSet.has(intentId)) { axios.get(url, {params : ..
var EVENT_DOUBLE_CLICK_DELAY = 200; // Adjust max delay btw two clicks (ms) var eventClickPending = 0; document.getElementById('btn').addEventListener('click', function(e){ if ((e.detail === 2 ) && (eventClickPending!== 0)) { // console.log('double click action here ' + e.detail); clearTimeout(eventClickPending); eventClickPending = 0; // call your double click method console.log("더블클릭"); } else..
1️⃣ 로그인 form - login() 함수 실행 자동 로그인 아이디 저장 비밀번호 기억 로그인 /* login() 함수 실행*/ 2️⃣ javascript //쿠키 저장 함수 function setCookie(name, value, expiredays) { var todayDate = new Date(); todayDate.setDate(todayDate.getDate() + expiredays); document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";" } //쿠키 불러오기 함수 function getCookie(name) { var search = name + "="; if (..
- Total
- Today
- Yesterday
- 전자정부프레임워크
- 오토에버코테
- java
- 현대오토에버
- 자바스크립트
- springboot
- 코딩테스트
- java 코테
- centos
- 도커
- Linux
- 쿠버네티스
- 스프링
- 코테
- 톰캣
- softeer
- 현대
- Docker
- react
- softeer java
- mysql
- Kubernetes
- Spring
- javascript
- 리액트
- tomcat
- 자바코테
- 현대코테
- 아파치카프카
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |