포스트

2021-09-03-TIL

2021-09-03-TIL

Lodash

Lodash는 배열, 객체, 문자열을 다루는 유틸리티 함수를 모은 JavaScript 라이브러리다. _.groupBy, _.uniqBy, _.debounce, _.cloneDeep처럼 표준 API로 직접 구현하면 번거로운 기능을 제공한다. 최신 JavaScript에는 map, filter, Object.entries 같은 기능이 들어와 있어서, 필요한 함수만 가져다 쓰는 편이 번들 크기에 유리하다.

  • https://velog.io/@poburi/Lodash

Java

LocalDateTime

LocalDateTime은 시간대 정보 없이 날짜와 시간을 표현하는 불변 객체다. now(), of()로 만들고 plusDays(), withHour()처럼 값을 바꾼 새 객체를 얻는다. 특정 순간을 저장하거나 서버와 클라이언트의 시간대가 다를 수 있다면 Instant나 ZonedDateTime/OffsetDateTime이 더 정확하다.

  • https://krksap.tistory.com/1158

    SimpleDateFormat

java.text.SimpleDateFormat은 Date를 문자열로, 문자열을 Date로 바꾸는 예전 API다. Javadoc에 따르면 날짜 포맷은 동기화되어 있지 않아서, 하나의 인스턴스를 여러 스레드가 공유하면 잘못된 결과가 나올 수 있다. 그래서 static 필드로 공유하면 안 되고, 스레드마다 만들거나 DateTimeFormatter로 바꿔야 한다.

  • https://the-illusionist.me/41

    DateTimeFormatter

java.time.format.DateTimeFormatter는 java.time 타입을 위한 포맷터다. Javadoc에 따르면 불변이고 스레드 안전해서 상수로 두고 공유해도 된다. ISO_LOCAL_DATE_TIME 같은 미리 정의된 포맷터와 ofPattern("yyyy-MM-dd HH:mm:ss")로 만드는 사용자 정의 패턴이 있다. 패턴 문자는 대소문자를 구분하므로 MM(월)과 mm(분), HH(0~23시)와 hh(1~12시)를 혼동하지 않아야 한다.

  • https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

Json to POJO

JSON을 Java 객체로 바꾸는 방법과, 그 과정에서 Jackson이 던지는 예외를 다룬 자료다. Jackson은 기본적으로 기본 생성자로 객체를 만든 뒤 setter나 필드로 값을 넣는다. 기본 생성자 없이 불변 객체로 받고 싶다면 생성자에 @JsonCreator와 @JsonProperty를 붙여 어떤 JSON 필드를 어느 파라미터에 넣을지 알려 준다. Baeldung 글은 기본 생성자가 없을 때의 InvalidDefinitionException, 클래스에 없는 필드가 JSON에 있을 때의 UnrecognizedPropertyException 같은 대표 예외와 해결법을 정리한다.

  • https://json2csharp.com/json-to-pojo
  • https://ramees.tistory.com/33
  • https://blog.benelog.net/jackson-with-constructor.html
  • https://www.baeldung.com/jackson-exception

ObjectMapper

ObjectMapper는 Jackson의 중심 클래스로, readValue(json, Type.class)로 역직렬화하고 writeValueAsString(obj)로 직렬화한다. 제네릭 타입(List<User>)으로 읽을 때는 타입 소거 때문에 new TypeReference<List<User>>() {}를 넘긴다. 외부 API 응답에 모르는 필드가 추가되어도 실패하지 않게 하려면 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES를 끈다. 설정이 끝난 ObjectMapper는 스레드 안전하므로 매번 만들지 말고 재사용한다.

  • https://m.blog.naver.com/gingsero/221841770775
  • https://www.baeldung.com/jackson-object-mapper-tutorial

ResponseEntity

RestTemplate은 4xx, 5xx 응답을 받으면 기본 에러 핸들러가 HttpClientErrorException, HttpServerErrorException을 던진다. 그래서 상대 서버가 보낸 에러 메시지를 보려면 예외를 잡아 getResponseBodyAsString()으로 본문을 꺼내거나, ResponseErrorHandler를 직접 구현해 등록한다. 링크된 질문이 이 상황이다.

  • https://stackoverflow.com/questions/26404381/spring-rest-client-want-to-see-error-message-instead-of-exception

JSONObject

org.json의 JSONObject.getString(key)는 키가 없으면 JSONException을 던진다. 키가 없을 때 예외 대신 기본값을 받으려면 optString(key)(기본값 빈 문자열)이나 optString(key, null)을 쓴다. 링크된 질문은 이처럼 키가 없을 때 null을 받는 방법을 묻는다.

  • https://stackoverflow.com/questions/41778623/return-null-for-jsonobj-getstringkey/41778906

Spring

Chnage default port

Spring Boot의 내장 서버는 기본으로 8080 포트를 쓴다. application.properties에 server.port=8081을 지정하거나, 실행할 때 --server.port=8081 인자나 SERVER_PORT 환경 변수로 바꾼다. server.port=0이면 사용 가능한 임의의 포트를 고른다.

  • https://www.baeldung.com/spring-boot-change-port
참고한 자료외부 출처 5

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다