
const array1 = Array(3).fill().map((v, i) => i + 1); array1; // 결과 (45) [1, 2, 3] const array2 = Array(3).map((v, i) => i + 1); array2; // 결과 (45) [empty × 3] 로또번호 추출 함수를 생성하다가 Array(45).fill()과 Array(45)의 차이가 무엇인지 궁금했다. Array(45)는 length가 45인 배열을 생성하는데, 배열은 비어있다. length가 있으니 undefined 요소들로 초기화될 것이라고 생각했는데 length 정보만을 가진 빈 배열이 리턴되었다. Array(45).fill()을 해야 undefined 요소들을 가진 배열이 리턴된다. https://devel..
Map을 사용할 때 큰 고민 없이 put, get 메서드를 호출했는데 멀티 스레드 환경에서 왜 스레프 세이프를 고려해야 하는지를 알 수 있었다. 몇 달 전에도 서비스 운영 중 Out of memory가 떠서 힙 덤프를 떠봤었는데 HashMap이 차지하는 비율이 높았었다. 스레프 세이프를 고려하지 못했던게 원인이었을 것 같기도 하다. 하나의 메모리 누수를 잡기까지 https://d2.naver.com/helloworld/1326256 멀티 쓰레드(Multi Thread)란 무엇인가? https://goodgid.github.io/What-is-Multi-Thread/ SynchronizedMap과 ConcurrentHashMap https://ooz.co.kr/71 멀티쓰레드 환경에서 캐시 구현하기 htt..
부모 컴포넌트에서 자식 컴포넌트로 object 타입의 값을 넘겨주고 그 값을 computed 속성에서 조작하도록 했는데 부모값이 변경될 때마다 자식의 값이 따라서 변경되지 않았다. 공식 문서를 살펴보니 객체와 배열은 참조로 전달되기 때문에 해당 참조값이 변경되지 않는 이상은 computed 속성에서 값이 변했다고 인식하지 않는듯 하다. 부모 컴포넌트에서 값이 변경될 때는 기존의 object에 값을 추가하는 형식으로 데이터를 변경 시켰기에 참조값을 동일했을 것이다. 자바 스크립트의 객체와 배열은 참조로 전달되므로 prop가 배열이나 객체인 경우 하위 객체 또는 배열 자체를 부모 상태로 변경하면 부모 상태에 영향을 줍니다. 출처 : vuejs 공식 홈페이지 해결은 객체에 값이 추가되거나 삭제될 때마다 객체의..
다국어 처리를 해야해 스프링의 LocaleResolver를 사용했다. 스프링이 제공하는 LocaleResolver에는 헤더의 Accept-Language 값을 사용하는 AcceptHeaderLocaleResolver, 쿠키에 Locale 정보를 저장하는 CookieLocaleResolver, 세션에 저장하는 SessionLocaleResolver, 요청과 상관없이 특정한 Locale을 설정하는 FixedLocaleResolver이 있는데 비교적 컨트롤이 쉬울 것 같은 CookieLocaleResolver를 사용했다. @Configuration public class LocaleConfiguration extends WebMvcConfigurerAdapter { @Bean public MessageSour..
Date date = new Date(); // 2019-12-29 String dateStr = new SimpleDateFormat("YYYY-MM-dd").format(date); // 2020-12-29 dateStr = new SimpleDateFormat("yyyy-MM-dd").format(date); // 기대한 결과!! 2019-12-29simpleDateFormat을 이용해 Date 자료형을 문자열로 변환하려고 했는데 해당연도인 2019가 아닌, 2020년이 떴다. 문제는 SimpleDateFormat의 연도 포맷이 대문자였기 때문이다. 자바 Date 자료형이 워낙 악명이 높다보니 버그인줄 알았는데 그건 아니고, date week year를 나타내는 포맷이라고 한다. 그 주의 연도이니 ..

회사 업무를 위해 톰캣 9 버전이 설치되어 있던 개인 노트북에 톰캣 8 버전을 설치했더니 포트를 열 수 없다면서 아예 톰캣도 안뜨고 프로젝트 실행이 안되었다. 기존에 있던 9 버전의 톰캣을 지우고 설치를 했었어야 했는데 이미 8버전을 설치한 후였다ㅜㅜ 아차 싶어서 기존 9버전을 제거하고 실행을 시켰지만 여전히 port out of range 에러가 떴고 2시간의 삽질을 시작했다. 기존에 있던 톰캣 포트를 사용하고 있어서 그런가해서 톰캣 포트도 다 죽여보고 아예 다 제거했다가 재설치도 해보고, 인텔리제이 설정 폴더도 삭제해서 다시 프로젝트 설정도 잡아보고, 포트들을 변경도 시켜봤는데 증상은 여전했다. 그러다가 찾은 원인은 바로 server.xml 설정 중 shutdown 포트가 -1로 잡혀 있었던 것이었다..

파이썬 가상환경에 장고를 설치하고 마리아디비를 설치하려고 했는데 자꾸 Microsoft Visual C++ 14.0 is required 에러가 났다. 처음에는 Visual C++만 설치하면 되는줄 알고 다운로드 받고 진행했는데 그래도 해결되지 않았고 구글링을 해보다가 설치하려고 했던 Mysqlclient 가 미리 컴파일된 pip용 whl 파일을 다운 받으면 된다는 해결책을 얻었다. 파이썬 버전 확인 (myvenv) C:\Users\hyunyi\workspace\python>python --version Python 3.7.3파이썬 비트 확인 >>> import platform >>> print(platform.architecture()) ('32bit', 'WindowsPE'..
장고 프로젝트 생성 > django-admin startproject 프로젝트명 > python manage.py startapp 애플리케이션명 > notepad settings.py // 설정 파일 확인 및 수정 > python manage.py migrate // 데이터베이스에 기본 테이블 생성(Groups, Users) > python manage.py runserver // 장고 테스트용 웹서버 실행 > python manage.py createsuperuser // 장고 어드민 사이트의 관리자 생성 프로젝트 설정파일 변경 settings.py 에서 프로젝트의 전반적인 사항들을 설정해준다. DEBUG 모드 설정 TRUE면 개발모드, FALSE는 운영모드이다. 운영모드일때는 ALLOWED_HOSTS..