개발 공부 기록하기 108

패커 (Packer) 시작하기

안녕하세요 여러분! 공부하는~ 개발자 입니다 :) 이번 시간에는 바로바로 하시코프(HashiCorp)에서 만든 Packer에 대해 알아보겠습니다! Getting Started 공식 문서 : https://learn.hashicorp.com/collections/packer/getting-started Packer란 여러 type의 머신 이미지 생성을 자동화하는 도구입니다. 가상 머신 이미지를 만들어주는 오픈소스라고 생각하시면 됩니다. 하나의 스크립트로 GCP, AWS, VMWare 등의 이미지를 한 번에 만들 수 있는거죠. 네, 저도 잘은 모르는데요 일단 바로 한 번 Getting Started를 따라해보겠습니다. 1. Packer 설치 첫 단계는 Packer 설치네요.. 저는 Mac을 사용하고 있기 때..

짧은 코멘트와 함께하는 이펙티브 자바) #11 equals를 재정의하려거든 hashCode도 재정의하라

짧은 코멘트 equals 관련 코멘트에서 다루었던 것처럼 @EqualsAndHashCode 를 사용할 수 있다. 단, 이때 컬렉션이나 순환참조 객체 등을 @EqualsAndHashCode 대상 필드에 포함시키면 문제가 될 수 있다. IntelliJ 에서 command + N(윈도우는 아마 control + N..?) 을 눌러, equals And hashCode를 자동으로 만들어줄 수 있다. hashCode equals를 재정의한 클래스 모두에서는 hashCode도 재정의 해야 한다 hashCode의 규약 중 일부는 이렇다 - equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다 -..

짧은 코멘트와 함께하는 이펙티브 자바) #10 equals는 일반 규약을 지켜 재정의하라

짧은 코멘트 1. 테스트를 작성할때 equals를 활용할 수 있다. // 1. getter를 사용하는 방식 Person result = getPerson(); assertThat(result.getName()).isEqualTo("lannstark"); assertThat(result.getAge()).isEqualTo(20); // 2. equals를 사용하는 방식 Person result = getPerson(); assertThat(result).isEqualTo(new Person("lannstark", 20)); 2. lombok의 @EqualsAndHashCode를 이용하면 편리하다. 3. 실무에서 DB Table과 매핑되는 객체에 사용하기에는 다소 어려움이 있다. 필드가 굉장히 많기 때문. ..

짧은 코멘트와 함께하는 이펙티브 자바) #9 try-finally 보다는 try-with-resources를 사용하라

짧은 코멘트 당연히 try with resources를 사용해야 한다. JDK 7부터 try with resources를 사용할 수 있게 되었는데 혹시 프로젝트가 JDK 6이라면.... (와.. AWS AMI에서 JDK8도 사라지고 JDK11을 권장하고 있는데, JDK 6이요..?) 다른회사로 도망쳐야 한다 try-finally 보다는 try-with-resources를 사용하라 자바 라이브러리에는 close 메소드를 호출하여 직접 닫아줘야 하는 자원이 많다. (ex. InputStream, OutputStream, java.sql.Connection) 자원 닫기는 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다 전통적으로 자원 닫힘을 보장하는 수단으로는 try - finally가..

짧은 코멘트와 함께하는 이펙티브 자바) #8 finalizer와 cleaner사용을 피하라

