'Daily/Prog'에 해당하는 글 104건

파일 mime-type 체크

Daily/Prog 2020. 5. 14. 18:26



얼마전 s3 에 업로드된 상당량의 이미지 mime-type 이 octet-stream 으로 올라가 있는 것을 확인했다. 또 그 파일들은 모두 확장자가 대문자인 것도 확인했다.


String mimeType = Files.probeContentType(path);


위 부분에서 대문자 확장자 파일들에 대한 처리가 정상적으로 되지 않아 null 을 반환한 것이 문제였다. 확장자로 mimeType 을 얻어오는 과정에서 발생할 예외들을 미리 예상하여 처리할 수도 있지만, 업로드시 파일에서 직접 mimeType 을 확인할 수도 있다. Apache 의  Tika 라이브러리를 사용해 봤다.


compile group: 'org.apache.tika', name: 'tika-core', version: '1.24'

...

String mimeType = new Tika().detect(inputStream);


tika-parsers 는 용량이 어마무시하다. parser 가 꼭 필요한게 아니라면 core 만 받자.


그리고 기존에 s3 에 octet-stream 타입으로 업로드된 이미지 파일들은 aws-cli 로 배치처리 하여 image/jpeg 으로 변경하였다.


> aws s3 cp \

 s3://bucket/path \

 s3://bucket/path \

 --exclude "*" \

 --include "*.JPG" \

 --acl public-read \

 --no-guess-mime-type \

 --content-type "image/jpeg" \

 --metadata-directive "REPLACE" \

 --recursive

 --profile myprofile


아쉽게도 include 에 지정한 패턴이 대소문자를 구분하지 못해서 시간이 꽤 걸렸음...




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

올해 초부터인가... AppStore 다운로드 속도가 말도 안되게 느려진 것을 알게 됐다. 이러다 말겠지 하다가, 급하게 대용량 앱 다운로드를 해야 하는 상황이 닥쳐서 원인 찾기에 나서 봤다. (여기서 속도가 느리다는 정도는 1시간이 지나도록 다운로드가 아주 미세하게 진행되는 정도를 말함.)



1. WiFi 속도


연결된 wifi 속도는 짱짱하다. 단지 AppStore 다운로드만 느린걸로 봐서 인터넷 속도는 문제가 없다.



2. AppStore 문제? 


지금 다시 찾아보려니 해당 글을 찾지는 못했지만 그 글은 앱스토어 다운로드 속도가 개느려졌다는 문의였고, 애플의 답변은 같은 문의가 엄청 많지만 스토어 측의 문제는 아니라고 했다. 나 뿐만이 아닌 많은 사람들이 겪는 문제라...



3. 인터넷의 다양한 해결법?


인터넷에는 앱스토어 다운로드 속도 저하 등의 검색어로 검색을 해보면 수많은 해결법이 많이 나와 있다. 하지만 글만 봐도 따라해 보고 싶은 내용은 거의 없다. 용량 확보, 메모리 확보, 캐시 삭제, 기타 등등 흔한 잡소리...



4. WiFi 에서만 다운로드가 느림?


WiFi 에서 다운로드가 느리다면 LTE 로 테스트 해보자. 대용량은 LTE 다운로드가 안될 수 있으니 저용량 앱을 하나 선택해서 테스트. LTE 에서도 다운로드가 느리다면 AppStore 저장소 쪽의 문제라고 볼 수 있다. 하지만 LTE 에서는 다운로드가 빠르다면 당연히 WiFi 의 문제겠지. 다른 서비스는 인터넷 속도가 빠른데 AppStore 가 느리다면 DNS 를 바꿔볼 수 있겠지.



 DNS 변경으로 해결 


인터넷 속도는 좋고 AppStore 문제는 아니라 하니, 연결된 wifi 의  DNS 설정 을 바꿔보는 것을 한번 시도해 봤다. 다행히 수동 설정이 가능했고, 기존 DNS 를 삭제하고 구글 DNS  8.8.8.8  로 입력하고 저장하는 순간, 멈춰있던 App 다운로드 속도가 폭발했다. ㅋㅋㅋ


찾아보니 자동 설정되는 DNS 인 210.220.163.82 / 219.250.36.130 은 SK DNS 라고 한다.  SK DNS  가 잘못했네.ㅋㅋ






