티스토리 뷰

-problem

키오스크 기능을 수행하는 웹 어플리케이션을 제작하던 중, 사용자가 주문한 메뉴들의 가격을 찾아서 합산하는 기능을 제작했어야 했다.

여기에서 사용자의 주문을 확인했어야 하는데, 어디까지가 하나의 주문인지 어떻게 아는지에 대한 문제가 발생했다.

 

-what I tried

일단 jwt의 issuedAt을 사용하고자 했다. 주문을 생성할때 토큰을 생성하고 주문 생성시간과 토큰 생성시간이 같으면 같은 주문이라고 보는 것이다.

다만 아무래도 토큰 생성과 주문 생성이 동시에 일어나지 않아서 미세한 차이가 있어 아예 동일하게 처리할 수 없었다.

 

-my answer

 

먼저 주문 생성시간을 찍어줄때 아래와 같이 String으로 처리하고 localDateTime 의 포맷을  yyyy/MM/dd/hh/mm과 같이 설정하였다.

@Column
private String createdAt = LocalDateTime
				.now()
                .format(DateTimeFormatter.ofPattern("yyyy/MM/dd/hh/mm"));

 

그리고 토큰 생성할때 claim에다가 시간정보를 동일한 포맷으로 아래처럼 담을 수 있게 하였다.

// 토큰 생성
public String createToken(String phoneNumber, MemberRoleEnum role) {
    Date date = new Date();

    return BEARER_PREFIX +
            Jwts.builder()
                    .setSubject(phoneNumber)
                    .claim(AUTHORIZATION_KEY, role)
                    .claim("time", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd/hh/mm")))
                    .setExpiration(new Date(date.getTime() + TOKEN_TIME))
                    .setIssuedAt(date)
                    .signWith(key, signatureAlgorithm)
                    .compact();
}

-what I learned!

어떻게 처리할지를 고민하다가 토큰을 이용해서 안에 정보를 담는 아이디어를 떠올릴 수 있었다.

아무래도 이전에 토큰 방식을 사용해 본 것이 도움이 된 듯 하다.

이러나 저러나 기술을 사용해 본 게 도움이 되었다.

 

앞으로도 여러 기술을 체험해 볼 수 있도록 해야겠다!!

댓글