배포 코드 수정

뚜우웅이·2025년 5월 18일

캡스톤 디자인

목록 보기
23/35

favicon

FaviconConfiguration

@Configuration
public class FaviconConfiguration {

    @Bean
    public SimpleUrlHandlerMapping faviconHandlerMapping() {
        SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
        mapping.setOrder(Integer.MIN_VALUE);
        mapping.setUrlMap(Collections.singletonMap("/favicon.ico", faviconRequestHandler()));
        return mapping;
    }

    @Bean
    protected ResourceHttpRequestHandler faviconRequestHandler() {
        ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
        requestHandler.setLocations(Collections.singletonList(new ClassPathResource("static/")));
        return requestHandler;
    }
}

/favicon.ico 요청을 직접 처리하게 설정한다.

왜 필요한가?

Spring Boot는 기본적으로 /favicon.ico 요청을 정적 리소스에서 찾지만,

  • 일부 설정에서는 404가 발생할 수 있고
  • WebMvcConfigurer를 커스터마이징한 경우 정적 핸들링이 깨질 수 있다.

그래서 이처럼 직접 핸들러 매핑을 설정해서 명시적으로 /favicon.ico 요청을 처리하게 할 수 있다.

WebConfig

        // favicon.ico 요청을 처리하는 리소스 핸들러 추가
        registry.addResourceHandler("/favicon.ico")
                .addResourceLocations("classpath:/static/");
        
        // 정적 리소스 처리 추가
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
    }

index

<!DOCTYPE html>
<html>
<head>
    <title>FreeMarket API</title>
    <link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABm1BMVEUAAAAAWasAWqwAWawAWq0AWKsAW6sAWawAWqsAWawAWawAWawAWawAWqwAWawAWawAWawAWqoAWqsAWKwAWawAWawAWKkAWawAWawAWqsAWawAWawAWawAWawAWawAWawAWqwAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWqwAWawAWawAWawAVaYAWawAWawAWawAWawAWKwAWawAWqsAWawAWawAWasAWawAWawAWawAVqkAWawAWawAWawAWawAWKsAWawAWawAWawAWawAWawAWawAQIAAWawAWawAWawAWawAWKoAWawAWawAWawAWawAWawAVqoAWawAWawAWawAWawAWawAVaoAWawAWawAWawAWqwAWawAWawAWawAWawAWa0AWawAWawAWawAWawAWawAWawAWawAV6kAWawAWawAWawAWawAWawAWawAWawAWawAWawAWawAWaz///9RGiG3AAAAiHRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOgzpYbNpvH7b0LIofB+c9UC56L8cA0AwUSfqT73UgCYLznMQEIGwEUU5zV8NWcFFMdDCR10fXRdSMLEAsfXOD63lsdBAMyqfXqkh9JwvnyuUZR2/jZQwkooPz9oicFTL/ik8j931QIFXSz5uhYAwNzlAm0AAAAAWJLR0SJaIL7PwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAWJJREFUOE9jYCAJMDIxM7OAaFY2dg4OdnZWFmaQKCMDXICTi5uHl49fQFBIWERUTFxCUkpaRlZOXoGJgUFRSVlFVU1dQ1NLW0dXT9/A0MjYxNTM3MKSgcHK2sbWzt7B0cnZxdXN3cPTy9vH18/fwZGBISAwKDgkNCw8IjIqOiY2Lj4hMSk5JTUtHeiKjMys7JzcvPyCwqLiktKy8orKquqa2rp6oEBMQ2NTc0trW3tHZ1d3T29f/4SJkyYDrZ8yddr0GTNnzZ4zd978BQsXLV6ydBnQAcsXrFi5avWatevWb9i4afOWrdu279i5C+j83Xv27tu/48DBQ4ePHD12/MTJU6dPnz4DjIiza86eO3/h4qXLV65eu37j5q3bd+7evXsPGFP3Hzx89PjJ02fPX7x89frN23fv33/4+AkUk58/f/n67fsPkIskf0Kj6tev33/+ggNMihEoAQYQQgBsEDK/T5JF9AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wMS0xMFQwMjoxNzowNiswMDowMNmTbxwAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDEtMTBUMDI6MTc6MDYrMDA6MDCozvegAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==">
</head>
<body>
    <h1>FreeMarket API Server</h1>
    <p>This is the backend API server for FreeMarket.</p>
    <p>Visit <a href="/swagger-ui/index.html">API documentation</a> for more information.</p>
</body>
</html>
``
profile
공부하는 초보 개발자

0개의 댓글