분류 전체보기 45

[Spring] Factory Design Pattern

0. Table Of Content 1. 서론 2. Factory Pattern이란 무엇인가 2.1. Factory Parrern 예제 3. Factory Pattern 사용으로 얻을 수 있는 기대 효과 4. 실무에서 적용한 코드 일부 5. 후기 1. 서론 배치 프로세스에 대한 공통 프레임워크를 담당하여 작업을 진행하고 있었다. Spring Batch Starter를 사용하여 작업을 진행하는 것이 가장 효율적이었지만, 기존 만들어진 테이블에 맞춰야 했기 때문에 해당 테이블에 맞게 배치 프레임워크를 새로 개발하게 되었다. 프레임워크에서 build된 결과물인 jar파일은 crontab에 등록이 되어 jar 실행 시 입력받은 augument값으로 해당 batch job이 실행되어야 하기 때문에, 입력 argu..

IT/Java Spring 2020.08.06

20200624 회고 - 배치 프로세스 및 데이터베이스

1. 상황 휴면회원에 대한 기록을 쌓는 배치 프로세스에 대하여 쿼리를 작성 중이었다. 프로세스 흐름도는 다음과 같다. 2. 문제점 - 연관성이 없는 각 select에 대해 단일 스레드를 통해서 순차적으로 쿼리를 실행하였기 때문에, 현재 상황보다 더 많은 테이블에 대해 작 업을 할 경우, 많은 시간이 소모된다. - @Transactional이 동작하는 사이클에 대해서 제대로 알고 쓰지 못하였기 때문에, rollback이 제대로 되지 않고 있다. - Spring Boot Batch Starter가 있음에도 불구하고 일반 절차 함수를 작성하듯이 프로그램을 작성하였다. - 후에 내가 작성한 프레임워크에 다른 배치 프로세스가 추가적으로 작성하는 것을 잘 몰랐기 때문에, 확장성이 덜 고려된 공통 코드를 작성하였다...

회고 2020.07.28

[삽질 프로젝트 계획] 티스토리 유입자 대시보드 만들기 - 밑그림

1. 대시보드에서 나타내야 할 것 - 기간에 따른 사용자 수 - 인기글 리스트 - 유입 경로 및 채널 - 유입 키워드 - 유입자 현황 차트 (척도 : 기간, Refere URL, 컨텐츠, 디바이스) 2. 추가 구현하고 싶은 것 - 전날 유입자 통계를 카카오톡으로 알림 받기 - 현재 학습하고 있는 OAuth2.0을 이용하여 대시보드 사이트 인증 - 일일 평균 유입자 현황 - 현재 기능별로 레포지토리가 분리되어있고, kafka broker에 다양한 로그들을 수집할 예정이기 때문에 향후 kubernetes를 적용할 예정 3. 사용할 기술 - DB : DynamoDB or MongoDB (조회성이 많기 때문에 RDB보다 NOSQL이 낫다고 판단) with JPA - Message Broker : Apache K..

IT/삽질 로그 2020.06.16

[삽질 프로젝트 설계] 티스토리 유입자 대시보드 만들기 - NOSQL 설계 초안

1. https://json.geoiplookup.io 오픈소스 - 위 링크를 통해 가져 올 수 있는 데이터의 목록은 다음과 같다. ( { "ip":"-", "isp":"-", "org":"", "hostname":"-", "latitude":-, "longitude":-, "postal_code":"", "city":"-", "country_code":"KR", "country_name":"South Korea", "continent_code":"AS", "continent_name":"Asia", "region":"Seoul", "district":"-", "timezone_name":"Asia\/Seoul", "connection_type":"Corporate", "asn_number":3786, ..

IT/삽질 로그 2020.06.09

[AWS] Site to Site VPN with OpwnSwan구성하기

Table of content 1. AWS Site to Site VPN 구성요소 2. 목표 아키텍처 3. Hands On LAB 3.1. VPC 및 서브넷 구성 3.2. Instance 구성 3.2.1. VPC-A Instance 3.2.2. VPC-B Instance 3.3. VPN 설정 3.3.1. Customer Gateway 생성 3.3.2. Virtual Private Gateway생성 및 라우팅 전파 3.3.3. Site to Site VPN Connection 생성 및 VPN 설정 다운로드 3.4. VPC-B Instance에 VPN 설정 공유 3.4.1. VPN 구성 다운로드 3.4.2. Customer 측 인스턴스 sysctl.conf 수정 3.4.3. OpenSwan 설치 및 환경 변..

IT/Cloud 2020.05.09

[프로그래머스] 타겟 넘버

1. 문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 2. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상 1000 이하인 자연..

IT/Algorithm 2020.05.07

[프로그래머스] 완주하지 못한 선수

1. 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 2. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 3. 입출력 예 participant completion return [le..

IT/Algorithm 2020.04.29

[DynamoDB] Secondary Index 설계원칙 및 고려사항

1. Secondary Index를 사용하는 이유 다음과 같은 은행 계좌를 관리하는 테이블을 생각해보자. OriginCountry가 Germany인 모든 데이터를 불러온다고 가정하자. Query를 통해서 불러오기 위해선 AccountID와 CreationDate을 알고 있는 상황이어야 하지만 실제 Query상황에서는 이를 알 수 있는 방법이 없기 때문에 scan을 사용해야한다. scan을 사용하면 모든 데이터에 대해 검색을 실행하기 때문에 그만큼 실행속도가 느리다. 그러나 GSI를 사용하게 되면 다음과 같이 Primary Key를 원하는대로 바꿔서 테이블을 새로 생성 할 수 있다. GSI Table(우측 테이블)을 생성하면서 기존 OriginCountry 속성을 Partition Key로 설정하였다. 기..

IT/NOSQL 2020.02.18

[Spring] @RestController vs @Controller

1. @Controller 전통적인 Spring MVC Controller는 View 기술을 이용하여 화면을 리턴하는 방식이다. json, xml형태의 객체를 반환하기 위해서는 @ResponseBody를 사용하여 json, xml형태의 객체를 리턴 할 수 있다. @Controller의 workflow는 다음과 같다. 위 workflow의 순서를 간략히 설명하면 다음과 같다. Client는 URL로 서비스에 Request를 보낸다. 해당 요청을 처리할 수 있는 Handler를 찾아 Mapping 하기 위해 Dispatcher Servlet가 인터셉트 한다. Mapping 된 Handler가 존재하는 Controller에서 해당 요청을 처리하고, Model and View 객체를 반환한다. Dispatche..

IT/Java Spring 2020.02.07