포스트

2021-09-02-TIL

Java

ZonedDateTime

ZonedDateTime은 날짜와 시간에 타임존(ZoneId)까지 붙인 불변 객체다. Javadoc은 이 클래스를 LocalDateTime과 ZoneId의 조합으로 보라고 설명한다. 오프셋(+09:00)은 그 둘로부터 계산되는 부차적인 정보다.

비슷한 OffsetDateTime은 고정된 오프셋만 가진다. 반면 ZonedDateTime은 지역의 시간대 규칙을 알고 있어서 서머타임 전환도 처리한다. 시계가 앞으로 당겨져 존재하지 않는 시각(gap)을 만들면 그만큼 뒤로 밀어 주고, 같은 시각이 두 번 나오는 구간(overlap)에서는 이전 오프셋을 유지한다. 서버 간에 시각을 주고받을 때는 Instant나 오프셋이 명확한 값을 쓰고, 화면에 보여 줄 때 사용자의 타임존으로 바꾸는 식으로 나누면 덜 헷갈린다.

  • https://attacomsian.com/blog/spring-boot-resttemplate-get-request-parameters-headers (주제와 다른 글이 연결되어 있어 Javadoc을 함께 남긴다)
  • ZonedDateTime - Java SE 17 Javadoc

LocalDate

아래 링크는 Joda-Time의 LocalDate.getMonthOfYear() 예제다. Java 8부터 들어온 java.time.LocalDate에서는 같은 일을 getMonthValue()(1~12의 int)나 getMonth()(Month enum)로 한다. Javadoc은 enum을 쓰는 쪽이 코드가 더 읽기 쉽다고 권한다. LocalDate는 시간과 타임존이 없는 날짜만 표현하고, 불변이며 스레드 안전하다.

1
2
3
LocalDate date = LocalDate.of(2021, 9, 2);
int month = date.getMonthValue(); // 9
Month m = date.getMonth();        // SEPTEMBER
  • https://www.tabnine.com/code/java/methods/org.joda.time.LocalDate/getMonthOfYear

Spring

slf4j

SLF4J는 java.util.logging, Logback 같은 로깅 구현체 앞에 놓이는 퍼사드(facade)다. 코드는 SLF4J API에만 의존하고, 실제 구현체는 클래스패스에 무엇을 두느냐로 배포 시점에 고른다. SLF4J 2.0부터는 ServiceLoader로 백엔드를 찾는다.

로그 메시지는 문자열을 더하지 말고 {} 자리표시자로 넘기는 것이 좋다. 로그 레벨이 꺼져 있으면 메시지 조립 자체가 일어나지 않기 때문이다.

1
logger.debug("Temperature set to {}. Old value was {}.", t, oldT);
  • https://m.blog.naver.com/tommybee/221714724998

MySQL

Copy one column to another

한 컬럼의 값을 다른 컬럼으로 복사하는 것은 UPDATE t SET col2 = col1; 한 줄이면 된다. 다만 MySQL은 단일 테이블 UPDATE의 대입을 왼쪽부터 차례로 평가한다. 그래서 UPDATE t1 SET col1 = col1 + 1, col2 = col1;을 실행하면 col2에는 원래 값이 아니라 이미 1이 더해진 col1이 들어간다. MySQL 문서는 이 동작이 표준 SQL과 다르다고 명시한다.

  • https://stackoverflow.com/questions/6827441/copy-1-column-to-another-by-mysql-query

Collation

컬럼의 collation을 바꾸는 방법이다. ALTER TABLE ... MODIFY에서 컬럼 정의 전체를 다시 적고 CHARACTER SET, COLLATE를 붙인다. MySQL 문서에 따르면 MODIFY에서 다시 적지 않은 속성은 새 정의로 넘어가지 않는다. 기본값이나 UNSIGNED, COMMENT를 빠뜨리면 그 속성이 사라지므로 기존 정의를 확인하고 실행해야 한다.

  • https://stackoverflow.com/questions/12205881/how-to-set-collation-of-a-column-with-sql
  • https://stackoverflow.com/questions/1294117/how-to-change-collation-of-database-table-column

RestTemplate

  • https://stackoverflow.com/questions/12205881/how-to-set-collation-of-a-column-with-sql

(이 항목에는 collation 글이 연결되어 있다. RestTemplate로 헤더를 보내는 방법은 전날 TIL에 정리했다.)

참고한 자료외부 출처 6

외부 출처

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

댓글

아직 댓글이 없습니다