실력있는 개발자들이여!
-
spring
spring boot 에 rabbitmq 적용하기
RabbitMQ 란 open source Message broker 로 알려져 있다 즉 mircro service에서 Producer-Consumer pattern을 이용할 시에 producer 가 message 를 send 하면 consumer가 소비하는 구조이다. 예를 들자면 어느 shop 에서 고객이 주문을 요청하면 producer 가 주문flow를 요청하고 microservice 에서 주문 요청을 처리하는 flow를 소비한다는 개념이다 이때 중간에서 rabbitMQ가 비동기로 이 주문요청의 event message를 queue 형식으로 받고 microservice에 전달하는 역할을 한다고 보면 된다. RabbitMQ 기본개념AMQP(Advanced Message Queuing Protocol) :..
-
spring
(Spring Boot) @Transactional 이란? / @Transactional에 대하여
@Transactionalhttps://lion-king.tistory.com/3 - 최신 업데이트 글StackOverflow 질문중 UserNameNotFoundException 발생시 delete method가 실행되지않는다는 질문에 답을 하였습니다.https://stackoverflow.com/questions/52619924/how-to-execute-transaction-in-hibernate-while-throwing-exception/52620514#52620514I have the following method in my transactional service layer implemented with Hibernate:@Override public void activateAccount(St..
-
aws
AWS DynamoDB - (3) AWS SDK for Java 설정하기
OverviewAWS SDK for Java는 Amazon Web Service를 위한 JAVA APi이다. 즉, Amazon S3, Amazon DyanmoDB의 서비스를 사용하는 Java application을 만들 때 사용하게 된다. 이번 포스팅의 목표는 EC2 Instance에서 실행하는 Spring Boot project가 DyanmoDB service를 사용할 수 있도록 AWS SDK를 설정하는 것이다. 아래의 그림은 해당 설정이 끝났을 때 요약도이다. 1. AWS SDK for JAVA 설치하기build.gradle에 dependency를 추가해주자.// AWS Dynamic DB compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb',..
-
spring
RxJava 적용하기 (0) - RxJava overview
좋은 어플리케이션을 만들기 위해서는 3가지 요소를 고려하여야 한다. Responsiveness, Elasticness, Resilience이다. RxJava 설정하기 io.reactivex.rxjava2 rxjava 2.1.0 RxJava는 어떻게 동작하는가?Dzone에 있는 모든 문서를 가져와주는 어플리케이션을 예시로 살펴보자. public class DzoneDBDao { private static DzoneDBDao service = new DzoneDBDao(); public static DzoneDBDao get() { return service; } DZoneDoc[] getAllDocFromDB() { return produceDocs(); } private DZoneDoc[] produce..
-
기타개발
써드파티 라이브러리를 적용하면서
써드파티(3rd-party) 라이브러리우리 회사가 개발하는 어플리케이션에서 외부 거래소의 API를 사용해야 하는 상황이다.당연히 Documentation을 읽고 코드를 짜면 그만이다,스프링 클라우드, 마이크로서비스를 적용한 김에, 어떻게 적용을 해야 좀 더 좋은 설계인지에 대해 고민해봤다. 외부 라이브러리와의 낮은 결합도 - 외부 라이브러리 코드를 직접 어플리캐이션에 넣어버리면 버전의 영향에 직격탄을 맞을 것이다. UI, crypto-service 두개의 프로젝트를 만들어서 UI에서는 crypto-service를 호출하고, crypto-service에서 외부 라이브러리를 사용하는게 좋을 것이다. - 장점 1) UI에서 테스트코드를 작성하기 편함 - 장점 2) 거래소 API가 변경되었을 때 crypto-s..
-
infra
좌충우돌 스타트업의 CI/CD 적용기 1탄
좌충우돌 스타트업의 CI/CD 적용기 1탄시대가 변하면 개발 문화도 변한다. 내가 다녔던 전 회사는 ERP솔루션 업체로 waterfall 모형으로 개발을 했었는데 개발팀과 운영팀이 분업화 되어 있었다. 운영팀이 현업의 요구사항을 받았고 개발팀과 일정 기간동안 요구사항을 개발서버에 테스트 적용해보고 version을 올려서 모두가 사용하지 않는 시간에 운영server를 일시적으로 중지하고 대규모로 배포 했었다. Waterfall 모형으로 개발되는 프로젝트는 확실히 분리된 업무와 체계적인 개발과정을 거치고 정형화된 문서가 기록에 남지만 현업에서 요구한 요구사항을 통합적으로 처리하기 때문에 서비스 변화에 대한 대응이 느리고 운영 과정에서 발생하는 피드백의 빠른 반영이 힘들었다. ERP 개발에서도 불확실한 요구사..
-
spring
토비의 스프링 5-4장. 메일 서비스 추상화
메일 서비스 추상화고객으로부터 사용자 레벨 관리에 관한 새로운 요청사항이 들어온 경우라면?User에 email 추가upgradeLevel()에 메일 발송 기능 추가JavaMail이 포함된 코드의 테스트테스트 코드를 돌리면 SMTP host에 연결할 수 없다고 에러가 날 것이다. 그렇다면 아래 처럼 테스트 서버를 구축하는건 어떨까? UserService ---> JavaMail ---> 메일 서버 ---> 테스트용 메일 서버 매번 메일이 발송되는건 바람직하지 못하다. 메일 발송은 부하가 큰 작업일 뿐 아니라, JavaMail은 검증된 라이브러리이다. 따라서 JavaMail API를 통해 요청이 들어간다는 보장만 있다면 굳이 테스트할 때마다 JavaMail을 구동시킬 필요가 없다. UserService --..
-
aws
(AWS DynamoDB) CRUDRepository 설정하기 - 복합키 Entity
AWS DynamoDB CRUDRepository 이전 포스팅에서 AWS SDK for Java 설정과 테이블 설계을 완료 하셨다면 이제 실제로 DynamoDB를 Java를 사용하여 다루어 보겠습니다.AWS SDK for Java : http://dev.overnodes.com/entry/AWS-DynamoDB-3-AWS-SDK-for-Java-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0DynamoDB 테이블 설계 : http://dev.overnodes.com/entry/AWS-DynamoDBNoSQL-%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4%EC%97%90-%EB%A7%9E%EB%8A%94-%EC%8A%A4%ED%82%A4%EB%A7%88-%EC%84%A..
-
spring
(Spring Boot Bean) 사용자 클래스 Bean 객체 등록 / 설정 간단하게 하기!
사용자 클래스의 Spring Bean 등록/설정먼저 사용자 클래스를 Spring Bean 으로 등록하는 쉬운 방법은 클래스 선언부 위에 @Component 어노테이션을 사용하는 것 입니다. @Component 어노테이션이 붙은 클래스는 Spring Bean 객체로 등록이 되어 객체 생성/삭제를 Spring에서 관리하게 되겠죠? @Component public class MyClass { // Methods .... } Spring Boot로 서비스를 구현 하는 중에, 제가 구현한 Class를 Bean객체로 사용하고싶었지만 해당 Class의 field 1을 Autowired로 가지고, field 2를 Instance화 하는데에 또 다른 Bean Class의 Instance 객체가 필요한 특수한 상황이라 쉽..
-
aws
(AWS DynamoDB)(NoSQL) 비즈니스에 맞는 스키마 설계
DynamoDB 스키마 설계 먼저 설계에 앞서 알아야할 부분을 말씀드리자면DynamoDB는 NoSQL이고, RDBMS와 NoSQL 설계는 다릅니다.DynamoDB의 경우, 대답해야 할 질문을 알기 전까지는 스키마 설계를 시작할 수 없습니다.사전에 비즈니스 문제와 애플리케이션 사용 사례를 이해해야 합니다.DynamoDB 애플리케이션에서는 가능한 적은 수의 테이블을 유지해야 합니다. 대부분의 잘 설계된 애플리케이션은 단 하나의 테이블만 요구합니다.저희 팀이 DynamoDB를 적용하며 스키마 설계단계에서 가장 많은 시행착오를 겪었던 부분이RDBMS를 설계하던 기존 방식과 다른 방식으로 접근하지 못했던 것이었습니다. 잘못된 설계의 예시 저희 회사 서비스의 일부분을 말씀드리면,Content Creator (사내에..
-
infra
(AWS / Jenkins 환경) Nexus 3.0을 사용한 사설 저장소 구축하기
Nexus 3.0 이란? 다양한 형태의 사설 저장소를 만들고 운용할 수 있는 서비스를 제공합니다.2.x 버전에서는 Maven 저장소로 주로 사용하였지만, 3.0 버전부터는 npm, docker 등 지원하는 포맷이 대폭 확장되었습니다. 2.x 버전과 호환이 보장되지 않기 때문에 2.x 버전에서 3.x버전으로 업그레이드를 고려한다면 관련 레퍼런스의 참고가 필요합니다. Nexus Repository 종류Proxy -> 외부의 메이븐 공개 저장소에대한 프록시 역할 : 원격에 원본 Repository가 있는 경우 Local 에 캐시용도로 사용Release -> 같은버전을 한번만 배포 가능 : 정식 릴리즈를 통해 배포되는 바이너리를 저장Snapshots -> 같은버전 여러번 배포 가능 : 빌드 등 수시로 릴리즈 되..
-
기타개발
비대칭 키와 SSL 인증방식 그리고 handshake
비대칭 키와 SSL 인증방식 그리고 handshakessl인증방식과 handshake를 설명하기 앞서서 대칭키와 비대칭키에 대해서 알아야한다. 대칭키대칭키는 하나의 키로 문서를 암호화 하는 방식이다. 대칭키는 키를 가지고 있는 사람은 이 키로 암호화된 문서를 복호화 할 수 있고 속도가 비대칭키 보다 빠르다는 장점이 있다. 비대칭키 비대칭키는 2개의 키로 암호화와 복호화가 되는데 예를들어 a, b키가 있고 문서를 a키로 암호화 했다면 b를 가진자만이 복호화를 할 수있고 반대로 문서를 b로 암호화 했다면 a키로 복호화가 가능하다. 비대칭키는 RSA 키방식을 주로 사용하고 여기서 키 a ,b 는 흔히 public key / private key로 말한다. SSL 인증방식 우리가 사용하는 웹사이트가 내정보를 안..
-
infra
도커와 AWS 로 wordpress blog 구축
도커와 AWS 로 wordpress blog 구축 wordpress를 블로그로 선택한 장점plugin이 다양하고 쉽게 붙여서 사용할 수 있다.커뮤니티가 활발하다.code 조작없이 ui에서 다양한 customizing이 가능하다.구글 검색엔진 최적화가 되어있다.전 세계 웹사이트의 25% 정도가 워드프레스로 제작될 만큼 많이 사용된다. ( 2017년 기준 ) AWS wordpress blog 구축blog 는 t2.small로 설정하였다.aws volume을 생성해 blog instance 에 attach 해준다. 이후 지난 블로그 AWS public subnet 에 HARBOR 전용 인스턴스 세팅에서 설명한 것처럼 mount 해준다. docker compose 파일을 이용해서 wordpress를 간단하게 설..
-
infra
Harbot Private Docker Repository 설치
Harbot Private Docker Repository 설치 우리는 HARBOR를 통해서 docker hub 에서 이미지를 받거나 올리지 않고 회사 별도로 이미지를 업로드하거나 다운받을 수 있게 저장소를 만들었다. HARBOR 인스턴스 세팅Hardware Resource Capacity Description CPU minimal 2 CPU 4 CPU is prefered Mem minimal 4GB 8GB is prefered Disk minimal 40GB 160GB is prefered 우선, hardware의 요구사항을 확인하여 t2.medium으로 세팅해주고 추가적으로 EBS volume으로 100GB 정도의 저장소를 두어야 한다. EBS volume 생성- 100Gb volume을 생성하고 ..