TIL&WIL

23.01.18 TIL

ultramancode 2023. 1. 19. 02:01

☑️프로퍼티 주입 – @Value 한 줄 vs @ConfigurationProperties 대량 주입

1-1. 소규모 설정에는 @Value @Value("${upload.image.location}") private String location;
  • SpEL(표현식)도 함께 사용할 수 있으므로 간단한 계산식이나 삼항 연산 도 가능.
  • 단점: 프로퍼티가 많아지면 하드코딩 문자열이 늘어나고 IDE 리팩터링이 어렵다.
1-2. 대량 설정은 @ConfigurationProperties (권장)
 
@ConfigurationProperties(prefix = "upload.image")
public record ImageProperties(Path location, long maxSizeMb, List<String> allowedExt) {}

 

 
 

@EnableConfigurationProperties(ImageProperties.class) 또는
@SpringBootApplication 위에 @ConfigurationPropertiesScan 만 붙이면 끝.


☑️ @PostConstruct — 언제 필요한가?

 

라이프 사이클 메소드
① Bean 인스턴스 생성 생성자
② 의존성 주입 완료  
후처리 @PostConstruct ← 여기!
④ 컨테이너 종료 직전 @PreDestroy

☑️ IOException


계층 대표 예외  언제 발생?
IOException (Checked) 스트림·파일·소켓 등 모든 I/O 실패의 최상위
└ FileNotFoundException 파일 경로가 없거나 권한 없음  
└ EOFException 예상보다 먼저 스트림이 종료  
└ SocketTimeoutException 네트워크 응답 지연  

 


☑️ 민감 정보 안전하게 숨기기

  1. 파일 분리
  2.  
    # application-secret.properties jwt.secret=${JWT_SECRET}
  3. properties
  4. profile include
  5. properties
    # application.properties spring.profiles.include=secret
  6. .gitignore
  7. gitignore
    *secret.properties
  8. CI / 운영 환경 변수 주입코드와 저장소에는 절대 비밀 키를 남기지 않는다.
  9. bash
    java -DJWT_SECRET="$CI_SECRET" -jar app.jar