그럴일 있을까마는 구글 DNS 문제시 다시 DNS 자동 설정으로 되돌리거나 타 ISP DNS 로 수정.


  • KT1 - 168.126.63.1
  • KT2 - 168.126.63.2

  • SKB1 - 210.220.163.82
  • SKB2 - 219.250.36.130

  • LGU1 - 164.124.101.2
  • LGU2 - 203.248.252.2

  • Google1 - 8.8.8.8
  • Google2 - 8.8.4.4




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  12개가 달렸습니다.
  1. 이넘의 sk 바꿔버릴까 하다 보고 해결했네요 sk인터넷 넷플릭스부터 앱스토어까지 정말 짜증나게 하는군요
  2. 보름아빠 2020.05.14 22:11
    와 이거 때문에 장기간 고민해왔는데 감사합니다. 저도 SKB인데 이런 문제가 있었을 줄이야 ... 정말 감사합니다
  3. 유성종 2020.06.26 21:36
    너무 감사합니다! 한번에 해결이 되고 간단하네요!
  4. 이렇게한뒤에 저희집 와이파이가 연결이 안됍니다 이유 아시는지요
    • 이렇게... 가 구글 dns 로 변경을 하셨다는 말인거 같은데... 이것은 와이파이 연결과는 상관이 없습니다. 우선적으로 와이파이를 연결 후에 dns 를 sk 나 구글꺼를 사용하는 설정이기 때문에...
  5. 자동으로 바꿧더니 기존 sk DNS 와 도메인이 사라졌습니다 다시 써놓고 자동으로 바꾸면 없어지더군요
  6. 전철호 2020.09.17 22:44
    DNS 설정 하니 해결이 되네요. 정말 감사합니다
  7. 아이폰12프로 2020.11.24 16:01
    정말 고맙습니다. 이렇게 쉽게 해결되는 문제였는데 kt에 전화하고 난리를 쳤네요..ㅋㅋ
secret

Spring boot 웹 어플리케이션 개발시 Local 에서는 잘만 되던게, WAR 파일로 서버에 배포하면 404 error 날 때가 있다. 서버 로그에는 별 메시지가 없다. 단지 배포가 잘됐다는...;


INFO [dev.example.com-startStop-3] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive 
[/var/lib/tomcat8/webapps/auth/ROOT.war] has finished in [2,533] ms
cs


이럴 경우 local 에서 되던게 server 에서 안되는 것이니 서버 설정에 문제를 예상할 수도 있지만, 서버는 에러 발생 시 로그를 남긴다; 로그 없는 이 상황은 뭐라고 검색하기도 난해하고 참... 예상되는 문제를 하나씩 점검해 보는 수 밖에 없다. 내 경우는 main 클래스에 SpringBootServletInitializer 를 상속하지 않아서 생긴 현상임을 알게 됐다...


main 클래스에서 SpringBootServletInitializer 상속받고 configure 오버라이드 하면 된다.


@SpringBootApplication
public class Application extends SpringBootServletInitializer {
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}
cs


이렇게 하면 컨테이너가 실행될 때 war로 배포된 Spring 웹 어플리케이션 컨텍스트가 준비된다.

Servlet3.0 이전의 web.xml 역할을 하는 셈.

또 깜빡하더라도 빨리 캐치하자.ㅋ


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

간만에 재미진 일.


간만에 사이트 운영팀에서 오류 문의가 속출했다. 등록이 안된다느니, 상세 페이지가 빈화면으로 나온다느니... 훗~ 걱정마라. 언제나 처럼 이 오빠가 해결해 줄테니.


우선 이 님들의 증상이 나에게도 동일한지 확인하였다. 특정 페이지들이 서버 500 에러도 있었지만 status 200 인데 빈화면이 나오는 기괴한 장면이 보여졌다. 동일한 소스의 개발 서버에는 정상적으로 작동하고 있었다. 실서버 로그를 확인해보니, 어제 아무개팀에서 인증서를 갱신했다.(내가 하던걸 왠일로...) 근데 로그를 뒤져보니 그 시간 이후로 오류가 속출했다. 잡았다, 요놈!! 공통적으로 주로 나온 오류들이다. 


INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["https-jsse-nio-8443"]

java.util.logging.ErrorManager: 4

java.io.FileNotFoundException: /usr/share/tomcat8/logs/catalina.2020-01-08.log (Permission denied)

        at java.io.FileOutputStream.open0(Native Method)

...


INFO [main] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]

[localhost-startStop-2] ERROR o.a.c.s.StandardManager - Exception unloading sessions to persistent storage

java.io.FileNotFoundException: /usr/share/tomcat8/work/Catalina/localhost/ROOT/SESSIONS.ser (Permission denied)

        at java.io.FileOutputStream.open0(Native Method)

...


SEVERE [https-jsse-nio-8443-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

 org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. /var/cache/tomcat8/work/Catalina/localhost/ROOT/upload_46c524e4_8548_4273_9717_ff2e98ca4a2d_00000000.tmp (Permission denied)

        at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest (StandardMultipartHttpServletRequest.java:112)

...


그리고 status 200 이지만 빈화면 나오면서 발생한 로그...


[https-jsse-nio-8443-exec-9] ERROR o.s.b.w.s.ErrorPageFilter - Cannot forward to error page for request [/manage/admin/9] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false


조금 당황스러웠다. 평소에 보던 오류도 아니고... 한가지 힌트는 Permission denied 하난데. 히스토리를 보니 인증서 갱신하고 몇번 톰캣 재부팅을 하는 과정에서 사용자 권한이 좀 꼬인것 같았다. 문제되는 파일들의 소유자가 모두 ROOT 로 실행되어 있던것이 문제. 후... 인증서 갱신하고 톰캣 재부팅만 하면 되는건데 뭐 때문에 ROOT 로 톰캣을 실행시켰을까 ㅡ.ㅡ 톰캣 재부팅으로도 문제는 해결되지 않았다. 이 파일들을 다 일일히 어떻게 찾아서 지우나 고민하던 중 빛과 같은 한 줄기 로그.


[localhost-startStop-1] ERROR o.a.j.EmbeddedServletOptions - The scratchDir you specified: [/usr/share/tomcat8/work/Catalina/localhost/ROOT] is unusable.



캐쉬 디렉토리 같은데 /usr/share/tomcat8/work/Catalina/localhost/ROOT 이 디렉토리를 삭제하니 문제가 해결됐다.

오예~


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

Intellij 한글 깨짐

Daily/Prog 2019. 10. 24. 21:11

이 거지같은 한글 깨짐은 20년 동안 사라지질 않네.ㅋㅋ (한글 디스 아님!)




사건발단


1. 오늘 몇년전 프로젝트를 열었다가 IntelliJ 콘솔에서 우연히 한글깨짐을 발견했다.

2. 최근 프로젝트에서도 한글을 써보니 콘솔에서 한글깨짐이 발생했다. (한동안 영어만 쓰고 살았음...ㅡㅡv)

3. gradle 의 clean 작업을 실행하면서 build.gradle 의 한글이 깨졌으니 tomcat 의 문제는 아니다.

4. IntelliJ 가 실행될 때의 어느 곳에 있는 자바 옵션이 실행되는지를 체크하고 인코딩을 설정해야 한다. -Dfile.encoding=UTF-8



삽질


1. 시스템 환경변수 세팅

2. C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.1\bin 의 idea.exe.vmoptions 과 idea64.exe.vmoptions

3. IntelliJ - Run/Debug Configurations - VM options


다 필요없음...



해결


IntelliJ - Help -  Edit Custom VM Options...  메뉴 열고  -Dfile.encoding=UTF-8  를 추가하여 해결.

파일위치는 C:\Users\username\.IntelliJIdea2019.2\config\idea64.exe.vmoption

오우... 사용자마다 세팅이 가능하게 되어 있나... 아니면 IntelliJ 사용자 등록하면서 별도 세팅이 되었던지...

암튼 이렇게 해결~~






WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  6개가 달렸습니다.
  1. 차분하게꾸준히 2020.02.19 04:52
    오... 도움 됐어요 감사합니다!
  2. 따봉!
  3. 감사합니다 2020.02.26 12:11
    드뎌 해결 되었네요!
secret