Java 시간 처리 완벽 가이드: 서버 내부 포맷부터 프론트 통신까지
Java에서 시간 처리와 프론트엔드 통신: 서버 내부 형식 vs 프론트 전달 형식
Java 백엔드 개발에서 시간 처리 방식은 서버 내부 로직과 프론트엔드 통신 사이에서 형식이 달라질 수 있습니다. 이 글에서는 java.time 패키지를 중심으로, 서버에서의 시간 처리 방식과 프론트엔드와의 데이터 송수신 시 시간 형식을 비교해봅니다.
⚡️ 서버 내 시간 처리
Java 8부터 지원되는 java.time
패키지를 사용하면 명확하고 안전한 시간 처리가 가능합니다.
LocalDateTime localTime = LocalDateTime.now();
ZonedDateTime zonedTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
Instant utcTime = Instant.now();
▶️ LocalDateTime: 타임존 정보가 없음
▶️ ZonedDateTime: 타임존 포함
▶️ Instant: UTC 기준 시점 표현
📅 프론트엔드로 전달할 시간 형식
API를 통해 프론트에 시간을 전달할 때는 일반적으로 ISO 8601 형식을 사용합니다. Jackson을 통해 JSON 직렬화 포맷을 지정할 수 있습니다.
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssXXX")
private ZonedDateTime createdAt;
▶️ 프론트는 문자열 형태의 시간 (예: 2025-06-19T14:30:00+09:00
)을 받게 됩니다.
➕ yyyy-MM-dd HH:mm:ss 포맷 설정
한국에서 많이 사용하는 형식으로, 타임존 없이 날짜와 시간을 명확하게 표현합니다.
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
▶️ 이 포맷은 타임존이 포함되지 않기 때문에, 프론트와 서버가 같은 로컬 타임존을 공유한다는 전제가 있을 때만 사용해야 안전합니다.
🧾 포맷 요소 설명
- yyyy: 4자리 연도 (예: 2025)
- MM: 2자리 월 (01~12)
- dd: 2자리 일 (01~31)
- HH: 24시간제 시각 (00~23)
- hh: 12시간제 시각 (01~12)
- mm: 분 (00~59)
- ss: 초 (00~59)
주의: HH
는 24시간제, hh
는 12시간제입니다. hh
를 사용할 경우 a
(AM/PM) 포맷을 함께 사용해야 혼동을 줄일 수 있습니다.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss a");
System.out.println(LocalDateTime.now().format(formatter));
// 출력 예: 2025-06-19 02:30:00 PM
📄 프론트엔드에서 서버로 보내는 시간 형식
프론트로부터 받은 시간 문자열을 Java에서는 자동으로 파싱할 수 있습니다. @DateTimeFormat
또는 Jackson 파서를 활용합니다.
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
public void updateTime(@RequestParam ZonedDateTime timestamp) {
// timestamp가 자동으로 변환됨
}
🔄 비교 요약
구별 | 형식 예시 | Java 타입 | 고려사항 |
---|---|---|---|
서버 내부 처리 | 2025-06-19T14:30:00Z | Instant, ZonedDateTime | UTC 기준 처리 권장 |
프론트에 드림 | 2025-06-19T14:30:00+09:00 | ZonedDateTime | Jackson 직력화 포맷 설정 |
프론트에서 받음 | 2025-06-19T14:30:00+09:00 | ZonedDateTime | 정확한 파싱 설정 필요 |
yyyy-MM-dd HH:mm:ss | 2025-06-19 14:30:00 | LocalDateTime | 타임존 문제 가능, 같은 타임존 사이 전제 |
🚀 정리
Java 백엔드에서 시간은 UTC 기준으로 내부 처리하고, 프론트엔드와 통신할 때는 명시적인 타임존을 포함한 ISO 포맷을 사용하는 것이 안정적입니다. Jackson이나 Spring의 어노테이션을 적절히 활용하면 개발 생산성과 안정성을 동시에 확보할 수 있습니다.