[DEV] 기록 165

[SpringBoot] 디버깅 목적으로 자바 객체 출력하는 방법

개요 Rest API를 통해 반환받은 Java Object를 로그로 찍어보는데 예상과 달리 "패키지명@난수"와 같은 형태로 출력되는 문제가 발생했습니다. 다행히도 stackoverflow에 이와 관련되어 잘 정리된 글이 있어 해당 내용을 정리해보고자 합니다. 배경지식 모든 Java 객체에는 객체를 출력할 때 호출되는 toString() 메서드가 있습니다. System.out.println(myObject); // myObject.toString()를 호출 이 메서드는 Object 클래스(모든 Java 객체의 슈퍼 클래스)에 정의되어 있습니다. Object.toString() 메서드는 클래스 이름, @ 기호 및 16진수로 구성된 상당히 보기 흉한 문자열을 반환합니다. 이에 대한 코드는 아래와 같습니다. /..

[DEV] 기록 2021.02.21

[RestTemplate] "[circuit_breaking_exception][parent]" Data too large, data for "[<http_request>]" would be error

개요 현재 프로젝트에서 RestTemplate을 통해 elasticsearch document들을 받아오는데 제목처럼 아래와 같은 에러가 발생했습니다. "[circuit_breaking_exception][parent]" Data too large, data for "[]" would be error 문제점 저 같은 경우 한 번에 너무 많은 document들을 받아오기 때문에 문제가 발생하는 것이었습니다. 하지만, github 이슈를 확인해보면 버전 변경에 따라 위와 같은 문제가 발생하는 것 같기도 합니다. 이슈를 올린 개발자분은 circuit breaker memory를 증가시키거나 비활성화시키는 방법으로 문제를 해결했지만 stackoverflow에 이와 상충되는 답변이 있어 아래에 정리해보고자 합니다..

[DEV] 기록 2021.02.21

[elastic search] document 10,000개 이상 검색 하는 방법

개요elastic search 같은 경우 효율성을 위해 데이터들을 하나의 db가 아닌 여러 shard들에 데이터를 분산해서 저장하고 데이터들을 모을 때 shard들로부터 데이터를 모아 정렬한 뒤 반환하는 과정을 거치기 때문에 최대 검색 document 개수를 10,000개로 제한하고 있습니다.현재 개발하는 서비스의 요구사항 중 하나가 모든 이력을 elastic search로부터 불러와 한 페이지당 10개씩 뿌려주는 화면 구현인데, 서비스 런칭 기간이 길어지면 필연적으로 document가 10,000개를 초과할 수밖에 없다는 문제가 발생했습니다.일반적인 RDBMS를 사용했더라면 하나의 데이터베이스에 모든 데이터가 저장되어있으므로 START와 OFFSET 키워드를 통해 페이징을 간단하게 구현하면 됐겠지만 앞..

[DEV] 기록 2021.02.05

[git] CLI 명령어 정리

git 용어 정리 워킹 트리(working tree) 워킹 트리, 워킹 디렉토리, 작업 디렉토리, 작업 폴더 모두 같은 뜻 사용자가 파일과 하위 폴더를 만들고 작업 결과물을 저장하는 곳 공식문서에서는 'commit을 체크아웃하면 생성되는 파일과 디렉토리'로 정의 작업 폴더에서 ".git" 폴더를 제외한 나머지 부분이 워킹 트리 로컬 저장소(local repository) git init 명령으로 생성되는 ". git" 폴더 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장 원격 저장소(remote repository) 로컬 저장소를 업로드하는 곳 GitHub, GitLab과 같은 저장소가 원격 저장소 작업 폴더 워킹 트리 + 로컬 저장소 Staging Area 해당 내용은 링크를 참고해주시면..

[DEV] 기록 2021.01.31

구글 크롬(Chrome) 응답없음 발생 시 해결 방법

개요 주 브라우저를 크롬을 쓰는데 간혹 가다가 기존에 접속한 사이트에서는 잘 작동하는데 새 주소로 이동하려고 하면 [응답 없음] alert 창이 뜨면서 작동이 안 되는 경우가 발생했습니다. 이럴 경우 전 보통 재부팅을 진행하여 해결했는데 재택근무를 하는 도중 이런 현상이 발생하면 재부팅 후 vpn까지 재접속해야 하는 귀찮은 프로세를 거쳐야 하기 때문에 해당 버그를 방지하는 방법을 찾아야겠다고 마음먹었습니다. 다행스럽게도 helpdeskgeek.com이라는 사이트에서 7가지의 해결 방법을 제시해줬기 때문에 이를 의역하고 직접 적용하고자 합니다. 1. 인터넷 연결에 문제가 없는지 확인 Chrome 문제 해결에 대해 걱정하기 전에 우선 인터넷 연결이 중단되었는지 파악해야 합니다. [네트워크 및 인터넷 설정] ..

