-
rendercore close
rendercore.com close 오늘부로 랜더코어를 닫았다. 20년간 신입부터 사장까지 하면서 많은걸 알려준 나의 분신같은 존재를 오늘부로 닫는다. 이글을 쓰는 순간 눈물이 나려고 한다. 20년간 많은걸 배웠고 많은걸 했다. 그리고 많은걸 이뤘다. 그동안 수고햇다 랜더코어. 이렇게 인생의 한 챕터를 클로즈 하게 된다. 이제는 새로운 챕터를 시작해야 한다. 어떻게 해야할가? 천천히 고민해봐야겟다. 그래도 오늘은 그동안 고생햇던 나 자신에게 한잔의 술을 사주고 싶은데..건강상의 문제로 마시지를 못하니 더 슬프다. 그동안 고생햇다 랜더코어. 그동안 고생햇다 병용이도. 나만의 기억이지만 이바닥에서 한가닥 작은...
teamsmiley's profile imageteamsmiley
2022-10-31 00:00
-
kubespray 1.27.0 calico node restart issue
calico node restart issue k8s cluster 에서 calico node가 자꾸 리스타트를 한다. 문제를 찾아보다 확인된 issue https://github.com/projectcalico/calico/issues/5122 내용인즉은 timeout이 1초로 되잇다고한다. 그래서 unhealth가 되서 자꾸 재시작이 됨. daemonset에서 1초를 10초로 변경해주면 문제가 없어진다. kubespray 1.27.0에서만 발생하는 이슈이고 1.27.1에서는 발생하지 않는다. 1.27.1에서는 다음 옵션이 추가가 되서 시간을 더 늘릴수도 있다. # Under certain situations liveness and readiness probes may need tunning calico_node_livenessprobe_timeout: 11 calico_node_readinessprobe_timeout: 11 기본값은 10초이다. 이것때문에 설치를 몇번을 더햇는지 모른다. 참고로 업그레이드커맨드는 ansible-playbook -i...
teamsmiley's profile imageteamsmiley
2021-12-29 00:00
-
Docker Volume Mount Permission
Docker Volume Mount시 Permission 관련 문제 오랜만에 docker-compose를 만들일이 있어서 file을 볼륨 마운트로 처리하였다. 그런데 뭐가 잘 안되서 이해가 안되서 하나씩 찾아보았다. 도커에 볼륨 마운트를 한 파일이 읽기 전용이라 호스트에서 아무리 바꾸어도 도커에서 그 파일을 확인해보면 도커 로딩시 읽었던 파일 그대로 되있다. 문제는 호스트 서버에서는 파일의 소유주가 ubuntu였고 755 로 권한이 주어져 있었다. 도커는 root로 돌고 있엇다. sudo 명령어를 사용하여 실행에는 문제가 없엇으나 실행된 도커는 파일에 쓰기 권한이 없었던 것이엿다. 해결방법은 파일의 소유주를 root로 모두...
teamsmiley's profile imageteamsmiley
2021-08-01 00:00
-
AWS Bill - 02
AWS Bill - 02 로드 발란스 지난번에 로드 발란스를 1개로 줄이고 일비용이 얼마나 줄었을가? 확인해보았다. 36불에서 16불때로 반정도 비용이 줄어들었다. 로드 발란스 비용을 줄이고 나니 더 추가로 비용을 줄일게 없을가 하는 고민을 했다. staging은 idc에서 staging 환경은 사실 테스트로 사용되기 때문에 멈춰도 크게 문제가 없다. 그래서 staging은 on premise에서 돌리기로 하였다. 하이브리드 kubernetes를 만들려는 욕심도 있긴 있었다. kubespray로 kube를 올린후 스테이징 환경을 모두 aws에서 내렸다. node를 줄일수 있으면 노드도 줄여주었다. 1개 줄었음. 4대에서 3대로 ecr...
teamsmiley's profile imageteamsmiley
2021-07-10 00:00
-
AWS Bill
AWS Bill 개인 프로젝트를 aws에 eks에 올려두었는데 비용이 많이 나와버렷다. 1200불/month 이다. 너무 비싸서 줄여보기를 시작햇다. 지금 확인한것은 application load balance를 도메인당 하나를 만들어두었는데 이게 가격이 하나당 한달에 30불 정도 나온다. 총 staing/prod 까지 10개만 되도 300불이 나온다. 이걸 줄이기 위한 방법을 고민해보았다 옵션 1: alb -> ingress-nginx -> service 로 보내서 한개의 alb만 사용하는 방법 옵션 2: alb를 가지고 뭔가를 해보는 방법. 옵션 1로는 할수는 있으나 가급적이면 alb로 처리해보고 싶어졌다. 확인해보자. 일단 기존에 도메인...
teamsmiley's profile imageteamsmiley
2021-07-03 00:00
-
npm shrinkwrap
npm shrinkwrap 결론 먼저 : 사용하는 패키지의 디펜던시의 버전을 수정해야 하는 경우 사용 잘되던 프로젝트가 build가 안되는 문제가 발생햇다. 왜 그런지 확인을 해보니 capacitor가 2에서 3으로 업데이트되면서 뭔가가 바뀐것 같다. 일단 뭐가 바뀌엇는지는 따로해결하기로 하고 빌드부터 해결하기로 햇다. 원인을 찾아보니 ionic-appauth 패키지가 capacitor-secure-storage-plugin 을 사용한다. 현재는 0.4.0을 사용하는데 이 버전을 0.5.1로 해주면 해결이 된다. 문제는 ionic-appauth 에서 관리되는 버전을 어떻게 바꾸는지가 문제가 됬다. 검색을 해보니 npm shrinkwrap 가 보인다. npm shrinkwrap 일단 프로젝트에 npm-shrinkwrap.json 파일이...
teamsmiley's profile imageteamsmiley
2021-07-01 00:00
-
Github commit message
Github commit message skip ci Github Action을 커밋 메세지로 스킵하고 싶어졌다. 구지 ci가 필요가 없는 경우 빌드시간이 아까우니.. 커밋 메세지에 다음을 사용하면 ci가 동작하지 않는다. [skip ci] [ci skip] [no ci] [skip actions] [actions skip] https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/ close issue 커밋메세지에 다음을 포함하면 이슈를 닫을수 있다. close closes closed fix fixes fixed resolve resolves resolved ex) fixed #100 다른 프로젝트도 같이 : Fixes octo-org/octo-repo#100 여러 프로젝트 함께 : Resolves #10, resolves #123, resolves octo-org/octo-repo#100 https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
teamsmiley's profile imageteamsmiley
2021-07-01 00:00
-
Postman OAuth2 login
Postman OAuth2 Login 포스트맨으로 OAuth2 로그인을 해보자. 원하는 폴더에서 edit를 누르자. type : OAuth2를 선택 edit token configuration 정보를 잘 넣어주며 된다. identity server는 다음처럼 넣어주면 된다. 본인의 설정에 맞게 넣어주자. Callback URL : https://staging.xxxx.com/signin-callback Auth URL : https://auth.staging.xxxx.net/connect/authorize Access Token URL : https://auth.staging.xxxx.net/connect/token 이제 Get New Access token 버튼을 눌러보자. 로그인 창이 나오면 로그인 해본다. 토큰을 받아오면 use token을 누르면 저장된다. 브라우저를 이용하여 로그인하기 구글 로그인등에서 포스트맨 브라우저를 오래된 브라우저로 인식해 로그인이 안되는 경우가...
teamsmiley's profile imageteamsmiley
2021-06-30 00:00
-
일기 - 가훈
일기 - 가훈 공개 일기를 써볼가 싶은 생각이 들었다. 자꾸 생각을 안하게 되는것 같아서 생각을 정리하기 위해. 미생을 보는데 가훈 사훈 이런 말이 나왔다. 훈이 무슨말일가 궁금해서 찾아봤다. 가르칠 훈. 가훈의 뜻은 한 “집안의 행동이나 생활에 지침이 되는 교훈” 이네..가르치다 보다는 교훈쪽이 더 맞는것도 같다. 아무튼 이제 개(인)훈 또는 나(의)훈을 정해봤다. 선택, 집중, 실행 핵심에 바로 집중 “stright to point” 긍정적인 생각 이 정도로 일단 정해보자. 그리고 매일 읽어보자. ps) 오늘 플래너에 적은 글 하나의...
teamsmiley's profile imageteamsmiley
2021-06-29 00:00
-
google api 사용법
google api 사용법 구글 API 콘솔에서 프로젝트 생성 구글 API 라이브러리 추가 원하는 라이브러리 추가 사용자 인증 정보 추가 프로젝트 삭제 사용이 끝나면 삭제 프로젝트 선택 원하는 프로젝트를 선택한다. 프로젝트 설정 클릭 종료 클릭 api 제한 api를 제한하지 않으면 사실 남들이 apikey를 가져가서 다 사용해버리면 과금이 엄청 되버린다. 이부분을 항상 고려해야할듯 싶다. 일단 두개로 나눈다 외부에 오픈되는 키와 내부적으로만 사용되는키 외부에 오픈되는 키 외부에 오픈되는 키는 웹화면에서 소스보기를 하면 보이는 키이다. 이 키는 아무나 볼수가...
teamsmiley's profile imageteamsmiley
2021-06-25 00:00
-
RabbitMQ 와 dotnet Worker Service
RabbitMQ 와 dotnet Worker Service rabbitmq를 쓸 일이 있어서 정리해 보았다. 여기서는 consumer만 만들어서 처리하는 과정을 정리 rabbitmq를 실행 docker run --rm --hostname rabbitmq --name rabbitmq -p 30000:15672 -p 5672:5672 rabbitmq:3-management localhost:30000으로 접속해서 확인해본다. 기본 아이디 비번은 guest/guest이다. Worker Service Project 생성 dotnet worker service template을 사용하여 프로젝트를 생성한다. worker service에 대한 설명은 생략한다. rabbitmq와 연동만 관심있음 nuget 설치 https://www.nuget.org/packages/RabbitMQ.Client dotnet add package RabbitMQ.Client --version 6.2.1 Work 설정 EmainSenderWorker.cs public class EmainSenderWorker : BackgroundService {...
teamsmiley's profile imageteamsmiley
2021-06-22 00:00
-
yml schema - vs code
yml schema - vs code vs code에서 yml을 사용할때 github action 스키마를 이용해서 린트를 해보자. install https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml 이 플러그인을 설치하자. yaml로 vscode에서 검색해도 된다. 설정 menu > code > preference > setting 에 아래 그림 부분을 클릭한다. 이제 설정을 추가한다. "yaml.schemas": { "https://json.schemastore.org/github-workflow.json": [ ".github/workflows/*.yml", ".github/workflows/*.yaml" ] }, 설명을 조금 하자면 나의 경우에는 이상하게 github action yml파일이 스키마가 다른 파일로 잡혀서 에러가 나서 강제로 github action 스키마를 정해줬다. 쿠버네티스는 기본 지원이고 다른 스키마들도 적용할수 있다....
teamsmiley's profile imageteamsmiley
2021-06-18 00:00
-
다른 namespace에 있는 서비스 사용하기
다른 namespace에 있는 서비스 사용하기 kubernetes 에서 프로젝트가 10개가 넘어가는데 모든 서비스에서 rabbitmq를 사용중이다 보니 똑같은 pod가 여러개 올라간다. aws의 pod제한에 따라서 새 노드를 올려야하는 문제가 생겼다. 그래서 shared라는 namespace를 만들고 거기에 rabbmitmq하나만 올리고 모든 프로젝트에서 이걸 공유하는것으로 구조를 바꿨다. 작업 기존에는 rabbitmq라는 같은 namespace에 있는걸 사용했지만 지우고 shared에 있는걸 사용해야한다. 그러면 프로그램으로는 어떻게 해야할가. 간단하도 hostname을 rabbitmq에서 rabbitmq.shared라고 하면된다. serviceName.namespace rabbitmq.shared 이렇게 사용하면 된다. rabbitmq que vs vhost vhost에 대해서 고민을 하엿으나 그냥 que를...
teamsmiley's profile imageteamsmiley
2021-06-17 00:00
-
꾸뻬씨의 행복 여행
꾸뻬씨의 행복 여행 정리 행복은 자신을 남과 비교하는 않는 것이다. 행복은 때때로 뜻밖에 찾아온다. 많은 사람들은 자신의 행복이 오직 미래에만 있다고 생각한다. 많은 사람들은 더 큰 부자가 되고 더 중요한 사람이 되는것이 행복이라고 생각한다. 행복은 알려지지 않은 아름다운 산속을 걷는 것이다. 행복을 목표로 여기는 것은 잘못된 생각이다. 행복은 좋아하는 사람과 함께 있는 것이다. 불행은 사랑하는 사람과 헤어지는 것이다. 행복은 자기 가족에게 아무것도 부족한 것이 없을때다. 행복은 자신이 좋아하는 일을 하는 것이다. 행복은 집과 채소밭을 가지는...
teamsmiley's profile imageteamsmiley
2021-06-14 00:00
-
Program Rule
Program Rule - ver. 0.2 최우선 목적 유지보수가 편한 프로그램을 만든다. 개발 기간이 줄어들수 있는 스택을 구성한다. 자동화에 의한 테스트를 이용해서 버그 발생을 방지한다. 중복된 코드가 극단적으로 없어야 한다.(중복에 대한 생각은 조금 바뀌었음 상황에 따라서 중복허용) architecture should be independent of frameworks clean architect를 기본으로 한다. (use case를 기준으로) 프로젝트 기본 셋업 프로젝트 폴더에는 docs라는 폴더를 기본으로 만든다. 프로젝트와 관련된 문서파일들이 정리되야한다. 네이밍 규칙 (https://msdn.microsoft.com/en-us/library/ms229043.aspx)을 정확히 지킨다. 파스칼 : 단어의 첫글자는 대문자. 카멜 : 첫단어의...
teamsmiley's profile imageteamsmiley
2021-06-14 00:00
-
mfa ux
multi factor authenticate ux 요즘은 로그인하면 핸드폰으로 문자를 보내서 또 넣어야하는 경우가 있다. 비교해 보았다. github twitter robinhood 결론 나는 github 가 좋다. 이 부분에서 복사가 가능하기 때문에. 그리고 당연히 답장같은건 하지 않을거니 쓸모없는 부가 설명도 필요없어 보인다. 다들 뭐가 좋으신가요?
teamsmiley's profile imageteamsmiley
2021-06-08 00:00
-
chrome tab rotate extension
탭을 로테이션 시켜주는 크롬 익스텐션 주식차트를 계속 로테이션으로 보여주는 생각을 하다가 찾아보았다. github repository 설정을 저장할 git repo를 하나 만들었다. 다음 파일을 만들고 커밋/푸시한다. { "settingsReloadIntervalMinutes": 1, "fullscreen": false, "autoStart": false, "lazyLoadTabs": false, "websites": [ { "url": "https://elite.finviz.com/quote.ashx?t=NET", "duration": 10, "tabReloadIntervalSeconds": 5 }, { "url": "https://elite.finviz.com/quote.ashx?t=AMZN", "duration": 10, "tabReloadIntervalSeconds": 5 }, { "url": "https://elite.finviz.com/quote.ashx?t=TSLA", "duration": 10, "tabReloadIntervalSeconds": 5 }, { "url": "https://elite.finviz.com/quote.ashx?t=SOXL", "duration": 10, "tabReloadIntervalSeconds": 5 }, { "url": "https://elite.finviz.com/quote.ashx?t=NVDA", "duration": 10, "tabReloadIntervalSeconds": 5 },...
teamsmiley's profile imageteamsmiley
2021-06-05 00:00
-
aws-openvpn
aws-openvpn 한국 서비스를 이용하고싶으신분은 꼭 리전을 한국으로 하시기 바랍니다. Create EC2 ec2 launch instance openvpn 으로 검색 market place 클릭 그림에 나온거 선택 > continue > t2.micro 선택. 원하는 vpc 선택 > 다음 > 다음 > create new security group > 기본값으로 다음 new keypair 생성후 다운로드 instance 이름을 openvpn으로 했다. elastic ip 하나 할당받아서 인스턴스에 attach해주면된다. 이름은 openvpn으로 햇다. ssh chmod 600 aws.pem ssh openvpnas@YourIP -i aws.pem # 로그인하자마자 설정을 해야한다. > yes #...
teamsmiley's profile imageteamsmiley
2021-06-03 00:00
-
vscode-tip
vscode tip 언어별로 포멧터를 다르게 설정할수도 있다. ts/js formatter js나 ts의 경우에는 Prettier를 사용중이고 https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode 이곳에서 관련 내용을 확인할수 있다. c# formatter setting에서 확인해보기 바란다. 자세한 옵션은 여기서 볼수 있다. https://docs.microsoft.com/en-us/dotnet/api/microsoft.codeanalysis.csharp.formatting.csharpformattingoptions?view=roslyn-dotnet 잘되는지는 모르겟음. 기본 포멧터가 잘되는듯하여 구지 신경쓰지않음. 현재 setting { "editor.formatOnPaste": true, "editor.formatOnSave": true, "editor.defaultFormatter": null, "prettier.printWidth": 200, "prettier.singleQuote": true, "omnisharp.organizeImportsOnFormat": true, "omnisharp.enableEditorConfigSupport": true, //언어별로 설정이 가능 "[markdown]": {}, "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" // "editor.quickSuggestions": true }, "[json]": {...
teamsmiley's profile imageteamsmiley
2021-05-28 00:00
-
eks
aws eks (kubernetes) 사용하기 eks는 아마존에서 관리해주는 쿠버네티스이다. 마스터를 다 관리를 해주므로 사용하기만 해서 많이 편하다. prerequisite aws어카운트는 미리 만들어 두셔야 따라하실수 있습니다. 가능하면 로그인 하는 유저의 secret키를 만들어 두시면 좋을거같습니다. 아래쪽 스탭을 참고해주세요 랩탑에 관련 프로그램 설치 kubectl https://kubernetes.io/docs/tasks/tools/ k9s https://k9scli.io/ https://k9scli.io/topics/install/ aws cli 설치 curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" sudo installer -pkg AWSCLIV2.pkg -target / AWS 액세스 키 생성 setup command line aws configure 생성한 키와 내용을 넣는다. ~/.aws/에 파일이 생성된다. 내용 확인 cat...
teamsmiley's profile imageteamsmiley
2021-05-25 00:00
-
container - docker
container - docker 가장 중요한 내용 도커란 실행에 필요한 모든 내용을 가지고 있는 프로세스다. 프로세스. Immutable Infrastructure를 구축해서 사용하는것이 도커(컨테이너)방식이다. 기존방식에서 벗어나야한다. 자바를 배워서 c처럼 코딩하면 안되듯이 새로운 철학으로 생각을 바꾸는것이 제일 중요. 그러나 제일 어렵다는건 함정. Immutable Infrastructure는 관리가 편해지고 확장이 쉬워지며 운영체제와 서비스운영 환경이 분리되서 가볍고 어디서나 실행가능해진다. 심지어는 오랜 기간이 지나도 실행이 가능해진다. 컨테이너: 필요한 모든 내용을 하나의 상자에 넣어두고 상자를 포장해둔 것이다. 이제 이 상자만 여기저기 가지고 다니더라도 어디서든 실행되고 관리가...
teamsmiley's profile imageteamsmiley
2021-05-24 00:00
-
argocd alb with ssl
argocd with ssl 처음 argocd를설치하면 selfsigned ssl이 붙어있어서 브라우저에서 안보이는현상이 있다. 이걸 aws certificate-manager에서 받은 ssl을 가지고 사용해보자. ssl 발급 aws certificate manager에서 소유한 도메인으로 tls(ssl)을 발급받아서 arn을 적어둔다. argocd를 insecure 모드 이걸 하지않으면 too many redirect라는 메세지가 나오면서 동작하지 않는다. deploy에서 다음부분을 추가해준다. - --insecure 배포가 잘 됬는지 확인해보자. argocd-server service를 nodeport로 alb는 clusterip를 지원하지 않으므로 노드 포트로 사용해야한다. 로드발란서도 안됨 왜냐면 alb가 로드발란서라서. kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'...
teamsmiley's profile imageteamsmiley
2021-05-18 00:00
-
aws alb controller
aws alb controller 기존에 bearmetal kubernetes를 사용하다 eks를 쓰니 달라진점이 조금 있어서 정리해본다. 기존에는 ingress-nginx를 사용해서 트래픽을 분산햇는데 eks에서는 alb controller라는걸 지원해준다. alb controller는 yaml에 이런저런 설정을 하면 자동으로 aws application load balance를 만들어준다. 써보니 편한거같다. aws는 하나도 몰라도 yml에 인그레스만 설정하면 다 해준다. 관련 내용은 여기를 참고 https://github.com/kubernetes-sigs/aws-load-balancer-controller 기본내용은 위 링크를 한번 보면되는데 내가 막힌 부분이 있어서 그것만 정리해보자. 기본 사용법 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: www namespace: www-staging annotations: kubernetes.io/ingress.class: 'alb' #...
teamsmiley's profile imageteamsmiley
2021-05-17 00:00
-
Hackathon 그후
Hackathon 그후 Hackathon에 간단히 advisor로 참여한 프로젝트가 있다. 시간이 너무 촉박하여 프로젝트를 마무리하는데까지만 집중을 햇었었다. 그 후 추가 진행된 내용을 정리해보려고 한다. 프로젝트 설명 간단하게 크롬에서 새창을 띄우면 스트레칭 할수 잇는 화면을 보여주는 것이엿다. 로컬에서 빌드후 aftifact를 압축해서 사용햇다. chrome web store에 등록 크롬웹스토어에 등록하는 부분은 기존 글에 있으니 참고하시고 1차 버전은 아무것도 없는 기본 템플릿여서 검수에서 통과 되지 못햇다. 프로젝트 완료후 완료된 버전으로 검수를 넣엇고 2틀후 검수통과를 받았다. staic website launch s3에도 같은 내용의...
teamsmiley's profile imageteamsmiley
2021-05-12 00:00
-
github action
github action 사용할 일이 있어서 정리합니다. github action이 뭐냐…코드를 커밋/푸시 하면 그 후에 뭔가를 하고 싶다. ci/cd 등등 꼭 ci/cd가 아니더라고 컴파일후 컴파일된 파일을 받아보고 싶거나 s3에 올리고 싶다 등의 무슨일이든 하고싶은걸 자동화 해주는 툴이다. gitlab ci/cd도 같은 기능을 한다. 저는 gitlab ci/cd가 너무 좋아서 그것만 썼는데 이번에 github를 써야할일이 생겨서 확인해봤더니 gitlab의 기능을 대부분 가져서 구현해 둿다. 역시 이바닥은 좋은기능은 다 베끼는..^^ 참고로 gitlab ci/cd가 먼저 나왔다. 해보자. workflows 프로젝트에 .github/workflows 라는 폴더를 만들고...
teamsmiley's profile imageteamsmiley
2021-05-11 00:00
-
chrome extension with angular
chrome extension with angular npm install -g @angular/cli cd ~/Desktop ng new afk-chrome-extension --routing=true --style=scss cd afk-chrome-extension npm i ng build --prod dist폴더를 봐보자. 그럼 컴파일되서 올라온것이 보인다. vi src/manifest.json { "author": "AFK", "name": "AFK", "manifest_version": 2, "version": "0.0.1", "version_name": "preview", "permissions": [], "chrome_url_overrides": { "newtab": "index.html" } } vi angular.json "build": { ... "options": { "assets": [ "src/favicon.ico", "src/assets", "src/manifest.json" //추가 ], ... 이제 app.component.html 을 수정한다. <div>AFK</div> <router-outlet></router-outlet> 다음 같은 화면이 나오면 성공...
teamsmiley's profile imageteamsmiley
2021-05-10 00:00
-
chrome extension vs chrome app
chrome extension vs chrome app 구글에서 chrome app을 더이상 지원하지 않는다고 한다. 그래서 찾아보았다. chrome extension과 chrome app은 다르다고 한다. 차이점은 무엇일가? 여기저기 검색해봐도 잘 모르겟다. web store에서 설치할때 add extension / add app 이라고 나오는 문구 이외에는 뭐가 다른지 진짜 모르겟네… 아무튼 익스텐션에 add하면 크롬 오른쪽 상단에 나온다. 핀을 클릭하면 고정도 됨. ) 대신 크롬 앱은 주소창에 다음처럼 넣는다. chrome://apps/ 현재 나는 이렇게 나온다. 구글은 크롬 앱을 지원을 안한다면서 자기들 앱만 크롬앱으로 남아있네.. 앱으로...
teamsmiley's profile imageteamsmiley
2021-05-08 00:00
-
chrome extension deploy - 02
chrome extension deploy - 02 깃액션을 통해서 앱을 자동으로 올려보자. google developer에 등록 본인 이메일로 등록한다. https://developers.google.com/ google cloud developer에서 프로젝트를 생성 구글 디벨로퍼 사이트에서 구글 클라우드를 클릭하고 console 을 찾아서 들어간다. https://console.cloud.google.com/ 여기에 직접 들어가도 된다. 이제 프로젝트를 하나 만든다. 새 프로젝트 클릭 away-from-keyboard 으로 하나 만들자. Create OAuth Credentials 햄버거 > api 및 서비스 > oauth 동의화면 저장. 기본값으로 저장 기본값으로 저장 기본값으로 저장 사용자 인증 정보 Refresh Token https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/chromewebstore&client_id=$CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob clientid만 수정해서 요청해보자....
teamsmiley's profile imageteamsmiley
2021-05-07 00:00
-
chrome extension deploy - 01
chrome extension deploy - 01 개발자 등록 Chrome 웹 스토어 개발자로 등록 해야한다. https://chrome.google.com/webstore/devconsole/register?hl=ko ) 결제 (5불)를 하면 개발자 대시보드로 이동을 할수 있다. 20개까지 업로드가 가능하다고 한다. 쉽네 하고 로그인한 순간 뭔가 이상하다. chrome 앱을 지원중단한다고? 검색해보니 크롬앱의 종료가 22년 으로 연기 됫다고 한다. https://www.itworld.co.kr/t/54652/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80/160765 기사 마지막에 구글은 확장 프로그램에는 서비스 종료 기간이 적용되지 않는다고 다시 한번 강조했다. 크롬 플랫폼 부서의 기술 이사 앤서니 라포지는 8월 10일 블로그를 통해 이번 변경 사항은 크롬 확장 프로그램...
teamsmiley's profile imageteamsmiley
2021-05-06 00:00
-
nginx-02
nginx-02 nginx에서 wildcard를 쓰고 싶어서 한번 알아 봤다. server { listen 80; server_name *.test-nginx.com; location / { root /usr/share/nginx/html; index ccc.html ccc.htm; } } server { listen 80; server_name www.test-nginx.com; location / { root /usr/share/nginx/html; index www.html www.htm; } } 이상태면 *가 먼저 만나서 ccc가 나오는거 아닐까? 테스트해 보았는데 www가 나왔다. * 는 우선순위가 제일 마지막으로 밀리는듯 하다. http://nginx.org/en/docs/http/server_names.html When searching for a virtual server by name, if name matches more than one of the...
teamsmiley's profile imageteamsmiley
2021-04-19 00:00
-
nginx-01
nginx-01 nginx가 쓸일이 있어서 공부한것을 정리해보았다. docker로 실습 준비 이것저것 해보기 위해서 랩을 만들어야햇다. cd ~/Desktop mkdir nginx cd nginx touch default.conf touch docker-compose.yml cat default.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } cat docker-compose.yml web: image: nginx volumes: - ./default.conf:/etc/nginx/conf.d/default.conf ports: - '80:80' 이제 실행해보자. docker-compose up -d Creating nginx_web_1 ... done...
teamsmiley's profile imageteamsmiley
2021-04-18 00:00
-
angular file download with browser
angular file download with browser (not xhr) 일반적인 다운로드는 크롬 다운로드창에서 보이면서 경과가 보여진다. 그런데 angular에서 다운로드를 하면 xhr을 사용하여 스트림을 download하기때문에 파일이 완전히 다운로드가 된 후에 download창을 띄운다. 이 경우에는 file download progress를 화면에 보여주면서 고객이 대기하게 만든다. 작은 파일은 괞찮으나 큰 파일은 고객이 페이지를 바꿔버리면 다운로드가 멈추기 때문에 좋아보이지 않았다. 그래서 크롬 다운로드를 이용하기 위한 삽질을 좀 해봤다. xhr을 사용한 다운로드 API [HttpGet("download")] public async Task<IActionResult> Get(string path, string fileName) { if (string.IsNullOrEmpty(fileName))...
teamsmiley's profile imageteamsmiley
2021-04-01 00:00
-
OpenApi Swagger NSwag dotnet 5
OpenApi, Swagger, NSwag Swagger를 써서 api의 상세스팩을(open api) 만들고 이걸 swagger website를 이용하여 웹화면으로 보게 해준다. openapi 3.0규격에 맞게 문서를 생성해주므로 아주 편하다. 기본 프로젝트 생성 mkdir ~/Desktop/NSwagSample cd ~/Desktop/NSwagSample dotnet new web package install dotnet add package NSwag.AspNetCore dotnet add package NSwag.MSBuild startup.cs public void ConfigureServices(IServiceCollection services) { //jwt token을 사용하여 인증을 통과 후 테스트가 가능하게 services.AddOpenApiDocument(configure => { configure.Title = "My API"; configure.AddSecurity("JWT", Enumerable.Empty<string>(), new OpenApiSecurityScheme { Type = OpenApiSecuritySchemeType.ApiKey, Name = "Authorization",...
teamsmiley's profile imageteamsmiley
2021-03-29 00:00
-
Prettier-Code Formatter
Prettier-Code Formatter Install CMD+P (Ctrl+P) ext install esbenp.prettier-vscode 설정값 우선순위 settings.json > .editorconfig > .prettierrc 기본 설정 Default Formatter에 설정하면 모든 파일에 적용이된다. { "editor.defaultFormatter": "esbenp.prettier-vscode", "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } } 원하는 언어에만 적용해도 된다. { "editor.defaultFormatter": null, "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" } } 추가 옵션 prettier.arrowParens (default: ‘avoid’) “ : arrow 함수에 매개변수에 괄호를 붙임 prettier.bracketSpacing (default: true) prettier.endOfLine (default: ‘auto’) prettier.htmlWhitespaceSensitivity (default: ‘css’) prettier.jsxBracketSameLine (default: false) prettier.jsxSingleQuote (default: false) : jsx에서 single...
teamsmiley's profile imageteamsmiley
2021-03-26 00:00
-
s3 dotnet api - 02
aws s3 api dotnet core - 02 인증 aws iam에서 계정을 하나 만든다. program only로 만들었다. key/secret둘다 복사해둔다. 맥에서 ~/.aws/credentials를 만들어서 넣는다. [profileName] aws_access_key_id = XXXX aws_secret_access_key = TTTT 이제 개발 프로젝트에 다음처럼 설정한다. nuget package 설치 dotnet add package AWSSDK.Extensions.NETCore.Setup dotnet add package AWSSDK.S3 appsettings.Developement.json "AWS": { "Profile": "profileName", "Region": "us-west-2" }, "AwsS3BucketOptions": { "BucketName": "ur-bucketname" } 이제 startup.cs에서 다음 추가 services.AddDefaultAWSOptions(Configuration.GetAWSOptions()); services.AddAWSService<IAmazonS3>(); services.AddTransient<IStorageService, AmazonS3Service>(); services.Configure<AwsS3BucketOptions>(Configuration.GetSection(nameof(AwsS3BucketOptions))) .AddSingleton(x => x.GetRequiredService<IOptions<AwsS3BucketOptions>>().Value); service폴더를 만들고 거기에 다음 두개...
teamsmiley's profile imageteamsmiley
2021-03-20 00:00
-
s3 dotnet api - 01
aws s3 api dotnet core -01 s3를 api로 관리해야할 일이 생겨서 잠시 봤다 적어둘게 생겨서 블로깅 ListObjectsRequest vs ListObjectsV2Request 검색을 해보다 보면 ListObjectsRequest 도 보이고 ListObjectsV2Request도 보인다. 샘플코드들이 대부분 ListObjectsRequest로 보이고 있어서 두개의 차이점이 궁금했다. https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html For backward compatibility, Amazon S3 continues to support the prior version of this API, ListObjects. ListObjectsV2Request 를 사용하면 되겟다. bucket, object ,folder and file 버킷은 제일 상위단계를 말한다. 오브젝트는 bucket하위에 있는 것을 말한다. directory 와 file로 헷갈리기 쉬운데 사실...
teamsmiley's profile imageteamsmiley
2021-03-19 00:00
-
bash for loop
bash for loop bash를 사용하다보면 루프를 사용하고 싶은때가 있다. 할때마자 찾아봐서 정리해보았다. 루프를 돌아야할 문자열이 있다. a b c d 이 문자열을 변수로 만들어야한다. declare -a arr=( a b c d ) 이제 이 arr변수를 돌면서 하고싶은 일을 하면된다. for i in "${arr[@]}" do #해야할일들 echo "$i" kcn "$i" kubectl delete secret regcred done 이러면 a b c d를 루프 돌면서 하고싶은일을 한다. 너무 간단하지만 매번 찾아보게되서 적어보았다. “a” “b” 이런상태로도 가능하지만 일을 하다보니 문자열별로...
teamsmiley's profile imageteamsmiley
2021-03-08 00:00
-
Bitwarden Password 매니저
패스워드 보안관련 아침에 아이패드 사파리에서 로그인을 하는데 다음화면처럼 떴다. 음 뭐지 하면서 하나씩 정리해보기로 햇다. apple ios ios에서 비밀번호 leaking이 된걸 확인해서 알람으로 보여준다. 관련기능은 세팅에서 끌수 있다. 동작방식은 어디엔가(정확히는 못찾앗음) 디비가 있고 그걸 로그인시 비교해서 잇으면 알려준다고함. 같은 디비를 쓰는거같은데 다음 사이트가 있어서 거기에서 leaking을 확인할수 있다. https://haveibeenpwned.com 여기서 확인하면 리킹이 있어는지 확인이 된다. 같은 기능이 크롬에도 있고 여러군데 있다. 웹만 사용한다면 크롬도 괞찮은 솔류션인듯 보인다. 그런데 앱등을 같이 사용하고싶다. 해결 방법 일단 해결방법을...
teamsmiley's profile imageteamsmiley
2021-03-06 00:00
-
독립 인증서버 사용 경험 공유
독립 인증서버 사용경험. 요즘 프로젝트를 하면서 인증서버를 완전 다른 서버로 독립시켜 oauth를 지원하게 만드는것을 저는 선호합니다. 그러다 보니 궁금한게 생겼습니다. 의견이 있으시면 이메일 주세요 teamsmiley@gmail.com 인증서버에서 롤관리 인증서버에서 보통 롤을 관리할수 있습니다. 롤은 인증서버에서 관리하면 편한듯 보입니다. 여전히 인증서버에 롤이 잇는경우 어플리케이션단에서 관리하기가 상당히 불편합니다. 인증서버용 web을 만들어서 어드민(특정 유저)가 들어가서 관리하게 해야할듯 보입니다. 프로파일은 어플리케이션단에서 인증서버에서도 보통 프로파일을 관리할수 있는 기능은 있으나 아무래도 인증서버에 두면 문제가 많이 발생합니다. api단으로 프로파일을 이동해서 두는게 많은 부분에서...
teamsmiley's profile imageteamsmiley
2021-03-02 00:00
-
gitlab tip - executor, tag, release
gitlab runner executor gitlab runner executor 는 여러가지가 있다. https://docs.gitlab.com/runner/executors/ 기본적인 shell과 docker만 다루어 보겟다. 하나의 장비에서 두개의 runner를 돌려서 tag가 docker가 붙으면 도커 executor가 돌게 해보자. executor 등록 shell executor ssh runner01 gitlab-runner register \ --non-interactive \ --executor "shell" \ --url "https://gitlab.yourdomain.com/" \ --registration-token "xxxNM11xxKvg6TDKtxs3" \ --description "runner01" \ --tag-list "" \ --run-untagged="true" \ --locked="true" docker executor gitlab-runner register \ --non-interactive \ --executor "docker" \ --docker-image alpine:latest \ --url "https://gitlab.yourdomain.com/" \ --registration-token "xxxM11xxKvg6TDKtxs3" \...
teamsmiley's profile imageteamsmiley
2021-03-01 00:00
-
dotnet 5 console program 배포
dotnet 5 console program 배포 닷넷 으로 exe를 만들엇는데 배포를 해야하는데 어떻게 해야하는지 몰라서 찾아보았다. 기본 publish 기본적으로 다음 코드를 실행한다. dotnet publish -c Release 프레임워크 종속 배포 --self-contained 옵션을 사용하면된다. --self-contained false를 사용하면 dotnet runtime 을 설치한 후에 exe을 실행할수 있다. dotnet .dll 로 실행 프레임워크 종속 실행 파일 .NET 5(및 .NET Core 3.1) SDK CLI의 경우 FDE(프레임워크 종속 실행 파일)가 기본 dotnet publish 명령의 기본 모드입니다. 프레임워크별로 실행 호스트가 만들어진다. 윈도우의 경우 .exe...
teamsmiley's profile imageteamsmiley
2021-02-28 00:00
-
minio
minio minio는 Object Storage입니다. 간단하게 말해서 파일을 업로드 다운로드할수 있게 만든 프로그램입니다. 같은 방식으로는 aws의 s3가 있습니다. minio는 s3의 api를 완벽하게 똑같이 구현하였기 때문에 minio를 쓰다가 s3로 이전시 코드에 수정이 거의 필요가 없습니다. S3같은 서비스를 해보고 싶으신분은 minio를 설치하여 사용해보시면 답이 나올거같습니다. install mkdir -p /data/minio # minio file 저장 위치 mkdir -p /data/minio-config # minio 설정 저장위치 cd wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin/minio minio server --address ":9001" --config-dir /data/minio-config /data/minio 설치는...
teamsmiley's profile imageteamsmiley
2021-02-27 00:00
-
cloudflare api
CloudFlare api 사용하기 CloudFlare에서 Spectrum 서비스를 이용하기위해 port를 등록 해야하는데 200여개 포트를 하나씩 등록하면 너무 힘들어서 api를 사용하기로 했다. 로그인후 dashboard에서 api key를 발급 받는다. https://dash.cloudflare.com/profile/api-tokens api keys » global api key 발급 실제 api에 대한 자세한 설명은 다음 링클르 보면 된다. https://api.cloudflare.com/#getting-started-endpoints zone id 먼저 zone id를 알고 있어야한다. 확인하기 위해서 curl -X GET "https://api.cloudflare.com/client/v4/zones" \ -H "Content-Type:application/json" \ -H "X-Auth-Key:YOUR_API_KEY" \ -H "X-Auth-Email:YOUR_EMAIL" 결과는 다음과 같다. { "result":[ { "id":"xxxa0ad5ca54c0c2be85e6ff019132a1", "name":"aaa.com", "status":"active", "paused":false, "type":"full"...
teamsmiley's profile imageteamsmiley
2021-02-26 00:00
-
dotnet core 5 signalr
SignalR web socket 소켓 프로그램처럼 한번 연결하고 서버와 연결된 커넥션으로 데이터를 주고 받을수 있음. 연결이 끊겻을때 다시 재접속 하게 하는 방법 var connection = new HubConnectionBuilder() .WithUrl("https://localhost:7001/chathub") .WithAutomaticReconnect() //이부분을 넣어주면 자동으로 재접속을 시도해서 연결한다. .Build(); 초기 연결 재시도 위처럼 하면 연결이 되있다가 끊기면 다시 연결을 해주지만 처음부터 연결이 안되는경우는 재시도를 하지 않는다. public async Task<bool> ConnectWithRetryAsync(HubConnection connection, CancellationToken token) { // Keep trying to until we can start or the token is canceled. while (true)...
teamsmiley's profile imageteamsmiley
2021-02-19 00:00
-
macos 업데이트후 dotnet core ssl관련 에러날때
macos를 big sur로 업데이트후 dotnet core가 안됨. macos를 업데이트 한후 dotnet core 가 실행이 잘 안된다. 확인결과 ssl관련 이슈 같아보여서 다음처럼 했다. dotnet dev-certs https --clean dotnet dev-certs https sudo dotnet dev-certs https --trust https://localhost:5001/api/values 확인해보니 잘 된다.
teamsmiley's profile imageteamsmiley
2021-02-18 00:00
-
ipmi
IPMI bmc나 idrac 또는 iLO가 있는장비들을 관리하는 명령어 컴퓨터에 설치하여 보드에 설치되잇는 아이들에게 명령어를 보낼수 있고 외부에서 ip를 통해서 명령어를 보낼수도 있다. (bios에서 설정을 해줘야한다.) 한마디로 꺼져잇는 컴퓨터를 켤수도 있고 끌수도 있다는것이다. 다만 서버에서 지원을 해줘야한다. 설치 sudo apt install ipmitool -y brew install ipmitool 사용법 자기 자신의 서버에게 명령어를 실행할수도 있고 리모트에 있는 서버에 명령어를 보낼수도 있다. local 장비에서 command sample # 유저 확인하기 sudo ipmitool user list 1 # 유저 삭제 sudo ipmitool...
teamsmiley's profile imageteamsmiley
2021-02-09 00:00
-
cloud-init
cloud-init cloud-init은 다양한 리눅스를 vm에 설치시 vm이 처음 로딩된후 실행되는 것 같다. SSH 액세스 키, 유저 생성, 특별한 패키지 설치 등등 할수잇는일이 아주 많습니다. 왜 필요하냐면 기존에는 vm만들고 올라오면 console로 ip설정하고 ip로 접근해서 이런저런것을 해서 서버로 준비후 서비스에 넣게 되는데 auto provision을 사용하게 되면 vm이 생성과 동시에 ip받고 자체적으로 다 설정하고 재부팅하고 나면 서비스에 바로 적용됩니다. 결론은 vm초기 설치시부터 서비스 적용까지 사람의 손을 안타려고 만든거같습니다. 거의 모든 리눅스가 cloud init을 지원합니다. 아마존 / ms /...
teamsmiley's profile imageteamsmiley
2021-02-08 00:00
-
Metal as a Service - tip
Metal as a Service (Maas) Tip maas를 사용하면서 알게된 팁을 공유한다. dhcp 서버 이것도 maas를 설치시 기본으로 설치가 되서 기존에 따로 관리하던 dhcp서버를 없앴수 있엇다. 설치만 되고 기본적으로 바로 실행되지 않기 때문에 dhcp설정을 해주면 자동으로 실행됨을 알수 있다. 여기서 설정해주면 된다. dns 서버 (bind) dns 서버도 설치시 기본으로 설치가 된다. 따로 관리하던 dns서버를 없앨수 있다. 여기에 설정된 내용을 확인할수가 있다. 다만 사용하는 subnet이외에서 이 dns를 사용하려면 다음처럼 세팅을 해야한다. setting » dns에서 위 그림처럼 세팅을 하면된다....
teamsmiley's profile imageteamsmiley
2021-02-07 00:00
-
Metal as a Service - MaaS
Metal as a Service (Maas) Bare Metal Provisioning을 위한 도구 중 MAAS (Metal as a Service)라는 오픈소스가 있다. 쉽게 말하면 여러대의 컴퓨터를 클라우드처럼 쓸수 잇게 해준다. 해보자. https://www.maas.io install maas server os install ubuntu 20.04를 서버 한대에 설치한다. (각 버전에 맞는 maas버전이 있으므로 꼭 확인하자.) application install 이제 작업을 해보자. sudo apt update -y sudo snap install --channel=2.9/stable maas sudo apt install -y postgresql MAAS_DBUSER=my-user MAAS_DBPASS=my-password MAAS_DBNAME=maas sudo -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\"...
teamsmiley's profile imageteamsmiley
2021-01-22 00:00
-
Identity Server4 에서 access token에 Role 포함하기
Identity Server4 에서 access token에 Role 포함하기 id server에서 dotnet membership을 쓰는데 token에 role을 포함해야하는 경우가 생겼다. 진행해보자. config.cs public static IEnumerable<IdentityResource> GetIdentityResources() { return new IdentityResource[] { ... new IdentityResource // 추가 { Name = "roles", DisplayName = "Roles", UserClaims = { JwtClaimTypes.Role } } }; } public static IEnumerable<ApiResource> GetApis() { return new ApiResource[] { ... new ApiResource("api", "API", new List<string>() { JwtClaimTypes.Role }){ // 추가 Scopes = new []{ "api", } },...
teamsmiley's profile imageteamsmiley
2021-01-08 00:00
-
Angular(9/10/11)에서 구글맵 사용하기
Angular에서 구글맵 사용하기 앵귤러에 구글 맵을 사용해야할 일이 잇어서 작업해보았다. 구글 검색을 하면 Angular Google Maps (AGM) 이라는게 제일 먼저 검색되서 그걸로 작업을 다 하다가 마지막에 angular 9에서 앵귤러가 googlemap 컴포넌트를 냈다는것을 알수 있엇다. 기존걸 다 지우고 이제 다시 해보았다. https://github.com/angular/components/tree/master/src/google-maps#readme youtube와 clipboard관련 컴포넌트도 추가되있다고하니 필요하신분은 확인해보면 좋을듯 싶다. Install Angular Google Maps component npm install @angular/google-maps change index.html index.html에 다음 코드를 추가한다. <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script> 사용하는 모듈에 설정 나는 user.module.ts파일을 사용하는데 이걸 수정하자. @NgModule({ declarations:...
teamsmiley's profile imageteamsmiley
2020-12-10 00:00
-
Restaurant Open Hour
openhour business logic 현재 식당 주문관리앱을 하나만들고있는데 openhour관련 내용을 만들어야해서 정리를 한번 해봣다. 문제 openhour를 1주일 단위로 보여줘라. opehhour는 입력시 am pm 과 시간을 이용해라. timezone을 고려해라. day light saving을 고려해라. 현재 시간을 기준으로 오픈인지 아닌지를 보여줘라. 위 문제를 모두 고려해서 처리를 해야했다. 해결 방법 문제는 3가지로 압축될수 있었다. 오픈시간 입력 식당 오픈 시간을 보여주기 현재 시간을 기준으로 오픈인지 확인하기 식당 오픈 입력 입력할때 am/pm을 사용하여 입력하는 조건이여서 현지 시간을 기준으로 오픈시간을 입력한다. 그리고 dayofweek를...
teamsmiley's profile imageteamsmiley
2020-12-09 00:00
-
aws rds public access
aws rds public access aws rds 서비스를 외부에서 엑세스가 가능하게 만들기 db instance가 외부 접속 가능하게 설정 aws console > rds > db instance > 원하는 db instance 선택후 modify connectivity > Additional connectivity configuration save vpc에서 라우팅을 internet gateway로 설정 aws console > rds > db instance > 원하는 db instance 선택후 > vpc 선택 click routing table edit routes 0.0.0.0/0 internet gateway 추가 security group 수정 aws console > rds > db instance...
teamsmiley's profile imageteamsmiley
2020-11-22 00:00
-
aws eks
aws eks (kubernetes) aws cli 설치 curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" sudo installer -pkg AWSCLIV2.pkg -target / AWS 액세스 키 생성 setup command line aws configure 생성한 키와 내용을 넣는다. ~/.aws/에 파일이 생성된다 확인 aws ec2 run-instances eksctl 설치 brew install aws-iam-authenticator brew tap weaveworks/tap brew install weaveworks/tap/eksctl kubernetes cluster 생성 eksctl create cluster \ --name cluster-1 \ --version 1.18 \ --region us-west-2 \ --nodegroup-name c1-nodes \ --node-type t3.medium \ --nodes 2 type t3.nano t3.micro t3.small...
teamsmiley's profile imageteamsmiley
2020-11-22 00:00
-
ProxySQL
proxy sql sql 서버 3대를 가지고 있는데 1대가 죽어도 서비스에 영향이 없게 하기 위해서 작업한 내용. install registry 설치 cat <<EOF | tee /etc/yum.repos.d/proxysql.repo [proxysql_repo] name= ProxySQL YUM repository baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever gpgcheck=1 gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key EOF proxysql 설치 및 설정 yum install proxysql -y systemctl start proxysql-initial systemctl stop proxysql-initial # 상태 확인 systemctl enable proxysql systemctl status proxysql systemctl start proxysql # systemctl stop proxysql # systemctl restart proxysql 접속해서 설정 포트번호 주의 mysql -u admin -padmin...
teamsmiley's profile imageteamsmiley
2020-11-09 00:00
-
Http 302 redirect
HTTP 302 redirect 브라우저 자동 재시도 얼마전 oauth를 공부하다 잘 이해가 안되는 부분이 있었다. 아주 기본적인것인데 정확히 머리속에 정리가 되지 않고 있었던걸 몇일 연구해보고 정리한다. 웹페이지에 요청을 보내면 무조건 결과가 돌아온다. 그 결과값중 302가 있다. https://developer.mozilla.org/ko/docs/Web/HTTP/Status/302 여기를 읽어보면 다음과 같다. 하이퍼텍스트 전송 프로토콜 (HTTP)의 302 Found 리다이렉트 상태 응답 코드는 클라이언트가 요청한 리소스가 Location 헤더에 주어진 URL에 일시적으로 이동되었음을 가리킨다. 브라우저는 사용자를 이 URL의 페이지로 리다이렉트시키지만 검색 엔진은 그 리소스가 일시적으로 이동되었다고 해서 그에 대한...
teamsmiley's profile imageteamsmiley
2020-10-28 00:00
-
Percona Monitoring and Management
Percona Monitoring and Management Percona XtraDb Cluster를 사용하려면 모니터링을 붙여야한다. 이걸 해주는 녀석이다. 여러가지 오픈소스를 가지고 잘 역어서 사용하기 편하게 해주었다. 이같은 화면을 볼수 있다 뿐만아니라 잘만 사용하면 엄청나게 많은 정보를 얻을수 있다. 서버 클라이언트 구조로 되잇고 서버를 설치후 클라이언트는 각 pxc 노드에 설치해주면된다. server docker pull percona/pmm-server:2 # persistent data container docker create --volume /srv \ --name pmm-data percona/pmm-server:2 /bin/true docker run --detach --restart always \ --publish 80:80 --publish 443:443 \ --volumes-from pmm-data --name...
teamsmiley's profile imageteamsmiley
2020-10-20 00:00
-
Percona XtraDB Cluster 8.0 without SSL
Percona XtraDB Cluster mysql의 MMM과 같은 것이다 올리자마자 리플리케이션이랑 모든게 준비된 패키지. 8부터 ssl이 들어와서 조금 고생하고 해결하지 못햇으나 내부 망이고 하니 ssl을 빼고 진행하는것으로 했다. node 3개를 준비했다. node 1 : 192.168.0.101 node 2 : 192.168.0.102 node 3 : 192.168.0.103 전체노드 selinux를 꺼두고 방화벽도 다꺼두고 작업하자. centos 7을 기본 설치했다. 이후부터 진행해보자. 참고 https://www.percona.com/doc/percona-repo-config/percona-release.html#example-all-steps-for-installing-a-specific-percona-product node1 yum update -y yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y yum update -y percona-release enable-only pxc-80 release percona-release enable tools release yum...
teamsmiley's profile imageteamsmiley
2020-10-16 00:00
-
kubernetes backup - velero
이어지는 글 입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ 쿠버네티스 백업 - velero https://velero.io/ 구성도 minio에 백업 데이터를 저장한다. velero client는 랩탑에 설치하고 이걸 이용해서 kube에 pod를 디플로이하면 이 pod가 백업을 받아서 minio로 올려주는 역할을 한다. minio 백업 데이터를 minio에 직접 보낸다. 알아서 설치해두도록 하고 aws_access_key_id/aws_secret_access_key 를 알고 있어야한다. minio에서 bucket을 velero라는 이름으로 만들어 줬다. install velero client brew install velero install velero server (on kube cluster) credentials-velero cat <<EOF >...
teamsmiley's profile imageteamsmiley
2020-10-10 00:00
-
kubernetes - 로그 분석 elasticserach/kibana/fluentbit
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ kubernetes - Log를 분석해보자. fluentd가 로그를 수집해서 elasticsearch에 보내면 elastic search는 로그를 저장하고 kibana가 elastic search를 디비로 해서 화면에 로그를 뿌려줌 create namespace k create namespace logging kcn logging 꼭 logging을쓰기 바란다. 설치파일중에 namespace 가 고정된 부분이 있다.(fluent bit 관련해서) elastic search install helm repo add elastic https://helm.elastic.co 일단 persistence가 없는걸로 해서 진행해본다. helm install elasticsearch elastic/elasticsearch \ --set persistence.enabled=false --namespace logging kubectl...
teamsmiley's profile imageteamsmiley
2020-10-08 00:00
-
kubernetes - kube-prometheus
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ kube-prometheus kubernetes 모니터링을 해보자. 참고 : https://github.com/coreos/kube-prometheus#quickstart install cd ~/Desktop git clone https://github.com/coreos/kube-prometheus.git cd ~/Desktop/kube-prometheus # Create the namespace and CRDs, and then wait for them to be availble before creating the remaining resources kubectl create -f manifests/setup kubectl create -f manifests/ # 확인 until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done ## 삭제 kubectl delete --ignore-not-found=true -f...
teamsmiley's profile imageteamsmiley
2020-10-08 00:00
-
kubernetes helm
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ helm helm3부터는 tilder를 설치안해도 되서 좋다. 설치 macos에서 설치하면 brew install helm helm version 패키지 찾기 helm search hub # 여러 저장소들에 있는 헬름 차트들을 포괄하는 헬름 허브를 검색한다. helm search hub cert-manager helm search repo # helm repo add를 사용하여 로컬 헬름 클라이언트에 추가된 저장소들을 검색한다. 검색은 로컬 데이터 상에서 이루어지며, 퍼블릭 네트워크 접속이 필요하지 않다. helm search repo cert-manager repo helm...
teamsmiley's profile imageteamsmiley
2020-10-06 00:00
-
kubernetes MetalLB 와 Ingress Nginx
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ kubernetes MetalLB 와 Ingress-Nginx MetalLB (베어메탈에서 사용하는 로드발란서) If you’re using kube-proxy in IPVS mode, since Kubernetes v1.14.2 you have to enable strict ARP mode. kubectl edit configmap -n kube-system kube-proxy apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" ipvs: strictARP: true #false를 true로 변경 또는 자동화 # 보기 kubectl get configmap kube-proxy -n kube-system -o yaml | \ sed -e "s/strictARP: false/strictARP: true/" |...
teamsmiley's profile imageteamsmiley
2020-10-06 00:00
-
kubernetes cert-manager
kubernetes cert-manager 연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ helm을 사용하자. brew install helm cert-manager install helm repo add jetstack https://charts.jetstack.io kubectl config use-context c2 kubectl create namespace cert-manager kubectl config set-context --current --namespace cert-manager helm install jetstack/cert-manager --namespace cert-manager --generate-name --set installCRDs=true NAME: cert-manager-1601943552 LAST DEPLOYED: Sun Oct 4 22:05:04 2020 NAMESPACE: cert-manager STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: cert-manager has been deployed successfully! In order to...
teamsmiley's profile imageteamsmiley
2020-10-05 00:00
-
kubespray - 04 Kubernetes Multi Cluster
kubespray - 04 multi cluster 관리 연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ 이제 kube spray로 2개 이상의 클러스터를 생성시 관리방법을 이야기해보자. download cluster 1 config 랩탑에 scp로 1번째 클러스터에 설정 파일을 가져온다. mkdir ~/.kube scp c1-master:/etc/kubernetes/admin.conf ~/.kube/c1-config 필요한 부분을 수정하자. apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F server: https://192.168.0.100:6443 name: kube-c1 # 수정-1 contexts: - context: cluster: kube-c1 # 수정-1 namespace: pickeatup-prod user: c1-admin # 수정-2 name: kubernetes-c1-admin@kubernetes #...
teamsmiley's profile imageteamsmiley
2020-10-04 00:00
-
kubespray - 03 install kube with haproxy
kubespray - 03 install kube - haproxy 버전 연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ 2개의 서버로 haproxy를 설정하여 하나가 문제가 생겨도 서비스에는 지장이 없게 한다. 쿠버네티스가 haproxy를 보고 있게 한다. 맨 마지막 다이어그램 참고 vm 셋업 vi Vagrantfile Vagrant.configure("2") do |config| config.vm.provision "shell", path: "provision.sh" # master config.vm.define "minion1" do |minion1| minion1.vm.box = "centos/7" minion1.vm.hostname = "minion1" minion1.vm.network "private_network", ip: "192.168.33.21" minion1.vm.provider "virtualbox" do |v| v.memory =1501 v.cpus =...
teamsmiley's profile imageteamsmiley
2020-10-02 00:00
-
haproxy keepalived
Haproxy and KeepAlived 구성 2개의 서버를 준비한다. 새노드 설치 ip 정보 node name ip memo haproxy01 192.168.33.2 keepalive 192.168.33.10 haproxy02 192.168.33.3 keepalive 192.168.33.10 keepalived install 2개의 서버에 모두 같게 설치한다. yum install -y keepalived config vi /etc/keepalived/keepalived.conf master global_defs { notification_email { brian@xgridcolo.com } notification_email_from brian@xgridcolo.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "killall -0 haproxy" # check the haproxy process interval 2 # every 2 seconds weight 2 # add...
teamsmiley's profile imageteamsmiley
2020-10-02 00:00
-
kubespray - 02 install kube - local internal loadbalancer
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ kubespray - 02 install kube - local internal loadbalancer install python 3 python 3를 꼭 사용해야한다. 맥에 기본적으로 2.7이 설치되잇어서 상당히 헷갈릴수 있다. https://www.python.org/downloads/mac-osx/ 위 사이트에 가서 설치하자. 이제 pip3설치 cd curl -O https://bootstrap.pypa.io/get-pip.py sudo python3 get-pip.py kubespray git clone https://github.com/kubernetes-sigs/kubespray #git clone https://github.com/kubernetes-sigs/kubespray.git git clone --depth 1 --branch v2.14.1 https://github.com/kubernetes-sigs/kubespray.git cd kubespray python -V && pip -V > Python 3.8.6 > pip...
teamsmiley's profile imageteamsmiley
2020-10-01 00:00
-
kubespray - 01 vagrant & virtual box
연속된 글입니다. https://teamsmiley.github.io/2020/09/30/kubespray-01-vagrant/ https://teamsmiley.github.io/2020/10/01/kubespray-02-install-kube-local-internal-loadbalancer/ https://teamsmiley.github.io/2020/10/02/kubespray-03-kube-with-haproxy/ https://teamsmiley.github.io/2020/10/04/kubernetes-multi-cluster/ https://teamsmiley.github.io/2020/10/05/kubernetes-cert-manager/ https://teamsmiley.github.io/2020/10/06/kubernetes-metallb-ingress-nginx/ https://teamsmiley.github.io/2020/10/06/kubernetes-helm/ https://teamsmiley.github.io/2020/10/08/kubernetes-prometheus-grafana/ https://teamsmiley.github.io/2020/10/08/kubernetes-log/ https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/ kubespray - 01 vagrant & virtual box 설치 vagrant가 잇어야 로컬에서 테스트가 잘 될듯 virtual box (꼭 version 6.0을 사용) && vagrant downinstall https://www.virtualbox.org/wiki/Downloads https://www.vagrantup.com/downloads.html 둘다 설치한다. virtualbox 6.1 은 macos에서 잘 동작하지 않음… vagrantfile 생성 mkdir kubespray vagrant init centos/7 --minimal cd kubespray vi Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "centos/7" end vagrant up 생성된 vm에 접속 vagrant ssh vagrant 유저와 비번...
teamsmiley's profile imageteamsmiley
2020-09-30 00:00
-
kubernete remove node
kubernetes에서 필요 없는 노드 삭제 더이상 pod가 할당 되지 않게 kubectl cordon master03 포드가 노드에 정상적으로 스케쥴링될 수 있게 하기 위해서는 uncordon 기존 포드들을 다른곳으로 이동 kubectl drain master03 node/master03 cordoned error: unable to drain node "master03", aborting command... There are pending nodes to be drained: master03 error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/kube-proxy-v7jz8, kube-system/weave-net-f52sc, metallb-system/speaker-gzq42 에러가 난다. daemonset을 못지운다는 에러에 나온 옵션 추가 kubectl drain master03 --ignore-daemonsets 잘 된다. 노드리스트에서 제거...
teamsmiley's profile imageteamsmiley
2020-09-29 00:00
-
kubernete cgroup-driver
kubernete cgroup-driver Issue kubernetes를 설치하면 잘 되는데 재부팅시 not ready가 되었다. 에러를 찾아봤다. systemctl status kubelet systemctl restart kubelet systemctl status kubelet kubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/kubelet.service.d └─10-kubeadm.conf Active: activating (auto-restart) (Result: exit-code) since Tue 2020-09-29 05:49:32 PDT; 8s ago Docs: https://kubernetes.io/docs/ Process: 16256 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=255) Main PID: 16256 (code=exited, status=255) 정확한 에러는 안나와서 journalctl -xefu kubelet 실행 failed...
teamsmiley's profile imageteamsmiley
2020-09-27 00:00
-
ionic ci/cd - 03 android
얼마전 쓴 글이 정리도 잘 안되고 너무 커서 자르고 정리해서 다시 올립니다. https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-01-gitlab-runner/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-02-ios/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-03-android/ ionic ci/cd - android android app 은 2가지 타입이 있다. 우리는 abb를 사용한다. apk : abb : macbook에 android studio 를 설치해서 https://developer.android.com/studio 테스트하고 여기에 gitlab-runner를 실행할 예정인다. java 설치 https://www.oracle.com/java/technologies/javase-downloads.html 11버전이 lts니 그걸로 macOS Installer 를 설치 key store (upload key) 생성 android studio 사용하는 옵션을 선택하고 정보를 다 넣고 저장하면 키가 만들어진다. command keytool -genkey \ - keystore...
teamsmiley's profile imageteamsmiley
2020-09-23 00:00
-
ionic ci/cd - 02 ios
얼마전 쓴 글이 정리도 잘 안되고 너무 커서 자르고 정리해서 다시 올립니다. https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-01-gitlab-runner/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-02-ios/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-03-android/ ios ci/cd xcode build with command line xcode에서 archive메뉴를 이용하면 업로드까지 모두 처리가 되게 만든다. 이제 커맨드라인으로 같은 처리를 해야한다. 그래야 gitlab runner가 실행해줄수 있다. ExportOptions.plist 파일을 만들어야한다. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>method</key> <string>app-store</string> <key>teamID</key> <string>YOUR TEAMID</string> <key>signingCertificate</key> <string>YOUR CERTIFICATION</string> <key>provisioningProfiles</key> <dict> <key>YOUR APP ID</key> <string>YOUR PROFILE NAME</string> </dict> <key>destination</key> <string>upload</string>...
teamsmiley's profile imageteamsmiley
2020-09-23 00:00
-
ionic ci/cd - 01 gitlab runner
얼마전 쓴 글이 정리도 잘 안되고 너무 커서 자르고 정리해서 다시 올립니다. https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-01-gitlab-runner/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-02-ios/ https://teamsmiley.github.io/2020/09/23/ionic-ci-cd-03-android/ ionic ci/cd - gitlab runner gitlab ci를 현재 사용중이므로 이걸 이용하기로 한다. 일단 gitlab 서버는 설치되있다고 가정하고 macbook pro에 gitlab runner를 설치 하고 실행하면 된다. gitlab-runner install gitlab-runner on macos sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 sudo chmod +x /usr/local/bin/gitlab-runner cd ~ gitlab-runner install gitlab-runner start register gitlab runner on macbook sudo gitlab-runner register gitlab에서 admin > runner 에 가면 token...
teamsmiley's profile imageteamsmiley
2020-09-23 00:00
-
fatal: git fetch-pack: expected shallow list
fatal: git fetch-pack: expected shallow list 오늘 gitlab runner를 추가햇는데 하나의 서버에서 위 에러를 발생 확인해보니 centos 7이 git 1.8.3.1 을 사용하는데 이버전은 fetch-pack을 지원하지 않음. 그래서 centos 7에서 git을 최신버전으로 업그레이드하면 해결됨. git --version > git version 1.8.3.1 yum remove git yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm yum install git -y git --version > git version 2.24.1 gitlab runner가 문제없이 동작함.
teamsmiley's profile imageteamsmiley
2020-09-17 00:00
-
Angular Data Bind (value)
angular data bind에 대해서 어제 직원분이 뭐가 잘 안된다고해서 이어 받아서 처리한 내용을 정리해볼가 한다. 문제 발생 PaymentTypeNameComponent 라는 컴포넌트를 만드는데 enum은 다음처럼 있고 export enum EnumPaymentType { Cash, Card, Venmo, } ts는 다음처럼 생겼다. import { Component, OnInit, Input } from '@angular/core'; import { FormArray, FormControl, FormGroup } from '@angular/forms'; import { EnumPaymentType } from '../../enums/enum-payment-type'; @Component({ @ -6,10 +7,24 @@ import { EnumPaymentType } from '../../enums/enum-payment-type'; templateUrl: './payment-type-name.component.html', }) export class PaymentTypeNameComponent implements...
teamsmiley's profile imageteamsmiley
2020-09-16 00:00
-
Openvpn-TAP
4년전부터 대충 사용하던 openvpn의 찜찜한 부분을 공부해서 다시 정리해보았습니다. 한글 자료가 많이 부족하여 직접 작성하게 되었습니다. 연제 글로 올려봅니다. https://teamsmiley.github.io/2020/09/11/openvpn-1-tun/ https://teamsmiley.github.io/2020/09/11/openvpn-2-tun-docker/ https://teamsmiley.github.io/2020/09/11/openvpn-3-tap/ openvpn - tap - Ethernet Bridging 사내 vpn을 구축해서 사용해야해서 openvpn을 이용해서 구축을 해 보았다. vpn을 구축할때는 TUN (layer 3 , nat) 방식과 TAP (layer 2 , bridge) 방식이 있다. TUN 방식 : 일반적으로 공유기를 쓰는것과 비슷하다. 사내에서 사용하는 아이피 (예 192.168.0.xxx) 를 사용하지 않고 새로운 대역을 할당받아서 vpn이 서로 연결해주는 방식이다. TAP...
teamsmiley's profile imageteamsmiley
2020-09-11 00:00
-
Openvpn-TUN-docker
4년전부터 대충 사용하던 openvpn의 찜찜한 부분을 공부해서 다시 정리해보았습니다. 한글 자료가 많이 부족하여 직접 작성하게 되었습니다. 연제 글로 올려봅니다. https://teamsmiley.github.io/2020/09/11/openvpn-1-tun/ https://teamsmiley.github.io/2020/09/11/openvpn-2-tun-docker/ https://teamsmiley.github.io/2020/09/11/openvpn-3-tap/ openvpn - TUN - docker 사내 vpn을 구축해서 사용해야해서 openvpn을 이용해서 구축을 해 보았다. vpn을 구축할때는 TUN (layer 3 , nat) 방식과 TAP (layer 2 , bridge) 방식이 있다. TUN 방식 : 일반적으로 공유기를 쓰는것과 비슷하다. 사내에서 사용하는 아이피 (예 192.168.0.xxx) 를 사용하지 않고 새로운 대역을 할당받아서 vpn이 서로 연결해주는 방식이다. TAP 방식...
teamsmiley's profile imageteamsmiley
2020-09-11 00:00
-
Openvpn-TUN
4년전부터 대충 사용하던 openvpn의 찜찜한 부분을 공부해서 다시 정리해보았습니다. 한글 자료가 많이 부족하여 직접 작성하게 되었습니다. 연제 글로 올려봅니다. https://teamsmiley.github.io/2020/09/11/openvpn-1-tun/ https://teamsmiley.github.io/2020/09/11/openvpn-2-tun-docker/ https://teamsmiley.github.io/2020/09/11/openvpn-3-tap/ openvpn - TUN 사내 vpn을 구축해서 사용해야해서 openvpn을 이용해서 구축을 해 보았다. vpn을 구축할때는 TUN (layer 3 , nat) 방식과 TAP (layer 2 , bridge) 방식이 있다. TUN 방식 : 일반적으로 공유기를 쓰는것과 비슷하다. 사내에서 사용하는 아이피 (예 192.168.0.xxx) 를 사용하지 않고 새로운 대역을 할당받아서 vpn이 서로 연결해주는 방식이다. TAP 방식 : 일반적으로...
teamsmiley's profile imageteamsmiley
2020-09-11 00:00
-
ionic gitlab ci/cd - ios
앱 개발이 마무리 되가서 ci/cd를 해야한다. gitlab ci를 현재 사용중이므로 이걸 이용하기로 한다. 기존 프로젝트는 main/dev 브랜치에 머지 시점에 빌드 트리거를 작동햇는데 앱 빌드는 수동으로 클릭해서 사용해야한다. 일단 gitlab 서버는 설치되있다고 가정하고 gitlab runner를 설치해보자. 이제 이걸 gitlab runner가 실행해주면된다. gitlab-runner install gitlab-runner on macos sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64 sudo chmod +x /usr/local/bin/gitlab-runner cd ~ gitlab-runner install gitlab-runner start register gitlab runner on macbook sudo gitlab-runner register gitlab에서 admin > runner 에 가면 token...
teamsmiley's profile imageteamsmiley
2020-09-09 00:00
-
angular lint
ng lint 앵귤러 프로젝트를 만들면 package.json에 ng lint 가 들어있다. 사용해보자. angular는 tslint를 사용하는데 현재는 eslint를 사용하게 추천을 하긴 하던데..일단 나는 tslint를 기본으로 제공해주니 사용해보기로 함. 현재 프로젝트에서 실행 ng lint 결과가…음…많이 에러라고 나온다. 하나씩 고쳐보자. vs lint 참고로 lint에 대한 설정은 프로젝트에 tslint.json에 전부 설정이 되잇으므로 수정할때 그 파일을 수정하면 되겟다. lint결과를 보고 하나씩 수정을 해도 되겟지만 조금 편하게 하기 위하여 vscode에 tslint라는 플러그인을 설치해보자. 설치하고 나면 여러가지 경고를 볼수가 있다. 설치하고 나면 이제...
teamsmiley's profile imageteamsmiley
2020-09-08 00:00
-
angular bundle size
angular bundle size 확인 현재 상태 확인 npm install -g webpack-bundle-analyzer ng build --stats-json # generate ./dist/stats.json ng build --stats-json --prod # generate ./dist/stats.json webpack-bundle-analyzer ./dist/stats.json #화면에 보여주기 웹서버가 실행되면서 분석한 내용을 그림으로 보여줌. material 파일중 사용하는것만 임포트하게 수정하면 다음처럼 변경이 됨. 변경전 변경후 결론 1메가 정도 용량이 준것을 알수 있다. 사용하는 패키지만 적용되었다. import { MatCardModule } from "@angular/material"; 이런식으로 사용하면 전체를 다 로딩해버리기 때문에 꼭 import { MatCardModule } from "@angular/material/card"; 이렇게 사용해야한다....
teamsmiley's profile imageteamsmiley
2020-09-07 00:00
-
datetime safari vs chrome
safari and chrome datetime 처리 방법 앵귤러 datetime pipe가 크롬에서는 문제가 없는데 사파리에서 에러가 나서 확인해봄 chrome 서버에서 2020-01-01 00:00:00 가 오면 로컬 시간으로 보여줌 문제는 서버가 utc/gmt일 경우 로컬 시간이랑 안맞음. safari 서버에서 2020-01-01 00:00:00 가 오면 utc로 가정하고 로컬 시간으로 변경해서 보여줌. 둘다 같은 값을 사용하기 위한 처리 방법 서버에서 2020-01-01T00:00:00+00:00 이것처럼 타임존을 붙여서 보내면 크롬/사파리가 같은 날/시간으로 인식을 한다. C#에서 다음처럼 처리 Created.ToString("yyyy-MM-ddTHH:mm:sszzz") Created.ToString("yyyy-MM-ddTHH:mm:ss\"Z\"")//timezone +00:00 대신 Z라는 문자로 대치도 가능 이제 두개의...
teamsmiley's profile imageteamsmiley
2020-09-02 00:00
-
moloch
moloch 네트워크에 트래픽을 모아서 정확한 내용을 볼수 있는 프로그램으로 molo.ch라는 오픈소스가 있다. 설치해서 확인해보자. centos 7을 사용햇다. moloch이 자동으로 interface의 내용을 캡쳐를해서 저장한다. router에서 port mirroring을 해서 서버로 보낸다. conf term monitor session 1 source interface GigabitEthernet 3/2 rx monitor session 1 destination interface GigabitEthernet 1/48 show monitor 이제 이 라우터에 1/48번 포트와 서버의 nic에 (em2) 케이블을 연결한다. 주로 업링크에서 오는 포트를 미러링한다. server에서는 받을 준비를 한다. vim /etc/sysconfig/network-scripts/ifcfg-em2 PROMISC=yes 네트워크 재시작 하면된다. 이걸 안하면...
teamsmiley's profile imageteamsmiley
2020-08-27 00:00
-
percona-xtradb-cluster
Percona XtraDB Cluster node 3개를 준비했다. node 9 : 192.168.0.9 node 13 : 192.168.0.13 node 14 : 192.168.0.14 기준이 되는 노드를 먼저 설치를 하자. 전체노드 selinux를 꺼두고 방화벽도 다꺼두고 작업하자. centos 7을 기본 설치했다. 이후부터 진행해보자. node 9 yum update -y yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y yum install Percona-XtraDB-Cluster-56 -y ini를 만들자. cat >>/etc/my.cnf<<EOF [mysqld] max_connections = 1000 log_bin binlog_format = ROW innodb_buffer_pool_size = 10G # 전체메모리에 70% innodb_flush_log_at_trx_commit = 0 innodb_flush_method = O_DIRECT innodb_log_files_in_group =...
teamsmiley's profile imageteamsmiley
2020-08-17 00:00
-
ionic-deeplink
ionic deep link 재능기부로 핸드폰 앱을 하나 만들고 있는데 쉽지가 않다. oauth 로그인을 하고 redirect를 해서 토큰을 저장하는데 ionic serve로 로컬 개발 서버를 올려서 사용하면 잘되는데 이걸 핸드폰으로 옮겨서 실행하면 localhost(핸드폰)에 웹서버가 없으므로 로그인이 에러가 난다. 두달쯤 확인을 해보니 deep link라는걸 사용하면 된다고 한다. 여기까지가 어려웠다. 해보자. 참고 링크 https://capacitorjs.com/docs/guides/deep-links deeplink 특정 주소를 핸드폰에 입력하면 앱으로 이동하는 기능을 딥링크라고한다. schema 예전에는 schema를 사용하는 (myapp://) 방식이엿으나 앱이 없는경우 app store에 갔다가 오면 정보가 사라지는 문제가 있다고...
teamsmiley's profile imageteamsmiley
2020-08-15 00:00
-
identityserver4 cors setting
identity server - cors setting id server에서 자꾸 에러가 나서 뭐가 안되나 싶어서 확인해보았다. 어떤 cors도 허용 startup에 코드를 추가해주면된다. public void ConfigureServices(IServiceCollection services) { services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod() ; }); }); ... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseCors("AllowAll"); } 기본적으로 이렇게 해두면 전체 cors가 허용된다. 클라이언트마다 cors가 바뀌게 적용하려면? config에 클라이언트마다 추가로 적용할수가 있게 되있다. new Client { ClientName = "x user app", ClientId =...
teamsmiley's profile imageteamsmiley
2020-08-15 00:00
-
목공일기-deck
목공일기 deck 만들기 뒷마당 데크 (신현님) DIY 견적 : 7000 usd diy : 800 usd save : 85% 절약 deckwise tile 240sq 에 2800불 타일이 작을수록 넓은 면적에서는 보기 싫음 테라스 (수정님) 아키아 나무 메트 https://www.ikea.com/us/en/p/runnen-decking-outdoor-brown-stained-90234226 1m x 1m : 25usd 3ft x 3ft : 25usd 우리집 데크 25 ft x 10 ft = 260 sf option 1 https://www.homedepot.com/p/DeckWise-WiseTile-2-ft-x-2-ft-Solid-Hardwood-Deck-Tile-in-Exotic-Ipe-DECK-TILE-IPE-SMO-24x24/206466347 2 ft. x 2 ft : 40 usd ==> 1x1 => 10usd 총 금액은 10 *...
teamsmiley's profile imageteamsmiley
2020-08-06 00:00
-
목공일기-3
목공일기 - bench top 라우터 테이블 bench top 라우터 테이블 긴 나무를 4각면을 둥글게 만들때 라우터를 사용하는데 이게 들고 움직이기가 너무 불편하고 위험햇다. 검색해보니 bench top router table이라는것이 잇어서 구매하였다. 구매한것은 https://www.amazon.com/Skil-RAS900-Router-Table/dp/B002G9UG0C 이거였다. 하루정도 사용해보니 생각보다 너무 불편햇다. 테이블이 너무 작아서 작은 목재만 가공이 가능햇다. 그래서 리턴을 하고 직접 만들기로 햇다. router table 사용중인 책상에 구멍을 만들고 라우터를 넣어서 책상에서 직접 사용하는걸 생각해봤다. 결론은 다음처럼 생겼다. 가운데 구멍이 잘못 맞아서 다시 옆으로 조금 옮기는 작업을...
teamsmiley's profile imageteamsmiley
2020-08-05 00:00
-
macos에서 '₩' 대신 '`' 입력하기
macos에서 ‘₩’ 대신 ‘`’ 입력하기 macos에서 영어일때는 `이 입력이 잘되는데 한글일때는 ‘₩’ 가 입력이 되서 많이 불편하다. 특히 마크다운에서 코드를 적을때 ```을 사용해야 해서 많이 불편하다. 한글에서도 ‘`‘를 입력하게 바꿔보자. mkdir -p ~/Library/KeyBindings/ vi ~/Library/KeyBindings/DefaultkeyBinding.dict { "₩" = ("insertText:", "`"); } DefaultkeyBinding.dict 파일을 만들고 위 내용을 저장후 재부팅하면 한글에서도 backtick을 사용할수 있다.
teamsmiley's profile imageteamsmiley
2020-07-08 00:00
-
kubernetes 관리하기 - k9s
kubernetes 쉽게 관리하기 - k9s 쿠버네티스 관리를 하다보면 kubectl 을 너무 많이 쳐서 힘들다. 그래서 alias를 만들어서 k 라고만 하면 kubectl로 동작하게 만들어서 사용한다. 그후 oh-my-zsh에서 플러그인으로 kgp (kubectl get pod) 등의 shortcut alias를 만들어서 사용중이였다. k9s가 사이먼님이 소개를 해줘서 설치해서 사용해보고 잇는데 많이 편하다. cli를 쓰다가도 가끔 kubernetes dashboard를 사용해야 할때가 잇엇는데 k9s로 다 처리가 될듯 싶다. install https://github.com/derailed/k9s linux https://github.com/derailed/k9s/releases wget https://github.com/derailed/k9s/releases/download/v0.20.5/k9s_Linux_x86_64.tar.gz tar xvf k9s_Linux_x86_64.tar.gz mv k9s /usr/local/bin/ mac brew install derailed/k9s/k9s 설치는...
teamsmiley's profile imageteamsmiley
2020-06-23 00:00
-
ef core - Spatial Data
entity framework core로 공간 정보 계산하기 mysql 8.0을 사용중이다. EF Core 2.2 부터는 공간 정보(Spatial Data) 를 저장할수 있게 지원한다. sql server와 sqlite , InMemory , PostgreSQL 는 지원을 했었다. 나는 mysql을 사용하는데 얼마전 Pomelo.EntityFrameworkCore.MySql 의 nightly build에서 지원을 한다는 걸 보고 테스트하기로 햇다. https://docs.microsoft.com/en-us/ef/core/modeling/spatial https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/338 용어 NetTopologySuite : (NTS) nuget package 설치 nightly build nightly build를 설치해야해서 조금 헤멧지만 다음처럼 해보자. https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql#nightly-buildsㅍㅍ 솔류션 루트에 nuget.config 파일을 만들고 <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="Pomelo"...
teamsmiley's profile imageteamsmiley
2020-06-23 00:00
-
angular - data를 두개이상의 컴포넌트에서 공유하기
angular에서 두개 이상의 컴포넌트에서 데이터 공유하기 Service 서비스를 하나 만들고 private으로 subject를 만든다. (rxjs) subject를 asObservable로 하는 변수를 하나 만든다. 변수에 값을 세팅하는 함수도 하나 만든다. next를 하면 subscribe하고 있는 모든 컴포넌트에 전달이 된다. export class CartService { private _cartCountSource = new Subject<number>(); cartCountSource$ = this._cartCountSource.asObservable(); cartCount(count: number){ this._cartCountSource.next(count); } } 데이터를 보낼 컴포넌트 서비스를 injection하고 함수를 호출한다. constructor( private service: CartService, ) this.service.cartCount(this.cartCount); 데이터를 받을 컴포넌트 ngOnInit에서 subscribe를 해두면 된다. 그러면 service에서 next로 값을...
teamsmiley's profile imageteamsmiley
2020-06-23 00:00
-
redis - geo 정보 처리
Redis Geo 정보 처리 # restaurants를 키로 사용한다. geoadd - geo정보 등록하기 geoadd restaurants -118.40 33.75 "restaurant-1" geoadd restaurants -119.40 35.75 "restaurant-2" geopos - geo정보 확인하기 geopos restaurants "restaurant-1" geodist - 거리 계산 geodist restaurants "restaurant-1" "restaurant-2" mi georadiusbymember 특정 멤버내 radius에 범위 내에 잇는 멤버들 georadiusbymember restaurants home 20 mi withdist georadiusbymember restaurants home 30 mi withdist count 1 desc #home에서 30mi 안에 있는 member를 찾고 이를 거리가 먼 순부터 정렬한뒤 1개의 멤버만 리턴해라....
teamsmiley's profile imageteamsmiley
2020-06-22 00:00
-
kubernetes 로그를 fluentd로 보내고 elasticsearch에 저장하고 kibana로 확인
kubernetes 로그를 fluentd로 보내고 elasticsearch에 저장하고 kibana로 확인 전체 과정은 아래와 같다. kubernetes node 로그 -> fluentd -> elasticsearch -> kibana elasticsearch default.yml --- apiVersion: v1 kind: Namespace metadata: name: elastic-search elastic-search.yml apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch namespace: elastic-search labels: app: elasticsearch spec: replicas: 1 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: elastic/elasticsearch:7.7.0 env: - name: discovery.type value: "single-node" ports: - containerPort: 9200 - containerPort:...
teamsmiley's profile imageteamsmiley
2020-05-14 00:00
-
Hypermedia Lite For ASP.NET Core HTTP APIs 번역
Hypermedia Lite For ASP.NET Core HTTP APIs 번역 원문 : https://khalidabuhakmeh.com/hypermedia-lite-for-aspnet-core-http-apis github : https://github.com/khalidabuhakmeh/linksexample 번역전 참고사항. restful api 관련 내용에서 HATEOAS (Hypermedia as the Engine of Application State) 관련 내용이다. HATEOAS 대해 알지 못하면 다음글을 참조해서 이론을 이해해두고 진행하기 바란다. https://restfulapi.net/hateoas/ https://velog.io/@jayjay28/HATEOAS Goals 용어 Our Representations Enriching Representations Wiring It All Up Let’s Call Our APIs Bonus Round Recursive Enrichment of Representations Change The Links Object Conventional Registration Common Enrichers Conclusion
teamsmiley's profile imageteamsmiley
2020-05-14 00:00
-
Kubernetes Log보기
Kubernetes에서 로그 보기 기본적으로 kube에서는 다음처럼 로그를 보면된다. kubectl get pod --all kubectl logs -f podxxxx 이러면 로그를 계속 볼수 있다. 그런데 너무 로그가 많으면 오래 걸린다. 특별시 시간을 줄수 있다. kubectl logs -f xxxx --since=5m 이제 5분전 로그부터 볼수 있다. replica 세팅을 하면 같은 docker가 여러개 올라간다. 이런데 리퀘스트를 던지면 어떤 pod로 들어간지 알수가 없어서 불편하다. 전체 pod의 로그를 보고 싶다. (같은 docker 이미지.) deployment를 사용하면된다. kubectl logs -f deployment/mobile-php --all-containers=true --since=5m 이러면 이제...
teamsmiley's profile imageteamsmiley
2020-05-10 00:00
-
목공일기-2
목공일기-2 한달만에 다시 정리 개인적이 일이있어서 한달동안 이어서 하지 못하고 다시 시작 지인이 보내준 링크를 보고 공부 시작 https://www.youtube.com/watch?v=VKUsAyOhApU&fbclid=IwAR1ACmIgLO0WuQvevy8H-KL5f_43weYhd0Q_PDoxvUMnueJeLPuD-0Hw5Sk 나무 결이 나아가는 방향 : 길이 나무 결이 펼쳐지는 방향 : 폭 목재사이즈는 높이 x 폭 x 길이 나이테가 있는 부분이 다른 목재로 잡아줘야한다. 안그러면 깨진다. 원목은 길이 모양으로 튼튼하다. 드릴을 사용시 토크값을 잘 정해야한다. 이정도로 하고 프로젝트를 적어봐야겟다. [ ] [ ] [ ] [ ] [ ] [ ]
teamsmiley's profile imageteamsmiley
2020-05-06 00:00
-
Wsl2에서 gitlab wiki 사용하기
wsl2에서 gitlab 위키 사용하기 관련 패키지 설치 apt-get install ruby ruby-dev make zlib1g-dev libicu-dev build-essential git cmake pkg-config libssl-dev gem install github-markdown gollum gitlab wiki를 클론한다. git clone ssh://git@gitlab.XXX.com/XXX/XXXXX.wiki.git cd XXXX.wiki gollum을 실행한다. gullum >[2020-05-04 11:09:00] INFO WEBrick::HTTPServer#start: pid=22642 port=4567 << 포트번호. 웹으로 접속해서 확인한다. http://localhost:4567 로컬에서 수정하자. 이제 로컬에서 vs code등으로 md파일을 수정할수 도 있고 웹을 통해 수정도 가능하다. 그러나 로컬에서 md파일 수정의 경우 웹에 바로 업데이트가 안되는경우가 있다. 그 이유는 파일을 변경후 커밋을...
teamsmiley's profile imageteamsmiley
2020-04-28 00:00
-
Wsl2 Ansible
현재 ansible을 사용하기 위해 리눅스 서버에 접속하여 ansible-playbook명령어를 실행하고 있다. 그런데 wsl2를 사용하면 가능할듯 보여 시도 해보았다. ubuntu 2004 distro를 사용한다. ubuntu를 root로 접속해서 사용중이다. 관련 내용은 기존 포스트에 있다. apt-get update apt install ansible -y ansible --version > ansible 2.9.6 ubuntu 1804에서는 apt-get update apt-get -y install python-pip python-dev libffi-dev libssl-dev pip install ansible ansible --version 이제 vpn을 연결후 ping을 해보자. ansible host01 -m ping Error [WARNING]: Ansible is being run in a world...
teamsmiley's profile imageteamsmiley
2020-04-28 00:00
-
Kubernes Alias
kubernetes 에서는 명령어가 길다 단축키를 만들어보자. zsh을 사용하므로 zshrc파일을 수정한다. bash를 사용하면 bashrc를 수정하면된다. vi ~/.zshrc source <(kubectl completion zsh) alias k='kubectl' alias ns='kubectl config set-context $(kubectl config current-context) --namespace' alias nsv='kubectl config view | grep namespace:' 이렇게 하면 kubectl을 다 치지않고도 명령어를 넣을수 있다. oh-my-zsh을 사용하고 kube플러그인을 사용하면 기본적으로 적용이 되있다고 한다. https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/kubectl 기타 많은 alias가 있으므로 참고해서 사용하면 될듯 싶다. ns 와 nsv 대신에 플러그인에서 제공하는 kgns #kubectl get namespaces List the current...
teamsmiley's profile imageteamsmiley
2020-04-20 00:00
-
Fire On House
집에 불이 났다 그리고 배운점. 상황은 복잡하지만 다 적을수는 없고 큰일날뻔하였으나 이만큼 막은게 정말 전생에 나라를 구했던듯 싶다. 배운점 - 화재 모달불 재는 항상 땅에 버리자. 소화기는 꼭 집에 챙겨두자. 애들과 함게 소방학교에 꼭 한번 가자. LGP 나 기타 가스는 다썼더라도 구멍을 오픈해서 버리자. 배운점 - 화상 일단 열을 뺀다. 찬물에 발을 담그거나 손가락을 담그는등 한참 열을 한참 빼야한다. 아이스를 넣어서라도 찬물을 만들어서 빼야한다. 잘 소독한후 연고를 바르고 Telfa Non-Adherent Pads 같은 상처에 붙지 않는...
teamsmiley's profile imageteamsmiley
2020-04-13 00:00
-
목공일기-1
목공일기-1 얼마전 지인에게서 목공공구를 얻어왔다. 그래서 목공을 해보려고 한다. 청소부터 해야한다. 그후 와이프가 뒷마당에 데크를 지어달라고해서 한번 해보려고한다. 같이 고민하면서 같이 만들어가는게 결혼 10년차 되니 좋더라고. 뒷마당 데크 와이프랑 이야기하다 뒷마당 시멘트를 조금 잘라야한다고 결론이 났다. 일단 원형톱으로 시멘트를 자를수 있다고 했다. (인터넷에서) 그래서 다이아몬트 콘크리트용 날을 사서 장착해서 해봤다. 너무 힘들다. 다이아몬트 날 돈만 날린듯. https://www.homedepot.com/c/concrete_equipment_rental#concrete-saws 여기에서 랜트가 가능하다고 해서 한번 가봤다. 하루 빌리는데 100불..날도 빌려야하는데 50불이다. 날은 중고라 좀 비싼 느낌인데..아무튼 랜트해서 와서...
teamsmiley's profile imageteamsmiley
2020-04-10 00:00
-
Fluent Validation
Fluent Validation https://github.com/FluentValidation/FluentValidation C#에서 validation할때 주로 사용됨. ScalePrecision 함수 테스트 validation 할 클래스 public class Product { public float Discount { get; set; } } validator 작성 public class TestValidator : InlineValidator<Product> { public TestValidator() { RuleFor(x => x.Discount) .ScalePrecision(2, 2) .NotEmpty() ; } 이 코드를 테스트하다보니 에러가 나야하는데 아무리 해도 에러가 안난다. 그래서 파보기 시작했다. https://docs.fluentvalidation.net/en/latest/built-in-validators.html#scaleprecision-validator 문서를 보자. 문서에는 다음처럼 되잇다. Checks whether a decimal value has the specified scale and precision. RuleFor(x =>...
teamsmiley's profile imageteamsmiley
2020-04-01 00:00
-
git에서 특정파일을 임시로 ignore하기
git에서 특정파일을 임시로 ignore하기 작업을 하다 보면 가끔 내 컴퓨터에만 적용이 되야하는경우가 있다. 그런경우에는 내 컴퓨터에는 파일이 변경되더라도 무시 되야한다. 파일의 변경 상태 무시 git update-index –assume-unchanged 무시한 파일을 다시 트래킹 하기 git update-index –no-assume-unchanged 무시 파일 목록 git ls-files -v grep “^[[:lower:]]” git update-index --assume-unchanged docker-env/www/www-php.ini git update-index --no-assume-unchanged docker-env/www/www-php.ini
teamsmiley's profile imageteamsmiley
2020-03-31 00:00
-
Kubernetes에서 외부 서비스에 연결하기
Kubernetes에서 외부 서비스에 연결하기 기존에 있는 웹서비스를 kubernetes를 이용하여 외부에 오픈해야할 일이 생겼다. 인그레스를 설정하고 서비스를 ExternalName으로 설정하자. kind: Service apiVersion: v1 metadata: name: proxy-google-com spec: ports: - protocol: TCP port: 80 targetPort: 80 type: ExternalName externalName: www.google.com --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: proxy-to-google spec: rules: - host: aaa.xgridcolo.com http: paths: - path: / backend: serviceName: proxy-google-com servicePort: 80 이제 aaa.xgridcolo.com 도메인세팅을 하고 호출해보면 구글로 가는것을 볼수 있다. https://github.com/kubernetes/ingress-nginx/pull/629#issue-222930691
teamsmiley's profile imageteamsmiley
2020-03-28 00:00
-
burn iso to dvd with macos catalina
macos catalina에서 dvd 만들기 iso파일을 가지고 dvd를 만들어야하는데 catalina에서 버그가 잇어서 자꾸만 다음처럼 에러가 나온다. ISO file is invalid 검색을 해보니 카타리나에서 버그가 있어서 안되는듯 보인다. 다행이 터미널에서 처리할수 있다고 한 내용이 있어서 여기에 적어둔다. 터미널을 켜고 hdiutil burn ~/Desktop/DiskImageFile.iso 이렇게 하면 cdrom을 찾아서 시디를 구워준다.
teamsmiley's profile imageteamsmiley
2020-03-25 00:00
-
Visual Studio Code Snippet
Visual Studio Code Snippet Test작성시 중복되는 많은 코드를 전부 타이핑하다 귀찮아졌다. snippet로 처리해보자. my code snippets 위치 파악 vs » tools » code snippets manager (Ctrl+K Ctrl+B) My code snippets 를 클릭하고 위치를 파악한다. 거기에 파일을 만들어야 인식한다. 위 경로로 이동후 snippet를 만든다. XunitTestThrowException.snippet 확장자는 꼭 snippet으로 만들어야한다. <?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>Throw Exception</Title> <Shortcut> testt </Shortcut> </Header> <Snippet> <Declarations> <Literal> <ID>method</ID> <Default>Handler</Default> </Literal> <Literal> <ID>scenario</ID> <Default>SCENARIO</Default> </Literal> <Literal> <ID>exception</ID> <Default>EXCEPTION</Default> </Literal> <Literal>...
teamsmiley's profile imageteamsmiley
2020-03-20 00:00
-
macos scheduler
macos scheduler macos는 리눅스와 다르게 cron을 쓰지 않는다. launchd를 사용한다. 한참 헤매서 정리차 적어둔다. 목표 매시간마다 git을 업데이트 받고 싶다. 리눅스면 크론으로 간단하게 하겠지만 맥에서 잘 안됬다. 정리하면 간단하다. shell을 먼저 만들자. vi _core_git_pull.sh #! /bin/bash //꼭 사용 cd /Users/ragon/Desktop/GitHub/teamsmiley.github.io git pull ~/Library/LaunchAgents/ 폴더 아래 다음 파일을 만든다. vi _git-update.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>brian-gitpull</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/Users/ragon/_core_git_pull.sh</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>3600</integer> <key>StandardOutPath</key>...
teamsmiley's profile imageteamsmiley
2020-03-20 00:00
-
XUnit Test
XUnit Test 테스트를 작성해보려고 했다. 그런데 기본 내용이 잘 기억나지 않아서 다시 정리해보려고 한다. 사용하는 툴은 XUnit 이다. automatic test Test Type Unit Test Integration Test Subcutaneous Test UI Test End To End Test Testing behaviour dont test detail implementation (dont test private Method) 상세 구현을 테스트하려고 하지 말라. 프라이빗 함수도 테스트하지 마라. AAA Arange : 설정 Act : 실행 Assert : 검사 [Fact] public void IsValid_ShouldBeTrue_WhenProviderAllMember() { //Arrange var command = new CreateProductCommand {...
teamsmiley's profile imageteamsmiley
2020-03-11 00:00
-
Angular Interceptor
Angular Interceptor 사용중 header 처리 오늘 생긴일인데 기존처럼 httpclient로 post데이터를 날리는데 에러가 나기 시작했다. request를 확인해보니 content-type이 text/plain으로 되있다. 분명 application/json으로 넣어둿는데. 뭐가 문제일가? create(resource: any) { return this.http .post(this.url, JSON.stringify(resource), { headers: { 'Content-Type': 'application/json' } }) .pipe(catchError(this.handleError)); } 분명 보내고 있다. 그런데 얼마전에 interceptor를 바꾼 기억이 나서 확인해보았다. Interceptor코드는 다음과 같다. if (req.url.startsWith(environment.apiUrl)) { return from(this._authService.getAccessToken().then(token => { //token을 가져와서 const headers = new HttpHeaders().set('Authorization', `Bearer ${token}`); //header에 세팅을 한다. const authReq =...
teamsmiley's profile imageteamsmiley
2020-03-06 00:00
-
kubernetes upgrade
kubernetes version upgrade 마스터 노드를 먼저 하고 워커 노드를 나중에 한다. kubeadm 을 먼저 업그레이드하고 kubelet kubectl을 나중에 업그레이드한다. kubeadm master01 ssh master01 yum list --showduplicates kubeadm --disableexcludes=kubernetes yum install -y kubeadm-1.17.3-0 --disableexcludes=kubernetes kubeadm version #확인 kubectl drain master01 --ignore-daemonsets # master01을 클러스터에서 뺀다. 업그레이드후 나중에 다시 붙이자. kubeadm upgrade plan # 업그레이드 플랜내용을 보여준다. 마지막 커맨들를 실행하자. kubeadm upgrade apply v1.17.3 한참 뭐를 한다. 마지막으로 [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.17.0". Enjoy!...
teamsmiley's profile imageteamsmiley
2020-02-29 00:00
-
kubernetes add node
kubernetes node 추가 kube cluster nodelist 에서 삭제 kubectl get nodes NODENAME=node13 kubectl drain $NODENAME # kubectl drain $NODENAME --ignore-daemonsets --delete-local-data kubectl delete node $NODENAME kubectl get nodes 이제 클러스터에서 빠졌다. 노드 재설치 새로 노드를 재설치 kubernetes를 맞는 버전을 설치해야한다. 그냥 설치하면 최신 버전이 자동설치 되버린다. yum remove kubeadm kubelet kubectl -y yum install kubeadm-1.16.1 kubelet-1.16.1 kubectl-1.16.1 -y 기존 노드를 사용하려면 kubeadm reset #delete kube info on this node 이러면 된다. 재설치 한 노드를 다시...
teamsmiley's profile imageteamsmiley
2020-02-29 00:00
-
WSL2 Ubuntu
wsl2 윈도우에서 리눅스 사용하기 윈도우 업데이트가 다 되있다고 가정하고 진행 install wsl2 powershell을 열고 Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Microsoft Store를 열고 ubuntu 18.04 배포를 선택합니다. https://www.microsoft.com/en-us/p/ubuntu-1804-lts/9n9tngvndl3q?rtc=1&activetab=pivot:overviewtab 설치하고 나면 실행합니다. 기본 유저와 비번을 넣어야합니다. cmd에서 bash라고치면 바로 접속됩니다. 저는 root를 사용하고싶어서 다음처럼 진행하였습니다. bash로 접속한상태에서 sudo passwd root xxx 루트 비번을 변경하고 cmd를 열어서 ubuntu1804.exe config --default-user root window terminal을 설치합니다. https://github.com/microsoft/terminal/releases 여기서 다운받아서 설치합니다. cmd, powershell, bash를 다 할수 잇는 터미널입니다....
teamsmiley's profile imageteamsmiley
2020-02-09 00:00
-
Delete Secret File on Git
Delete Secret File On Git git 에 커밋하지 말아야 할 파일을 커밋한 경우 git rm filename를 해도 히스토리에는 그대로 남아있게 된다. 이 파일을 히스토리에서도 지워보자. 이 파일은 약 500메가나 되는 커밋하지 말아야할 파일이였다. git filter-branch 사용 file git rm adtree-20200205 git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch adtree-20200205' \ --prune-empty --tag-name-filter cat -- --all git push --force directory git filter-branch --force --index-filter \ 'git rm -r --cached --ignore-unmatch 폴더명' \ --prune-empty -- --all...
teamsmiley's profile imageteamsmiley
2020-02-08 00:00
-
KVM (Kernel-based Virtual Machine, KVM)
KVM (Kernel base virtual machine) - centos 7 CPU가 가상화 지원하는 확인 grep -E '(vmx|svm)' /proc/cpuinfo 뭐라고 마구마구 나와야함. module load 확인 lsmod | grep kvm install yum -y install epel-release -y yum install qemu-kvm qemu-img -y yum install libvirt libvirt-client virt-install virt-top virt-viewer -y yum install bridge-utils libguestfs-tools -y # module 확인 lsmod | grep kvm > kvm 636931 0 > irqbypass 13503 1 kvm systemctl start libvirtd systemctl enable libvirtd systemctl list-unit-files |...
teamsmiley's profile imageteamsmiley
2020-02-06 00:00
-
debian 6
debain 6 install 오랜만에 debian 6를 설치해야 할 일이 생겼다. iso를 받는거부터 debian사이트에서 없어졋다 end of life라서 archive로 가서 받아야한다. https://cdimage.debian.org/mirror/cdimage/archive/6.0.10/amd64/iso-dvd/ 이 사이트에서 받을수 있엇다. 1번 dvd만 있으면 된다. dell 장비 드라이버를 지원하지 않아서 네트워크가 잡히지 않는다. 설치 중간에 usb를 넣으라는 것이 있다. https://teamsmiley.github.io/assets/bnx2-mips-09-5.0.0.j3.fw https://teamsmiley.github.io/assets/bnx2-rv2p-09-5.0.0.j3.fw 두개의 파일을 받아서 usb에 넣고 설치시 로드해주면 된다. apt repository를 업데이트해 줘야 한다. rm /etc/apt/sources.list && \ echo "deb http://archive.debian.org/debian squeeze main non-free" >> /etc/apt/sources.list && \ echo "deb http://archive.debian.org/debian...
teamsmiley's profile imageteamsmiley
2020-02-05 00:00
-
Prometheus 모니터링
서버나 프로그램을 모니터링 하기 위해 사용한다. 특징은 pull방식이라는것. 이것이 신의 한수 : Prometheus 서버가 노드나 프로그램등에 데이터를 요청하면 노드나 프로그램등은 데이터를 보내주면 된다. 노드나 프로그램등에서 전혀 리모트 서버에 대해 알 필요가없고 데이터의 전달에 대해서 고민하지 않아도 된다. push : 각각 모니터되는 서버에서 주기적으로 모니터링 서버로 데이터를 보내는 방식 pull : 각각 모니터되는 서버에서 데몬만 돌고있고 모니터링 서버에서 request를 던저서 pull하는 방식 구성 prometheus : 데이터를 요청하고 가져온 데이터를 저장하고 쿼리함 exporter: 요청을 받으면 데이터를 만들어서...
teamsmiley's profile imageteamsmiley
2020-01-17 00:00
-
kubernetes redis
redis을 쿠버네티스에 배포 연습 다음과 같은 두가지 사용 패턴이 있다. 단독 서버로 redis를 사용하는경우 replicatioh을 사용하는 경우 단독 서버를 사용해보자. docker hub에 있는 기본 redis는 환경변수가 많이 안다. 그리고 설정 파일위치를 못찾겠어서 bitnami/redis 를 사용한다. 환경변수가 많아서 설정하기가 쉽다. --- apiVersion: v1 kind: Service metadata: namespace: prod name: redis labels: app: redis spec: type: LoadBalancer loadBalancerIP: 192.168.0.79 ports: - port: 6379 targetPort: 6379 selector: app: redis --- apiVersion: apps/v1 kind: Deployment metadata: namespace: prod name:...
teamsmiley's profile imageteamsmiley
2020-01-17 00:00
-
kubernetes pod service에서 연결하기
mysql을 쿠버네티스에 배포 연습 Run a Replicated Stateful Application https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/ pv가 dynamic provision이 되면 아주 잘 된다. 그런데 마지막에 문제가 master 에 접속을 하는것인데 For writes, you must instead connect to the master: mysql-0.mysql. 쿠버네티스 내부에서는 이렇게 mysql-0.mysql로 접속하면 된다. 그럼 dns lookup을 통해 잘 된다. 문제는 외부에서 접속할때 어디로 가야할지 잘 모르겟다는것이다. 지인에게 물어본결과 다음처럼 하면된다. 먼저 pod에 label을 가져온다. kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS mysql-0 2/2 Running 0...
teamsmiley's profile imageteamsmiley
2020-01-16 00:00
-
kubernetes mysql replication
mysql을 쿠버네티스에 배포 연습 다음 방식이 있다. statefulset 을 이용한 자동 배포 수동으로 master slave를 설정하는 배포 statefulset을 사용해서 배포를 하면 다음처럼 하면 된다. Run a Replicated Stateful Application https://kubernetes.io/docs/tasks/run-application/run-replicated-stateful-application/ pv가 dynamic provision이 되면 아주 잘 된다. pv는 ceph를 설치해서 해결햇음. 잘 된다. 스토리지가 좋으면 되는데 네트워크로 묶어서 사용하는 ceph다 보니 해보니 퍼포먼스가 로컬 하드디스크를 쓰는것보다 잘 안나오는듯 보인다. 수동 배포 kubernetes 노드가 4대가 있고 mysql을 각각 노드에 띄우고 모든 pod는 자신의 하드디스크를 스토리지로 사용한다....
teamsmiley's profile imageteamsmiley
2020-01-16 00:00
-
kubernetes Rook Ceph
node 4개가 있다. 그런데 노드에 하드가 4개씩 달려있다. Name sda sdb sdc sdd node01 1T 1T 1T 1T node02 1T 1T 1T 1T node03 1T 1T 1T 1T node04 1T 1T 1T 1T sda는 os드라이브라 사용하지 않고 나머지 3개 하드 디스크를 ceph로 묵어서 스토리지로 쓰고 싶다. 네트워크라 퍼포먼스 이슈가 있을수 있으니 잘 확인하고 쓴다. 디비등은 문제가 잇을듯 보이고 파일서버나 image등을 http로 주는 서비스등은 잘 쓸수 있을듯 싶다. 백업 용도로도 사용이...
teamsmiley's profile imageteamsmiley
2020-01-16 00:00
-
Git Ignore
.gitignore 무시하고 싶은 파일은 .gitignore파일에 작성하면 된다. 그런데 거기 잇는데도 계속 변경되어서 커밋이 되는 경우가 있다. 기존 커밋에 포함이 되잇기 때문 git rm --cached .DS_Store 이렇게 지우면 된다.
teamsmiley's profile imageteamsmiley
2019-12-18 00:00
-
Git Branch Push Force
git 문제 해결 현재 dev브랜치가 있고 new-dev 브랜치가 있다. new-dev브랜치를 dev에 덮어 써야하는 상황이 발생 git checkout new-dev git branch -D dev # dev를 삭제 git checkout -b dev # dev를 생성 git push --set-upstream origin dev --force # 서버에 있는 dev에 강제로 이 버전을 푸시. force는 쓰지 말아야하는데 어쩔수 없었음.. 참고로 로컬에 머지를 해버린 경우 아직 push는 안한경우. 이러면 일단 로컬에 dev를 지운다음 서버에서 가져오면 된다. git checkout dev git branch -D dev2 git...
teamsmiley's profile imageteamsmiley
2019-12-17 00:00
-
Macosx Terminal Setting
맥 터미널 설정 homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" vscode 설치 brew cask install visual-studio-code 실행후 command shift p » path (옵션에 나오면 선택한다. code 명령어를 path에 등록한다는 이야기) zsh mac이 가지고 있지만 (/bin/zsh) 다시 설치하자. brew install zsh which zsh > /usr/local/bin/zsh # standard shell로 추가 code /etc/shells > /usr/local/bin/zsh # 추가 # 기본쉘로 등록 chsh -s /usr/local/bin/zsh reboot echo $SHELL > /usr/local/bin/zsh # check version zsh --version oh my zsh sh -c "$(curl -fsSL...
teamsmiley's profile imageteamsmiley
2019-12-14 00:00
-
kubernetes file upload
kubernetes 에서 file upload api를 만들고 난후 문제 dotnet core 로 file upload api를 애저에 쓰게 해서 만들었다. 로컬에서는 잘되었다. 그런데 kube에 올리니 잘되는것처럼 보엿으니 1메가 이상(정확하지는 않음)부터 에러(413)가 나기 시작했다. 처리 해보자. azure가 1메가 이상을 기본으로 안받아주는가.=> 로컬에서 azure로 바로 붙여서 하면 잘된다. 심지어 애저로 안하고 하드디스크에 저장하게 해서 테스트 로컬은 잘됨 서버에서는 에러 azure문제가 아님 dotnet core가 안받아주는가? kestrel이 잘 안해주는가? => 로컬에서는 잘됨 틀림 kestrel문제가 아닌거같은데. kubernetes ingress를 의심해서 에러 메세지(413)와 함게...
teamsmiley's profile imageteamsmiley
2019-12-05 00:00
-
Angular DatePicker with Momentjs
angular datepicker with momentjs 자바스크립트 date를 다루기가 참 불편했다. 이걸 한방에 해결해주는 momentjs를 사용해봤다. material date picker를 사용하면 날짜를 선택해서 서버로 보내면 브라우저의 타임존을 같이 보내준다. 한국고객과 미국 서버의 경우 하루가 차이가 나게 된다. 분명 10일을 선택햇는데 디비에는 9일로 저장이 된다. 한국 시간을 pst로 바꿔서 저장을 하다보니 그런듯 보임 이걸 해결하기 위해 고민해 보았다. 타임존을 고려해서 디비에 저장후 브라우저에서 다시 바꿔서 보여주기 타임존을 무시하고 날짜를 브라우저에서 짤라서 yyyy/MM/DD만 보내주기 서버에서는 이걸로 date 를 만들어서 처리하기...
teamsmiley's profile imageteamsmiley
2019-12-04 00:00
-
Angular Control Value Accessor
Angular Control Value Accessor 커스텀 컴포넌트를 폼에서 사용하려면 여러가지 문제에 도달하게 된다. 컴포넌트가 기본 컴포넌트 input select 등과 다르게 움직이기때문이다. Control Access Value를 구현하면 커스텀 컴포넌트도 인풋을 기본 컴포넌트처럼 사용할수 있게 된다. (validation, disable, etc ) Control Access Value를 구현 4가지 기본 함수를 구현해야한다. public writeValue(obj: T) //=> 값을 html에 넣는다. public registerOnChange(fn: any) //=> 컴포넌트 값이 바뀌면 실행 public registerOnTouched(fn: any) //=>컴포넌트가 터치가 되면 public setDisabledState?(isDisabled: boolean) //=> 컴포넌트가 disable이 될때 대부분 비슷하므로 base...
teamsmiley's profile imageteamsmiley
2019-12-04 00:00
-
webapi file up/download with Azure Storage
Web API File up/download with Azure Storage webapi로 파일을 업로드 다운로드 해볼 일이 있어서 정리해본다. 업로드는 다음 두가지 시나리오를 생각해 봤다. api에서 받아서 로컬 또는 pod에 파일을 업로드/다운로드 하는 경우 api에서 받아서 azure blob storage나 s3로 업로드하는 경우 다운로드의 경우 1번은 실제 파일을 다운로드 시켜주는건 문제가 없어보이지만 2번의 경우는 다른 시나리오가 생긴다. api에서 azure blob storage나 s3에서 받아서 메모리 스트림으로 다시 요청자에게 보내는 방법 api에서 azure를 이용해서 임시 토큰을 발급해서 그 주소를 리다이렉트로 요청자에게 보내면...
teamsmiley's profile imageteamsmiley
2019-11-21 00:00
-
Angular Form Array
Angular Form Array 폼에서 Array를 써서 동적으로 컴포넌트를 ADD/DELETE 해야 할 경우가 생겼다. 그런데 잘 안되서 정리 Ts에서 다음처럼 코딩햇다. export class NestedFormArray { form = new FormGroup({ cities: new FormArray([ new FormControl('SF'), new FormControl('NY'), ]), }); get cities() { return this.form.get('cities') as FormArray; } addCity() { this.cities.push(new FormControl()); } Html에서는 다음처럼 <form [formGroup]="form" (ngSubmit)="onSubmit()"> <div formArrayName="cities"> <div *ngFor="let city of cities.controls; index as i"> <input formControlName="" placeholder="City"> </div> </div> <button>Submit</button> </form> <button (click)="addCity()">Add City</button>...
teamsmiley's profile imageteamsmiley
2019-11-11 00:00
-
kubernetes delete namespace
kubernetes delete namespace kubectl delete ns AAA 이러면 관련 리소스가 다 지워진다. 그런데 가끔 행이 걸리는 경우가 있다. 다음처럼 하면 된다. on mac brew update brew install jq kubectl proxy & 터미널을 하다 더 띄워서 NAMESPACE=delete-namespace kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' >temp.json curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize kubectl proxy를 이용하는것이 핵심
teamsmiley's profile imageteamsmiley
2019-09-28 00:00
-
ef-core migration
ef-core migration add migration add-migration <NAME> -c ApplicationDbContext -o ./Data/Migrations/UserDB dotnet ef migrations add <NAME> -c ApplicationDbContext -o ./Data/Migrations/UserDB migrations 폴더에 추가되고 snapshot이 변경된다. 현재 디비에는 적용이 안되는 상태이다. update database - add new migration update-database -c ApplicationDbContext dotnet ef database update -c ApplicationDbContext 디비에는 적용 Empty migrations add-migration <NAME> -c ApplicationDbContext -o ./Data/Migrations/UserDB dotnet ef migrations add <NAME> -c ApplicationDbContext -o ./Data/Migrations/UserDB 빈 마이그레이션을 생성한후 특별히 작업해야할 내용을 만들어준다. remove migration (Migration file 삭제)...
teamsmiley's profile imageteamsmiley
2019-09-12 00:00
-
intellicode model management
intellicode model management 그동안 인텔리코드는 기본적으로 제공해주는 것만 사용가능한줄 알앗는데 오늘 내 프로젝트를 기반으로 모델링을 해서 사용할수 있다고 해서 한번 해보기로 함 아무리 찾아도 이 화면이 나오지를 않았다. search bar에서 intellicode를 치고 나오는 옵션에 들어가서 첫번재 나오는걸 선택 결과적으로 option » intellicode로 가는것이다. 거기서 옵션을 전부 enabled로 바꿔졌다. 그러자 상단에 intellicode 를 enable하겟냐는 메세지 나와서 오케 이제 vs를 재시작하고 프로젝트를 로딩후 다시 검색바에서 Intellicode model management를 선택하면 이화면이 나온다 거기서 train을 누르면 된다. 한번 써보고 좋은지...
teamsmiley's profile imageteamsmiley
2019-09-05 00:00
-
angular deploy with docker (nginx)
angular deploy with docker (nginx) 문제점 : angular를 도커로 패키징을 해서 사용중인데 f5를 할때마다 404에러가 난다. 원인 : 쿠버네티스가 aaa.com/suburl 을 넘기는데 nginx가 디렉토리로 인식하고 404를 보낸다. 해결 방법 : 도커를 사용해서 deploy를 하려고 한다. # stage 1 FROM node:12 as builder # use changes to package.json to force Docker not to use the cache # when we change our application's nodejs dependencies: COPY package.json /tmp/package.json RUN cd /tmp && npm install RUN mkdir -p...
teamsmiley's profile imageteamsmiley
2019-09-04 00:00
-
kubernetes mac에서 관리하기
kubernetes mac에서 관리하기 kubernetes cli 를 설치한다. brew install kubernetes-cli zsh 플러그인들 설치한다. cd ~/.oh-my-zsh/custom/plugins/ # zsh-autosuggestions git clone https://github.com/zsh-users/zsh-autosuggestions # zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-syntax-highlighting.git # plugin 활성화 vi ~/.zshrc ... plugins=(git zsh-syntax-highlighting zsh-autosuggestions kubectl kube-ps1) #여기에 추가한다. 터미널 재시작 kubernetes 연결하기 scp root@master01:/root/.kube/config ~/.kube/config # 확인 kubectl get pods dashboard 사용 설치 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml user 생성 https://github.com/kubernetes/dashboard/wiki/Creating-sample-user vi kube-admin-user.yaml --- apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1...
teamsmiley's profile imageteamsmiley
2019-07-13 00:00
-
선배 사업가의 조언 - 01
선배 사업가의 조언 - 01 요즘 고민이 많아 선배 사업가분들을 만나서 이런 저런 이야기를 물어보고 정리하려고 하고 있다. 이번에 만난 분든 무역업을 통해 성공을 이루신 분이다. 간단히 정리해보자. 선배님의 조언 돈의 흐름을 바꾸는 생각을 하자. 물론 본인에게 그 흐름이 오게 스타벅스 기프트카드 (20-50usd)은 의외로 효과가 있다. 이걸 사서 그 고객에게 직접 전달하며 고객 대응도 하고 상황도 듣고 하라는 이야기 사업에 사는 ‘죽을 사’로 생각하고 죽을만큼 열심히 하고 있다고 염려는 염려를 낳는다. 개인사업자는 사장 본인이 브랜드이다....
teamsmiley's profile imageteamsmiley
2019-06-30 00:00
-
Kubernetes 에서 Gluster사용하기
Kubernets에서 Gluster사용하기 - centos 7 중요 : namespace를 dev를 사용햇다. 각자 변경해서 사용하기 바란다. 기존에 추가해둔 gluster를 쿠버네티스에 Persistance Volume으로 사용해보려고 한다. 전체 쿠버네티스 클러스터에서 glusterfs가 동작해야한다. 설치한다. centos 7을 기준으로한다. yum install -y glusterfs-cli-6.1-1.el7.x86_64 yum install -y glusterfs-client-xlators-6.1-1.el7.x86_64 yum install -y glusterfs-6.1-1.el7.x86_64 yum install -y glusterfs-fuse-6.1-1.el7.x86_64 yum install -y glusterfs-libs-6.1-1.el7.x86_64 gluster 를 마운트해서 테스트해보자. mount -t glusterfs gluster12:gfs /glusterfs cd /glusterfs ls mkdir /glusterfs/kubernetes/mysql #아래에서 데이터를 넣을때 사용 check uid/gid ls -lnZ /mnt/glusterfs >...
teamsmiley's profile imageteamsmiley
2019-06-29 00:00
-
OAuth 2 Client Credential Flow
OAuth 2 Client Credential Flow (Server to Server or Service Account) TL;DR client가 바로 user가 되면 된다. client에 userid를 포함해뒀다가토큰에 담아서 보내주면 됨 Oauth를 공부한지 한 2년이 되가는데 제일 이해가 안되는 부분이 이부분이 였다. 보통 server to server에 사용된다고 나와있기는 했다. 예를 들면 어떤 데몬을 만들어서 5분에 한번씩 api서버를 호출하는 console프로그램을 만든다고 해보자. 매뉴얼대로 해보면 인증은 되나 유저 정보가 없어서 클라이언트(프로그램)는 인증이 되나 내용을 가져올수가 없어서 이걸 왜 쓰는지도 모르고 넘어갔다. 인터넷에 몇번을 찾아봐도 (...
teamsmiley's profile imageteamsmiley
2019-06-28 00:00
-
GlusterFS Add Node
GlusterFS Add Node Edit Hosts from gluster00 gluster05 gluster06 vi /etc/hosts 192.168.0.201 node201 gluster05 192.168.0.202 node202 gluster06 add harddisk on gluster05 and 06 fdisk -l lsblk fdisk /dev/sdb > d / enter pvcreate /dev/sdb vgcreate vg_1 /dev/sdb lvcreate -l +100%FREE -n data vg_1 mkfs -t xfs /dev/vg_1/data blkid /dev/vg_1/data > /dev/vg_1/data: UUID="76b6f3e1-a58c-4d62-924e-20f952d63fa7" TYPE="xfs" mkdir /data vi /etc/fstab > UUID=76b6f3e1-a58c-4d62-924e-20f952d63fa7 /data xfs defaults 0 0 mount -a Install Gluster yum install epel-release -y yum install centos-release-gluster...
teamsmiley's profile imageteamsmiley
2019-05-18 00:00
-
Keyboard Shortcut 단축키 사용하기
단축키 사용하기 내가 사용하는 단축키들을 여기에 적어보기로 했다. 자꾸 잊어먹어서… MacOS Open Spotlight to start a search -> ⌘ + Space bar close application -> ⌘ + Q 전체화면 스샷 -> ⌘ + shift + 3 프로그램 전환 -> ⌘ + tab deletes the selected file(s) -> ⌘ + Backspace Full Screen ctrl + command + F (toggle) 바탕화면 보기 -> F11 또는 트랙패드에서 4손가락 올리고 펼쳐보자. Monosnap - 이미지 캡쳐 프로그램 특정 영역 스샷...
teamsmiley's profile imageteamsmiley
2019-05-15 00:00
-
GlusterFS Upgrade
glusterFS Upgrade 다음 문서를 참고한다. https://docs.gluster.org/en/latest/Upgrade-Guide/upgrade_to_4.1/ online 업그레이드와 offline 업그레이드 두 종류가 있으나 online upgrade를 사용할것이다. online upgrade Online upgrade is only possible with replicated and distributed replicate volumes. 우리는 distributed replicate volumes 이므로 진행해도 된다. 꼭 서버 한대씩 진행해야한다. replication을 꼭 다른서버에 하고 있는경우만 online upgrade가 가능하다. 다음 과정을 모든서버에 반복한다. Stop all gluster services, either using the command below, or through other means, killall glusterfs glusterfsd glusterd systemctl stop glustereventsd Stop all applications...
teamsmiley's profile imageteamsmiley
2019-05-14 00:00
-
GlusterFS
glusterFS https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Clients/ GlusterFS라고 여러개의 서버를 이어서 하나의 서버(스토리지)처럼 보이는게 하는 것이다. server setup 192.168.0.196 gluster00 => Arbiter 192.168.0.197 gluster01 192.168.0.198 gluster02 전체 서버에 방화벽을 전부 끄고 시작하자. 전체 서버에 1기가 하드를 추가하고 Linux Volume Manager 을 사용하여 xfs로 설정 GlusterFS Trusterd storage pool Node Brick volume Volume Type Distributed Replicated Distributed-Replicated install vi /etc/hosts 192.168.0.196 node196 gluster00 192.168.0.197 node197 gluster01 192.168.0.198 node198 gluster02 yum install epel-release -y yum install centos-release-gluster -y yum install wget -y...
teamsmiley's profile imageteamsmiley
2019-05-14 00:00
-
Linux Volume Manager
Linux Volume Manager 그동안 lvm을 의도적으로 안써왔는데 기술이 많이 안정화가 됬다고해서 의도적으로 사용해보려고 한다. 오늘 진행한것은 다음과 같다. centos 7 install 기본 프로그램들 다 설치 harddisk 추가 bios에서 하드디스크 auto로 되있는지 확인 부팅후 fdisk -l로 확인 기존 정보 지우기 lsblk fdisk /dev/sdb # delete all partition lsblk에서 dmraid 이런거 나오면 다음처럼 삭제 yum install mdadm dmraid ls /dev/mapper/ddf* dmsetup remove /dev/mapper/ddfs1_... physical volume (PV) 생성 파티션을 만들고 pv를 생성하는 매뉴얼이 잇는데 그냥 바로 하드에 생성해도...
teamsmiley's profile imageteamsmiley
2019-05-13 00:00
-
유튜브 강의 녹화
강좌 녹화 방법 화면 크기 2560 x 1440 으로 하고 확대를 200%로 한다. 적으면 1920x1080으로 한다. obs 세팅 obs > setting > video 캔버스 해상도 : 1920x1080 출력 해상도 : 1920x1080 bicubic FPS : 60 필터 적용안함. 이렇게 하면 녹화가 필요한 화면만 된다.
teamsmiley's profile imageteamsmiley
2019-04-30 00:00
-
angular 7 + web api (dotnet core 2.2) 개발환경구축
angular 7 + web api (dotnet core 2.2) 개발환경구축 패키지 매니저 설치 windows - chocolatey (https://chocolatey.org/install) @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" macos - brew (https://brew.sh) /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew update && brew upgrade brew tap caskroom/cask window user visual studio 2019 or 2017 (https://visualstudio.microsoft.com/) vscode choco install vscode -y dotnet core 2.2 sdk choco install dotnetcore-sdk -y git bash choco install git -y postman brew...
teamsmiley's profile imageteamsmiley
2019-04-15 00:00
-
log 저장 서비스 - sentry.io
Sentry.io를 사용하여 로그를 원격지에 저장해보자. 로그를 원격지에 저장하여 이메일등으로 받아볼수 있는 서비스. 작업전에 sentry.io에 회원가입을 하고 이메일 확인을 한다. dotnet core 2.2 project 누겟 패키지를 설치하자. Install-Package Sentry.AspNetCore -Version 1.1.2 program.cs에서 다음처럼 수정하자. public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() // Add this: .UseSentry() .Build(); 반드시 스타트업 다음에 추가해야한다. 이제 appsettings.json 에 관련 내용을 추가하자. "Sentry": { "Dsn": "https://6425120cdbbf4e3491f9ba08f4323333@sentry.io/1406444", "IncludeRequestPayload": true, "SendDefaultPii": true, "MinimumBreadcrumbLevel": "Debug", "MinimumEventLevel": "Warning", "AttachStackTrace": true, "Debug": true, "DiagnosticsLevel": "Error" },...
teamsmiley's profile imageteamsmiley
2019-03-01 00:00
-
angular dubug하기
앵귤러 디버그 하기 vs code로 프로젝트 열기 프로젝트 폴더를 visual studio code로 열자. plugin 설치 Debugger for Chrome 플러그인을 설치한다. https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome 디버그 에서 세팅을 하자. 옵션 버튼을 누르면 화면이 열리는데 다음처럼 세팅하자. { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "Launch Chrome against localhost", "url": "http://localhost:4200", "webRoot": "${workspaceFolder}", "disableNetworkCache": true,...
teamsmiley's profile imageteamsmiley
2019-02-22 00:00
-
angular 7 routing과 2개의 레이아웃 만들기
angular 7 routing and 2개의 레이아웃 만들기 현재 만들고 잇는 프로젝트가 로그인 전과 로그인 후가 레이아웃이 많이 다른다. 그래서 한번 만들어보았다. 화면이 두개가 다른경우가 있다. 일단 로그인 전 화면과 로그인 후 화면은 화면구성이 아주 다르다. 그러므로 first 라는 화면과 second라는 화면이 라우팅에 따라 바뀌어야한다. # layout Module을 만들자. MODULE_NAME=layout-sample # 꼭 lowercase 단어는 - 로 구분 ng generate module ${MODULE_NAME} --routing=true mkdir src/app/${MODULE_NAME}/components/ touch src/app/${MODULE_NAME}/components/.gitkeep mkdir -p src/app/${MODULE_NAME}/services touch src/app/${MODULE_NAME}/services/.gitkeep mkdir -p src/app/${MODULE_NAME}/models touch src/app/${MODULE_NAME}/models/.gitkeep...
teamsmiley's profile imageteamsmiley
2019-02-14 00:00
-
vscode paste image
vs code 마크다운문서에 그림 붙여 넣기 코드는 구글 드라이브보다 그림 붙여넣는게 불편하다. 그런데 생각해보면 코드도 크롬이므로 될것도 같아서 찾아봄 https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image paste-image 라는 플러그인을 찾음 이제 이미지를 클립보드에서 바로 붙여넣을수 있게 됬다. 일단 플러그인 설치하고 그림을 붙여 넣어보자. 클립보드에 그림을 넣은뒤 ctrl+alt+v를 넣으면 이미지가 생기면서 문서도 링크가 추가된다. 설정을 변경하자. images아래 그림들 저장하자. 이제 자동으로 파일이 저장되면서 문서가 작성이 된다. 경로에 ./를 추가하자.
teamsmiley's profile imageteamsmiley
2019-02-14 00:00
-
lets encrypt with wildcard cert
let’s encrypt with wildcard cert let’s encrypt 인증서에 와일드카드 도메인을 적용해보자. UR_DOMAIN=aaa.com sudo yum update sudo yum install epel-release git -y sudo yum install python-pip -y sudo yum install python-virtualenv -y sudo yum install certbot certbot certonly \ --manual \ --preferred-challenges=dns \ --email UR_EMAIL \ --server https://acme-v02.api.letsencrypt.org/directory \ --agree-tos \ --debug \ --no-bootstrap \ -d *.${UR_DOMAIN} # 이게 중요 _acme-challenge txt 도메인에 등록하라고 나옴 Please deploy a DNS TXT record under the name _acme-challenge.UR-DOMAIN with...
teamsmiley's profile imageteamsmiley
2019-02-07 00:00
-
ingress nginx ssl
kubernetes ingress nginx with ssl (let’s encrypt) ingress nginx에 ssl을 추가해보자. 먼저 master에서 ssl을 만들어야한다. let’s encrypt를 이용하여 ssl을 만들자. let’s encrypt # domain 셋업 UR_DOMAIN=aaa.com UR-EMAIL=support@aaa.com sudo yum update sudo yum install epel-release git -y sudo yum install python-pip -y sudo yum install python-virtualenv -y sudo pip install requests urllib3 pyOpenSSL --force --upgrade sudo yum install certbot certbot certonly \ --manual \ --preferred-challenges=dns \ --email ${UR-EMAIL} \ --server https://acme-v02.api.letsencrypt.org/directory \ --agree-tos \ --debug \...
teamsmiley's profile imageteamsmiley
2019-02-07 00:00
-
ansible tip
ansible tip git push when git status changed --- - hosts: dev gather_facts: no tasks: - name: git all --all shell: cd /data/tftpboot/ && git add --all - name: check git status shell: cd /data/tftpboot/ && git status register: result - debug: var=result - debug: var=result.stdout.find('working directory clean') - name: switch backup git push shell: cd /data/tftpboot/ && git commit -am "switch config changed" && git push when: result.stdout.find('working directory clean') != "-1" shell을 실행하여...
teamsmiley's profile imageteamsmiley
2019-02-07 00:00
-
mssql backup
mssql backup 장애 해결하다 사이먼님이 알려주셔서 정리 https://ola.hallengren.com/ 위 사이트에서 코드를 다운받아서 디비에서 실행해두고 백업을 하면 된다. 사이트에 실행 샘플 코드가 있으니 그걸로 하면 되겠다.
teamsmiley's profile imageteamsmiley
2019-02-02 00:00
-
Clean Architecture
Clean Architecture 다음 두 강좌면 대충 끝나는듯. uncle bob martin https://www.youtube.com/watch?v=o_TH-Y78tt4&t=1113s http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html 정리 The Web is a Delivery Mechanism Database is Detail A good architecture allows major decisions to be deferred Clean Architecture with ASP.NET Core 2.1 https://www.youtube.com/watch?v=_lwCVE_XgqI&t=496s old version https://www.youtube.com/watch?v=fAJrVf8f6M4 정리 Domain Layer Entities Value Objects Enumerations (꼭 생성자에서 초기화를 하자) Logic Exceptions Application Layer Interfaces Models Logic Commands / Queries Validators Exceptions Persistence Layer DbContext Migrations Configurations Seeding Abstractions Infrastructure Layer Implementations, e.g....
teamsmiley's profile imageteamsmiley
2019-02-02 00:00
-
devops list
devops 관련 리스트 하나씩 나눠져 있는것들을 흐름이 있게 정리해보았습니다. 구조 docker docker-01 https://teamsmiley.github.io/2018/06/27/docker-tip-01/ docker-02 - https://teamsmiley.github.io/2018/06/27/docker-tip-02/ docker private registry - https://teamsmiley.github.io/2018/12/22/docker-private-registry/ gitlab gitlab install - https://teamsmiley.github.io/2018/09/06/docker-gitlab/ gitlab build docker image - https://teamsmiley.github.io/2018/12/24/gitlab-ci/ kubernets kubernetes 기본 - https://teamsmiley.github.io/2018/12/19/kubernetes/ kubernetes ingress - https://teamsmiley.github.io/2019/01/27/kubernetes-ingress/ spinnaker spinnaker 설치전 준비 - https://teamsmiley.github.io/2019/01/28/minio/ spinnaker 설치 - https://teamsmiley.github.io/2019/01/29/kubernetes-spinnaker-install/ spinnaker 사용 - https://teamsmiley.github.io/2019/01/30/kubernetes-spinnaker-use/ spinnaker 사용시 에러 - https://teamsmiley.github.io/2019/01/31/kubernetes-registry/
teamsmiley's profile imageteamsmiley
2019-02-01 00:00
-
kubernetes private registry(ImagePullError)
kubernetes 에서 private registry 사용 (ImagePullError) container image url 잘못된 경우 이미지를 가져올수 없다. 비밀번호를 설정해줘야할수 있다. 노드에 접속해서 docker-login을 하고 터미널에서 docker pull을 하면 이미지를 가져온다. 그런데 스피네커를 통해서 디플로이만 하면 ImagePullError 에러 발생 이런 경우는 private registry를 사용시 네임 스페이스마다 secret을 생성해줘야한다. kubectl create secret docker-registry <secret-name> \ --docker-server=<your-registry-server> \ --docker-username=<your-name> \ --docker-password=<your-pword> \ --docker-email=<your-email> \ --namespace=<namespace-name> 이렇게 하면 스피네커가 배포하고 나면 쿠베가 레지스트리에서 잘 가져온다. 쿠버네티스 yml은 다음처럼 imagepullsecret 추가되야함. apiVersion: apps/v1...
teamsmiley's profile imageteamsmiley
2019-01-31 00:00
-
spinnaker 사용
Spinnaker 사용 blue green 배포 적용 https://www.spinnaker.io/guides/user/kubernetes-v2/traffic-management/#sample-bluegreen-pipeline 여기를 잘 참고하면 된다. 영어가 불편하신분을 위해 설명을 하면 application을 만들자. load balancer를 만들자. (service) pipeline을 추가한다. 아직 ingress가 스피네커를 통해서 생성이 안되는듯 보여 수동으로 생성했다. (방법 아시는분은 댓글좀..) 해보자. spinnaker ui에 접속하자. 앞 문서를 참고하여 http://spin.publishapi.com으로 접속 Add Application Add Service (load balancer) kind: Service apiVersion: v1 metadata: name: auth namespace: prod spec: selector: app: auth ports: - protocol: TCP port: 80 파이프 라인을 추가하자. add triger...
teamsmiley's profile imageteamsmiley
2019-01-30 00:00
-
spinnaker 설치
Spinnaker 설치 Install Halyard Halyard manages the lifecycle of your Spinnaker deployment, including writing & validating your deployment’s configuration, deploying each of Spinnaker’s microservices, and updating the deployment. 로컬에 설치할수 있고 도커이미지를 사용할수 있다. 도커를 사용한다. mkdir ~/.hal mkdir /data/git/docker/halyard/kube vi /data/git/docker/halyard/docker-compose.yml --- version: "3.3" services: halyard: container_name: halyard restart: always image: gcr.io/spinnaker-marketplace/halyard:stable volumes: - ./kube:/home/spinnaker/.kube ports: - 8084:8084 - 9000:9000 cd /data/git/docker/halyard && docker-compose up -d docker exec -it halyard bash # 탭 완성...
teamsmiley's profile imageteamsmiley
2019-01-29 00:00
-
kubernetes - minio
minio storage spinnaker 에서 필요한 데이터를 저장하는 저장소 역할을 합니다. mkdir -p /data/minio # minio file 저장 위치 mkdir -p /data/minio-config # minio 설정 저장위치 install cd wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin/minio minio server --address ":9001" --config-dir /data/minio-config /data/minio 설치 완료 시작프로그램에 등록하고 데몬으로 실행한다. cat <<EOT >> /etc/default/minio # Volume to be used for Minio server. MINIO_VOLUMES="/data/minio/" # Use if you want to run Minio on a custom port. MINIO_OPTS="--address :9001"...
teamsmiley's profile imageteamsmiley
2019-01-28 00:00
-
kubernetes ingress nginx
ingress-nginx 하나의 아이피에 각각의 도메인마다 각자의 서비스로 보내주고 싶다. 구성은 다음 그림과 같다. 기본 pod and service 생성 vi hello-node.yml --- apiVersion: v1 kind: Pod metadata: name: hello-node labels: service-name: hello-node spec: containers: - name: hello-node image: asbubam/hello-node --- apiVersion: v1 kind: Service metadata: name: hello-node spec: ports: - port: 8080 targetPort: 8080 selector: service-name: hello-node kubectl create -f hello-node.yml 잘됬는지 체크 kubectl get pods kubectl get svc 현재까지 구성은 다음과 같다. ingress 설치 kubectl...
teamsmiley's profile imageteamsmiley
2019-01-27 00:00
-
Angular 7 i18n SSR
Angular 7 i18n with SSR ng cli를 설치한다. npm install -g @angular/cli new project 생성 ng new i18n-sample --routing cd i18n-sample npm i ng serve -o //화면 잘 나오는지 확인 이건 ssr적용이 안된것이다. 기본 프로젝트가 실행됬다. 깃으로 파일 변경여부를 잘 확인 해가면서 보자. 새 컴포넌트 추가 ng g c users # ng g c users --module app vi app-routing.module.ts import { UsersComponent } from './users/users.component'; const routes: Routes = [ ... { path: "users", component:...
teamsmiley's profile imageteamsmiley
2019-01-13 00:00
-
Docker를 사용하여 php를 운영해보자.
Docker를 사용하여 php를 운영해보자. nginx 기본 올리기 vi docker-compose.yml version: '3' services: web: image: nginx:latest ports: - "80:80" docker-compose up 웹브라우저로 localhost를 확인하자. nginx 설정 mkdir code vi site.conf server { index index.html; server_name AAA.com; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /code; } vi docker-compose.yml version: '3' services: web: image: nginx:latest ports: - "80:80" volumes: - ./code:/code - ./site.conf:/etc/nginx/conf.d/default.conf vi code/index.html hello 이제 다 되었다. docker-compose up 확인해보자. php-fpm을 추가해보자. php-fpm은 포트 9000번을 사용하여 대기한다. vi...
teamsmiley's profile imageteamsmiley
2018-12-29 00:00
-
Gitlab CI를 사용하여 도커 이미지를 커밋마다 빌드해보자.
Gitlab CI를 사용하여 커밋할때마다 도커 이미지를 빌드해보자. centos 7 설치 도커 설치 gitlab-runner 커밋이 되면 도커 러너를 실행시키는데 이건 따로 설치후 gitlab 에 등록을 해주면 gitlab이 커밋시 명령어를 보내서 빌드를 해주는 프로그램인다. docker in docker를 사용할수도 있고 그냥 shell로도 빌드할수 있다. docker in docker는 빌드후 도커 이미지를 지워버리기 때문에 매번 빌드시마다 로컬 캐시를 사용하지 않고 서버에서 이미지를 받아온다. 오래 걸리고 별로 안좋은듯 싶다. docker in docker는 빌드에는 사용하지 말라는 이야기도 있다. 아무튼 나는 gitlab runner...
teamsmiley's profile imageteamsmiley
2018-12-24 00:00
-
Docker Private Registry + SSL + Lets Encrypt + Username + Password
docker private registry centos 7 설치 도커 설치 폴더 생성 mkdir -p /data/docker/auth cd /data/docker lets encrypt ssl 발급받기 sudo bash sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo yum update sudo yum install epel-release git -y sudo yum install python-pip -y sudo yum install python-virtualenv -y sudo pip install requests urllib3 pyOpenSSL --force --upgrade cd /tmp git clone https://github.com/certbot/certbot.git cd certbot ./certbot-auto certonly \ --manual \ --preferred-challenges=dns \ --email...
teamsmiley's profile imageteamsmiley
2018-12-22 00:00
-
KeepAlived
keepalived 서버 두대중 하나가 죽으면 다른 하나가 받아서 서비스를 한다. 기본 준비 centos 7으로 vm두개 설치했습니다. vagrant up vagrant plugin install vagrant-vbguest vagrant reload vagrant ssh 두개의 노드 모두다 sudo bash yum install -y keepalived systemctl enable keepalived 두개 노드 모두 mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.old vi /etc/keepalived/keepalived.conf 두 서버 같은 설정으로 넣는다. vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.200 }...
teamsmiley's profile imageteamsmiley
2018-12-20 00:00
-
kubernetes 기본
kubernetes와 spinnaker를 설치 사용 kubernetes 설치 1개의 마스터 서버 (centos 7) 2개의 노드 서버 (centos 7) 1개의 미니오 스토리지 서버,registry (centos 7) 아이피는 다음과 같습니다. IP Name 192.168.0.195 master 192.168.0.192 node192 192.168.0.193 node193 192.168.0.194 node194(minio storage, docker registry) 테스트랩 준비 centos7을 4대의 서버에 설치한다. kubernetes를 설치하기전 해야할 일이 있습니다. https://kubernetes.io/docs/setup/independent/install-kubeadm/#before-you-begin 문서를 참고하시면되는데요 진행해보겠습니다. 저는 root로 로그인하여 진행하였습니다. before you begin kubernetes # 기본 프로그램 설치 yum update && yum -y install kernel-headers kernel-devel yum install...
teamsmiley's profile imageteamsmiley
2018-12-19 00:00
-
internal centos yum repo, dell repo , docker repo
내부네트워크에서 사용 하기 위해 repo를 mirror 한다. 서버 준비 도커로 nginx를 사용함 get-docker.sh mkdir -p /data/mirror/docker cd /data/mirror/docker curl -fsSL https://get.docker.com -o get-docker.sh yum repo mirror mkdir -p /data/mirror/docker cd /data/mirror/docker wget --mirror --convert-links --no-parent https://download.docker.com/linux/centos/7/x86_64/ mv download.docker.com/linux . wget --no-parent https://download.docker.com/linux/centos/docker-ce.repo wget --no-parent https://download.docker.com/linux/centos/gpg modify docker-ce.repo file cd /data/mirror/docker/linux/centos/7/ vi docker-ce.repo docker-ce.repo file contents cat docker-ce.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=http://yum/docker/linux/centos/7/$basearch/stable enabled=1 gpgcheck=1 gpgkey=http://yum/docker/linux/centos/7/gpg docker-compose mkdir -p /data/mirror/docker wget -p https://github.com/docker/compose/releases/download/1.22.0/docker-compose-Linux-x86_64 -O...
teamsmiley's profile imageteamsmiley
2018-11-30 00:00
-
Ansible - 01
ansible - 01 ansible 에서 특정 노드만 빼기 OR (group1:group2) NOT !group2 wildcard web*.aaa.com regex (~web[0-9]+) ~: 처음 시작 AND (grout1:&group2) sample ansible-playbook --limit '!node01,!node02,!node03,!node04' kubernetes.yml ansible-playbook --limit 'all:!bad_host' playbook.yml ansible-playbook --limit 'all:!group1,!node100' kubernetes.yml ansible-playbook --limit 'hoost1:host2' yourPlaybook.yml ansible-playbook --limit 'webservers:&prod:!python3' yourPlaybook.yml setup module ansible node02 -m setup gathering fact 결과를 다 보여준다. ansible all -m setup --tree ./fact 전체 인벤토리를 대상으로 setup을 실행해서 디렉토리에 저장해준다.
teamsmiley's profile imageteamsmiley
2018-10-25 00:00
-
Open API(NSwag) and Angular 6
dotnet core 2.1 에서 Open API(NSwag) 사용하기 install nuget package Package Manager : Install-Package NSwag.AspNetCore CLI : dotnet add package NSwag.AspNetCore NSwag.MSBuild도 나중에 필요할수도 있으니 미리 설치해둔다. wire up on startup 두곳에 추가해 준다. public void ConfigureServices(IServiceCollection services) { services.AddSwagger(); ... public void Configure(IApplicationBuilder app, IHostingEnvironment env) { ... app.UseMvc(); //app.UseSwaggerReDocWithApiExplorer(settings => Redoc이라는 화면을 보여준다. https://github.com/Rebilly/ReDoc app.UseSwaggerUiWithApiExplorer(settings => { settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase; }); } API Controller 모든 controller에서 다음을 해준다. 리턴 가능한 모든 케이스에 대해...
teamsmiley's profile imageteamsmiley
2018-10-07 00:00
-
devops - 01
Devops Study 01 devops 란 개발(Development)과 운영(Operations)의 합성어 목표 고객의 요구사항을 빠른시간에 서비스에 적용한다. devops tool chain Use Case - 사용자 요구사항 코드(프로그래밍) - 코드 개발 및 검토, 버전 관리 도구, 코드 병합. CI/CD (continuous integration and continuous delivery) 빌드 - 지속적 통합(CI) 도구, 빌드 상태. 테스트 - 테스트 및 결과가 성능을 결정. 배포 - 애플리케이션 디플로이 이전 단계.(CD) 구성 - 인프라스트럭처 구성 및 관리, IaC(Infrastructure as Code) 도구 모니터링/운영 - 애플리케이션 성능 모니터링, 최종...
teamsmiley's profile imageteamsmiley
2018-09-27 00:00
-
c# name sapce 하위 클래스들 알아내기
c# namesapce에 있는 하위 클래스 알아내기 코드를 보자. using System; using System.Linq; using System.Reflection; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string nspace = "ConsoleApp1"; var q = from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsClass && t.Namespace == nspace select t; q.ToList().ForEach(t => Console.WriteLine(t.Name)); } } class AAA { } class BBB { } } AAA BBB 가 찍히는것을 볼수 있다. 배운점 질문을 잘 정리하자. 그럼 빠른 결론에 도달하거나 정리하면서 해결이 되버리기도...
teamsmiley's profile imageteamsmiley
2018-09-21 00:00
-
study plan 01
study plan devops를 해보자. schedule aws region , available zone , edge location EC2 Security Group - firewall elastic ip ec2 login ami cloud watch s3 cloud front (cdn) RDB ( mysql , posgreql ,auroa) snapshot replication elastic cache - redis iam route 53 (도메인) elb auto scaling vpc (virtual network) Glacier - storage CloudFormation SNS , Email SQS - que aws cli docker docker swarm k8s docker on aws ci/cd jenkins iis or nginx...
teamsmiley's profile imageteamsmiley
2018-09-20 00:00
-
mailgun service
mailgun 서비스를 사용해보자. 사용해야할 경우 메일을 보내는 용도로만 사용하려고 함 (gitlab에서 알림 메세지를 보낼때 사용) 추가로 설정을 하면 teamsmiley@gmail.com 이메일을 가지고 있지만 teamsmiley@회사도메인.com으로 이메일 주소를 만들수 있음. 이메일 보내기 오늘은 알림 메세지를 보내기만 하려고함. https://www.mailgun.com/ 에 회원가입을 한다. 이제 로그인을 해보자 . 가입을 하면 sandbox라고 테스트용 계정을 하나 준다. 이건 사용하지 않을것이다. https://app.mailgun.com/app/domains 에서 Add New Domain 을 누른다. 도메인 이름을 넣고 다음을 누르면 설명서가 보여진다 보고 그대로 따라하면 된다. https://app.mailgun.com/app/domains 에서 방금 만든 도메인을...
teamsmiley's profile imageteamsmiley
2018-09-14 00:00
-
GitLab on Docker
GitLab을 도커로 설치해보자. centos 7에 도커 최신버전을 설치하고 다음을 진행한다. 참고 https://docs.gitlab.com/omnibus/docker/ 설치및 실행 - docker run sudo docker run --detach \ --hostname gitlab.publishapi.com \ --publish 443:443 --publish 80:80 --publish 30022:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest –publish 30022:22 ==> 이부분이 22면 기존 ssh와 포트 충돌 에러가 난다. 30022로 변경했음 위 커맨드를 실행하면 최신 깃랩 이미지를 받아서 실행을 한다. http://gitlab.publishapi.com로 접속을 해본다. 에러가 나면...
teamsmiley's profile imageteamsmiley
2018-09-06 00:00
-
mssql 2017 docker on macosx
mssql 2017 docker install docker https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017 install mssql install mssql 2017 docker image sudo docker pull microsoft/mssql-server-linux:2017-latest mssql run 데이터 저장할 폴더를 만들고 사용합니다. 저는 Users//Desktop/mssql/data 여기로 정했습니다. mkdir -p ~/Desktop/mssql docker run --name mssql -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=StrongPassw0rd' -p 1433:1433 -d microsoft/mssql-server-linux:latest docker logs mssql mssql 프로세스 확인 docker ps # 프로세스가 보이면 된다 docker stop mssql # 멈출때 docker start mssql # 시작할때 docker rm mssql # 지울때 뷰어 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode?view=sql-server-2017 install vscode &...
teamsmiley's profile imageteamsmiley
2018-08-30 00:00
-
ios App 만들기 -1
아이폰용 앱을 만들어 보려고 한다. 공부하는 법을 적어보자. 목표 : 싱글페이지 앱이며 todolist를 서버에서 받아와서 뿌려주고 스와이프를 통해 완료 체크를 해준다. 미리 준비할것 : oauth인증서버가 있고 (없으면 auth0.com을 사용) api도 만들어져있다고 가정한다. 추가 기술 : cocoapod , alamofire , rxswift, swiftyjson, 1단계 기본 프로젝트 만들기 - xcode , new project Controller에 dummy data 만들기 table view를 넣어서 화면에서 data를 가져와서 뿌리기 화면에 검색창 넣기 auto layout 적용 기본 화면에 들어왔을때 인증 체크 - userdefaults 인증이...
teamsmiley's profile imageteamsmiley
2018-08-30 00:00
-
Docker Tip 02
Docker Tip 2 기본적인 도커 사용법을 배우고 난후 뭐를 해볼까 싶어서 진행하다 생긴 이슈를 적어본다. 스웜을 설치해서 사용할때 특정 노드에 특정 서비스를 실행하고 싶다. docker-compose에서 constraints를 사용해서 처리한다. --- version: "3.3" services: docker01: image: mysql:5.5 deploy: mode: replicated replicas: 1 placement: constraints: - node.hostname == docker01 이러면 docker01이라는 호스트에서만 배포가 된다. 그럼 특정 노드가 아니라 특정 타입 예를 들면 32기가 장비에서만 서비스를 실행해라고는 어떻게 할까? docker node update --label-add <key>=<value> <node-id> docker node update --label-add...
teamsmiley's profile imageteamsmiley
2018-08-17 00:00
-
Redis 기본
redis를 설치하고 web api c# 에서 사용한다. 설치 vi docker-compose.yml --- version: "3.3" services: redis: image: redis:4.0.11 ports: - "6379:6379" command: ["redis-server"] 혹시 비밀번호를 설정하려면 다음처럼 command: ["redis-server","--requirepass","password"] docker stack deploy -c docker-compose.yml redis 클라이언트에서 서버에 접속해보자. 윈도우즈 클라이언트 다운로드 https://github.com/dmajkic/redis/downloads redis-cli -h docker01.yourdomain.com 접속 확인 완료 c#에서 사용 사용전 알아야할것 기존에는 컨트롤러에서 디비를 가져와서 json으로 만들어서 프론트앤드에 보내준다. 이제 레디스에 데이터가 있는지 먼저 체크하여 있으면 json 만들어서 보내고 없으면 디비에서 가져와서 레디스에 넣고 그...
teamsmiley's profile imageteamsmiley
2018-08-12 00:00
-
Docker Mysql Replication
docker 로 mysql설치후 리플리케이션 까지. (feat. swarm , docker-machine) 목표 2개의 서버에 도커 스웜을 설치하고 컨테이너를 올린다. docker01 : master db docker02 : slave db를 올린다. 특정 컨테이너는 호스트명으로 구별해서 특정 호스트에서 실행되게 한다. ingress network에서 포트가 중복 안되므로 master는 3306 slave는 3307을 외부에 오픈할 것이다. 2개의 mysql이 리플리케이션이 되게 한다. 실서버 설치 docker01.ur-domain.com : 100.100.100.24 docker02.ur-domain.com : 100.100.100.25 설치후 firewalld는 끄고 yum update는 다 끝내두자. 작업 컴퓨터에서 docker-machine을 사용하여 클러스터를 만든다. docker-machine -D create...
teamsmiley's profile imageteamsmiley
2018-08-05 00:00
-
Macosx Terminal Setting
맥 터미널 설정 homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" vscode 설치 brew cask install visual-studio-code 실행후 command shift p » path (옵션에 나오면 선택한다. code 명령어를 path에 등록한다는 이야기) zsh mac이 가지고 있지만 (/bin/zsh) 다시 설치하자. brew install zsh which zsh > /usr/local/bin/zsh # standard shell로 추가 code /etc/shells > /usr/local/bin/zsh # 추가 # 기본쉘로 등록 chsh -s /usr/local/bin/zsh reboot echo $SHELL > /usr/local/bin/zsh # check version zsh --version oh my zsh sh -c "$(curl -fsSL...
teamsmiley's profile imageteamsmiley
2018-08-01 00:00
-
iis rewrite
iis rewrite 설치 부분은 빼고 적어나가겠습니다. 참고 : https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule 위 참고를 보면 모두 알수 있다. url이 다음과 같다고 하자 http://www.google.com/search?q=IIS+url+rewrite 이것은 다음과 같이 자를수 있다. http(s)://:/? Server Variable로 각각의 값들을 가져올수 있다. 내용 값 메모 SERVER_PORT_SECURE or HTTPS = on/off http(s) 프로토콜 HTTP_HOST www.google.com 호스트명 /가 없다 SERVER_PORT Default is 80 URL(아래 그림에서 A 부분에서 사용) search/term /가 없는것을 주의한다. ?표 앞까지 나중에 룰을 만들때 /로 시작하게 하면 매칭이 안된다. PATH_INFO /search /가 있다...
teamsmiley's profile imageteamsmiley
2018-07-30 00:00
-
Angular gtag
Angular 6 에서 구글 애널리틱스 연결하기 https://github.com/codediodeio/angular-gtag를 사용하자. angular-gtag를 설치하자. npm install angular-gtag –save index.html수정 send_page_view를 false로 세팅하자. <head> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-YOUR_TRACKING_ID"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-YOUR_TRACKING_ID', { 'send_page_view': false }); </script> </head> app.module.ts 수정 import { GtagModule } from 'angular-gtag'; @NgModule({ imports: [ GtagModule.forRoot({ trackingId: 'UA-YOUR_TRACKING_ID', trackPageviews: true, debug: true }) ] }) pageviews 보기 패키지가 라우트 변경을 자동으로 인식한다. 그러므로 다음처럼 하면된다. AppComponent.ts 를 수정한다....
teamsmiley's profile imageteamsmiley
2018-07-30 00:00
-
Angular 6 i18n with SSR
Angular 6 i18n with SSR ng cli를 설치한다. npm install -g @angular/cli new project 생성 ng new i18n-sample --routing cd i18n-sample npm i ng serve -o //화면 잘 나오는지 확인 이건 ssr적용이 안된것이다. 기본 프로젝트가 실행됬다. 깃으로 파일 변경여부를 잘 확인 해가면서 보자. SSR 시 사용하는 패키지 설정 npm install --save @angular/platform-server @nguniversal/module-map-ngfactory-loader ts-loader @nguniversal/express-engine npm install --save-dev webpack-cli@2.0.14 SSR 적용 (aot포함)) ng generate universal --client-project i18n-sample npm i 기존에는 여러곳에 파일을 추가하고 수정해주여야 하였으나...
teamsmiley's profile imageteamsmiley
2018-07-29 00:00
-
FCM - IOS Push Notification
Firebase 5.4 Push Notification For IOS 11 (feat. c# backend) 일단 제가 IOS를 처음 개발한다는 걸 알고 글을 봐주시기를 바랍니다. 혹시 틀린건 댓글 부탁드려요 전체 흐름을 미리 설명을 하면 다음과 같다. ios 개발 환경 구축 ios를 개발 시작하면 생소한 이름들로 부터 어려움에 처한다. 우리가 알아야할 것들은 다음과 같다. device(개발용) appId 인증서 (개발자, 배포용) identifier 프로비저닝 프로파일(개발용, 배포용) key 코드사이닝을 비롯하여 자세한 설명은 다른 블로그를 참고하기 바란다. 참고 http://beankhan.tistory.com/115 바로 실습에 들어가자 순서가 중요하므로 꼭 순서대로...
firebase fcm push notification
teamsmiley's profile imageteamsmiley
2018-07-16 00:00
-
Entity Framework Core 2.1 - Tip
Entity Framework Core 2.1 - Tip 2.1부터 lazy loading이 지원된다고 해서 공부 급하게 공부하고 정리해서 틀릴수 있으니 꼭 다시 확인하기 바람. 용어 설명 그래프 : 연관관계가 있는 데이터들을 그래프라고하는것 같음. team 과 member에서 team A를 선택하면 관련된 팀원들이 쭉 붙는것 이것이 바로 그래프라고 하는듯. 영어강의를 듣다보면 자주 나와서.. N + 1 문제 : 1번 쿼리를 실행후 그 결과값으로 온 N 개의 데이터를 가져오기 위해 N번의 쿼리를 실행하는것을 말함. ef에서 로딩의 종류 Eager Loading (즉시 로딩)...
teamsmiley's profile imageteamsmiley
2018-07-09 00:00
-
dotnet cli를 커스터마이즈하기
custom dotnet new 만들기 프로그램을 만들어주는 프로그램 만들기. dotnet new 해서 반복되는 코드를 자동으로 생성해서 프로젝트에 넣어주면 좋겠음. 반복 작업을 많이 줄일수 있음 기본 기능 템플릿 만들기 폴더 생성 mkdir -p C:\Users\<your-id>\Desktop\smiley-template cd C:\Users\<your-id>\Desktop\smiley-template aaa.cs를 생성 - 이 파일이 나중에 생성될 파일이다. mkdir -p C:\Users\<your-id>\Desktop\smiley-template\.template.config cd C:\Users\<your-id>\Desktop\smiley-template\.template.config 설정 파일 template.json 생성 { "$schema": "http://json.schemastore.org/template", "author": "Brian Kim", "classifications": [ "SmileyTemplate" ], "name": "Smmiley Template Sample", "identity": "Teamsmiley.template.sample.CSharp", "groupIdentity":"Teamsmiley.template", "preferNameDirectory":"true", "shortName": "smiley", // 이걸 사용해서 템플릿을...
teamsmiley's profile imageteamsmiley
2018-07-04 00:00
-
정규식 OR AND 연산
정규식 팁 참고 ) 정규표현식은 표준인 POSIX의 정규표현식과 POSIX 정규표현식에서 확장된 Perl방식의 PCRE가 대표적이다. 여기서는 PCRE로 테스트함을 알려둔다. 오늘 있었던 정규식 관련 내용을 정리하려고 한다. 문제는 다음과 같다. 30008!30008!30007 => 참 30008!30007!30008 => 참 30007!30008!30008 => 참 30008!30007|30009 => 거짓 30007!30008!30008 => 참 30008!30008!30008 => 거짓 30007!30008 => 거짓 정규식으로 이걸 처리해야한다. 간단하게 설명하면 문자열에 30008 이 2개 이상 있고 30007도 1개 이상 있는경우만 참으로 되야한다. 기본적인 정규식을 생각해 봤더니 다음처럼 두개의 조건이 나온다. 조건...
teamsmiley's profile imageteamsmiley
2018-07-02 00:00
-
Docker Tip 02
Docker Cron 크론작업을 도커로 이미지 올리고 해보자. 주의할점 cron은 포그라운드 모드로 돌려야한다. cron이 추가 설치해줘야한다. 환경변수를 잘 해야한다. 내가 실제로 크론으로 실행하고 싶은 파일이 python이므로 python 2.7 이미지로 시작한다. my-cron * * * * * root echo "Hello world" >> /var/log/cron.log Dockerfile FROM python:2.7-stretch MAINTAINER name "teamsmiley" <teamsmiley@gmail.com> RUN apt-get update RUN apt-get install cron -y RUN mkdir -p /data/LogImporter COPY LogImporter /data/LogImporter ADD my-cron /etc/cron.d/my-cron RUN chmod 0644 /etc/cron.d/my-cron CMD [ "cron","-f" ] docker...
teamsmiley's profile imageteamsmiley
2018-06-27 00:00
-
Docker Tip 01
Docker 팁 정리 모든 컨테이너 삭제하기 docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) 모든 이미지 삭제하기 docker rmi $(docker images -q) Exit 상태의 모든 컨테이너 삭제하기 docker rm $(docker ps --filter 'status=exited' -a -q) 커맨드 내용까지 다 확인하자 docker ps -a --no-trunc 기존 네트워크에 새로 만든 컨테이너 넣기 docker network ls docker run -d --net network_name --name mongodb mongo docker network inspect network_name 도커의 모든 프로세스는 포그라운드로 돌려야한다. 기본적으로 도커는...
teamsmiley's profile imageteamsmiley
2018-06-27 00:00
-
DDD START
DDD Start 책이 참 좋네요. 다들 사서 한번 읽어보세요 . http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788993827446&orderClick=LAG&Kc= domain driven design ‘온라인 서점’은 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인에 해당한다. 한 도메인은 다시 하위 도메인으로 나눌수 있다. 도메인 모델에는 다양한 정의가 존재하는데 기본적으로 도메인 모델은 특정 도메인을 개념적으로 표현한 것이다. 도메인에 따라 용어의 의미가 결정되므로 여러 하위 도메인을 하나의 다이어그램에 모델링 하면 안된다. 모델의 각 구성요서는 특정 도메인을 한정할때 비로소 의미가 완전해지기 때문에 각 하위 도메인마다 별도로 모델을 만들어야 한다. 도메인...
teamsmiley's profile imageteamsmiley
2018-06-20 00:00
-
angular 6 tip 01
angular 6 tip 01 angular 로그인후 페이지 이동 모든 페이지에서 로그인으로 이동을 하게 되면 이동전 url 을 local storage 에 저장해둔다. 기존 코드 import { Injectable } from "@angular/core"; import { CanActivate, Router } from "@angular/router"; import { OpenIdConnectService } from "./open-id-connect.service"; @Injectable() export class RequireAuthenticatedUserRouteGuard implements CanActivate { constructor(private openIdConnectService: OpenIdConnectService, private router: Router) {} canActivate() { if (this.openIdConnectService.userAvailable) { return true; } else { // trigger signin this.openIdConnectService.triggerSignIn(); return false; } } }...
teamsmiley's profile imageteamsmiley
2018-06-04 00:00
-
VS Code Settings Sync
VS Code Settings Sync를 이용하여 여러개 컴퓨터에서 동기화 해보자. install setting sync ctrl + shift + P enter type install extension enter search Settings Sync click install 또는 아래 링크에서 인스톨을 누르면된다. https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync 설치가 되면 ctrl + shift + P 를 누르고 sync를 입력하자. 그럼 다음그림이 나온다. 일단 reset extension setting을 먼저 하자. (기존 정보가 있을지도 모르니 지우자.) gist token github에 접속해서 token을 얻는다. ** Settings > Developer settings > Personal access tokens ** 이름...
teamsmiley's profile imageteamsmiley
2018-06-02 00:00
-
Jenkins 사용시 팁
jenkins에서 사용시 팁 github plugin 설치하기 jenkins » manage jenkins » plugin manager GitHub API Plugin GitHub Authentication plugin GitHub Branch Source Plugin GitHub Integration Plugin GitHub plugin 이렇게 설치하자. trigger 설정 트리거중에 GitHub hook trigger for GITScm polling 이거를 선택해준다. build 설정 Execute Windows batch command 를 추가해서 빌드한다. cd console call npm i call npm run build:ssr-staging xcopy /Y /S wwwroot c:\temp\console_root_staging "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:IisApp='c:\temp\console_root_staging' -dest:iisapp='aaa.com',computerName='https://192.168.1.19:8172/msdeploy.axd?site=aaa.com',authType='basic',username='admin',password='password' -enableRule:AppOffline -allowUntrusted rmdir /S...
teamsmiley's profile imageteamsmiley
2018-06-02 00:00
-
Angular 6 컴포넌트 input output
앵귤러에서 컴포넌트를 사용해 생각할 점을 적어본다. 현재 구조 post 라는 컴포넌트에서 글제목 글내용 두개의 인풋박스를 사용하여 값을 서버로 보내는 중이다. 바뀌어야 할 구조 글내용을 쓰는 곳을 에디터로 만들 계획이고 이것을 전체 프로젝트 이곳 저곳에서 사용할 계획이다 editor를 컴포는트로 빼서 현재 페이지에서 사용해보자. 자식 컴포넌트를 만들고 기존 컴포넌트에서 텍스트 박스를 자식 컴포넌트로 이동하고 부모 컴포넌트에서는 자식사용하는것으로 변경 부모 <post-form-content-editor></post-form-content-editor> 자식 - 에디터 <div> <span>Contents Write</span> </div> <textarea id="postformcontent"rows="6"> </textarea> 이제 컴포넌트를 두개를 사용하였으나 부모의 화면에 기존과...
teamsmiley's profile imageteamsmiley
2018-06-01 00:00
-
Web Project시 주의사항
현재 진행중인 웹프로젝트시 주의사항들을 적어두자. 예전부터 가지고 있던 생각이었는데 http://kwonnam.pe.kr/wiki/web/신규서비스 를 읽고 난후 적어봐야겟다고 생각해서 적어본다. 위 글에서 나온 내용도 리뷰해서 동의하는 부분은 이 글에 적어볼 생각입니다. 계속 업데이트를 하려고 합니다. https://teamsmiley.github.io/2017/02/10/code-style/ 이글도 관련이 되있기는 합니다. 전반적인내용 유저 모델과 어드민 모델이 다를경우 WithAdmin이라는 걸로 구분한다. 커스텀 미디어타입 , 함수명 클래스명 모두 WithAdmin으로 한다. frontend url은 전부 소문자로 작성한다.(인증시 토큰이 넘어오는데 대소문자를 구분을 한다.) type스크립트 사용시 가능하면 any 타입을 줄인다. 업데이트시 enter키를 치면 업데이트되게 한다. 엔터를...
teamsmiley's profile imageteamsmiley
2018-05-25 00:00
-
Code Review - 3
code review - 3 시간 날 때마다 코드 리뷰를 해보고 문서를 작성하자. 다음 컴포넌트를 보자. import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { combineLatest } from 'rxjs'; import { Category } from '../../models/category.model'; import { Post } from '../../models/post.model'; import { CategoryDataService } from '../../services/category-data.service'; import { PostDataService } from '../../services/post-data.service'; import * as showdown from 'showdown'; const converter = new showdown.Converter(); @Component({ selector: 'www-post', templateUrl: './www-post.component.html', styleUrls:...
teamsmiley's profile imageteamsmiley
2018-05-14 00:00
-
Code Review - 2
code review - 2 시간 날 때마다 코드 리뷰를 해보고 문서를 작성하자. uploadPostImg(resource: any): Observable<any> { let url = `${this.apiUrl}boardfiles`; return this.http.post(url, resource) .pipe( catchError(this.handleError) ); } uploadPostThumbnail(resource: any): Observable<any> { let url = `${this.apiUrl}boardfiles`; return this.http.post(url + '/thumbnail', resource) .pipe( catchError(this.handleError) ); } 함수 이름이 마음에 안든다. 이 클래스는 파일을 업로드하는 기능인데 post라는 변수명이 갑자기 등장. 잘못된듯 싶고 img라는 이름은 꼭 이미지만 업로드하는 기능같아 보이는데 코드에는 그런 부분이 없다. 그냥 일반적인 파일업로드만으로 봐야해서 이름을...
teamsmiley's profile imageteamsmiley
2018-05-14 00:00
-
Angular toastr notification
ngx-toastr 요즘 디비 업데이트를 하거나 할때 화면에 알림 표시를 해주는 것을 본적이 있다. 그래서 적용해 봤다. install npm install ngx-toastr --save 설정 angular-cli 프로젝트를 사용하므로 angular.json파일을 수정한다. "styles": [ "src/styles.css", "./node_modules/ngx-toastr/toastr.css"//추가 ], app.module.ts에 다음 추가 한다. animation이 없는것과 있는것으로 구성할수 있는데 없는것을 사용하겠다. @NgModule({ imports: [ ToastNoAnimationModule, ToastrModule.forRoot({ toastComponent: ToastNoAnimation, timeOut: 10000, positionClass: 'toast-top-right', preventDuplicates: true, }), // ToastrModule added 사용 import { ToastrService } from 'ngx-toastr'; @Component({ ... }) export class YourComponent { constructor(private...
teamsmiley's profile imageteamsmiley
2018-05-12 00:00
-
Github 자동 로그인
github 자동 로그인 git 리파지토리가 많다보니 하나씩 pull받는게 만만치 않다. 배치파일로 만들어 보자. 주의할점은 https로 클론받는게 아니라 sshkey를 이용해서 클론을 받을 예정임 https는 어떤 이유에서인지 잘 안되는경우가 많더라구요. 깃허브 데스크탑 설치 https://desktop.github.com/ ssh key 생성 C:\Program Files\Git\git-bash.exe ssh-keygen.exe -t rsa C:\Users\Administrator.ssh 폴더에 id_rsa id_rsa.pub 파일이 생성된다. (다른 유저를 사용중이면 C:\Users\UserName\.ssh) 깃 초기화 git config --global user.name "teamsmiley" git config --global user.email "teamsmiley@gmail.com" private repo 클론 git clone git@github.com:USER_NAME/GIT_NAME.git 배치파일로 매번 클릭의 수고를 덜자. cd C:\Users\<your-id>\Desktop\Github\APP...
teamsmiley's profile imageteamsmiley
2018-05-11 00:00
-
AutoMapper-TS
Automapper ts 사용하기 c#으로 automapper를 써서 코드를 간결하게 만들어서 잘쓰고 있는데 앵귤러 프로젝트를 하는데 모델들 관리가 힘들어서 automapper 비슷한걸 찾아보다 이걸 찾았다. 사용해보니 코드가 간결해지고 명확해져서 너무 좋다. install npm install automapper-ts –save angular.json수정 scripts에 추가해 주면 된다. "styles": [ "styles.css" ], "scripts": [ "./node_modules/automapper-ts/dist/automapper.min.js" ], typings.d.ts 를 추가 하자. (꼭 해야하는지는 모르겟음.) src/typings.d.ts /* SystemJS module definition */ declare var module: NodeModule; declare module 'automapper-ts'; interface NodeModule { id: string; } model을 만들자. cd...
teamsmiley's profile imageteamsmiley
2018-05-11 00:00
-
Code Review - 1
code review - 초보자용 시간 날 때마다 코드 리뷰를 해보고 문서를 작성하자. 앵귤러 6.0 작업 중 코드를 보는 순간 뭐가 이상하다고 생각됐다. 왜 이렇게 어렵지? 라는 생각이 제일 먼저 났다. 다음처럼 고쳐봤다. 간단해졌는데. 이런 걸 신입 개발자에게 어떻게 설명을 해야 할지는 잘 모르겠다. update (bool:any,post:any) 일단 bool이 변수명이고 타입이 any다 잘못됨 isPublish: boolean, post:Post 이렇게 타입을 정해줘야한다. 그리고 코드를 보니 단지 토글을 해 준다. 그럼 isPublish가 굳이 들어갈 필요가 없는듯 post.isPublish 가 있기 때문에 post.isPublish...
teamsmiley's profile imageteamsmiley
2018-05-10 00:00
-
Swagger - NotSupportedException
Swagger NotSupportedException api에 Get함수가 두개가 있거나 하면 에러가 난다. http://localhost:62000/swagger /swagger/v1/swagger.json 이 없다고 에럭 난다. http://localhost:62000/swagger/v1/swagger.json 을 해보면 다음처럼 에러가 난다. An unhandled exception occurred while processing the request. NotSupportedException: HTTP method “GET” & path “boards/{boardname}/documents/{id}” overloaded by actions - API.Controllers.BoardDocumentsController.GetBoardDocument (rc-API),API.Controllers.BoardDocumentsController.GetBoardDocumentWithPublish (rc-API). Actions require unique method/path combination for Swagger 2.0. Use ConflictingActionsResolver as a workaround 해결 방법은 아래와 같다. services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "API", Version = "v1" }); c.ResolveConflictingActions(apiDescriptions...
Swagger ConflictingActionsResolver
teamsmiley's profile imageteamsmiley
2018-05-06 00:00
-
Angular 6 SSR(Server Side Rendering)
angular 6 SSR download sample file https://angular.io/guide/universal 여기에서 Download the finished sample code 를 클릭하여 다운받는다. https://angular.io/generated/zips/universal/universal.zip package.json update cd C:\Users<your-id>\Desktop\universal code . package.json을 열어서 rc가 붙은건 다 지운다. angular cli 6.0으로 샘플 프로젝트를 만들어서 거기에 있는 package.json하고 버전을 같게 만든다. 업데이트후 코드 { "name": "angular-io-example", "version": "1.0.0", "private": true, "description": "Example project from an angular.io guide.", "scripts": { "ng": "ng", "build": "ng build --prod", "start": "ng serve", "test": "ng test", "lint": "tslint ./src/**/*.ts -t...
teamsmiley's profile imageteamsmiley
2018-05-06 00:00
-
dotnet core 2 서버에서 log 보기
aspnet core log 확인하기 배포시 logs폴더를 생성한다 project.csproj 파일을 수정한다. <Target Name="CreateLogsFolderDuringCliPublish" AfterTargets="AfterPublish"> <MakeDir Directories="$(PublishDir)logs" Condition="!Exists('$(PublishDir)logs')" /> </Target> <Target Name="CreateLogsFolderDuringVSPublish" AfterTargets="FileSystemPublish"> <MakeDir Directories="$(PublishUrl)logs" Condition="!Exists('$(PublishUrl)logs')" /> </Target> 배포후 web.config를 수정한다. <!-- <aspNetCore processPath="dotnet" arguments=".\rc-idp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> --> <aspNetCore processPath="dotnet" arguments=".\rc-idp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" /> <!--true로 변경--> 또는 앞에 포스트처럼 nlog를 설정하여 로그를 본다.
teamsmiley's profile imageteamsmiley
2018-04-30 00:00
-
dotnet core 2 project nlog 추가
dotnet core 2 project에 nlog추가 nuget 설치 NLog.Web.AspNetCore nlog설정 추가 nlog.config <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <targets> <target name="logfile" xsi:type="File" fileName="logs/nlog-${shortdate}.log" /> </targets> <rules> <logger name="*" minlevel="Info" writeTo="logfile" /> </rules> </nlog> Program.cs 변경 public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseNLog() //추가 .Build(); build 설정 변경 nlog.config » property » copy to output directory » Copy always logs폴더를 배포시 만들어준다. project.csproj 파일을 수정한다. <Target Name="CreateLogsFolderDuringCliPublish" AfterTargets="AfterPublish"> <MakeDir Directories="$(PublishDir)logs" Condition="!Exists('$(PublishDir)logs')" /> </Target> <Target Name="CreateLogsFolderDuringVSPublish" AfterTargets="FileSystemPublish"> <MakeDir Directories="$(PublishUrl)logs" Condition="!Exists('$(PublishUrl)logs')" /> </Target>...
teamsmiley's profile imageteamsmiley
2018-04-23 00:00
-
Angular 4 i18n with ngx-translate
angular i18n 지원 angular 6와 ngx를 사용하지않고 기본 패키지를 사용해서 i18n을 구현은 다음 링크를 보세요 https://teamsmiley.github.io/2018/07/29/angular6-i18n-ssr-aot/ i18n 지원 angular 4.2를 기준으로 사용하는 패키지가 다른다. 4.3부터는 최신버전 4.2까지는 하위버전 .. 4.2 이하 패키지 추가 cmd (administrator) npm install @ngx-translate/core@^7.2.2 -D npm install @ngx-translate/http-loader@0.1.0 -D npm install @types/node -D npm install @ngx-cache/core@4.0.1 -D npm install @ngx-universal/translate-loader@4.0.1 -D webpack.vendor.js 설정 추가 const treeShakableModules = [ '@angular/animations', '@angular/common', '@angular/compiler', '@angular/core', '@angular/forms', '@angular/http', '@angular/platform-browser', '@angular/platform-browser-dynamic', '@angular/router', '@ngx-translate/core', '@ngx-translate/http-loader', 'zone.js', ];...
teamsmiley's profile imageteamsmiley
2018-04-22 00:00
-
Angular dotnet core project Aot Fail
angular dotnet core project aot build시 실패 실패 만들기 angular 프로젝트에서 다음처럼 해보자. dotnet publish -c Release -o app 이상하게 다음 에러를 내면서 성공이 안된다 Module not found: Error: Can't resolve './../$$_gendir/ClientApp/app/app.browser.module.ngfactory' 다음처럼 npm을 하나 설치해주자 npm install enhanced-resolve@3.3.0 재도전 dotnet publish -c Release -o app 성공한다.
teamsmiley's profile imageteamsmiley
2018-04-07 00:00
-
google tag manager angularjs
Google Tag Manager 를 Angularjs 로 사용해보기 이걸 하게 되면 앞 두 포스트에서 복잡하게 하던걸 한방에 해결한다. Google tag manager에 가입한다. https://tagmanager.google.com 새계정 만들기 가입하고 관리자에 가서 새계정을 만든다. 컨테이너 만들기 이제 컨테이너를 하나 만든다. tag trigger 추가하기 만들고 나면 작업공간 메뉴» tag를 추가한다. 태그 구성에서 유니버설 애널리틱스를 선택하고 나면 추적 유형은 페이지뷰 구글 애널리스틱설정은 설정 변수 선택이라는 드롭박스가 나오는데 새 변수 선택하면된다. 기존에 애널리틱스에서 만들어둔 ua로 시작하느 번호를 넣어주면 된다. 이제 트리거를 만들어야한다. 모든...
teamsmiley's profile imageteamsmiley
2017-06-21 00:00
-
google analytics angularjs
Google Analytics 를 Angularjs 로 사용해보기 Google Analytic에 가입한다. https://analytics.google.com 코드 확인 관리 » 계정 » 속성 » 추적정보 » 추적 코드 클릭 <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-101368149-1', 'auto'); ga('send', 'pageview'); </script> 이런 비슷한 코드가 있다. 이걸 복사한다. index.html 수정 위에 코드를 앵귤러 앱에 index.html파일의 맨 마지막에 추가한다. 문제점 Angular는 처음한번 코드를 다운받고 내부적으로 화면을 수정하므로 이 코드가 실행이 되지 않는다. 해결책 app.js를 수정한다. app.run([... function (...) { ... $rootScope.$on("$viewContentLoaded", function (event) { $window.ga('send', 'pageview', {...
teamsmiley's profile imageteamsmiley
2017-06-21 00:00
-
Google Adwords Conversion(전환)설정 Angularjs
Google Adwords의 전환 측정 AngularJs 로 사용해보기 Google Analytic에 가입한다. https://adwords.google.com 메뉴 확인 도구 » 전환액션 클릭 » 전환 + 버튼을 눌러서 전환을 추가한다. » 웹사이트 » 이름을 적어넣고 나머지 옵션은 기본값으로 일단 저장한다. 만들어진 전환액션을 클릭해서 들어가보면 태그 설정 부분이 있다 이 코드를 가져오자. 전환을 하나 더 만들면 코드가 하나가 더 생긴다. <!-- Google Code for LogIn Conversion Page --> <script type="text/javascript"> /* <![CDATA[ */ var google_conversion_id = 1071463456; //<===== var google_conversion_language = "en_US"; var google_conversion_format = "1";...
teamsmiley's profile imageteamsmiley
2017-06-21 00:00
-
entity framework cheet sheet
Entity Framework Cheet sheet Guid를 id값으로 사용하려면 모델에서 다음처럼 생성 ... Id = c.Guid(nullable: false, identity: true, defaultValueSql: "newsequentialid()"), ... enum을 사용해서 모델링을 해도 된다. 기존데이터가 잇는데 컬럼을 추가시 널이 안되게 해야한다. 이런경우는 false를 하면 에러가 난다..추가하는 컬럼이 null이 되기 때문이다. 다음처럼 null을 허용한후 데이터를 넣고 난후 null을 허용하지 않으면된다. public override void Up() { AddColumn("dbo.Products", "Location", c => c.String(nullable: true, maxLength: 50)); Sql("UPDATE Products SET Location = 'core' WHERE(Location IS NULL)"); AlterColumn("dbo.Products", "Location", c...
teamsmiley's profile imageteamsmiley
2017-06-12 00:00
-
angular 2 pagination
angular 2 pagination 기본 코드 작성 ng g component pagination 코드를 가져와서 적당히 맞춘다음에 <nav *ngIf="totalItems > pageSize"> <ul class="pagination"> <li [class.disabled]="currentPage == 1"> <a (click)="previous()" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li [class.active]="currentPage == pageNumber" *ngFor="let pageNumber of pages" (click)="changePage(pageNumber)"> <a></a> </li> <li [class.disabled]="currentPage == pages.length"> <a (click)="next()" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> import { Component, Input, Output, EventEmitter,OnChanges } from '@angular/core'; @Component({ selector: 'pagination', templateUrl: './pagination.component.html', styleUrls: ['./pagination.component.css'] }) export class PaginationComponent...
teamsmiley's profile imageteamsmiley
2017-05-10 00:00
-
jenkins github 연동
Jenkins에서 Github 연동 - Windows repository 가져오기 별거 아닌거가지고 3일이나 삽질해서 스트레스 받음.. 일단 정리는 해두자. 작업전에 알아야할 것은 github에서는 외부에서 접속을 위해 ssh key를 사용한다. 그런데 CI 서버에 그걸 넣어서 사용하다보면 CI 서버에서 코드를 수정해서 커밋도 할수 있게 된다. 이것을 방지하기 위해 CI를 위해서 Deploy Key 를 제공한다. 이것은 코드를 가져만 올수 있다. 이걸 사용하자. jenkins server github desktop을 설치한다. ssh key를 만들자. C:\Program Files\Git\git-bash.exe ssh-keygen.exe -t rsa C:\Users\Administrator.ssh 폴더에 id_rsa id_rsa.pub 파일이 생성된다....
teamsmiley's profile imageteamsmiley
2017-05-07 00:00
-
tensorflow - 2 윈도우에서 1.0 설치
tensorflow 윈도우 에서 1.0 설치 TensorFlow 1.0 버전이 릴리즈되면서 이제 Windows에서도 docker를 이용하지 않고 바로 pip3를 통해 TensorFlow를 설치할 수 있게 되었다. python 3 설치 https://www.python.org/downloads/release/python-353/ 다운로드 한 뒤에 설치하면 된다. tensorflow 설치 Cpu pip3 install --upgrade tensorflow Gpu pip install --upgrade tensorflow-gpu 설치 확인 $ python >>> import tensorflow as tf >>> tf.__version__ '1.0.1' >>> hello = tf.constant("hello") >>> sess = tf.Session() >>> print(sess.run(hello)) b'hello >>> a = tf.constant(10) >>> b = tf.constant(32) >>>...
teamsmiley's profile imageteamsmiley
2017-03-16 00:00
-
시간을 잘쓰기위한 노력
시간을 잘쓰기위한 노력 – 2015/07/13 드라마를 끊자. 매일 1시간씩 독서를 하자. 시간표를 적어보자. sns naver등 의미없는 인터넷 서핑을 많이 하는듯. 줄여보자. 하루종일 부산하고 바쁘지만 무엇을 햇는지 모른다. 중요한 일과 안중요한 일을 구분하자. 하루 계획을 세워보자. 시간의 주인이 되어 살려고 노력하자. 멀티 태스킹은 지양하자. 선택 집중 실행 3가지 키워드를 명심하자. 항상 플래너를 펴두자. 항상 시간을 보자. 자기전에 tv를 켜두지 말자. 침대에 핸드폰을 가지고 드어가지 말자. 뭐할지 모를때, 방향을 못 잡을 때 관련 온라인 강좌를 들어라.
teamsmiley's profile imageteamsmiley
2017-03-15 00:00
-
2002년 아마존 회장의 이메일
2002년 아마존 회장의 이메일 Jeff Bezos 대략 정리하면 아마존의 모슨 서비스는 규격화된 인터페이스를 제공해야 하고, 이것을 외부에서 이용할 수 있도록 해야 한다. 우리 회사도 이래야겟다. In 2002, Jeff Bezos (CEO of Amazon), insisted that all Amazon services be built in a way that they couldeasily communicate with each other over Web protocol, and he issued a mandate requiring all teams to expose their data and functionality through services interfaces. This was his mandate: All teams...
teamsmiley's profile imageteamsmiley
2017-03-15 00:00
-
읽을거리들.
읽어야 할것들 정리 dotnet https://msdn.microsoft.com/en-us/library/ee658116.aspx - 프로그램 디자인 가이드 Data 레이어와 비지니스 레이어와 프리젠테이션 레이어로 구분되야하고..등등 번역해보면 좋을듯. Auth Server 관련 읽을거리 identityserver https://identityserver.io https://identityserver4.readthedocs.io/en/release/ https://damienbod.com/2016/02/14/authorization-policies-and-data-protection-with-identityserver4-in-asp-net-core/ OAuth2 https://auth0.com/ https://jwt.io/ Restful API http://language.is/163 Stateless Stateless 하다는 것은 서버가 어떠한 Client 의 Status 도 저장하지 않는다는 뜻입니다. 따라서 Client 는 매 요청마다 자신을 인증할 수 있는 Token 이나 Key 등을 Request 에 포함시켜 전송합니다. 만약 클라이언트의 요청이 Stateful 하다면 서버가 클라이언트의 현재 상태를 저장해야하고, 클라이언트의 상태는 해당...
teamsmiley's profile imageteamsmiley
2017-02-19 00:00
-
VS Code 단축키
VS Code 단축키 Editor Fold (Ctrl+Shift+[) Unfold (Ctrl+Shift+]) Fold All (Ctrl+K Ctrl+0) Unfold All (Ctrl+K Ctrl+J) 선택 (Ctrl+D) 전체 저장 (Ctrl+K S) Markdown markdown preview (Ctrl+Shift+V) markdown preview by side (Ctrl+K V) Tab UI Close All Window (Ctrl+W Ctrl+W) 문서이동 (Ctrl+Tab) Build (Ctrl+Shift+B) Find 메뉴 (Ctrl+F) 왼쪽메뉴 왼쪽 메뉴 닫기 (Ctrl+B) 왼쪽 메뉴 깃 (Ctrl+Shift+G) 왼쪽 메뉴 검색 (Ctrl+Shift+F) 왼쪽 메뉴 Explore Side (Ctrl+Shift+E) 왼쪽 메뉴 디버그 (Ctrl+Shift+D) 왼쪽 메뉴 플러그인 (Ctrl+Shift+X) 기타 Terminal (Ctrl+`)...
teamsmiley's profile imageteamsmiley
2017-02-19 00:00
-
Mock Object Unit Test
Mock Object Unit Test 인터페이스를 만들자. public interface IDiscountHelper { decimal ApplyDiscount(decimal totalParam); } 테스트할 클레스가 구현해야할 인터페이스이다. 동작해야할 코드의 조건은 다음과 같다 100불 이상이면 10% 할인 10-100불 사이면 5불 할인 0-10불 사이면 0불 할인 -면 에러 구현한 코드는 다음과 같다. namespace EssentialTools.Models { public class MinimumDiscountHelper : IDiscountHelper { public decimal ApplyDiscount(decimal totalParam) { throw new NotImplementedException(); } } } 실제 내부 구현은 안한다. 무조건 에러를 던진다. 일단 테스트 코드를 만들자 namespace EssentialTools.Tests {...
teamsmiley's profile imageteamsmiley
2017-02-17 01:00
-
tensorflow - 윈도우에서 docker로 설치
tensorflow 윈도우에서 사용 윈도우에서 docker로 진행하려고 한다. 윈도우 7 8 에서는 docker tools 로 진행 윈도우 10에서는 docker-for-windows로 진행하는게 좋다고 한다. 도커포윈도우 (https://docs.docker.com/docker-for-windows) 도커포윈도우는 최신 버전의 Hyper-V 프로그램을 사용 현재 없으면 제어판에서 설치해줘야함. docker-for-windows 설치 Hyper-v 설치 cmd 열어서 docker info 확인한다. powershell을 어드민 권한으로 연다 Set-ExecutionPolicy Unrestricted -> All Install-PackageProvider ContainerImage -Force 텐서 플로어 도커 실행 처음 실행시 없으면 다운받는다. docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow 잘안되면 이거 하기전에 https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/Update-ContainerHost/Update-ContainerHost.ps1 다운받아 저장후 powershell에서 실행한번...
teamsmiley's profile imageteamsmiley
2017-02-16 00:00
-
겸손 - 김희수
겸손 교만을 버리고 자신을 낮춘다. 진정으로 나를 낮추는 사람은 자기 자신을 버리는 사람이다. 나를 낮춘다는것은 마음속의 허여심을 없애는 것이다. 허영심의 뿌리는 남보다 우월해지고 싶은 욕심이다. 진정으로 나를 낮출수 있는 사람은 자긍심을 가진 사람이다. 자긍심은 지금 당장의 우월감이 아니라 미래의 꿈을 목표로 하는 마음이다. 미래의 꿈을 생각하며서 참고 용서한다. 농부가 여름 뙤약볕에서 잡초를 뽑는 것과도 같은 이치다. 우리는 태양이 우리 살을 태우는 건 참으면서 왜 주변 사람들이 주는 상처는 못참는 걸까? 농부가 가을날 황금빛으로 물들 들녁을...
teamsmiley's profile imageteamsmiley
2017-02-14 07:00
-
지난 3개월 플래너 정리후..기억에 남는 격언
함께 묶여 있어서 극복 할수 없는 많은 일들은 조금씩 떼어내서 처리할 수 있다. 너무 멀리 내다보는 것은 잘못이다. 운명의 사슬의 고리는 한번에 하나씩만 처리할수 있다. 인간의 복은 드물게 찾아오는 큰 행운이 아닌 매일 찾아오는 작은 이익에 의해 만들어진다. 당신이 가진것을 나누는 것은 당신이 가지는 것보다 더 중요하다.
teamsmiley's profile imageteamsmiley
2017-02-14 00:00
-
나를 바꾼 플랭클린 플래너를 읽고.
나를 바꾼 플랭클린 플래너를 읽고 8월중순부터 9월중순까지 약 한달간…긴 슬럼프에 빠져있엇다… 무기력해지…나태해지고….. 급기야는 지난주 주말에는 집에서 드라마만 약 40편을 본듯 하다… 그러다 ..이러면 안되겟다는 생각이 들어서 등산을 짧게 다녀왓다.. 머리가 복잡하면 몸을 움직이면 된다는 이야기를 들은적이 잇는거같아서.. 근데 마침 도움이 된거같다….. 올라가면서 내 자신의 모습을 돌아볼수잇는 시간이 되었다.. 사람은 자기 자신을 돌아보는 시간이 꼭 필요한거같다… 내인생의 주인이 내가 아니라… 근 한달동안은 게이름..귀찮음. 이들이 내인생을 가져가버린거같다… 갑자기 생각난다… 돈은 벌수 잇어도 시간은 벌수없다고…… 암튼 늦기전에 정신차리고자..플랭클린...
teamsmiley's profile imageteamsmiley
2017-02-14 00:00
-
게으른 백만 장자
게으른 백만 장자 차별 비용의 법칙 게으른 백만 장자는 돈이 돈을 벌게 한다. 시간은 당신의 것 마음것 써라! 멘토십의 법칙 게이른 백만장자는 뛰어난 스승에게 배운다. 일에 대해서 다시 생각해 보라 스나이퍼의 법칙 게이른 백만 장자는 원하는 만큼을 분명히 한다. 당신이 특정한 금액과 기간을 정햇다고 해서 그목표를 반드시 이룰수 있으리란 보장은 없다 하지만 목표를 정하는 것은 그것의 달성 여부와 관계없이 중요한 일이다. 목표를 세우면 목표가 없을때보다는 항상 좋은 결과를 얻을수 있기 때문이다. 게이른 백만 장자들은 힘들이지...
teamsmiley's profile imageteamsmiley
2017-02-14 00:00
-
작은 개발팀에서 꼭 해야할것들
내가생각하는 작은 개발팀이 해야할일 - ver. 0.1 꼭 소스 관리를 한다.. – svn 이나 git이나 어떤 툴을 사용하던 소스를 관리해야한다. 꼭 커밋시 커맨트를 달게 한다…- 툴에 관계없이 커밋시 커맨트를 달도록 강제해야한다. 꼭 티켓 시스템을 사용하자. – 에러나 버그를 전화로 받아서 업무처리하지말고 티켓시스템을 사용해야한다. 지라나 트랙등 샴페인을 너무 빨리 터트리지 말자. – 가끔보면 벤처이나 대기업처럼 일하는 중간관리자들이있다. 코드 리뷰는 항상 한다. 아키텍쳐를 항상 생각하고 미팅하며 진행한다. 개발 속도보다 유지보수를 더 고려하라… 프로그램 가이드 라인을 항상 확인...
teamsmiley's profile imageteamsmiley
2017-02-14 00:00
-
Code Style
Code Style (코드 규약) - ver. 0.1 최우선 목적 유지보수가 극단적으로 편한 프로그램을 만든다. 개발 기간이 극단적으로 줄어들수 있는 스택을 구성한다. 자동화에 의한 테스트를 이용해서 버그 발생을 방지한다. 중복된 코드가 극단적으로 없어야 한다. architecture should be independent of frameworks 프로젝트 기본 셋업 프로젝트 폴더에는 docs라는 폴더를 기본으로 만든다. 프로젝트와 관련된 문서파일들이 정리되야한다. 하위폴더로 개발일지라는 폴더를 하나 만든다. 마크다운 문서로 개발일지를 매번 작성한다. (개발일지-1.md) 개발자가 여러명이면 각자 폴더를 만든다. image를 넣어야 하므로 assets/images/폴더도 만든다. 개발일지를 쓰거나...
teamsmiley's profile imageteamsmiley
2017-02-10 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 9
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 9 2017/01/16일 월요일 6개월 정기점검. 병원에 도착 전부터 조금 기분이 업되있다..별일없어야할텐데 하며 …조금 이상한 기분이다. 드디어 점검 시작…위내시경을 간단하게 하면된다고 햇다. 위내시경을 끝난후 간호사가 조직검사를 했으니 돈을 내고 오라고 했다. 이게 왠말인가? 왜 조직검사를 한다는 말인가? 또 어디가 안 좋단 말인가? …불안감이 나를 덮쳐버렸다. Ct검사는 별 문제없이 진행됫고 결과는 일주일 뒤에 들으러 오라고 했다…월요일 검사였는데…또 일주일이다…잘 버텨야할건데… 미안하지만 형수에게 연락을 했다. 혹시 결과가 나오면 좀 빨리...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 8
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 8 2016/06/14일 수술후 지금까지 죽을 먹으면 잘린 위에 적응해나가려 노력하는 기간이었다. 조금 힘들어하는 그녀의 모습이 너무 안타깝게도 했고 이정도라도 크게 다행이다..싶기도 했고… 참 바쁜 이주였다. 이제 20일날 귀국을 앞두고 있다… 오늘은 드디어 의사선생님을 만나는 날이다. 채혈검사가 잇는줄 모르고 너무 늦게 병원에 왓다 . 덕분에 의사선생님 만나는 스케줄이 두시간 뒤로 밀렸다. 덕분에 병원 스카이 라운지에 가서 밥을 먹었다…그녀도 스프… 조금씩 나아져가는 그녀를 보며 오늘도 또 감사하고 있다…...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 7
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 7 2016/05/22일 일요일 병문안을 여기저기서 온다.. 고맙고 고맙다. 힘내서 얼른 낫자… 2016/05/23일 아침9시부터 위암 환자와 보호자를 위한 교육을 받았다.. 신경써야할 것들이 아주 많았다.. 하루종일 방귀가 안나와서 걱정이다. 방귀가 나와야 죽을 먹을수 있다는데… 24일은 퇴원날로 알고 있엇는데 방구가 안나오면 연기될수도 있음….. 그리도 수액도 다 빼고 진통제도 빼고 이제 혼자 주사선없이 걸어다닌다…. 많이 나아진거 같다. 드디어 오후에 방귀가 나온다… 기쁘다..이게 그리 기쁜건지 몰랐네… 그리고 의사선생님 회진시간. 조직검사가 나왔다는...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 6
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 6 2016/05/17일 드디어 입원을 했다. 1인실이 없어서 패밀리 특실로…좋네… 패밀리 특실에 인터넷이 유선으로만 들어와서 급히 태크노마트에 들려서 공유기를 사와서 병실에 사무실을 만들어 두고 …. 이것저것 간호사 의사선생님들이 이야기를 해준다. 다시한번 나의 조그마한 성공이 나만의 노력의 결과는 아니라는 사실을 알게된다. 많은 사람과 같이 살고있고 각자 모두들 조그마한 성공들이 합쳐져서 좋은 세상이 만들어진다… 처음 이병원에 올때는 의사선생님이 가까워질수록 불안감이 커졋었는데.. 최대치를 찍고 의사선생님을 만난후 마음이 많이 편해졌는데 이제...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 5
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 5 2016/05/03일 전주에서 올라가는 ktx에서는 지난번보다 마음이 한결 가벼웠다. 결과를 알고 가다 보니 진짜 많이 마음이 편해졌다…. 그러나 여전히 마음 한편이 무섭고 불편한 마음이 있는것도 사실이다. 긍정적인 생각을 하려고 한다…마구마구 하려고 한다… 병원에 도착하여 지난번 처럼 떨지도 않고 물품 보관소에 떡하니 짐을 넣고 바코드로 진료 등록을 하며 편한 마음으로 기다리고 있다. 이번 외과 선생님이 우리를 복강경으로 수술하실분인다.. 선생님을 만났다.. 기존 선생님들과 달리 이분은 딱딱하다..아마도 본인이 수술을...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 4
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 4 2016/04/28일 아침 일찍 눈이 떠져 빨리 준비를 하고 병원으로 향햇다…1시간 빨리간다고하는데 항상 정각에 가는건 뭔지 Ct를 찍으려고 대기중 미리 찍으신 환자분과 보호자를 보앗다 할머니가 보호자 였는데 연신 공손한 목소리로 고개를 90도를 숙이며 ct찍어주신분에게 고맙습니다 하는 것이다 그걸 보고 있다가 또 마구 눈물이 났다 아마도 할머니는 할아버지의 상태와 상관없이 그래도 이만하면 됐다 이만하길 다행이다 고맙다 이런 생각 이었을 것이다 어제 처음 의사선생님을 뵙고 무섭고 떨리는 마음으로...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 3
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 3 2016/04/27일 아침 9시 ktx로 병원으로 향햇다… 규리가 자고 있는데 일어나면 나오면서 울꺼같아 그냥 자고있을때 나와버렸다. 기차를 타고 가는 내내 기도했다. 아버지에게도 하느님에게도 부처님에게도 웃긴거같지만 누구든 부탁하고 싶어졌다. 이번에 현주가 낫던 안낫던 나는 아이를 하나 입양을 해서 공덕을 쌓을것이고 병원에 기부도 하겠다고 그들에게 약속했다. 병원이란곳이 복잡하더라…2시간전쯤 갔음에도 뭔 처리할게 많은지 이리가고 저리가고 어쩌면 그게 더 나았던것도 같다. 서류처리를 다 하고 의사선생님이오기만을 기다리며 30분정도 진료실 문앞에 앉아있는데...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 2
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 2 4/27일 아침 새벽 5시부터 잠이 안온다 어제 저녁..아이들을 재워두고 혼자 핸드폰으로 위암을 검색하며 눈물을 흘리는 그녀의 모습을 지울수가 없다. 해줄수 있는것도 없다….나란 참 무능력한 존재… 아무튼 이대로 접을수는없다. 생각대로 된단다…희망을 가져보자…오늘검사를 해봐야하지만 적어도 3-4기는 아닐거야 1-2기는 75%정도는 완치한다니까 힘내보자…힘내보자.. 자꾸 무섭고 겁나고.. 나도 그러는데 …본인은 어떨까? 아이들 생각에 눈물짓는 당신을 보고있으니 내 마음이 찢어지네요 . 못되게 한것만 생각하고 위암이 꼭 내 탓만 같고. 미안하오..사랑하오. 아직...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 1
내사랑 현주 - 암 이기는 기록. 해피 앤딩 - 1 2016/04/26일 귀국하려고 고흥에 갓다가 광주에 들렷다 전주를 오는 스케줄이다. 바로 서울로 이동 해야해서 조금 서둘렀다. 광주에서 어제 선생님을 만나서 술도 많이 먹고 와이프도 몇잔 먹었다… 올라오는 버스에서 처형의 문자를 받았다… 조직 검사 결과가 현주가 직접 들어야한다는 것이였다. 불길했다. 집에 오자마자 애들을 맡겨두고 같이 병원으로 갔다.. 화장실이 급해서 화장실에 있엇는데 송현주님 보호자를 애타게 찾았다. 불길했다. 가보니 현주가 날 보며 “나 암이래”한다… 갑자기 어떻게 해야할지 아무것도 생각이...
teamsmiley's profile imageteamsmiley
2017-01-20 00:00
-
C# Delegate - Event
C# Delegate - Event 기존 코드 비디오 인코드를 끝내고 완료 이메일을 보내라. 라는건데…이렇게 되잇음. public class Video { public string Title { get; set; } } public class Program { static void Main(string[] args) { var video = new Video() { Title = "Video 1 " }; var videoEncoder = new VideoEncoder(); //publisher var mailService = new MailService(); //subscriper videoEncoder.Encode(video); //만약에 여기에 5분 기다리라라는 코드가 있으면??? mailService.SendEmail(); } } public class MailService { public void...
teamsmiley's profile imageteamsmiley
2016-12-27 00:00
-
C# Delegate
C# Delegate 델리게이트는 함수 포인터 이다. 왜 사용하는가? - 확장이 쉽게 가능하게 하기위해 사용한다. 예를들면 버튼을 만들면 버튼이 클릭될때 동작하는 것을 정의를 해야한다. 어떻게 해야할가?버튼은 마이크로소프트에서 제공을 한다고하고 나는 내가 만든 로직을 버튼 누르면 실행하게하고 싶다..마소에서 자기들 코드를 고쳐주지 않는다. 그러므로 마소에는 델리게이트를 받게끔 코딩을 해두고 난 델리게이트를 만들어서 그걸 넘겨주면된다. 그러므로 확장성이 잇게 된다. 결론 - 함수를 전달함으로 어플리케이션의 확장성이 추가 된다. 기존 코드 public class Photo { public static Photo Load(string path) {...
teamsmiley's profile imageteamsmiley
2016-12-26 00:00
-
C# Generic
C# Generic 기존 리스트의 박싱, 언박싱의 문제를 해결하기 위해 도입 형태는 다음과 같음. public class GenericList<T> { public void Add(T value) { } public T this[int index] { get { throw new NotImplementedException(); } } } ** 일반적으로는 직접 만들어서 쓰는경우는 없고 List 등을 이용한다. ** 제너릭을 사용하면 박싱 언박싱이 필요없어진다. <> 이걸 사용하며 안쪽에 이름 어떤걸 넣어도 상관없다. 일반적으로 T로 (Type)을 사용한다. <>안에 넣는걸 형식 매개변수라고 한다. 형식 매개변수는 여러개여도 된다. public class GenericDictionary<TKey,...
teamsmiley's profile imageteamsmiley
2016-12-26 00:00
-
Automapper - 5 - Db Update 쉽게 하기
Automapper에서 데이터 베이스 업데이트 코드 샘플 기존 코드 public IHttpActionResult PutUser(UserViewModel vm) { //entity를 가져오고 var entity = _unitOfWork.Users.SingleOrDefault(i => i.UserName == vm.userName); //vm에서 값을 가져다 엔티티를 업데이트해준다. entity.AssignedNodeCnt = (int)vm.AssignedNodeCnt; entity.FileServerId = (int)vm.FileServerId; entity.NodeGroupId = (int)vm.NodeGroupId; entity.PaymentType = vm.PaymentType; entity.UnitPrice = (double)vm.UnitPrice; entity.UserPriority = (int)vm.UserPriority; entity.Location = vm.Location; //entity가 업데이트 되었으므로 complete만 하면된다. _unitOfWork.Complete(); } 수정후 코드 public IHttpActionResult PutUser(UserViewModel vm) { // entity 가져오기 var entity = _unitOfWork.Users.SingleOrDefault(i => i.UserName == vm.userName); //map...
teamsmiley's profile imageteamsmiley
2016-12-26 00:00
-
Automapper - 4 - Mapfrom Vs ResolveUsing
Automapper에서 Mapfrom Vs ResolveUsing AutoMapper에서 매핑하는 두가지 방법이 있다. ResolveUsing Mapper.CreateMap<SourceType, DestType>().ForMember(d => d.DestPropX, o => o.ResolveUsing(s => s.SourcePropY)); MapFrom Mapper.CreateMap<SourceType, DestType>().ForMember(d => d.DestPropX, o => o.MapFrom(s => s.SourcePropY)); 대부분의 경우에는 두개의 차이는 거의 없다. 특별한 경우 (오브젝트에 널이 있는경우 그리고 이런 객채의 리스트인 경우) 에는 고민해봐야할 부분이 있다. MapFrom은 null 체크를 한다. 예를 들면 ForMember(d => d.DestPropX, o => o.MapFrom(s => s.Person.Address.State)); 이런 코드에서 Person이나 Address 나 Status가 널일경우가 있다. 오토매퍼가 자동으로 Null Reference...
teamsmiley's profile imageteamsmiley
2016-12-23 00:00
-
AutoMapper - 3 - CustomValueResolver
AutoMapper - 3 - customvalueresolver 왜 사용하는가? - 도메인 객체와 viewmodel사이를 매핑해주기 위해서 사용한다. 중요한 것은 전체 어플리케이션에서 한번만 매핑관련 정보를 세팅하고 그걸 계속 사용한다는 것이다. public class DBEntity { public int Value1 { get; set; } public int Value2 { get; set; } } public class ViewModel { public int Total { get; set; } } 전체 프로그램에서 DBEntity를 ViewModel객체로 매핑시 total에 value1과 value2를 합쳐서 보여주고싶다. DBEntity => ViewModel로 매핑설정 cfg.CreateMap<DBEntity, ViewModel>() .ForMember(dest =>...
teamsmiley's profile imageteamsmiley
2016-12-23 00:00
-
AutoMapper -2 심화
AutoMapper - 2 왜 사용하는가? - 도메인 객체와 viewmodel사이를 매핑해주기 위해서 사용한다. 중요한 것은 전체 어플리케이션에서 한번만 매핑관련 정보를 세팅하고 그걸 계속 사용한다는 것이다. 기본 사용법 public class Invoice { public int Id { get; set; } public string UserName { get; set; } public DateTime? BillingDate { get; set; } public string Po { get; set; } public string PreBalance { get; set; } } public class InvoiceDetailViewModel { public int Id { get;...
teamsmiley's profile imageteamsmiley
2016-12-23 00:00
-
AutoMapper - 1 기본
AutoMapper -1 왜 사용하는가? - 도메인 객체와 viewmodel사이를 매핑해주기 위해서 사용한다. 중요한 것은 전체 어플리케이션에서 한번만 매핑관련 정보를 세팅하고 그걸 계속 사용한다는 것이다. AutoMapper 설치 nugget package manager 설치 Install-Package AutoMapper mvc프로젝트를 Global.asx에 정의해놓으면 전체 어플리케이션에 적용이 된다. webapi 는 Startup.cs 에 정의해두자. 기본 사용법 객체가 두개가 있다. 하나는 디비에 저장하기 위한 엔티티 객체 두번째는 화면에 뿌리기 위한 viewmodel public class Order { public int ID { get; set; } public string Name { get;...
teamsmiley's profile imageteamsmiley
2016-12-22 00:00
-
webapi version (namespace) 사용하기
web api 2 versioning with name space 참고 - http://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/WebApi/NamespaceControllerSelector/ReadMe.txt class를 NamespaceHttpControllerSelector 추가하자. ```cs using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Web.Http.Controllers; using System.Web.Http.Dispatcher; using System.Web.Http.Routing; namespace s3.api.App_Start { public class NamespaceHttpControllerSelector : IHttpControllerSelector { private const string NamespaceKey = “namespace”; private const string ControllerKey = “controller”; private readonly HttpConfiguration _configuration; private readonly Lazy<Dictionary<string, HttpControllerDescriptor>> _controllers; private readonly HashSet<string> _duplicates; public NamespaceHttpControllerSelector(HttpConfiguration config) { _configuration = config;...
teamsmiley's profile imageteamsmiley
2016-11-19 00:00
-
webapi 2 api key 사용하기
WEB API KEY 참고 - http://www.whoiskevinrich.com/adding-user-claims-via-api-keys-in-webapi-2 new project 컨트롤러를 만들자. //[Authorize] public class ValuesController : ApiController { // GET /values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } } 실행해보자. http://localhost:59486/values 값이 오는걸 확인하자. Authorize 주석 해제 후 다시 테스트 401을 확인하자. Add WebApi.AuthenticationFilter Package PM> Install-Package WebApi.AuthenticationFilter ApiKeyAuthenticationFilter를 만들자. using System.Linq; using System.Net; using System.Security.Claims; using System.Web.Http.Filters; using System.Web.Http.Results; using WebApi.AuthenticationFilter; namespace apikey.App_Start { public class ApiKeyAuthenticationFilter : AuthenticationFilterAttribute {...
teamsmiley's profile imageteamsmiley
2016-11-18 00:00
-
NodeJS Memo
NodeJS Memo - 공부하다 하나씩 추가로 적어보자. version version 4 es6 40% 지원 version 5 es6 80% 지원 version 6 es6 100% 지원 LTS 서포트 기간을 보니 이제 node 6를 사용해야할듯 https://github.com/nodejs/LTS npm (node package manager) npm install -save : package.json에 dependency에 저장 npm install -S : 위와 같음. npm install -save-dev : package.json에 devDependency에 저장 npm install -D : 위와 같음 npm install -g : 글로벌로 설치
teamsmiley's profile imageteamsmiley
2016-09-16 00:00
-
Last Lecture - Randy Pausch
Last Lecture Randy Pausch Tell the truth Apology i am sorry it was my fault how do i make right Wait and people will show their good side Showing gratitude Don’t complain , Just work harder
teamsmiley's profile imageteamsmiley
2016-09-14 00:00
-
Frisbyjs (Automate Rest Api Testing) - 7
Frisbyjs (Automate Rest Api Testing) - 7 : Jenkin jenkins 를 사용하여 테스트를 자동화 하자. jenkins 서버 설정 npm install -g jasmine-node 젠킨트에서 새로운 프로젝트를 만들자. 설정을 하자. 소스코드를 체크아웃한다. Build Triggers 트리거를 걸어보자 나는 6시간마다 한번씩 실행하게 했다. Build 빌드를 설정을 해야한다. 나는 윈도우서버에 젠킨스를 설정햇음로 window batch command를 사용해서 할 것이다. 각자 맞는 것으로 진행하면될듯 일단 npm을 설치해야한다. frisby등 개발시에 사용햇던 npm을 모두 설치해야하기 때문이다. 하나를 더 만들자. 그리고 위그림 처럼 설정한다. del은...
teamsmiley's profile imageteamsmiley
2016-09-01 00:00
-
Frisbyjs (Automate Rest Api Testing) - 6
Frisbyjs (Automate Rest Api Testing) - 6 frisbyjs – iis initial loading issue 테스트 사이트에 개발완료된 코드를 넣고 테스트를 해보려고 한다. 문제가 발생했다. 개발 iis이기 때문에 ..그리고 디플로이후 처음 리쿼스트를 요청하는거기 때문에 iis에서 로딩이 상당이 오래 걸린다. frisbyjs는 기본으로 1초 정도 기다리고 timeout exception 을 내버리는것 같다. 물론 모든 테스트에 .timeout(30000) 를 걸면된다. 테스트가 추가될때마다 적워줘야해서 쓸모없는 짓 같다. frisbyjs에 디폴트 timeout 을 늘려보려고 이것저것 찾아봣으니 잘 되지 않는다. 그래서 생각한 방법이 처음 테스트만 .timeout(30000)...
teamsmiley's profile imageteamsmiley
2016-09-01 00:00
-
Quartz Scheduler (.Net) - 2 Xml Scheduler Setting
Quartz Scheduler (.Net) - 2 Xml Scheduler Setting Xml Scheduler Setting [지난글]에서 스케줄러를 c# 코드로 추가해 보았다. 이번에는 xml로 스케줄러를 세팅을 해보자. web-api 기본 프로젝트를 만든다. Install-Package Quartz -Version 2.4.0 자동으로 관련 dll과 job_scheduling_data_2_0.xsd 를 프로젝트 디렉토리에 추가한다. 먼저 Global.asax 수정해보자. Application_Start 에 다음을 추가한다. protected void Application_Start() { var scheduler = new StdSchedulerFactory().GetScheduler(); scheduler.Start(); } web.config에 처럼 추가하자. <configSections> <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </configSections> <quartz> <add key="quartz.scheduler.instanceName" value="DefaultQuartzScheduler"/> <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>...
teamsmiley's profile imageteamsmiley
2016-08-31 00:00
-
Frisbyjs (Automate Rest Api Testing) - 5
Frisbyjs (Automate Rest Api Testing) - 5 서버에서 넘어온 값을 확인해 봐야 할 때가 있다. 서버에서 에러가 나야하고 그 에러메세지를 확인해야 할 경우가 있다. 신용카드를 포스트로 보내는 테스트인다. frisby.create('postUserPaymentMethods') .addHeader('Authorization', 'Bearer ' + token) .post(domain + '/paymentmethods', { "country":"1", "name":"asdf", "creditCardNumber":"234234", "type":"VISA", "cvv":"234", "expDateMonth":"02", "expDateYear":"2016", "address":"234234234", "city":"234", "state":"234", "zipcode":"234" }) .expectStatus(200) .toss(); 백앤드에서 에러가 나면서 400번을 자꾸 리턴을 한다. 에러를 찍어봐야 내용을 알수 있기 때문에 다음을 추가했다. .afterJSON(function (json){ console.log(json); }) 전체 코드는 다음과 같다....
teamsmiley's profile imageteamsmiley
2016-08-29 00:00
-
C# - Gmail Sender
C#으로 지메일 gmail 보내기 메세지를 만들어서 다음처럼 하면 간단하게 보낼수가 있다. using (SmtpClient client = new SmtpClient { EnableSsl = true, Host = "smtp.gmail.com", Port = 587, Credentials = new NetworkCredential("Your Id", "Your Pass") }) { MailAddress from = new MailAddress("FromEmailAddress","FromName",System.Text.Encoding.UTF8); MailAddress to = new MailAddress("ToEmailAddress"); MailMessage message = new MailMessage(from, to); message.Body = "This is a test e-mail message sent by an application. "; message.BodyEncoding = System.Text.Encoding.UTF8; message.Subject = "subject " ; message.SubjectEncoding =...
teamsmiley's profile imageteamsmiley
2016-08-29 00:00
-
IIS Express - Bad Request Error - VS 2015
IIS Bad Request Error VS 2015를 사용중 기존에 테스트하던 http://localhost:5555 를 아이피로 접근 실패 127.0.0.1:5555 도 접속이 안되고 192.168.100.100:5555 도 접속이 안된다. 여러군데를 검색해보앗지만 해결책이 정확하지 않아 삽질을 하다 해결했다. 아주 간단햇다. C:\Users\{UserName}\Documents\IISExpress\config\applicationhost.config 또는 ProjectFolder\.vs\applicationhost.config 두개의 파일을 확인해보자 . 둘중 하나에는 현재 사용하는 포트가 있을것이다. (나의 경우는 5555) 사용하는 포트로 검색해보면 다음같은 코드가 있을것이다. <binding protocol="http" bindingInformation="*:50823:localhost" /> 다음처럼 수정한다. <binding protocol="http" bindingInformation="*:50823:*" /> 이제 접속이 잘 된다. VS를 재시작후 다시 확인해보면 설정파일에 설정이 하나...
teamsmiley's profile imageteamsmiley
2016-08-23 00:00
-
Frisbyjs (Automate Rest Api Testing) - 4
Frisbyjs (Automate Rest Api Testing) - 4 실제 예제 2 api를 호출후 status 는 200이나 json결과가 리스트로 와야하는데 0개가 오면 에러 이런 걸 테스트해보려고 한다. 기존 코드 frisby.create('getjoblist') .get('http://yourapi.com/lists') .expectStatus(200) //http status를 200으로 기대함. .toss() 이코드는 상태값은 체크를 하나 리스트 갯수가 0개인것을 찾아내지 못한다. 아래처럼 변경해보자. 변경된 코드 frisby.create('getjoblist') .get('http://yourapi.com/lists') .expectStatus(200) //http status를 200으로 기대함. .afterJSON(function (json){ //console.log(json.length); expect(json.length > 0 ).toBe(true); }) .toss() frisby는 node.js와 jasmine.js를 이용하여 만들어 져있기 때문에 jasmine을 모두 사용할수 있다....
teamsmiley's profile imageteamsmiley
2016-08-23 00:00
-
Quartz Scheduler (.Net)- 1
Quartz Scheduler (.Net) - 1 restful api를 만드는데 특정 시간에 뭔가를 해줘야 하는 경우가 생겼다. 예를들면 오늘 서비스가 expired가 되서 status를 false로 바꿔야되는경우. 매 12시마다 오늘의 매출을 보는것… 등등 특정 시간에 웹사이트에 버튼을 눌러줘야하는경우 가 있는데 보통 이런것들은 다들 코딩을 어떻게 하는지 모르겟다. 내가 생각해볼수 있는 방법은 crontab 으로 shell을 돌린다. 웹사이트에 기능을 만들어 두고 특정 시간에 누른다. url을 특정 시간에 ie를 실행시켜 호출하도록 bat 파일을 만들고 윈도우 스케줄러를 이용하여 실행한다. 위 방법들이 지금까지 내가...
teamsmiley's profile imageteamsmiley
2016-08-22 00:00
-
Frisbyjs (Automate Rest Api Testing) - 3
Frisbyjs (Automate Rest Api Testing) - 3 실제 예제 로그인을 먼저 한후 bearer token을 가져와서 리스트를 가져오는 테스트 코드 var frisby = require('frisby'); var token =''; frisby.create('login') //로그인의 경우에는 일반적으로 컨텐트 타입을 'application/x-www-form-urlencoded'로 사용한다. .addHeader('Content-Type', 'application/x-www-form-urlencoded') .post('http://yourapi.com/token',{ 'grant_type':'password', 'username':'youruserid', 'password':'yourpassword' }) .inspectJSON() // response json 을 찍어보자. .inspectHeaders() // headers 를 찍어보자 .expectStatus(200) // 200번을 기대함...로그인성공을 기대함. .expectJSONTypes({ // json 타입을 확인하자..각자 맞는 타입인지 .. access_token: String, token_type: String, expires_in: Number, userName: String, // refresh_token:...
teamsmiley's profile imageteamsmiley
2016-08-22 00:00
-
Frisbyjs (Automate Rest Api Testing) - 2
Frisbyjs (Automate Rest Api Testing) - 2 Frisby.js API 추가 설명 4개의 그룹이 있다. Expectations Headers Inspectors Helpers 하나씩 살펴보자. Expectations expectStatus( code ) - HTTP Status code 가 code와 같은지 확인한다. expectHeader( key, content ) - 헤더에 키벨류가 잇는지 확인한다. expectHeaderContains ( key, content ) - 헤더에 키벨류가 있는지 확인 expectHeaderToMatch( key, patterm ) - 헤더에 패턴 매치되는것이 잇는지 확인 expectJSON( [path], json ) - json 값이 맞는지 확인 expectJSONTypes( [path], json ) -...
teamsmiley's profile imageteamsmiley
2016-08-22 00:00
-
Frisbyjs (Automate Rest Api Testing) - 1
Frisbyjs (Automate Rest Api Testing) - 1 Frisbyjs 기본 설명 현재 사이트를 api 백앤드와 앵귤러 spa로 만들고 있는데 코드 수정이 많다보니 잘 동작하던 api가 안되는등 문제가 많다. 고민을 하다가 api 테스트 툴을 이것저것 보다 가장 내마음에 드는 것을 찾았다. Frisbyjs http://frisbyjs.com/ 이다. 한글 문서가 하나도 없어서 나라도 만들어야한다고 생각하고 만들었음. 일단 node.js 와 NPM 은 미리 설치가 되있어야 한다. npm을 이용하여 Frisbyjs 를 설치해보자. Install Frisby cd /your/project/dirctory npm install –save-dev frisby 설치가 끝났다. 간단하다....
teamsmiley's profile imageteamsmiley
2016-08-22 00:00
-
VS Code Custom Snippets 추가
VS Code Snippets Mark Down 추가 VS Code 로 마크다운을 작성하다 보면 중간에 딱 걸리는 부분이 있다 image 를 넣으려면 어떻게 하지? macosx command key html 코드는 뭐지? 이런 부분을 snippets로 해결이 가능하다고 해서 해보려 한다. 일단 Code » Preference » User Snippets 를 실행한다. 어떤 언어를 쓸건지 물어본다. 나는 Markdown 을 선택한다. markdown.json 파일이 열린다. 다음 코드를 추가한다. "github_image": { "prefix": "imageurl", "body": [ "![](/assets/$1)" ], "description": "smiley_markdown" }, "command_key": { "prefix": "command_key", "body": [ "⌘"...
teamsmiley's profile imageteamsmiley
2016-08-15 00:00
-
VS Code Default Setting 변경
VS Code Default Setting 변경 VS Code를 실행후 메뉴 » Code » Preference » User Settings를 클릭하자. 단축키는 ⌘ + , 에티터 화면에서 default Setting과 setting.json이 보인다. Default.Setting는 수정이 안된다. 수정을 하고 싶은 부분이 잇으면 복사해서 setting.json 에 복사해 넣으면 된다. json 형태이므로 꼭 설정 끝에 ,로 구분하고 마지막 라인에는 ,를 빼줘야한다. 참고로 기본 파일은 다음경로에 있다. Windows %APPDATA%\Code\User\settings.json Mac ~/Library/Application Support/Code/User/settings.json Linux ~/.config/Code/User/settings.json 수정해 보자. 마우스 휠로 폰트 변경 "editor.mouseWheelZoom": true 저장후 확인해보자. VS Code를 재시작후 문서를...
teamsmiley's profile imageteamsmiley
2016-08-15 00:00
-
macosx에서 파일 확장자에 따른 기본 프로그램 변경
macosx에서 파일 확장자에 따른 기본 프로그램 변경 맥을 자주 사용해보려고 시도한지 2주 하나의 불편한점 이 발견됬다. 메모를 위해서 마크다운 파일을 작성하는데 마우스로 더블 클릭하면 항상 xcode가 실행된다. markdown을 위해서 vs code를 사용하기로 정햇으므로 매번 이걸 오른쪽 버튼을 눌러서 선택을 해줘야한다… 상당히 불편한 상태이다. 수정해보자. 원하는 파일확장자를 가진 파일을 선택후 오른쪽 버튼을 누르고 GetInfo를 선택한다. open with가 보일것이다. 이프로그램이 계속 실행이 된다. 프로그램을 수정해보자. 그러면 change all이 활성화 된다. 다시 확인하는 창이 뜨고 continue를 한다. 이제...
teamsmiley's profile imageteamsmiley
2016-08-15 00:00
-
IIS Web Deploy
iis를 구성요소와 같이 설치 한다. Server manager -> Roles -> WebServer (IIS) Logging Tools Request Monitor .Net Extensibility ASP.Net ISAPI Extensions ISAPI Filters, basic Authentication request filtering iis management console iis management scripts and tools Management Service. Web Platform Installer 설치 Web Platform Installer 5.0 최신 버전을 다운로드 받아 설치합니다. Web Deploy 3.6 for Hosting Servers 설치 Web Platform Install를 실행해서 Web Deploy 3.6 for Hosting Servers을 설치한다. 여러개의 참조프로젝트까지 다 설치가 된다. 관리자 서비스...
teamsmiley's profile imageteamsmiley
2016-08-12 00:00
-
Computer 초기 세팅하기
컴퓨터 초기 셋업 매번 컴퓨터를 셋업할때마다 시간이 오래 걸려 이번에는 적어보기로 했다. Macosx를 써보기로 했으므로 기준은 Macosx로 하고 pc는 visual studio 사용할때만 이용함으로 가상머신 ( fusion ) 을 이용하기로 했다. 다행이 fusion라이센스가 하나 있어서 그걸 사용한다. 맥에서 가능한건 전부 맥에서 하자. 맥에 설치 한것들 Fusion (Vmware) 한글 설치 AppStore에서 설치 wunderlist marked 2 monosnap slack kakaotalk xcode kindle eclise - eclpse.app 폴더를 Application폴더로 이동 lombok 설치 - 다운후 더블클릭으로 실행 Eclipse 메뉴에서 Window -> Preferences...
teamsmiley's profile imageteamsmiley
2016-08-12 00:00
-
Entity Framework Rename Column
Entity Framework Rename column Renderer 를 RendererName 으로 변경해보자. public string Renderer { get; set; } ==> public string RendererName { get; set; } Add-Migration RendererRename 다음 코드가 생성이 된다. public override void Up() { AddColumn("dbo.Jobs", "RendererName", c => c.String()); DropColumn("dbo.Jobs", "Renderer"); } public override void Down() { AddColumn("dbo.Jobs", "Renderer", c => c.String()); DropColumn("dbo.Jobs", "RendererName"); } update-database 해버리면 기존 데이터가 다 날라가 버린다. 그래서 중간에 한 줄을 추가한다. public override void Up() { AddColumn("dbo.Jobs", "RendererName",...
teamsmiley's profile imageteamsmiley
2016-08-11 00:00
-
엔티티 프레임워크 WHERE IN
entity framework 에서 where in 사용법 코드 리뷰를 하다보니 이상한 코드가 발견되었다. public IEnumerable<Job> GetAbleToKillingJob(List<int> jobIds) { List<Job> ableJob = new List<Job>(); foreach (var jobId in jobIds) { var temp = AAAContext.Jobs.SingleOrDefault(j => j.JobId.Equals(jobId)); ableJob.Add(temp); } ableJob = ableJob.Where(j => j.Status == (int)JobHelper.Status.JOB_PAUSE).ToList(); return ableJob; } list에 들어있는 id를 가지고 루프를 돌면서 가져온후에 다시 리스트에 담는다. 이 리스트를 리턴한다.. 수정을 해본 코드 public IEnumerable<Job> GetAbleToResumeJob(List<int> jobIds) { return AAAContext.Jobs .Where(j => jobIds.Contains(j.JobId)) .Where(j => j.Status...
teamsmiley's profile imageteamsmiley
2016-07-22 00:00
-
vs dark theme 붙여넣기 문제
개인적으로 프로그램을 하면서 동시에 기록하는걸 좋아한다. 구글 문서를 사용하면 이미지도 한꺼번에 넣을수 잇어서 메모장이나 마크다운에디터보다 좋아한다. 그런데 visual studio dark theme을 사용하면 복사하여 구글문서에 붙여넣기를 하면 다음처럼 보인다. 매번 노트패드에 복사해서 다시 복사하곤 했다. 귀찮아서 이번에 한번 찾아봤다. 내가 기존부터 사용해오고 있었던 Productivity Power Tools 2015 에 기능이 있다. https://visualstudiogallery.msdn.microsoft.com/34ebc6a2-2777-421d-8914-e29c1dfa7f5d 여기서 다운이 가능하고 vs 에서 검색해서 누겟으로 설치하면된다. 설치후 vs 재시작한다. 재시작후 tools » options으로 간다. 다음 메뉴를 찾는다. 다음처럼 설정을 바꾼다. Change EmitSpanClass : True...
teamsmiley's profile imageteamsmiley
2016-07-12 00:00
-
VS-Productivity-Power-Tools
Productivity Power Tools 2015 설치 https://visualstudiogallery.msdn.microsoft.com/34ebc6a2-2777-421d-8914-e29c1dfa7f5d 다운후 설치를 한다. vs 재시작후 프로젝트 로딩한다. remove and sort using 프로젝트에서 우클릭 power command » remove and sort using 을 선택한다. 전체 프로젝트를 검색해서 지워준다. 파일을 저장시 remove and sort using 자동 실행 Tools –> Options –> Productivity Power Tools –> PowerCommands –> Generals 파일을 저장할때마다 remove and sort using 을 실행한다. 파일 저장시 Format document 자동 실행 Format document on save를 활성화 하면 파일을 저장할때마다 포매팅을 한다. ctrl...
teamsmiley's profile imageteamsmiley
2016-07-12 00:00
-
블로그 이전
todo 블로그 이전
github-pages jekyll static-site-generator
teamsmiley's profile imageteamsmiley
2016-07-07 15:25
-
Visual-Studio에서-VI를-써보자
Visual-Studio에서-VI를-써보자 요즘 마우스를 사용하지않고 코딩하는것에 매진하고 있다. 그중 하나로 코딩시 vi를 사용해보려고 한다.. vsvim extension 설치 VIM emulation layer for Visual Studio 에서 설치한다. enable/disable enable/disable을 하고 싶으면 ctrl+shift+f12 이다. 가끔 이게 안되는경우에는 vs ==>tool==> option 에서 keyboard에 가서 초기화를 한번 시킨후 vsvim에 가서 Handle all with VsVim 을 클릭하고 OK 클릭 이후에 단축키를 확인해보자. 검색시 붙여넣기 사용 vsvim 은 / 로 검색을 할때 붙여넣기가 안되서 불편하다. 그럴때는 / 다음에 home키를 한번 누른후 ctrl +...
teamsmiley's profile imageteamsmiley
2016-06-23 00:00
-
Who Moved My Cheese?
Who Moved My Cheese? 누가 내 치즈를 옮겼을까? 이 우화는 변화를 보는 나의 시각을 완전히 뒤바꿔 놓았어 . 전혀 다른 시각으로 모든 일을 바라보고, 탄력적으로 대처 할 수 있는 방법을 강구하게 되었지. 그후에 모든것이 금세 좋아졌어. 사업과 인생 모두…. 생쥐들은 창고의 상황이 바뀌었기 때문에 그들 자신도 변하기로 결정. 꼬마 인간 – 누가 내 치즈를 옮겼을가? 생각함. 두려움 때문에 아무 것도 할 수 없었던 과거의 잘못을 반복하고 싶지 않았던 것이다. 변하지 않으면 살아남을 수 없다. 두려움을...
teamsmiley's profile imageteamsmiley
2016-03-24 19:12
-
크롬 윈도우 폰트 변경
크롬 윈도우 폰트를 변경해보자. 크롬을 열고 난후 https://chrome.google.com/webstore/search/Font%20Changer%20 fontchanger Font Changer with Google Web Fonts™ 설치하자. 이제 윈도우 폰트 폴더에 가서 malgun.ttf를 복사해다 바탕화면에 두자. C:\Windows\Fonts 크롬 익스텐션을 클릭하자. 글로벌 세팅을 한다. edit custom fonts choose file을 누르고 바탕화면에 복사해둔 폰트를 선택한다. save font를 하고 난후 다시 이화면에서 malgun폰트를 지정한다. done을 누르면 폰트가 바뀐다. 가끔 깨지는 사이트들이 있다..그때는 폰트 사용을 끄면 된다.
teamsmiley's profile imageteamsmiley
2016-01-22 04:16
-
Elmah - 1
elmah를 적용해보자. 설치한다. Web.conf가 자동으로 변경됨. 개발시는 이걸 보고 서버에서는 사용안할려면 <elmah> <security allowRemoteAccess="false"> </elmah> 이러면 된다..그런데 난 서버에서 나는 에러도 보고 싶다..(이메일로) 그러므로 true로 바구자. <elmah> <security allowRemoteAccess="true"> </elmh> 그럼 아무나 다 볼수가 있게 되버린다. 그러므로 특정 유저만 볼수있게 바꿔보자. appsetting에 잇는 다음 부분을 수정해야한다. <add key="elmah.mvc.allowedRoles" value="*"> <add key="elmah.mvc.allowedUsers" value="myusername"> myusername으로 세팅을 해서 내가 이 아이디로 로그인할때만 엘마를 볼수가 있다. 권한으로 처리해도 된다. 그런데 난 그냥 귀찮아서 유저이름만 처리 이 두개를 조절하면 권한과...
teamsmiley's profile imageteamsmiley
2014-08-20 04:16
-
마지막 수업
마지막 수업 죽음을 앞둔 카네기 멜론 대학 교수의 진짜 마지막 수업. 실화라서 그런지 더 감동적이다.다들 책사서 읽어 보면 좋을거같아요. 꿈을 꿀 수 있다면 이룰 수도 있다. - 월트 디즈니. 장벽이 거기 서 있는 것은 가로막기 위해서가 아니며, 그것은 우리가 얼마나 간절히 원하는지 보여줄 기회를 주기 위해 거기 서 있는 것이다. 랜디. 사람들이 너를 거만하다고 생각하는 것은 정말 안된일이야. 그렇게 되면 네 인생에서 이룰수 있는 것들이 한정되니까. 장벽은 절실하게 원하지 않는 사람들을 걸러 내려고 존재합니다. 장벽은...
teamsmiley's profile imageteamsmiley
2008-10-16 00:00
-
마시멜로 두번째 이야기
마시멜로 두번째 이야기 찰리가 마시멜로 길에서 방향을 바꾸었다면 그가 저지를 가장 큰 실수는 무엇일까? 오만 그러나 길을 읽은것은 아니다.잠시 잘못 들어섰을뿐. 여행할때 머릿속에 있는 한군데 목적지가 중요할까? 트렁크에 든 백장의 지도가 중요할까 처음으로 목표를 정하자.목적지를 알아야 도착할수잇다. 숲에서 큰곰과 정체를 알수없는 두려움 두가지를 동시에 만났는데 하나만 죽일수 있다면 어느쪽을 죽일것인가?? 두려움을 죽이자 두려움에 잡아 먹히기 전에 두려움을 물리치자. 두려움은 두려움 자체로 있을때 위협적일뿐 맞서고자 마음먹으면 무력한 실체가 된다. 신념과 행동중 무엇이더 중요할까 신념은 목적지며 행동은...
teamsmiley's profile imageteamsmiley
2008-09-24 21:33
-
마시멜로 이야기
마시멜로이야기 Every morning in Africa, a Gazelle wakes up. It knows it must run faster than the fastest lion or it will be killed. Every morning a Lion wakes up. It knows it must outrun the slowest Gazelle or it will starve to death. It doesn’t matter whether you are a Lion or a Gazelle. When the sun comes up, you’d better be running. 아프리카에서는 매일 아침 가젤이 잠에서 깬다. 가젤은 가장 빠른 사자보다 더...
teamsmiley's profile imageteamsmiley
2008-09-08 00:00