
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를 나타내는 포맷이라고 한다. 그 주의 연도이니 ..