이 모든 단축키는 Mac OS X 10.5+을 기준으로 작성됐습니다. 
맥 특수문자 입력법 
command + control + Space

전 직장동료들로부터 IntelliJ가 좋다는 소리는 많이 들었지만, 이클립스에 익숙해져서 바꾸는 게 쉽지 않았다.
마치 쿼티 자판을 계속 사용하는 것처럼, 지속하면 평생 더 편한 도구를 못 쓸거 같아 이번 기회에 바꾸려고 한다.


Action 검색
젤 중요한 기능  - Thema변경 및 replace 등 위에 언급한걸 다 이걸로 가능 
$  ⇧(shift) +  ⌘(command) + a

위 명령어를 쳐서 "Enter action or option name”창이 뜨면, plugins을 입력


메인메소드 생성하고 실행
$ ⌃(command) + n 



main method만드는법 psvm을 누르고 enter!

 

sout는 system.out.println의 축약어 


Run을 할 때, 명령어 
$ ^(control) + ⇧(shift) + R

라인 copy하기
$ ⌘(command)+ d 

라인 delete하기 
$ ⌘(command)+ z 

라인합치기
$ ^(control) + ⇧(shift) + j



코드 라인 옮기기 
$ ⌥(option) + ⇧(shift) + 방향키

필요 argument보는 법
$ ⌘(command)+ p


함수내용보기
$ ⌥(option) + space
#클래스에 하면 전체 코드가 보임 ( html, javascript같은 정적파일도 가능 [community version이 아닐시 가능])


Doc 보기 ( 코드에서 아래키를 누르면 된다 )
$ F1

단어별 이동
$  ⌥(option) + 방향키

라인 맨 앞, 맨 뒤로 가기
$ fn + 방향키 

오류라인으로 가기
$ F2

검색
$ ⌘(command)+ f

텍스트 교체 
$ ⌘(command)+ r

프로젝트에서 텍스트 검색
$ ⌘(command)+ ⇧(shift)  + f


프로젝트에서 텍스트 교체 기능
$  ⌘(command)+ ⇧(shift)  + r



열었던 모든 파일을 볼 수 있음
#  ⌘(command) + e


import 자동완성 
$ ⌥(option) + ↩︎


자동완성
$  ^(control) + ⇧(shift)  + space


자동완성
$  ^(control) + ↩︎


상속시 추상 메소드 구현
$ ^(control) + i

변수 추출
$ ⌘(command) + ⌥(option) + V

파라미터 추출
$ ⌘(command) + ⌥(option) + P

메소드 추출
$ ⌘(command) + ⌥(option) + M

변수명 바꾸기 
$ ⇧(shift)  + F6

사용하지않는 import 다 제거 
$ ⌘(command) + ⌥(option) + O

아래처럼 optimize import on을 하면 자동화된다.


코드 정렬
$ ⌘(command) + ⌥(option) + L

디버그 기능


$ ^(control)  +⇧(shift)  + D


'etc > mac' 카테고리의 다른 글

맥에서 mariadb설치  (0) 2018.03.04
맥에서 윈도우 설치(VMWare Fusion )  (1) 2018.02.17
AppCleaner - 앱 깔끔하게 지우기  (0) 2018.02.16
맥에서 패키지관리(brew)  (0) 2018.02.10
요즘 관심 있는 분야가 웹, 빅데이터, 인프라, AI인데, 이 포스팅은 인프라 관련된 내용! 

보통 개발자가 개인 피시에서 개발을 하고, 개발한 소프트웨어를 운영서버에 올리게 된다.

개발서버와 운영서버는 환경이 다르기에, 개발서버에서 설치한 소프트웨어들을 운영서버에도 설치해줘야 하고, 코드에 문제가 있을 시 다시 배포해줘야 한다. 
위 작업들이 실제 개발을 할 때, 생각보다 많은 비용(시간)이 소요될 수가 있다. 

또한, 이러한 작업을 사람이 직접 여러 서버에 하다 보면, 실수가 발생하여 서버 간 환경이 조금씩 달라질 수 있다. 이를 snowflake 서버라고 한다.  눈송이를 보면 다 똑같은 모양처럼 느껴지지만 실제론 다들 조금씩 다르다. 
( 모든 서버에 똑같이 설치된 거 같지만, 실제론 약간씩 다르다 ) 



운영하는 입장에서  가장 껄끄러운 게 오래된 서버라고 한다. 조금씩 다른 서버에 ( snowflake서버 ) 무슨 문제가 일어날지 모르기 때문에 .. 


이래서 나온 게 phoenix서버 !  
피닉스 서버는 말 그대로 불사조! 다시 살아나는 서버 ( 말 그대로 서버를 아예 비우고, 다시 설치함 [Immutable Server] )

기업들은 이러한 작업들을 자동화(생산성 향상) 하는 방안들에 대해 고민을 하게 되었다. 
그래서 나온 게  Infrastructure as Code 수작업으로 해오던 인프라 구축이나 변경 작업을 코드로 자동화하는것. 이러한 작업으로 인프라에 반복성과 확장성을 부여한다. 
이러한 Tools로 나온 게 Ansible, Chief, puppet, Terraform, AWS Cloudformation

위와 같은 자동화 기술이 발전하면서 Immutable Infrastructure( 서버가 배포된 후에 수정되지 않는 인프라 )란 말도 같이 이슈도 떠올랐다. 

Immutable Infrastructure : 아예 인프라 구축이나 변경 작업을 모두 자동화하자! 

이런 것을 가능하게 해주는 도구가 여러 가지가 있다. 
먼저 개발 환경과 동일한 환경을 이미지로서 제공해주는 Docker와 이를 관리하기 위한 Kubernetes, Docker Swarm, Apache Mesos 등의 도구가 있다. 
( bare metal서버 환경은 안 변하고 이미지만 교체하여 컨테이너로 띄우기 때문에 snowflake서버 같은 문제를 피할 수 있음 )

