전체 글

전체 글

    Netty 통신 서버 개발 관련 주저리

    Netty? Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. netty는 JAVA 진영의 Transport Layer에서 가장 유명한(?) 프레임워크이다. TCP 뿐만 아니라 HTTP, UDP 등 사실상 byte를 송/수신하는데에 두루두루 쓰이고 있는 상황이다. 수 많은 프레임워크들이 클러스터링 구성을 하거나 할 때 내부 통신(inner-communication)을 하는 프레임워크로 netty를 주로 사용하고 있다. 내부 구현은 JAVA NIO로 되어 있으며, 플랫폼에 따라 Epoll(..

    [NoSQL] Aerospike란?

    AEROSPIKE : 로켓의 속도와 안정성을 증가시키기 위해 장착하는 "엔진 노즐" 오랜만에 쓰는 기술 리서치. 이번에는 nosql 류의 aerospike에 대해서 알아보고자 합니다. 일단 aerospike를 알아보기 앞서서, nosql이 뭔지에 대해 이해를 하고 보시면 훨씬 더 이해가 쉬울 것이라고 사료됨. aerospike는 key-value 저장소 중 하나로, 최근 각광받는 고성능 데이터베이스로 알려져 있다. 다만, 한국에서는 이 솔루션을 적용해서 서비스를 하는 곳이 그리 많지 않은 것으로 알고 있고, 같은 개념의 nosql인 redis에 비해서 아직까지는 인지도가 떨어지는 편이다. 아무래도 커뮤니티가 활성화 되지 않은 상태에서는 자료가 별로 없는 데이터베이스를 서비스에 적용하긴 어려울 것임은 분명..

    [linux] 오래된 log 파일 찾아서 지우기

    find -name '*.log' -mtime +10 |xargs rm # .log에 해당하는 파일을 찾아서 mtime(수정시간)이 10일 이상이 된 것들을 지운다(xargs rm) # 명령어를 실행하는 디렉토리 밑의 파일들을 찾는다. # 데몬 디렉토리 혹은 톰캣 디렉토리 등으로 들어가서 명령어를 실행하면 된다. # -mtime : 수정시각, -atime : 접근시각, -ctime : 생성시각 # 대부분 로그는 append된 후, rolling 되기 때문에 mtime을 기준으로 하면 된다.

    크롬(Chrome) 재시작 시 자동으로 탭이 복원될 때

    그냥 끄적이는 소리인데, 어느순간 크롬을 종료했는데(탭이 수십개 되어서 다 닫을겸 그냥 크롬 종료) 다시 크롬을 키니, 그 탭들이 다시 똑같이 로드가 되면서 그야말로 아비규환이 따로 없는 상황이 발생한다.. 해결책은 "백그라운드에서 크롬 실행" 을 꺼버리면 된다. 크롬이 백그라운드에서 접속하고 있는 탭의 세션을 기록하고 있기에 다시 크롬을 시작하면 저장되었던 탭을 복구시키기 때문이다. 크롬 브라우저에서 주소창에 아래와 같이 친 뒤,chrome://settings/ 맨 밑에 "고급" 을 누르고 "Chrome 종료 후에도 백그라운드 앱을 계속 실행" 을 찾아서 꺼준다.

    [Linux] 리눅스 ssh 프롬프트 폰트 coloring 적용

    리눅스 시스템을 처음 설치하고 나면 아주 밋밋한 "하얀" 글자만 bash에 보이게 된다. 이는 원래 컬러링을 적용해야 하는데 적용이 안되는 경우로 특정 파일의 내용을 바꿔주는 것으로 컬러링을 적용시킬 수 있다. ~/.bashrc 파일을 수정함으로써 가능하다. 위 파일을 수정해본다 vim ~/.bashrc 를 치게 되면 bash에 대한 설정값이 적힌 파일이 오픈되는데, 여기서 주석처리가 되있는 부분을 풀어주면 된다(없으면 직접 타이핑을 해도 된다) # uncomment for a colored prompt, if the terminal has the capability; turned # off by default to not distract the user: the focus in a terminal wi..

    [Linux] sudo 로그인 시 패스워드 입력 없이 권한얻기

    대부분 리눅스 운영체제를 처음 설치하고 유저를 생성한 뒤 sudo su - 혹은 sudo -s 로 루트 권한을 받으려 할 때루트의 패스워드를 다시 묻는 경우가 발생하게 된다. 하지만 대부분의 서버.. 는(물론 루트의 패스워드를 따로 관리해서 매번 패스워드를 치는게 보안상 더 바람직 하긴 하나)그렇게 크리티컬한 서버가 아닐경우 패스워드 입력 없이 루트권한을 받아야 하는 경우도 있다 음.. 앞단에서 방화벽 장비가 막아주거나, 특별히 보안 상 위협이 없을 것이라고 판단할 경우에만 사용하는 것을 권장한다. 거두절미하고 방법은 /etc/sudoers 파일을 수정하는 것이다 이 파일에는 sudo 로 권한을 얻고자 하는 유저들의 권한에 관련된 정보가 담겨 있다 # # This file MUST be edited wi..

    SpringBoot Jackson(ObjectMapper) Config

    Springboot의 기본 MessageConverter(JSON POJO) 는 FasterXMl의 Jackson이다 이 Converter의 옵션을 변경해야할 때도 있는데, 설정하는 방법에 대해 기술하려고 한다. 일단 Springboot의 @Configuration이 붙은 클래스에 config를 기술하게 되는데 @Configuration public class WebConfig extends WebMvcConfigurationSupport { @Override public void configureMessageConverters(List

    [Spring] @Valid Collection Validation 관련

    Spring 이라기보다 Java에서 원래 제공하던 놈(javax) 중에 @Valid 라는 것이 있다. Spring에서는 해당 @Valid를 Validator라는 인터페이스로 지원을 하고 있다. 이는, 해당 Object 내의 field들을 검사해서 NULL인지 혹은 타입체크(email, phone 등) 여부를 체크할 수 있는 좋은 어노테이션인데, 현재 기준으로 그냥 쓰면 안되는 것 중에 하나가 Collection을 Validate 하는 부분이 안된다. Google에 검색을 해보아도 Collection은 @Valid가 적용이 안된다는 걸 알 수 있는데, 컨트롤러단에서 아래와 같이 받았다고 치자. public ResponseEntity registration(@Valid @RequestBody List dto..

    [Spring] spring boot XML Response 매핑

    Springboot에서 @RestController로 내려주는 Value에 대해서는 JSON 매핑을 알아서 변형해서 내려주지만, XML은 기본적으로 매핑되지 않아서 내려주지 않는다(Accept : application/xml로 요청 왔을 시 -> 406 Not Acceptable 로 떨군다) 해결법은 com.fasterxml.jackson.dataformat jackson-dataformat-xml 을 추가하면 된다 jackson 라이브러리의 dataformat-xml을 추가해주게 되면 JSON을 기반으로 내려주던 것을 XML로도 내려준다 그렇게 한 뒤에 Header에 Accept 값을 application/xml로 보내보면 xml로 파싱이 잘 된다.

    [Linux] 자바 웹 어플리케이션 서버 실행 쉘(Shell) 스크립트

    JAVA로 작성한 jar파일을 데몬으로 돌려야할 때 필요한 쉘 스크립트 정리 기본적으로 java -jar 를 이용해 jar파일을 실행하는 것을 서비스 운영 모드로 동작하게 해주는(관리 측면 효율성) 쉘 스크립트이다. #!/bin/sh SERVICE_NAME=서비스명 PATH_TO_JAR=실행할 JAR 파일 path.jar PID_PATH_NAME=./서비스명.pid JAVA_OPT="-Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m" case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then nohup java -jar $JAVA_OPT $PATH_TO_JA..