Monthly Archives: October 2017

스파크 – 새로운 자바 웹 프레임워크

http://sparkjava.com/

스프링의 어노테이션 범벅 구조에 좀 질려있는 상황에서

간단히 메서드 체인 형태로 구성할 수 있는 프레임워크가 나와서 조금 반갑다.

그레일즈와 비슷한 구조?

다른건 제대로 써본게 없어서 정확히 비교를 못 하겠다.

아직은 초기라서 많은 기능지원이 없을 것 같다. 직접구현해도 나쁠것은 없지만….

회사일을 하다보면 그게 쉽지 않으니

추가적인 것은 나중에 확인.

DevOps – CI/CD 시스템 구축

시스템 구성

  • 빌드, 컴파일, 유닛테스트
  • 배포 – 테스트환경 – 버전별로 분기해서 동작
    ex) ver 20171021, ver 20171106

두 버전이 동시에 돌아갈 수 있음.

latest사용 또는 특정버전 사용

  • health check

시나리오 테스트

Real서버배포 – aws, gcp 등 cloud환경 배포시 배포 완료 후 ssh daemon 종료. 접속불가. immutable. 삭제만 가능.

 

참고글

https://cloud.google.com/container-registry/

https://cloud.google.com/container-registry/docs/continuous-delivery

https://cloud.google.com/solutions/spinnaker-on-compute-engine

https://martinfowler.com/articles/continuousIntegration.html
https://martinfowler.com/bliki/ContinuousDelivery.html

요약정리는 읽어본 후

추가 다른글
https://trello.com/c/rOmLEI0u/9-%EB%A7%88%ED%8B%B4-%ED%8C%8C%EC%9A%B8%EB%9F%AC%EC%9D%98-is-design-dead

http://blog.naver.com/j6040148/120015111138

https://martinfowler.com/articles/designDead.html

https://www.gocd.org/2017/07/10/gocd-vs-spinnaker/

실리콘밸리 기업문화

인터넷 어디서 봤던거 메모

Facebook.
Eating your own dog food.

Apple.
“We can see around corner.” = 미래는 우리가 만들어서 보여주는 거지 묻는게 고객이나 사용자에게 질문하는 게 아니다.
Steve wants… Steve said…
극도의 장인정신을 가지고 제품과 서비스를 만들어서 이를 많은 사람들에게 제공함
실제 Apple 에서는 고객이 새로 제품을 받아서 처음으로 Unboxing 하는 경험을 굉장히 중요하게 여겨서 패키지의 재질과 박스를 여는 Task만을 하는 잡도 있다고 함

PIP(Perfomance Improvement Plan)라고 해서 3개월동안 구체적인 목표를 수치화해서 이를 달성하지 못하면 해고시킴

Babun – 윈도우10 터미널 작업 지원 툴

http://babun.github.io/

 

윈도우 7이나 이하버전에서도 가능한지는 모르겠다.

윈도우10에서 지원하는 우분투 설치기능같은거 그걸 이용하는건지 별도로 가상환경을 구성하는건지도 지금 모르겠다. 확인필요

cygwin인가를 사용하는 것 같기도 하고… 스쳐지나가며 본 것 같다

 

윈도우에서 git, ssh, scp 등등의 명령어를 쓰고싶을 때가 있다.

윈도우 커맨드라인의 도스명령은 성능이 떨어지기도 하고… 오래되서 잘 생각도 안나고

파워쉘 명령은 하나도 모르겠고

그럴 때 리눅스명령으로 터미널 작업을 할 수 있다는 점은 매력적이다.

 

윈도우와의 완벽한 호환성을 제공하진 못하지만 /c/Users/username/~~ 와 같은 형태로 접근도 가능하고

Users디렉토리는 윈도우즈의 User디렉토리와 별도의 경로를 사용한다.

 

쓰면서 좀 더 확인해보고 수정.

Error: WordPress pre 태그 오류

이 코드를 pre태그에 넣으면 오류발생

link=`expr “$ls” : ‘.*-> \(.*\)$’`

