개발 창고/Web

[Spring] WEB-INF에 접근하기

로이제로 2020. 8. 20. 11:10
반응형

보통 개발환경과 서버 환경을 동일하게 사용하기 위해서는 절대 주소보다는 상대 주소를 활용하는 경우가 많습니다. (때로는 config파일에서 세팅을 고정해서 활용하는 방법도 있지만 이건 추후에 작성하도록 하겠습니다.)

 

만약 WEB-INF 내 config폴더에서 file.xml이라는 파일을 읽어들일 경우 다음과 같이 호출하게 되면 내부의 파일을 호출 가능합니다.

 

@Controller
public class BaseController {
    @Inject
    private ServletContext context;
    
    ...
    
    public ModelAndView index(ModelMap model){
        
        ...
        
        File file = new File(context.getRealPath("/WEB-INF/config/file.xml");
        
        ...
        
        return new ModelAndView("front/index");
    }
}

 

여기에서 Inject는 Java에서 지원하는 버전이고 방식에 따라 아래와 같이 @Autowired도 사용 가능합니다.

@Controller
public class BaseController {
    @Autowired
    private ServletContext context;
    
    ...
    
    public ModelAndView index(ModelMap model){
        
        ...
        
        File file = new File(context.getRealPath("/WEB-INF/config/file.xml");
        
        ...
        
        return new ModelAndView("front/index");
    }
}

 

이렇게 호출을 하게 되면 file에는 WEB-INF 내 config파일 내 file.xml을 불러들이는 게 가능합니다.

 

이런 방식을 최근에 사용하게 된 계기는 Firebase를 활용해 push서버를 개발 시 인증을 위해 json파일을 고정위치에서 불러들여야 하는 이유로 활용하고 있습니다.

 

    @Inject
    pirvate ServletContext servletContext;
    
    public void sendFcm(String tokenId, String title, String content, String linkUrl) {
        String jsonPath = servletContext.getRealPath("/WEB-INF/config/appname-****-firebase-adminsdk-***.json");
        try {
            // 본인의 json 파일 경로 입력
            FileInputStream refreshToken = new FileInputStream(jsonPath);
            
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(refreshToken))
                    .setDatabaseUrl("https://appname.firebaseio.com")
                    .build();
            
            ...
            
        }catch(Exception e){
            ...
        }
    }

위와 같이 고정위치에 json을 두고 push서버로서 인증을 해야 하는 경우 활용 가능합니다.

반응형