[Angular] File Upload > Drag and Drop 만들기

이미지
안녕하세요. 명동섞어찌개입니다.
오늘은 Angular 를 이용한 파일 업로드 기능 개발 시 편리한 사용성을 위해 Drag and Drop 드래그 앤 드랍 기능을 추가하는 방법을 알아볼건데요,

vanila javascript(순수 자바스크립트) 로 개발하면 익스플로러와 크롬 브라우저 등 브라우저 별 예외처리가 필요해서 시간이 꽤 걸리는 일이지만(개인적으로 0 부터 시작해서 개발했을 때 다른 업무 처리하면서 일주일 정도 걸렸습니다..)Angular 는 directive 를 사용해서 간편하게 개발할 수 있더라구요.

Angular Version: 8

결과화면 1. 먼저 drag-and-drop directive 를 만듭니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52import {Directive, EventEmitter, Host, HostBinding, HostListener, Input, Output} from '@angular/core';@Directive({selector: '[appDragDrop]'}) export classDragDropDirective{@Output() onFileDropped =new EventEmitter<any>();@Input('draggable')public draggable =true;@HostBinding('hintLine')public deco =false;@HostBinding('style.background-color')public background = '#fff';@HostBinding('style.opacity')public opacity ='1';//Drago…

[Angular] HttpInterceptor를 사용하여 Token 만료 검증하기

안녕하세요. 남산돈가스입니다.
이번 포스팅에서는 Angular 프로젝트 환경에서 API를 요청하실 경우, 가장 보편적으로 사용하시는 HttpClientModule에서 Http 요청을 가로채 특정 처리를 할 수 있도록 도와주는 HttpInterceptor 인터페이스에 대해서 작성해보겠습니다.

우선 HttpInterceptor는 Angular 4.3부터 추가 된 기능으로,
위에서 말한 것처럼, HttpClientModule을 이용한 API 호출 시 그 중간의 요청을 가로채어 특정 처리를 진행할 경우에 사용합니다.

저희 팀에서 Angular를 진행하는 프로젝트에서는 이 Interceptor를 API 호출 시 OAuth Token을 만료인지 유효한 지 검증하기 위한 용도로 사용되고 있습니다.

이번 포스팅에서 예제로 설명할 상황은 이렇습니다.

1. LocalStorage에 저장 된 OAuth Token을 가져온다.

2. OAuth Token을 요구하는 API를 HttpClient 모듈을 이용하여 호출한다.

3. HttpInterceptor에서 API  결과 응답이 Error이며, 401에러인 경우를 확인한다.

4. 상황이 3 과 같은 경우, 토큰 갱신 API를 호출한다.

5. 토큰 갱신 이후 정상 토큰을 가지고 위에서 호출해야하는 API 다시 요청한다.

6. 정상 응답을 확인한다.

예제 코드를 보면서 설명하겠습니다.


import {Injectable} from '@angular/core'; import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; import {Observable} from 'rxjs'; @Injectable() exportclass TokenCheckInterceptor implements HttpInterceptor { intercept(req: HttpRequ…

[AWS고객사례] IBK기업은행 사내벤처 EXA

이미지
AWS 클라우드 컨설팅 사례 - IBK기업은행 EXA


IBK 기업은행은  성장 커뮤니티인  ‘사내벤처  EXA’ 서비스 운영을 위한 모바일 어플리케이션 및 콘텐츠 관리시스템 (CMS)을 최대한 빠른 시간 안에 구축 하기를 희망하였습니다.


[도입과제] - 신속한 서비스 출시를 위한 인프라 도입 기간 및 개발기간 단축
- 사용자 증가시에 유연하게 대응가능한 안정적인 인프라 구축
- 도서정보 검색을 위한 외부 서비스 연동 필요
- 콘텐츠 관리를 위한 CMS 사이스 구성 필요
- 체계적인 인프라 모니터링 환경 필요
- 전문성을 보유한 인프라 운영인력 부재


[솔루션] - AWS 클라우드 도입을 통한 신속한 인프라 구축 및 IBK시스템 개발인력 지원
- 자동확장을 고려한 AutoScaling 서비스 도입
- 외부 데이터 연동을 위한 API 서비스 구성 및 검색 성능 향상을 위한 Elasticsearch 솔루션 도입
- 정적 웹사이트 구축을 위한 Simple Storage Service 와 CloudFront 구성
- CloudWatch 및 SNS 를 활용한 인프라 장애 모니터링 구성
- IBK 시스템 Cloud Management 서비스 이용


[인프라 설계]


[도입효과]
- IBK 시스템과의 협업을 통하여 클라우드 인프라 구축 및 서비스 개발을 진행 3개월 만에 콘텐츠 관리시스템 구축 및 모바일 어플리케이션 출시를 진행할 수 있었습니다.
- IBK시스템 전문 인프라 운영 인력을 통해 안정적으로 서비스를 운영 및 모니터링을 진행하고 있습니다.


http://exactu.net

블로그 마케팅: 새롭게 다시 시작합시다!

안녕하세요. 명동교자입니다.

그 동안 IBK기업은행의 중소기업 경영지원 플랫폼 BOX를 런칭하고

BOX 운영 안정화, 신입사원 면접, 주택금융공사 2단계 프로젝트 비대면 채널 팀빌딩을 지원하고 플랫폼사업팀을 새롭게 정비하느라 블로그를 신경쓰지 못했습니다.

죄송하단 말씀을 먼저 드립니다.

앞으로 블로그를 재 정비하여 사업을 통해 얻은 경험을 활발히(!) 포스팅하도록 하겠습니다.

오늘 블로그 마케팅에 대해서 배운 내용을 정리해서 공유드리겠습니다.

기업이 블로그를 운영하면서 잘못하고 있는 부분은 콘텐츠의 양만을 신경쓰기 때문입니다.

콘텐츠의 업데이트 주기나 양보다 더욱 중요한 것은 커뮤니케이션이라고 합니다.

이러한 커뮤니케이션이 잘되고 있는지 확인 하는 방법에는

블로그 커뮤니케이션 활성화 지수(Blog Communication Power)를 분석하는 방법이 있습니다.

이 활성화 지수는 어려운 것이 아니고 총 포스팅 수, 포스팅 1개당 댓글수, 포스팅 1개당 스크랩수, 포스틍 1개당 공유수 등을 분석해 보는 것입니다.

저희 남산 아래 개발자들의 Blog Communication Power를 분석해 보도록 하겠습니다.


총 포스팅 수: 284개포스팅 1개당 댓글수: 73/284 = 0.25포스팅 1개당 스크랩수: 0팔로워: 0
포스팅 1개당 댓글수가 0.25라는 것은 포스팅 4개당 1개의 댓글이 달렸다는 것입니다.
나쁘지 않은 분석 결과인데 문제는 댓글에 대한 피드백이 1도 없었다는 점입니다.
회사 브랜드 블로그도 아니고 개발자를 위한 블로그임에도 커뮤니케이션에 전혀 신경쓰지 않았다는 것을 알 수 있습니다.
매우 반성해야할 부분입니다.
다시 한번 강조드리면 블로그가 홈페이지와 다른 점은 기업 관련 스토리를 다루면서 고객과의 커뮤니케이션 공간으로 활용해야 한다는 점입니다.
홈페이지와 블로그는 톤과 느낌이 달라야 합니다. 
끝으로 성공적인 블로그 커뮤니케이션 전략을 말씀드리며 본 포스팅을 마칠까 합니다.
고객들과 자연스러운 커뮤니케이션 장을 마련기업의 색깔이 들어난 차별화된 …

쿠버네티스 마스터

이미지
안녕하세요. 명동교자입니다.

요즘 제가 관심있게 살펴보고 있는 분야는 쿠버네티스 입니다.

오늘부터 쿠버네티스를 공부하면서 배운 내용을 블로그에 정리해보려고 합니다.

오늘은 첫 시간으로 쿠버네티스 아키텍처에 대해서 살펴보겠습니다.



쿠버네티스는 마스터와 노드로 구성됩니다. 노드는 여러 개로 구성될 수 있으며 위 그림과 같이 서로 연결되어 있습니다.
쿠버네티스 마스터

쿠버네티스 마스터(Kubernetes Master)는 다음과 같은 여러 가지 기능을 제공합니다.

인증 및 인가 (Authentication & Authorization)RESTful API 엔트리 포인트노드를 위한 컨테이너 배포 스케줄러확장 및 복제 컨트롤러클러스터 구성 정보
쿠버네티스 마스터는 위 그림과 같이 API 서버 (kube-apiserver), 스케줄러(kube-scheduler), 컨트롤러 관리자(kube-controller-manager), 프록시(kubu-proxy), 큐블렛(kubelet), 에티시디(etcd)로 구성되어 있습니다.
kube-apiserver
API 서버는 http나 https 기반 RESTful API를 제공합니다. 쿠버네티스 구성 요소간 허브 역할을 합니다.
kube-scheduler
스케줄러는 어떤 노드에서 동작을 수행할지 컨테이너에 대한 선택 기능을 지원합니다. 컨테이너를 노드에 디스패치(dispatch) 및 연결하기 위한 우선순위를 다음의 항목을 통해 결정합니다. CPU메모리수행 중인 컨테이너 개수kube-controller-manager
컨트롤러 관리자는 다음과 같은 클러스터의 운영 기능을 수행합니다. 
노드관리내부 정보 생성 및 업데이트상태 변경kube-proxy
프록시는 노드의 각 컨테이너를 위한 네트워크 프록시와 로드 밸런서를 제공합니다. 프록시는 kube-proxy 데몬을 시작한 후 리눅스의 iptable 규칙을 설정합니다. 이 때 다음과 같은 명령어로 NAT 테이블 규칙을 검증할 수 있습니다.
ipatables -t nat -L or
ipatable…

[Vue] 전화번호 입력/조회시 '-' 자동으로 넣어주기

이미지
Vue 로 홍보 플랫폼 작업을 하면서 필요한 기능이 있어서
전화번호 필터를 개발 ( = 예외처리 노가다 ) 작업한 부분 블로그에 공유합니다.

개발환경: Vue CLI 2
개발 프레임워크: Vue2

angular 나 javascript 에도 쓸 수 있을 것 같습니다.
전국의 프로야근러 & 월화수목금금금 개발자님들 화이팅!!

+ 보충할 점이나 부족한 부분이 있어서 알려주시면 반영할께요~

입력할때 전화번호 파이프 (-) 자동으로 찍어주기[동작화면]

[템플릿]
<input type="text" v-model="contact" @keyup="getPhoneMask(contact)" />

[스크립트]
export default { ... data: () => ({ //전화번호 contact:null, }), methods: { getPhoneMask(val) { let res = this.getMask(val) this.contact = res //서버 전송 값에는 '-' 를 제외하고 숫자만 저장 this.model.contact = this.contact.replace(/[^0-9]/g, '') }, getMask( phoneNumber ) { if(!phoneNumber) return phoneNumber phoneNumber = phoneNumber.replace(/[^0-9]/g, '') let res = '' if(phoneNumber.length < 3) { res = phoneNumber } else { if(phoneNumber.substr(0, 2) =='02') {…

고양이와 사람

이미지
사람은 고양이에게 엄청 크고 무서운 존재라고 합니다. 경계심이 강하고 고독한 독립생활을 즐기는 고양이들이 사람들과 오랫동안 동거하며 살아가고  있다는 것은 놀라운 일이라고 하네요 우리 냥이와 친해져볼까요?






아이프렌즈펫 바로가기 http://bit.ly/2TLPPPv