*** Error in `apache2': corrupted double-linked list: 0x0000565022316df0 ***
[Tue Oct 24 06:49:56.116709 2017] [core:notice] [pid 1] AH00051: child pid 180 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': double free or corruption (out): 0x000056502236b360 ***
[Tue Oct 24 06:51:58.240351 2017] [core:notice] [pid 1] AH00051: child pid 201 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': double free or corruption (out): 0x0000556db917a100 ***
172.19.0.2 - - [24/Oct/2017:15:06:17 +0000] "GET /favicon.ico HTTP/1.1" 200 191 "http://memo.polypia.net/archives/2739?preview_id=2739&preview_nonce=0920547848&post_format=standard&_thumbnail_id=-1&preview=true" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
[Tue Oct 24 15:06:17.573774 2017] [core:notice] [pid 1] AH00051: child pid 239 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': free(): invalid pointer: 0x00007fecef58b26e ***
172.19.0.2 - - [24/Oct/2017:15:06:24 +0000] "GET /favicon.ico HTTP/1.1" 200 191 "http://memo.polypia.net/archives/2739?preview_id=2739&preview_nonce=0920547848&post_format=standard&_thumbnail_id=-1&preview=true" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
[Tue Oct 24 15:06:25.582744 2017] [core:notice] [pid 1] AH00051: child pid 240 exit signal Aborted (6), possible coredump in /etc/apache2

정확히 어느 부분이 오류포인트인지 정확히 모르겠는데 워드프레스에서 일부 코드가 escape되서 문자열을 실행코드로 인식하는게 아닌가 싶다.

퍼블릭 글쓰기 권한이 있는 워드프레스에서 해당코드를 활용하면 서버단의 php를 실행시키는 공격이 가능하지 않을까

Error : No thread-bound request found

 

Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) ~[spring-web-4.3.11.RELEASE.jar:4.3.11.RELEASE]

DTO나 Static 메서드에서 파라미터로 받아오지 않는

쓰레드세이프하지 않게 만들어놓으면 발생하는 문제

(리퀘스트 홀더나 세션에 리퀘스트 관련 정보가 저장되어 있다거나)

HttpRequest에서 들어오는 파라미터 등은 쓰레드세이프하게 사용.

 

이번 오류는 DTO에 RequestContextHolder.currentRequestAttributes() 가 들어있어서 발생.

public class SiteDTO implements Serializable {
    private final ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
    private final HttpServletRequest req = servletRequestAttributes.getRequest();

~~~~~
}

Mybatis로 DB의 값을 받아올 때 사용하는 DTO인데 RequestContextHolder를 사용한다.

일반적인 상황에서는문제가 없지만 Request가 생성되기 전에 Security 에서 DB를 호출하는 경우 문제가 생길 수 있다.

Filter의 앞단에서 아래같은걸 해주거나…

https://stackoverflow.com/questions/43404300/no-thread-bound-request-found

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.context.request.ServletRequestAttributes;

@Provider
public class RequestFilter implements ContainerRequestFilter {
    private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
            RequestFilter.class.getName() + ".REQUEST_ATTRIBUTES";

    @Context private HttpServletRequest httpRequest;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        ServletRequestAttributes attributes = new ServletRequestAttributes(httpRequest);
        httpRequest.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);
        LocaleContextHolder.setLocale(httpRequest.getLocale());
        RequestContextHolder.setRequestAttributes(attributes);
    }

}

근데 뭐가 됐건 DTO에다가 Static 호출을 넣으면 안된다.

 

Error : SpringBoot Hibernate 버전충돌

SpringBoot 1.5.7에서 Hibernate 5.0.12 버전을 쓰는데

나는 Hibernate 버전 5.2.11을 사용

SpringBoot플러그인이 의존성을 지맘대로 들고와서 충돌을 일으킨다.

SpringBoot의 ext를 오버라이딩 해 줘야한다.

 

난 버전표시를 이렇게 쓰고 있는데

hibernate_version=5.2.11

스프링부트는 이렇게 쓰고 있다.

이걸 오버라이딩해야되니 한개 더 써준다.

hibernate.version=5.2.11