최근에 마무리된 프로젝트에서
취약점 분석 결과중
디버그 목적으로 포함된 main() 메소드 혹은 지정된 디버그 메소드 호출을 검출합니다.
실제로 배포할 프로그램의 진입로 역할을 할 main() 메소드가 하나 존재해야한다면 그 소속 클래스를 옵션으로 지정하여 검출에서 제외할 수 있습니다.
이런 피드백을 받았다.
=> 디버그 목적으로 작성된 main() 메서드나 디버그 메서드를 식별하고, 실제 배포용 프로그램에서 불필요한 메서드를 제거해야 한다는 말임.
억울함,, 디버그 목적으로 메인메서드를 만들ㅇ지않았음ㅠ
있어야되니까 만든것이기 때문이지,, ,,
+ ㅅㅏ실 내가 짠 코드가 아님
그러나 고쳐야 하는 사람이 나라는 게,,
중요할 ,,뿐,,
이런 진단을 받고
main()메서드에 관해서 내가 아는 것은 이것들뿐임
1. JVM은 Java를 시작할 때
public static void main(String[] args)
를 찾는다,,
2. Spring Boot도
메인메서드에서
tomcat 시작하고,,
애플리케이션 컨텍스트 초기화하고
bean설정 로드한다
그리고 알아두면 좋을 J2EE의 개념 ▼
https://dev-emma-dev.tistory.com/250
[ Spring Boot ] J2EE와의 관계
1. Spring Boot 와 J2EE는 다르다Spring Boot는 Spring Framework를 기반으로 애플리케이션을 더 쉽게 개발할 수 있도록 도와주는 프레임워크입니다.J2EE(Java EE, 현재는 Jakarta EE)는 대규모 애플리케이션 개발을
dev-emma-dev.tistory.com
수정해야할 코드임
@SpringBootApplication
@EnableScheduling
public class DayeonApplication {
@PostConstruct
public void init(){
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
public static void main(String[] args) {
SpringApplication.run(DayeonApplication.class, args);
}
}
문제인 부분을 살펴보겠음
이슈 1. @PostConstruct를 사용한 초기화 작업(TimeZone 설정)이 있어 main() 메서드 외부에서도 애플리케이션 동작이 시작될 수 있음.
이슈 2. 초기화 로직이 분산되어 있어, main() 메서드가 진입점으로 명확하지 않음.
@SpringBootApplication
@EnableScheduling
public class DayeonApplication implements ApplicationRunner {
public static void main(String[] args) {
SpringApplication.run(DayeonApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
System.out.println("Default TimeZone set to: " + TimeZone.getDefault().getID());
}
}
로 바꾸면
초기화 작업(TimeZone 설정)을 진입점 main()과 관련된 로직으로 통합하여 명확히 할 수 있다.
이슈 1. main() 메서드에 의존하는 ApplicationRunner를 활용하여 초기화 작업을 통합.
이슈 2. 배포용 main() 메서드가 초기화 로직을 포함한 애플리케이션의 유일한 진입점으로 명확히 정의.
timezone을 application.yml로 빼버리거나 하는 방법들도 있는데
다 내가 짠 코드가 아니라
최대한 현재에서 바뀌는것없이 하려고 이 방법을 선택함
결론적으로, 배포용 애플리케이션의 진입점인 main() 메서드 가 하나만 존재하도록 수정했고, 초기화 작업을 실행 흐름에 통합해 디버그 메서드 혼란을 방지했습니다 !!!
'Chapter01 > Sping boot' 카테고리의 다른 글
[ 2Factor 인증] Google Authenticator 인증 java코드 (0) | 2025.04.25 |
---|---|
[ node ] npm 명령어 (0) | 2025.01.13 |
[ Spring Boot ] J2EE와의 관계 (2) | 2025.01.08 |
[ Springboot ] final (2) | 2024.12.28 |
[ 보안 취약점 ] 부적절한 예외 처리 catch(Exception e) (0) | 2024.12.27 |