https://example.com 443 포트로 접근 시, gateway 에서 nginx 80 포트로 맵핑 해주는 설정.

nginx 에 SPA 관련 설정(vue or react or etc...)을 함

server {
    listen 80;

    location / {
        alias  /usr/share/nginx/html/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html = 404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/dist;
    }
}

 

문제점

https://example.com 으로 접속을 시도했는데, http://example.com/ 으로 301(Moved Permanently) redirect 처리됨

https://example.com/ 으로 slash 를 추가해서 요청하면 문제가 없음

해결

nginx config 에 아래 옵션을 추가(nginx 1.11.8 버전 이상)

absolute_redirect off;

수정 후 config

server {
    listen 80;
    absolute_redirect off; # 추가

    location / {
        alias   /usr/share/nginx/html/dist;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html = 404;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html/dist;
    }
}

나는 1.11.8 버전 이상이라 위의 내용으로 해결됐지만, 1.11.8버전 미만인 경우는 아래 링크의 답변을 참고해서 수정해보길..

https://serverfault.com/questions/905657/nginx-redirects-to-http-after-port-in-redirect-off

Posted by 스트라
,

npm update --force

명령어 날린 후 작동 확인

Posted by 스트라
,
Posted by 스트라
,

주소 검색 팝업을 사용하는데, 팝업이 닫히지도 않고, 값이 넘어가지도 않았다.

iOS 12.1 폰에서는 잘 되고, iOS 12.2 폰에서는 안됐다.

https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes#3130296

 

Safari 12.1 Release Notes | Apple Developer Documentation

Article Safari 12.1 Release Notes Update your apps to use new features and test your apps against API changes. OverviewSafari 12.1 ships with iOS 12.2 and macOS 10.14.4. It’s also available for macOS 10.13.6 and 10.12.6. New features of Safari 12.1 include

developer.apple.com

Updated the link behavior for "target=_blank" to include rel="noopener" implicitly.

a 태그에 target 속성이 _blank면 암묵적으로 rel 속성을 noopener 로 세팅한다.

위 보안 패치때문에 발생했다.

rel 속성이 noopener면, 자식 창에서 window.opener를 참조하면 null 이 리턴된다.

해결을 위해선 주소 검색 팝업을 여는 부모 페이지 a 태그에 rel="opener"를 추가한다.

 

참고 : https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types (rel 속성 값들)

 

Link types

In HTML, link types indicate the relationship between two documents, in which one links to the other using an a, area, or link element.

developer.mozilla.org

 

After iOS 12.2 update, window.opener is not working in Safari

Posted by 스트라
,

외부 API를 Spring RestTemplate로 호출하는데

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: 

Can not instantiate value of type java.util.HashMap from String value ('fail'); no single-String constructor/factory method

위의 Exception이 발생.

restTemplate.exchange에 세팅한 responseType class는 아래의 

TestResponse.java

API 호출 class

ApiTest.java

외부 API에서 응답 데이터를

위 처럼 넘겨줄 때는 정상적으로 변환되어 TestResponse의 HashMap<String, Object> result에 세팅되나,

아래와 같이 response가 오게되면

org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: 

Can not instantiate value of type java.util.HashMap from String value ('fail'); no single-String constructor/factory method

위 에러 발생(HashMap에 "fail" 이라는 String value 값을 세팅할 수 없다(?))

외부 API를 수정할 수 없어(?) 서버쪽에서 변환 시 예외 처리를 하도록 함.

CustomDeserializer.java

생성한 CustomDeserializer를 TestResponse에 설정

TestResponse.java

이제 {"result":"success"} 형태도 받을 수 있음.

result.get("msg").toString() == "success"  

Posted by 스트라
,

iOS webview 에서 javascript alert 호출 후에 앱이 멈추는 현상이 발생함.
alert 창이 꺼지지도 않고 홈 버튼만 먹힘.
아래 방법으로 정상 작동 확인

참고 : https://stackoverflow.com/questions/17696773/javascript-alert-freezing-ios-browsers

Posted by 스트라
,


Posted by 스트라
,

logback.xml 설정 파일 위치가 /WEB-INF/classes/ 안에 있는 상태였다.

logback 의 특정 Appender 의 log level을 info 에서 debug 로 변경 후 저장했는데 톰캣 Context 가 reload 되는 부분을 확인.


원인 : 톰캣 server.xml 설정 파일내의 Context 의 reloadable 설정이 true 로 되어 classes 폴더 안에 변경이 발생되면 Context 를 reload 함

<Context path="" docBase="ROOT" reloadable="true"/>


수정 : reloadable="false" 로 수정 후 톰캣 재기동

<Context path="" docBase="ROOT" reloadable="false"/>

Posted by 스트라
,



기대 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2


실제 결과


someList.get(0).getSomething() : something2

someList.get(1).getSomething() : something2



수정 소스



기대 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2


실제 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2



Posted by 스트라
,

기존 소스


insertAndUpdate()는 항상 새로운 트랜잭션을 가져야하기 때문에 propagation=Propagation.REQUIRED_NEW 로 설정

Exception.class 예외가 발생했을 때 rollback 하기 위해서 rollbackFor={Exception.class} 로 설정

update() 메소드에서 강제로 Exception 발생을 시켰는데 insert() 메소드를 통해 DB에 등록된 값이 rollback이 되지 않는 것....


try...catch 문에서 Exception을 catch 하고 증발시켜버려서 Spring 이 예외를 감지하지 못한거였다.


수정 소스


잘 작동한다


참고 : https://stackoverflow.com/questions/16421508/how-to-rollback-spring-transaction-when-an-exception-is-thrown


-------------- 2019-04-17 추가

위 부분 문제가 되기 전에 삽질을 했던 것이 생각나서 추가함.


servlet-context.xml 에 component-scan 을 package 전체를 잡아놔서 안된 것도 있었다.



servlet context에는 controller 만 추가하고, 그 외는 application context에 추가한다



Posted by 스트라
,