이건 내 문제는 아니고 다른 사람의 문제이며 참고용으로 적어둠
해당 경우는 팀원끼리 팀장의 ec2 and s3를 사용하다가 프로젝트를 끝내고 각자의 ec2와 s3에 배포하려고 데이터를 마이닝 하다가 발생
@Configuration 어노테이션을 사용한 *.class파일에
@Value("${aws.s3.file.url.prefix}")
private String imgUrl;
@PostConstruct
public void init() {
servletContext.setAttribute("imgUrl", imgUrl);
}
aws.s3.file.url.prefix=자신의 s3버킷 경로
해당 형태로 함수를 만들고 application.properties에서 해당 값을 주입하고 init()메서드를 통해서 servletContext에 값을 설정해서 프론트 단에서
<img src="${limgUrl}/${content.contentId}/${content.contentPosterName}" onerror="this.src='/oo.ico'" alt="Image" class="img-fluid" style="max-width:470px">
해당 형태로 표현한다
로컬에선 img 경로가 properties에서 설정한 자신의 s3 경로로 나왔는대 해당 프로젝트를 war 방식으로 배포했을땐 팀장의 s3 경로로 이미지가 로드되는 문제가 발생함
이런 저런 방법을 다 써보고 하다가 해결법은 좋은 방법은 아닌거 같지만 config.java 파일에 작성한 init()메서드의 키값을 imgUrl
에서 자신의 성을 첫글자를 딴kimgUrl
등으로 바꾸고 html 파일에도 <img src="${kimgUrl}/...>
등으로 바꿔줌
그러니 제대로된 경로로 작성됨 하지만 이 프로젝트 규모가 작은 프로젝트라서 가능한 방법이지 바꿔야 할 html파일이 100개가 넘어간다면 이 방법을 사용할수 없다고 생각함
내가 생각할수있는 제일 좋은 해결책은 properties파일에 직접적인 밸류를 적기보단
aws.s3.file.url.prefix=${aws_s3_file_url_prefix}
위처럼 외부 환경변수를 주입하는 방식을 사용해야할꺼 같음
물론 이 방법으로 해당 상황을 겪어보지 않아서 확신할순 없어 보임
해당현상은 context Listener설정으로 일어난 문제였음