μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ μ΄ˆκΈ°ν™”ν•΄μ•Όν•˜λŠ” 둜직이 ν•„μš”ν•œ 경우 ApplicationReadyEvent에 λŒ€ν•œ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ @PostConstructκ°€ μ„ μ–Έλœ ν•¨μˆ˜ λ˜λŠ” InitializeBean μΈν„°νŽ˜μ΄μŠ€μ˜ afterPropertiesSet ν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆλ‹€. 이 μ€‘μ—μ„œ μ˜€λŠ˜μ€ @PostConstructλ₯Ό 좔상 ν΄λž˜μŠ€μ— μ„ μ–Έν–ˆμ„λ•Œμ˜ λ¬Έμ œμ— λŒ€ν•΄ 닀루어보렀고 ν•œλ‹€.

@PostConstruct with abstract class

μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€ λ‘œμ§μ—μ„œ μ‚¬μš©ν•˜λŠ”λ° κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©λ  ν•¨μˆ˜λ‚˜ ν•„λ“œλ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•˜μ—¬ μ„œλΉ„μŠ€ ν΄λž˜μŠ€μ— λŒ€ν•œ 좔상 클래슀λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. λ§Œμ•½, μ•„λž˜μ™€ 같이 @PostConstructκ°€ μ„ μ–Έλœ ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆκ³  이λ₯Ό ν™•μž₯ν•΄μ„œ λ§Œλ“  A μ„œλΉ„μŠ€, B μ„œλΉ„μŠ€, C μ„œλΉ„μŠ€κ°€ μžˆλ‹€κ³  κ°€μ •ν•˜λ©΄ initialize ν•¨μˆ˜λŠ” λͺ‡λ²ˆ 호좜될까?

@Service
public abstract class AbstractService {
    @PostConstruct
    public void init() {
        System.out.println(getClass().getSimpleName() + "initialize");
    }
}
Terminal
AService initialize BService initialize CService initialize

정닡은 1λ²ˆλ„ 4λ²ˆλ„ μ•„λ‹Œ 좔상 클래슀λ₯Ό μ œμ™Έν•œ A,B,C μ„œλΉ„μŠ€ 3번 ν˜ΈμΆœλ¨μ„ μ•Œ 수 μžˆλ‹€.

μ‹ κ·œ ν”„λ‘œμ νŠΈμ—μ„œ μƒμœ„ μ‹œμŠ€ν…œμ— μ˜μ‘΄ν•¨μ— 따라 API 톡신을 μœ„ν•œ 인증 토큰을 λ°œκΈ‰ν•΄μ˜€λŠ” λ‘œμ§μ„ init ν•¨μˆ˜μ— κ΅¬ν˜„ν•΄λ‘μ—ˆλ‹€. λ‘œμ»¬μ—μ„œ κ°œλ°œν•˜λ‹€κ°€ μƒμœ„ μ‹œμŠ€ν…œκ³Όμ˜ 톡신에 λŒ€ν•œ 트레이슀 둜그λ₯Ό ν™œμ„±ν™”ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ 둜그λ₯Ό μ‚΄νŽ΄λ³΄λ˜ 쀑 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ μ‹œ 인증 토큰 λ°œκΈ‰μ„ μœ„ν•œ μš”μ²­μ΄ μ£Όλ₯΄λ₯΅ μ„œλΉ„μŠ€ 개수만큼 ν˜ΈμΆœλ˜λŠ” 것을 ν™•μΈν•˜κ²Œ λ˜μ—ˆλ‹€.

μ„œλΉ„μŠ€ ν΄λž˜μŠ€λ§ˆλ‹€ κ°œλ³„λ‘œ λ°œκΈ‰ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ μ˜λ―Έκ°€ μžˆμ„ 수 μžˆμ§€λ§Œ μ—¬λŸ¬λ²ˆ μš”μ²­ν•˜λ”λΌλ„ μƒμœ„ μ‹œμŠ€ν…œμ—μ„œ λ™μΌν•œ 토큰을 λ°œκΈ‰μ„ 해주도둝 κ΅¬ν˜„λ˜μ–΄ μžˆμœΌλ―€λ‘œ AbstractService κΈ°μ€€μœΌλ‘œ 단 ν•œλ²ˆλ§Œ λ°œκΈ‰λ˜λ©΄ λ˜λŠ”κ²Œ μ˜λ„λœ λ™μž‘μœΌλ‘œ νŒλ‹¨ν–ˆλ‹€. 이에 λŒ€ν•œ ν•΄κ²°μ±…μœΌλ‘œ 인증 토큰을 AbstractService의 클래슀 λ‚΄λΆ€ λ³€μˆ˜κ°€ μ•„λ‹Œ μ „μ—­ λ³€μˆ˜λ‘œ λ³€ν™˜ν•˜κ³  init ν•¨μˆ˜μ—μ„œ 토큰 λ°œκΈ‰ 유무λ₯Ό μš°μ„ μ μœΌλ‘œ ν™•μΈν•˜μ—¬ 토큰이 μ—†λŠ” κ²½μš°μ—λ§Œ λ°œκΈ‰ λ‘œμ§μ„ μˆ˜ν–‰ν•˜λ„λ‘ μˆ˜μ •ν–ˆλ‹€.

κ΄€λ ¨λœ 컀밋 νžˆμŠ€ν† λ¦¬λ₯Ό μ°Ύμ•„λ³΄λ‹ˆ ν•΄λ‹Ή μ½”λ“œκ°€ μž‘μ„±λœ 것은 ν”„λ‘œμ νŠΈ μ΄ˆκΈ°μ˜€μœΌλ©° λ‹Ήμ‹œμ—λŠ” 좔상 클래슀λ₯Ό ν™•μž₯ν•œ μ„œλΉ„μŠ€ ν΄λž˜μŠ€κ°€ 단 ν•˜λ‚˜μ˜€λŠ”λ°μš”. κ·Έλž˜μ„œ λ‹Ήμ‹œμ—λŠ” μΈμ§€ν•˜μ§€ λͺ»ν•˜κ³  트레이슀 둜그λ₯Ό ν™œμ„±ν™”ν•΄λ³Έ μ§€κΈˆμ—μ„œμ•Ό λ‚΄μž¬λœ 였λ₯˜ μ•„λ‹Œ 결함이 λ°œκ²¬λ˜μ—ˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.