짧은 코멘트 실제로 사용해본적이 없다. ThreadPoolExecutor가 finalizer 역할을 제공한다고 되어 있지만 JDK 버전에 따라 다른 모습을 보여준다. (모든 버전을 확인해본 것은 아니지만, 9버전부터 아무것도 하지 않게 변경된 것 같다. // Override without "throws Throwable" for compatibility with subclasses // whose finalize method invokes super.finalize() (as is recommended). // Before JDK 11, finalize() had a non-empty method body. /** * @implNote Previous versions of this class had a ..

AWS SQS 들이파기

안녕하세요~~ 여러분~! 공부하는개발자 입니다 ㅎㅎㅎ 이번 시간에는 바로바로~ SQS에 대해서 알아보려고 합니다. SQS란 무엇인지, Java + Spring으로 어떻게 사용할 수 있는지, 사용시 주의할 점 등은 무엇인지 간단바리(들이파기라 해놓고 간단바리..?)로 살펴보겠습니다. 바로 시작해보죠! AWS SQS란? SQS는 Simple Queue Service의 약자입니다. 애플리케이션 간의 메시지를 전달하기 위한 아주 '간단한' Queue 라고 생각하면 됩니다. 홈페이지 설명에 따르면, 지속성이 우수하고 사용 가능한 보안 호스팅 대기열을 제공하며, dead-letter queue, 표준대기열, FIFO 대기열을 지원하고 있습니다. SQS와 MQ의 차이점 RabbitMQ를 들어본 적이 있는 사람이라면,..

[AWS SQS 들이파기] DLQ(Dead-Letter Queue) 설정하기

이제 DLQ를 설정하고 테스트를 해보겠습니다. 우선 삭제된 Message가 들어갈 Queue를 새로 하나 만들어 주어야 합니다. sqs-study-dlq 라는 이름을 가진 Standard Queue를 빠르게 만들었습니다 ㅎㅎㅎ (한 번 해봤으니 쉽죠..?) 그리고 sqs-study 로 들어가 편집 > 배달 못한 편지 대기열을 설정해 주었습니다. 간단합니다 ㅎㅎ..저장을 누르면 이렇게 나옵니다. 이제 테스트를 해보겠습니다! 간단하게 console로 쓱-샥 해볼 예정 ㅎㅎ 1. sqs-study에서 메시지 전송 2. 메시지 폴링을 반복적으로 클릭! 폴링 진행 상황이 가득차면 그 위에 있는 메시지 폴링을 클릭할 수 있습니다 ㅎㅎㅎ 3. 메시지 수신수가 5를 넘어가게 되면..! 어느덧 사용 가능한 메시지가 0으..

[AWS SQS 들이파기] SQS에서 메시지 받기 II (Java + Gradle + Spring)

모든 코드는 github에 올라가 있습니다. SQS로부터 메시지를 받는 두 번째 방법은~~ 바로바로 Annotation을 이용하는 방법입니다. 아래의 PersonListener 코드를 봐보죠! @Slf4j @Component // Bean 등록을 꼭 해줘야 한다! public class PersonListener { @SqsListener(value = "sqs-study", deletionPolicy = SqsMessageDeletionPolicy.NEVER) public void listen(@Payload Person person, @Headers Map headers, Acknowledgment ack) { log.info("{}", person); log.info("{}", headers); l..

[AWS SQS 들이파기] SQS에서 메시지 받기 I (Java + Gradle + Spring)

모든 코드는 github에 올라가 있습니다. 이제 메시지 보내는 것은 성공했으니 보낸 메시지를 받아보려고 합니다. 그 전에 MessageConverter 에 대해서 간단히 알아 봅시다 ㅎㅎ QueueMessagingTemplate은 단순한 String을 주고받는 메소드 외에, Java Object를 받는 다양한 전송 메소드들이 존재합니다. 그 중에 convertAndSend() 와 receiveAndConvert()는 MessageConveter 인터페이스에게 직렬화/역직렬화 책임을 위임하고 있습니다. 실제로 코드를 살펴보면 아래와 같습니다. AbstractMessageSendingTemplate (spring-messaging) @Override public void convertAndSend(Stri..

[AWS SQS 들이파기] AWS SQS로 메시지 보내기 (Java + Gradle + Spring)

SQS로 메시지를 보내는데 몇 가지 방법이 있을 것 같지만, 저는 Java Spring (boot) 개발자이니 해당 스택으로 SQS에 메시지를 쏴보겠습니다 ㅎㅎ 아하 생각해보니 새 PJ을 만들어야 하네요..! 모든 코드는 github에 있습니다. 1. 의존성 설정 plugins { id 'org.springframework.boot' version '2.3.3.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'com.lannstark' version = '0.1.0' sourceCompatibility = '11' configurations { compileOnly { extendsFrom ..