이번글에서는 Sleuth를 사용할 때 불필요하게 생성되는 Mesage Header 정보를 Remove 하는 방법에 대해 알아보겠습니다. Spring Cloud Slueth sleuth는 MSA 환경에서 분산된 micro service 의 추적을 용이하게 해주는 라이브러리로.. traceId & spanId 와 같은 추적 정보를 MDC 에 자동으로 Inject 해줌으로써 분산되어 있는 Micro Service 내의 전체적인 Call Stack 을 손쉽게 추적할 수 있도록 도와줍니다. slueth 에 대한 자세한 내용은 이곳을 참고하시길 바랍니다. 이때 주의점으로는 만약 slueth 를 사용하는 서비스에서 message 를 produce 하게 된다면 'TracingChannelInterceptor&#..
문제 kafka에 메세지를 전송하려고 할때 다음과 같이 에러가 발생하며 메시지 전송을 실패한다. org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.cloud.stream.binder.kafka.KafkaMessageChannelBinder$ProducerConfigurationMessageHandler@5283b1f8]; nested exception is org.apache.kafka.common.errors.SerializationException: Can't convert key of class java.lang.String to class or..
이번글에서는 Spring Cloud Stream 을 사용할 때 Multiple Binder 를 사용하는 방법에 대해 알아보겠습니다. 1. RabbitMQ Bindings & Binders 먼저 Bindings 와 Binders 에 대해 간단히 살펴보겠습니다. 일반적으로 rabbitMQ binder(message broker)를 한개만 사용할 경우의 config 설정이 다음과 같을 때 spring cloud: stream: bindings: "like.event": destination: like.event.exchange contentType: application/json binder: rabbit-like binders: rabbit-like: type: rabbit environment: sprin..
문제 Lombok 의 @Data 와 @Builder 가 동시에 선언되어있는 클래스를 Jackson이 Deserialize 를 실패하며.. 다음과 같은 에러가 발생한다. fail to retrieve #{Object} data - Type definition error: [simple type, class #{package.object}]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of #{package.object} (no Creators, like default construct, exist): cannot deserialize from Object ..
이번글에서는 API 에서 Json 과 MultipartFile 을 한번에 전달받는 방법에 대해 알아보겠습니다. @RequestBody 먼저 API 규격상 다음의 값들을 한번에 전달받아야 한다고 가정하겠습니다. 1. 이름 2. 나이 3. 이미지 일반적인 경우 API 에서 클라이언트에게 값을 전달받기 위해선 Request Vo 를 생성해 @RequestBody 로 데이터를 전달받도록 구현합니다. 따라서 심플하게 생각하면.. 다음과 같은 vo 를 생성해 String/Long 값과 MultipartFile 형태의 값을 한번에 전달받으면 되겠군? 이라고 생각할 수 있습니다. @Getter @ToString public class CharacterCreateRequest { private String name; p..
이번 시리즈에서는 스프링 부트로 프로젝트를 처음부터 생성 및 구축해보도록 하겠습니다. # 목차 1. 스프링 부트 프로젝트 생성 & 실행 - EP01 2. Controller 생성 & API 호출 (1) - EP02 3. Controller 생성 & API 호출 (2) - EP03 DispatcherServlet 이전글에 이어 다음으로 살펴볼 클래스는 DispatcherServlet 입니다. 앞단에서 HTTP request 에 대한 여러 Filter 처리가 완료된 후에는 DispatcherServlet 이 호출되어 실제로 해당 request 에 mapping 된 method 를 호출하게 됩니다. 위 Debugger Stack 상으로는 HttpServlet 이라고 표기되어 있지만. DispatcherServ..
이번 시리즈에서는 스프링 부트로 프로젝트를 처음부터 생성 및 구축해보도록 하겠습니다. # 목차 1. 스프링 부트 프로젝트 생성 & 실행 - EP01 2. Controller 생성 & API 호출 (1) - EP02 3. Controller 생성 & API 호출 (2) - EP03 Controller 생성 이제 Contoller 를 하나 생성해보도록 하겠습니다. 프로젝트 경로 밑에 web 이라는 폴더를 생성하고 다음과 같이 HelloController 클래스를 생성합니다. 생성한 HelloController 클래스 상단에는.. 이 클래스가 RestController 의 역할을 한다는 걸 명시하기 위해 @RestController 어노테이션을 작성해줍니다. @RestController 어노테이션은 @Cont..
이번 시리즈에서는 스프링 부트로 프로젝트를 처음부터 생성 및 구축해보도록 하겠습니다. # 목차 1. 스프링 부트 프로젝트 생성 & 실행 - EP01 스프링 프로젝트 생성 먼저 스프링 부트 프로젝트를 생성하기 위해 IntelliJ IDE 에서 Spring Initializr 를 사용하겠습니다. IntelliJ 좌측 상단의 File > New > Project 를 클릭 후 좌측의 Spring Initializr 및 SDK 를 선택한 후 Next 를 클릭합니다. 다음으로 Group 및 Artifact 를 입력합니다. Group 은 일반적으로 도메인 명을 역순으로 입력합니다. 예를 들어 naver 의 경우 com.naver 와 같이 입력합니다. Artifact 는 프로젝트의 이름을 적어주면 됩니다. 저는 간단히..
이번 시리즈에서는 몽고 DB 자격증 준비를 하며 풀었던 연습문제를 정리합니다. 시험보기 직전 각 챕터별 문제를 빠르게 복기하기위한 자료입니다. 개발자를 위한 몽고 DB 자격증 로드맵 및 강의 링크는 아래와 같습니다. MongoDB Developer Certification | MongoDB University As a MongoDB Certified Professional, you will receive a license number, a PDF copy of your certification and a digital badge that verifies your certification. Display this badge proudly on your résumé, LinkedIn profile, emai..
1. 문제 local 에서 java 로 구현한 producer 에서 aws ec2 에서 구동중인 kafka broker 에 메세지를 제대로 전달하지 못한다. aws ec2 security group 의 TCP inbound rule 에 본인 local machine 의 접근은 허용되어 있다고 가정한다. kafka client 로 구현한 java producer 예제는 다음과 같다. public class Producer { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "ec2-3-35-218-127.ap-northeast-2.compute.amazonaws..
이번 글에서는 Linux 에서 Crontab 명령어를 사용해 Job 을 Scheduling 하는 방법에 대해 알아보겠습니다. 명령어 요약 # show cron job expression format cat /etc/crontab # cron job expression [MIM] [HOUR] [DOM(Day Of Month)] [MON(Month)] [DOW(Day of Week)] [CMD(Command)] # show crontab file cat /var/spool/cron/[User Name] # show cron log cat /var/log/cron # edit crontab crontab -e # list crontab crontab -l # remove crontab crontab -r 1...
이번 글에서는 Linux 에서 At 명령어를 사용해 Job 을 Scheduling 하는 방법에 대해 알아보겠습니다. 명령어 요약 # see atd activity log cat /var/log/cron # see all job ls /var/spool/at # create job at -f [Target File] now + 3 hours # see job contents at -c [Job Number] # see all job list with job number at -l # remove job at -d [Job Number] 1. Job Scheduling job scheduling 은 사용자가 특정 comamnd 혹은 program 을 미래의 특정 시점에 수행할 수 있도록 해주는 기능입니다. ..
이번 글에서는 Linux 에서 Signal 을 사용해 Process 를 Control 하는 방법에 대해 알아보겠습니다. 명령어 요약 # show all signal list kill -l # kill process kill -9 [PID] 1. Signal signal 이란 linux 에서 process 를 control 할 수 있는 신호를 의미합니다. signal 를 사용하면 특정 event 가 발생했을 때 관련된 process 들에게 어떠한 행동을 하도록 만든다던지.. 혹은 강제로 해당 process 를 멈추게 한다던지 등의 process control 을 수행할 수 있습니다. singal 에는 많은 종류가 있는데. 전체 signal 목록을 확인하기 위해선 다음과 같이 입력합니다. kill -l결과로..
이번 글에서는 Linux 에서 Nice 와 Renice 명령어를 사용하는 방법에 대해 알아보겠습니다. 명령어 요약 # show process's niceness top # show process's niceness ps -l # check system default niceness nice # assign lower nice value (+2 lower priority) nice -2 top # assign higher nice value (-10 higher priority) nice --10 top # find PID of process pidof [process] # renice of PID renice 5 [PID] 1. Niceness niceness(nice value)란 각 process 별..
이번 글에서는 Linux 의 Process States 에 대해 알아보겠습니다. 1. Process States process state 는 각 process 의 현재 동작 상태를 의미합니다. 하나의 process는 실행되고 종료되기까지의 life cycle 동안.. 여러번 동작 상태가 변경됩니다. processor 부하, memory 사용 가능량, process 우선 순위 등등의 영향도에 따라서 얼마나 자주 process 의 states 가 변경될지가 정해지게 됩니다. 이때 process 는 다른 process 에게 전달받아야하는 정보를 기다리는 동안에 non-running states 로 변경될 수도 있습니다. process 의 states 는 top 명령어로 확인할 수 있습니다. top 이러한 pr..
이번 글에서는 Linux 에서 Ping 명령어를 사용하는 방법에 대해 알아보겠습니다. 명령어 요약 # send ping (default) ping google.com # stop pinging ctrl + C # send ping desired number of packets ping -c 3 google.com # send ping with desired time interval ping -i 5 google.com # send ping with desired packet size ping -s 100 google.com1. Ping ping 명령어는 서버들 사이의 network 연결 상태를 확인하는데 사용됩니다. ping 을 사용하면 서버들간의 연결 상태 뿐만아니라 source & destinatio..
1. 상황 A : dev 환경의 ZZZ 서버가 정상적으로 응답을 안주고 있는데, 혹시 작업중이신게 있으신가요..? M : 오잉..? 해당서버 현재 apache / tomcat 은 정상적으로 구동되어 있습니다. A : ??? 음.. 그러면 혹시 해당 장비의 apache 와 tomcat 이 정상적으로 연결되어 있는지도.. 확인 한번 부탁드리겠습니다. M : 네, 알겠습니다. 2. 진행 일반적으로 apache 와 tomcat 이 같이 구동되어있는 환경에서 해당 서버의 http request 는 apache 의 80 port 로 수신하며, apache 가 해당 요청을 8080 port 의 tomcat 에 전달한다. 이때 만약 apache 와 tomcat 이 정상적으로 connection 되어있지 않다면 정상적으..
이번 글에서는 Linux 에서 DMIDECODE 명령어를 사용해 System Management BIOS 정보를 확인하는 방법에 대해 알아보겠습니다. 1. DMIDECODE dmidecode 명령어는 system 의 SMBIOS (system management BIOS) 내용을 확인할 때 사용됩니다. dmidecode 명령어를 사용하면 system 의 hardward, BIOS, serial numbers 등의 hardware 정보를 확인할 수 있습니다. 사용방법은 다음과 같습니다. dmidecode 명령어로 출력되는 정보는 하나의 page 에 담기에는 너무 많은 양이므로.. more 명령어를 같이 사용해 페이지 단위로 내용을 확인합니다. dmidecode | more결과 값으로.. 많은 양의 syst..
이번 글에서는 Linux 에서 UNAME 명령어를 사용해 System Information 을 확인하는 방법에 대해 알아보겠습니다. 1. UNAME uname 명령어는 system 의 information 을 확인하는데 사용되는 명령어 입니다. uname 명령어의 options 은 다음과 같습니다. 아무런 옵션 없이 uname 명령어를 사용하면 uname kernal 이름만 다음과 같이 출력됩니다. 1-1) -n (host name) -n 옵션을 사용하면 host name 을 확인할 수 있습니다. uname -n 결과는 다음과 같습니다. 1-2) -r (kernel release) -r 옵션을 사용하면 kernel release 를 확인할 수 있습니다. uname -r 결과는 다음과 같습니다. 1-3) ..
이번 글에서는 Linux 에서 Uniq 명령어를 사용하는 방법에 대해 알아보겠습니다. 1. Uniq uniq 명령어는 하나의 파일에.. 한개 이상의 동일한 line 의 존재 여부를 확인하는데 사용됩니다. 수백줄의 configuration parameter 가 존재하는 configuratin file 이 존재할 때 동일한 parameter 를 중복으로 작성하는 사례는 아주 일반적으로 발생하는 에러로.. uniq 명령어를 사용하면 손쉽게 위와 같은 에러를 방지할 수 있습니다. 사용방법은 다음과 같습니다. 예를 들어 다음과 같이 users 파일이 존재할 때 uniq 명령어를 사용하면 uniq users 중복된 line 이 제거된 값을 확인할 수 있습니다. 반대로 중복된 line 을 확인하고 싶을 경우 다음과 ..