또한, 개발자가 코드를 commit 하면 빌드, 테스트, 배포 과정을 UI로서 제공하고, 특정 step에서 문제 발생 시 committer에게 알려주는  CI/CD Pipeline 툴인 Jenkins와 Spinnaker도 있다. 
( 코드를 빌드 하면 테스트와 배포하는 과정을 자동화함으로써 비용을 절감 )

예) jenkins 화면



이러한 기술의 발전으로 Dev + Ops( 개발팀과 운영팀 사이의 소통, 협업을 강조하는 S/W 개발 방법론 ) 가 가능해졌고, 많은 기업들이 도입하고 있다. 
DevOps를 잘하고 있는 기업으로는 Netflix, Facebook 가 대표적으로 떠오르고 있다. 
빠른 배포 주기를 통해 더욱 효율적으로 작업하고 더 빠르게 혁신하며 기업과 고객을 대상으로 더 큰 가치를 제공할 수 있도록 돕는다.



'apps > docker' 카테고리의 다른 글

쿠버네티스란 무엇인가?  (0) 2018.08.18
도커란 무엇인가?  (0) 2018.08.04
flannel을 통한 pod간 통신  (2) 2018.07.03
도커에서 nodejs+mongodb 테스트  (0) 2018.07.01
kubernetes에서 gpu pod생성( nvidia-docker2 )  (2) 2018.05.30
오늘은 Apache Zookeeper에 관해 설명하고자한다.

주키퍼는 Apache 재단의 오픈소스 프로젝트 중 하나이다.

홈페이지를 보면  zookeeper: A Distributed Coordination Service for Distributed Applications
분산 어플리케이션을 위한 분산 협력 서비스라고 써있다. 

zookeeper의 뜻은 사육사란 뜻인데, Apache에서 다양한 프로젝트들을 보면 hadoop(코끼리), hive(꿀벌) 등 각 프로젝들이 동물로서 표현된다.
이러한 동물들을 관리해주는 사육사라고 생각하면 된다.
 zookeerper 이미지 : 




그럼 이제 좀 더 자세히 알아보자.

주키퍼의 설계 목표는 간단하고, 복제되고, 순서가 있고, 빠르다 .
자세한 내용은 위 링크를 참조하면 된다.

 설계 목표를 정리해보면, 주키퍼는 간단하게 설계되었다. 아래와 같은 그림의 형태로 계층형 네임스페이스를 가지고 데이터를 저장한다.
이때, 데이터를 메모리상에서 유지하여 높은 처리량과 낮은 지연률을 가능하게 하였다.

( 이 그림을 보면 계층형 구조로 된 것을 볼 수 있는데, 각 계층의 네임스페이스를 znode라고 한다 - 이곳에 데이터를 저장 가능하다  )

두번째,  아래 그림처럼 서버들끼리 연결되어 서로 데이터가 복제되는데, 주키퍼 서비스는 메모리와 영속적인 저장소에 트랜잭션 로그, 스냅샷을 유지한다.
( 영속적이란 말이 좀 이상한데, 별도의 지워지지않은 파일시스템 같은곳에 기록한다는 말 ) 
서버의 과반수가 살아있음 서비스를 유지할 수 있다. 


세번째, 주키퍼는 각 업데이트 순서를 기록하는데, 이 숫자는 주키퍼 트랜잭션에 쓰인다.  ( 이를 통해 동기화가 가능 ) 

네번째, 주키퍼는 읽는 작업에서 빠르다. 쓰는 작업보다 읽기에 적합하다. 
( 내 생각엔 쓰는건 위에서 복제를 통해 데이터를 공유하는 과정이 있어서 느린 듯싶다 ) 


주키퍼 구성요소인데, 쓰기 요청을 받음 브로드캐스트를 통해 연결된 서버들에게 데이터를 보내고 데이터베이스에 저장된다.
읽기 요청이 된, 그 데이터베이스에 요청을 보낸 후 응답을 받는다. 


주키퍼에 데이터를 저장할 때, ephemeral(하루살이) 모드를 설정 할 수 있는데, 이렇게 설정할 경우 znode 에 저장 된 데이터는 자동으로 읽고 쓰여지는 것을 막는다.
즉, 세션이 종료되면 데이터가 날라감 

또한, 주키퍼의 watch기능을 제공한다. znode에 watch을 set하면, 그 znode에 변화가 일어나면 trigger된다. 
( 실제, 지속적으로 상태를 감시 해야 되는 서비스 같은 경우 znode에 상태를 기록하고 읽는 식으로 구현할 수도있다 )  


지금까지 설명한 부분이 zookeeper의 핵심 내용들이다. 실제 zookeeper은 "분산 어플리케이션을 위한 분산 협력 서비스"라 설명되고 있지만, 분산 파일 시스템이라고 생각해도 무방할 거 같다.
보는것과 같이 간단하지만 분산 파일 시스템으로서 watch기능, 동기화 등 많은 기능을 제공하기에 사용하기 편리하고 유용할 것이다.

실제 kafka에서도 metadata부분을 zookeeper에 기록하는 식으로 구성을 해놨다. 분산된 노드에서, 공유 된 파일 시스템이 필요하면 zooekeeper을 고려하면 충분히 비용을 아낄 수 있을 거라 생각한다.
하지만 zookeeper는 light하게 쓰는 것을 권장한다. (개인적생각)  
데이터를 메모리에 올려놓아서 높은 처리량과 낮은 지연률을 자랑하지만, 큰 데이터를 기록하긴 안 좋은거같다.






+ Recent posts