부트캠프 일지

부트캠프 83일차 후기

여름하인 2024. 3. 27. 20:56

지금까진 쉬엄쉬엄했지만, 오늘은 아침부터 코드를 짜느라 바빴다. 역시, 배우지 않은 javascript를 건들이는 것은 고역이다.

 

어이없는 오류를 맞닥들이기도 했는데, axios를 통해 얻은 데이터를 제대로 못 얻는 오류가 발생했었다. 이 오류는 내가 비동기 함수를 마치 일반 함수처럼 사용해서 발생한 오류인데, 이 오류를 간단하게 나마 이야기해보자.

 

비동기 함수는 비동기적으로 작동하기 때문에, 비동기 함수가 실행 중임에도 계속해서 다음 줄이 실행된다. 기다리기 위해선 await를 앞에 붙여야하는데, 나는 이것을 간과해서, 결과를 제대로 얻지 못했다. 다시 말해 await 붙이는 것을 깜빡해서, 오류가 발생했었다. 

async function getGallery(galleryId)
{
    let result = axios.get(`/galleries/${galleryId}`)
    return result.data
}
// X
async function getGallery(galleryId)
{
    let result = await axios.get(`/galleries/${galleryId}`)
    return result.data //
}
// O

다음으로 비동기 함수는 Promise 객체를 반환한다. Promise는 현재 당장 값을 얻을 수 없지만, 미래의 얻을 수 있는 데이터에 접근할 수 있는 방법을 제공하는 객체이다. 중요한 것은 본 데이터를 반환하지 않기 때문에 then과 함께 사용해야 본 데이터에 접근이 가능한데, 나는 이것을 놓쳐서 마치 본 데이터를 반환하는 것 처음 사용을 했다가 오류가 발생하고, console.log로 찍어보고 나서야 내가 어이없는 곳에 시간을 낭비했구나를 알게 되었다.

const gallery = getGallery(id)

// X

getGallery(id).then(
	gallery => {갤러리 사용 코드}
)

// O

 

지금까지 ZonedDateTime을 사용했다. 이유는 이전에 다른 팀원이 사용한 코드를 참조했기 때문에, 자동적으로 이것을 사용하게 되었다. 이 ZonedDateTime을 javascript에서 사용하려고 하는데, 다소 활용에 어려움을 겪어서 이전에 사용했던 LocalDateTime으로 바꾸는 것을 고려했었다. 그런데, 문득, 내가 이 둘의 차이점을 자세히 알지 못하는 것 같아서 이에 대해 공부를 해보았다.

 

LocalDateTime은 실제 시간대를 나타내는 클래스가 아니다. 즉, 실제 시간대를 사용하지 않는 작업을 사용하기 위해서, 고려해볼 수 있다. ZonedDateTime은 LocalDateTime에 시간대를 추가한 클래스로, 타임존을 설정해서 특정 시간대의 시간을 확인할 수 있다. 즉, ZonedDateTime을 사용하는 것이 정답인 것이였다.

 

비슷한 클래스로 Instant가 있는데, UTC를 기준으로 nano초 동안의 시간을 나타내는 클래스이다. 이것 또한 사용을 고려해보자.

 

참조: https://velog.io/@hazzang/LocalDateTime-vs-Instant-vs-ZonedDateTime

 

LocalDateTime vs Instant vs ZonedDateTime

개발을 하다보면 항상 날짜와 시간 관련해서 어떻게 할지 헷갈리는 경우가 많다.일단 처음부터 결론을 말하자면 자바 8부터 나온 날짜와 시간관련 API를 사용하자!자바8에서 날짜와 시간과 관련

velog.io

내일도 아침부터 열심히 달리자.