1. 람다 함수(Lambda Function)이란? 함수형 프로그래밍 언어에서 사용되는 개념으로 익명함수라고도 한다 Java 8 부터 지원되며, 불필요한 코드를 줄이고 가독성을 향상시키는 것을 목적으로 두고 있다 람다 함수를 특정 메소드의 매개변수로 넘기기 위해서는 메소드의 매개변수가 함수형 인터페이스여야 한다 자바에서 함수형 인터페이스는 @FuntionalInterface를 붙여 선언한다. 이 인터페이스는 반드시 추상 메소드 한개만 정의되어있다 - 함수형 인터페이스와 람다 예시 //익명 함수 사용법 new Thread(new Runnable() { @Override public void run() { System.out.println("Thread!"); } }).start(); //람다식 사용법 ne..
도커를 운영 환경에서 적용하다보면 여러개의 컨테이너를 이용해야 하는 경우가 많은데 이렇게 여러 컨테이너를 관리할 때 필요한 것이 도커 컴포즈(docker-compose)이다. 이는 yml 포맷으로 기술된 설정 파일로 여러 컨테이너의 실행을 한번에 관리할 수 있게 해준다. 아래는 내가 개발하는 프로젝트에서 사용되고 있는 컴포즈 설정 파일이다. version: '3' services: nginx: image: nginx ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf network_mode: host eureka-service: build: ./eureka-server ports: - "8761:8761" network_mode: h..
Exception 처리 방법 1. @ExceptionHandler + @RestControllerAdvice 전역 Exception 처리를 지원한다 ResponseEntity를 사용하여 예외를 처리할 수 있다 같은 메소드에 여러 Exception을 매핑하여 사용이 가능하다 @ControllerAdvice @RestController public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity processValidationError(MethodArgumentNotValidException exception) { BindingResult bindingResul..
1st Debug Rest API 호출 Error Log { "timestamp": "2020-02-18T10:16:18.507+0000", "status": 504, "error": "Gateway Timeout", "message": "com.netflix.zuul.exception.ZuulException: Hystrix Readed time out" } Multipart로 이미지를 받는 api를 테스트중 이러한 오류를 만났다. Data가 커서 응답이 오래걸려 나타난 문제였다 먼저 Zuul에서 라우팅되어 요청이 가는 Display 서비스의 설정파일을 수정하였다 ribbon: ConnectTimeout: 3000 # 클라이언트 서버에 연결되는 제한시간 ReadTimeout: 7000 # 요청에 대한 ..
Docker에서 제공하는 Network 모드는 총 4개가 있다. (Docker Swarm과 관련된 모드 제외) Bridge 모드 docker0 네트워크를 bridge 삼아 구성되는 네트워크 구조이다. 컨테이너가 생성되는 경우 각각의 namespace(대역)를 할당받고 각각의 독립된 namespace의 네트워크 인터페이스가 docker0에 연결되어 네트워크가 이루어지게 된다 도커에서 네트워크 설정을 별도로 하지 않으면 디폴트로 작용되는 모드이다. 도커가 설치되면 Host OS에 docker0이라는 네트워크 인터페이스가 생성된다(Virtual Interface) Host OS에서 nextwork interface를 검색해보면 docker0이라는 virtual interface를 확인할 수 있다 root@ya..
이미 repository에 올라와 있는 파일을 .gitignore에 추가하고 싶을 때 이미 올라와 있는 파일들은 tracking되고 있기 때문에 tracking을 제거해줘야 한다 $ git rm -r --cached . // cache에 기록된 tracking 중인 파일리스트 삭제 $ git add . $ git commit -m 'remove ignored file' $ git push {remote} {branch} cache에 기록된 tracking 중인 파일리스트 모두 삭제 후 gitignore에 추가한 파일을 제외한 다른 모든 파일 다시 add . 그리고 커밋 그리고 푸쉬 그러면 아아아아주 자아아아알 수정사항이 반영된다 ~!~!~!~!~!
Docker란? 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼 도커의 개념에 대해서는 해당 블로그를 참고하였습니다 가상 머신과 컨테이너형 가상화 기술의 차이점 도커는 컨테이너형 가상화 기술을 사용한다. 가상머신(VM)은 하드웨워 기반의 여러 게스트 운영체제이다 ->각 가상 머신마다 전용 운영체제가 있다(Guest OS) 컨테이너는 애플리케이션 수준으로 구성되어있다 (애플리케이션을 실행하는데 필요한 라이브러리와 도구만 포함) ->Host OS만 존재 도커 이미지와 도커 컨테이너 -도커 이미지 : 도커 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로 컨테이너를 생성하는 템플릿 역할 -도커 컨테이너: 도커 이미지 기반으로 생성되며, 파일 시스템과 애..
이전 포스팅에 Zuul 에 대한 정의와 Zuul 서버 구현에 대하여 알아보았다 오늘은 더 나아가 Zuul의 동작 원리와 Zuul에서 제공하는 Filter들의 기능에 대하여 정리하려한다 Zuul 동작 과정 Zuul은 클라이언트 요청의 많은 트래픽과 다양한 형태의 요청으로 인한 이슈를 신속하고 동적으로 해결하기 위해 groovy언어로 작성된 다양한 형태의 Filter를 실행한다. Filter에 기능을 정의하고, 이슈사항 발생시 적절한 Filter을 추가함으로써 이슈사항을 대비할 수 있다 Filter File Manager에서는 일정 주기(정해진 시간) 마다 정해진 directory에서 groovy로 정의된 filter 파일을 가져온다. javax.servlet.http.HttpServlet을 상속받아서 Zu..