common: Auditing - takeoff-26/logistics-service GitHub Wiki
๋ชจ๋ Entity์ ์ ์ฉ๋ ์ถ์ ์ด๋ ๊ฐ์ฌ๋ฅผ ์ํด ์์ฑ, ์์ , ์ญ์ ์ผ์๋ ํ์์๋ฅผ ์ ์ฅํ๋ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๊ธฐ์กด ๋ชจ๋๋ฆฌํฑ์์๋ global ํจํค์ง๋ฅผ ๊ตฌ์ฑํด ์งํํ๋๋ผ๋ฉด ์ด๋ฒ MSA์์๋ ๊ณตํต ๋ชจ๋์ ์ค์ ํด์ผ ํ๋ค.
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedBy
@Column(updatable = false)
private Long createdBy;
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedBy
private Long updatedBy;
@LastModifiedDate
private LocalDateTime updatedAt;
private Long deletedBy;
private LocalDateTime deletedAt;
public void delete(Long deletedBy) {
this.deletedAt = LocalDateTime.now();
this.deletedBy = deletedBy;
}
}
์์ ๊ฐ์ด ๊ตฌ์ฑํ์ผ๋ฉฐ, ์ด์ ๋ชจ๋๋ฆฌํฑ์์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ก๋ค.
ํ์ง๋ง ์ด์ ๋ชจ๋๋ฆฌํฑ์์ ํ๋์ ํ๋ก์ ํธ์์ ์ํ๋ฆฌํฐ๊ฐ ์ ์ฒด์ ์ผ๋ก ์ ์ฉ์ด ๋์๋ค๋ฉด ์ด๋ฒ์ ์ํ๋ฆฌํฐ์ ๋ํ ์์กด์ฑ์ ๋ฐ์ง ์๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ํ๋ฆฌํฐ์์ ์ ๊ณตํด์ฃผ๋ SecurityContextHolder๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋๋ ๊ฒ์ด๊ณ ์ด๋ฅผ ๋์ ํด์ค ๊ตฌํ์ฒด๊ฐ ํ์ํ๋ค.
package takeoff.logistics_service.msa.common.domain;
import java.util.Optional;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Component
public class AuditorAwareImpl implements AuditorAware<Long> {
private static final String USER_ID_HEADER = "X-User-Id";
@Override
public Optional<Long> getCurrentAuditor() {
return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
.filter(ServletRequestAttributes.class::isInstance)
.map(ServletRequestAttributes.class::cast)
.map(ServletRequestAttributes::getRequest)
.map(request -> request.getHeader(USER_ID_HEADER))
.filter(userId -> !userId.isEmpty())
.flatMap(this::parseUserId);
}
private Optional<Long> parseUserId(String userId) {
try {
return Optional.of(Long.parseLong(userId));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
}
AuditorAware๋ฅผ ๊ตฌํํด์ RequestContextHolder๋ฅผ ํตํด ๊ฐ์ ๊ฐ์ ธ์ค๊ณ ๊ทธ ์์ Request์ ํค๋๋ฅผ ๊บผ๋ด ๊ฒ์ฆํ๊ณ ๊ฒ์ฆ๋ ๊ฐ์ด๋ผ๋ฉด ๊ฐ ํ๋์์ ์ด๋ ธํ ์ด์ ์ ํตํด ์์ฑ์, ์์ ์์ ์ ์ฅ์ด ๋๊ฒ๋ ๊ตฌ์ฑํ์ผ๋ฉฐ, ์ญ์ ๋ ๋ณ๋์ ๋ด๋ถ ๋ฉ์๋๋ฅผ ๊ตฌ์ฑํด ์งํํ๋๋ก ํ๋ค.