[DEV] 기록 2021.01.29

[Java 8] yyyyMMddHHmmssSSS LocalDateTime parse 버그

개요 로그에는 시간을 LocalDateTime 형태로 저장하지만 view에는 yyyy.MM.dd hh:mm:ss 형태로 뿌려줘야 했기 때문에 아래와 같이 LocalDateTime.parse 메서드와 DateTimeFormatter를 적용했습니다. 하지만, 예상과는 다르게 오류가 발생했는데 그 이유는 Java 8에서 아래와 같은 버그가 있기 때문이였습니다. DateTimeFormatter won't parse dates with custom format "yyyyMMddHHmmssSSS" [JDK-8031085] DateTimeFormatter won't parse dates with custom format "yyyyMMddHHmmssSSS" - Java Bug System FULL PRODUCT VER..

[DEV] 기록 2021.01.27

[javascript] window.onbeforeunload 페이지를 벗어날 때 이벤트 처리

개요 개발을 진행하는데 스토리보드 요구사항 중 하나가 사용자가 해당 페이지를 벗어나거나 새로고침을 할 경우 해당 페이지 내에서 변경된 값들을 다시 기존의 값으로 초기화하는 것이었습니다. 이를 구현하기 위해 저는 beforeunload event에 대해 알아봤고 이를 적용하여 해당 기능을 간단하게 구현할 수 있었습니다. beforeunload 이벤트 beforeunload 이벤트는 사용자가 페이지를 떠날 때 발생합니다. 좀 더 구체적으로 설명하자면 아래와 같은 상황이 발생할 때 이벤트가 호출됩니다. 새로고침 뒤로 가기 브라우저 닫기 form submit 등등 특정 상황에서는 beforeunload 이벤트를 발생시키고 싶지 않다면 아래와 같이 코드를 작성하면 됩니다. 아래 예시는 form submit을 할 ..

[DEV] 기록 2021.01.27

Java 날짜 시간 유형에 대한 고찰

개요 현재 다중 서버 환경에서 프로젝트를 개발하고 있는데 인프라팀에서는 분명 서버 간 시간을 동기화하였다고 했는데도 불구하고 LocalDateTime.now()를 로그로 찍어보면 서버 간의 시간이 조금씩 다른 것을 확인할 수 있었습니다. 이에 따라, LocalDateTime.now() 대신 어떤 클래스의 메서드를 사용해야 할지 고민하는 와중 stackoverflow에 Java의 날짜 시간 유형을 잘 정리한 글이 있어 의역을 해보고자 합니다. Instant vs LocalDateTime Instant 클래스와 LocalDateTime 클래스는 비슷해 보이지만 사실 완전히 다릅니다. 하나는 순간(moment)을 나타내고, 다른 하나는 순간(moment)을 나타내지 않습니다. Instant 클래스는 타임라인의..

[DEV] 기록 2021.01.25

[javascript] json 형태의 object 값 console로 출력하기

[개요] ajax 호출을 통해 반환 받은 json 형태의 data 값을 console로 출력해보려고 했는데 예상과 다르게 [object Object] 라고만 출력됐습니다. [해결 방법] data 내용을 보고 싶으면 console.log("data: " + JSON.stringify(data)) 혹은 console.log(`data: ${JSON.stringify(data)}`)을 작성해주면 됩니다. 자바 클래스를 로그로 찍을 때 toString 메서드를 구현해야지 객체를 문자열 형태로 볼 수 있듯이 자바스크립트에서도 객체를 JSON 문자열로 변환해야 내용물을 찍어볼 수 있습니다.

[DEV] 기록 2021.01.16

좋은 커밋 메시지의 7가지 규칙

개요 학교에서 그룹 프로젝트를 진행하거나 회사에서 실무 프로젝트를 진행하면 필연적으로 깃을 사용할 수 밖에 없습니다. 보통 커밋을 할 때 귀찮다고 대충 메시지를 작성하는 경우가 있는데, 이럴 경우 시간이 어느정도 지나고 다시 특정 커밋 내역을 보고 싶을 때 어떤 커밋 내역을 봐야할지 모르기 때문에 곤란한 상황이 발생합니다. 현재 참여한 프로젝트에서 깃을 적극 활용하고 있기도 하고 작년보다 많은 사람들과 개발을 진행하고 있기 때문에 앞으로는 커밋 메시지를 꼼꼼히 작성해야하는 상황이기 때문에 좋은 커밋 메시지의 7가지 규칙을 정리하고 해당 규칙들을 지키도록 노력하겠습니다. 좋은 커밋 메시지의 7가지 규칙 1. 제목과 본문을 빈 줄로 분리합니다. 2. 제목은 50자 이내로 작성합니다. 3. 제목을 영어로 쓸 ..

[DEV] 기록 2021.01.12