1991년에 발표된 프로그래밍 언어입니다.

창시자는 '귀도 판 로썸(Guido van Rossum)' 이고 1989년 크리스마스 주에, 연구실이 닫혀있어서 심심한김에 만들었다고 합니다.

(참고자료 파이썬서문마이크로소프트의인터뷰)


또한 이 '파이썬' 이라는 이름은 창시자가 즐겨보던 영국의 6인조 코미디 그룹 몬티 파이선에서 따왔다고 합니다.

그리고 또한 많은 파이썬 교재에 변수 이름을 spam, eggs로 짓는 등 드립을 쳤다고 합니다.


# {}가 없다. 또한 듣여쓰기를 잘못하면 에러난다




# 특이한 if문
if 1 in [1,2,3,4]:
print ("1가 있습니다")




# for, while 에서도 사용할수 있는 else
for index in [1,2,3,4]:
print ("{0}가 있습니다".format(index))
else:
print ("루프가 정상적으로 작동하였습니다");




# 키워드 인수
def test (a='a', b='b', c='c'):
print ('a는 {0}, b는 {1}, c는 {2}'.format(a,b,c))

test(c='z');


Single Responsibility Principle (단일 책임 원칙)


    


    "a class should have only a single responsibility"

        -   한개의 클래스에는 하나의 책임만 있어야한다.




어떤 클래스를 변경해야 하는 이유는 오직 하나뿐 이어야 한다.


어떤 객체가 너무 많은 종류의 행동을 할 수 있다는 건

다른 객체가 변경 될 때 높은 확율로 같이 변경되어야 할 확률이 높아지고, 생각 못한 오류가 발생할 확율 또한 높아집니다.


가능한 하나의 책임, 또는 명확하게 관련이 있는 책임을 부여 함으로써

객체는 보다 명확해지고(Explicit), 표현이 가능해지고(Expressive), 느슨한 커플링(Loose Coupling), 높은 응집력(High Cohesion) 

을 얻게 된다고 합니다.




- 하나에 함수에 모든 기능을 넣은 예제코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
 
function contorl(path, value) {
  if (path === 'A') {
    location.replace(value);
  } else if (path === 'B') {
    alert(value);
  } else if (path === 'c') {
    localStorage.removeItem(value);
  }
}
 
 
 
cs




기능별로 함수를 분리한 예제코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
 
function movePage(path) {
  location.replace(path);
}
 
function alertMessage(message) {
  alert(message);
}
 
function removeStorage(key) {
  localStorage.removeItem(key);
}
 
 
 
cs




아래에 예제코드는 `DOM에서 버튼을 눌렀을시 로컬스토리지에 저장되어있는 아이디를 들고와 권한리스트에서 권한이 있는지 확인후, 권한이 있으면 페이지 이동, 없으면 메세지를 띄워주는 코드입니다. `


- 하나에 함수에 모든 기능을 넣은 예제코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
 
 
const userInfoList = [
  {
    lankCode : 'A',
    id       : 'user1'
  }, {
    lankCode : 'B',
    id       : 'user2'
  }
];
 
// DOM에서 버튼을 클릭했을 때 콜백함수
function onClickMovePage(path = 'main', accessLankCode = 'A') {
  let myInfoItem = localStorage.getItem('myInfoItem');
  myInfoItem     = JSON.parse(myInfoItem);
  
  let isAccessed = false;
  for (const userInfoItem of userInfoList) {
  if (userInfoItem.id === myInfoItem.id) {
     if (userInfoItem.lankCode === accessLankCode) {
       isAccessed = true;
     }

break;
}
  }
 
  if (isAccessed) {
    if (path === 'main') {
      location.replace('http://naver.com');
    } else if (path === 'sub') {
      location.replace('http://m.naver.com');
    }
  } else {
    alert('페이지에 접근 할 권한이 없습니다.');
  }
}
 
// 로컬 스토리지에 셋팅할 데이터
loginInfoItem = {
  id: 'user1',
  name:'HongGilDong'
};
localStorage.setItem('myInfoItem', JSON.stringify(loginInfoItem));
 
 
 
cs




- 기능별로 함수를 분리한 예제코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
 
 
const userInfoList = [
  {
    lankCode : 'A',
    id       : 'user1'
  }, {
    lankCode : 'B',
    id       : 'user2'
  }
]
 
// DOM에서 버튼을 클릭했을 때 콜백함수
function onClickMovePage(path = 'main', accessLankCode = 'A') {
  const myInfoItem = _getMyInfoItemByLocalStorage(); 
  
  if (isCheckedPageAccess(myInfoItem, accessLankCode)) {
    movePage(path);
  } else {
    const messageCode = 'Inaccessible';
    alertMessage(messageCode);
  }
}
 
// 로컬 스토리지에 저장한 `myInfoItem` 이라는 데이터를 가져온다.
function _getMyInfoItemByLocalStorage() {
  const myInfoItem = localStorage.getItem('myInfoItem');
  return JSON.parse(myInfoItem)
}
 
// 전역 변수에 저장한 `userInfolist` 의 id랑 `myInfoItem` 의 id가 같은 데이터를 가져온다.
function _getMyinfoItemByUserInfoList(myInfoItem) {
  for (const userInfoItem of userInfoList) {
    if (userInfoItem.id === myInfoItem.id) {
      return userInfoItem;
    }
  }
}
 
// 페이지에 이동할 권한이 있는지 확인
function isCheckedPageAccess(myInfoItem, accessLankCode) {
  const userInfoMyItem = _getMyinfoItemByUserInfoList(myInfoItem);
 
  if (userInfoMyItem.lankCode === accessLankCode) {
    return true;
  }
  return false;
}
 
// 페이지 이동
function movePage(path) {
  if (path === 'main') {
    location.replace('http://naver.com');
  } else if (path === 'sub') {
    location.replace('http://m.naver.com');
  }
}
 
// 알침창
function alertMessage(messageCode) {
  if (messageCode === 'Inaccessible') {
    alert('페이지에 접근 할 권한이 없습니다.');
  }
}
 
// 로컬 스토리지에 셋팅할 데이터
loginInfoItem = {
  id: 'user1',
  name:'HongGilDong'
};
localStorage.setItem('myInfoItem', JSON.stringify(loginInfoItem));
 
 
 
cs

[참고자료] SOLID 란?

'그외' 카테고리의 다른 글

객체지향 5대원칙 SOLID - SRP  (0) 2017.02.16

Jenkins를 설치하기 위해서는 우선 톰캣이 필요합니다.
이유는 Jenkins가 war파일로 배포하는 형식이기 때문입니다.

또한 이 톰캣을 설치하기 위해서는 자바가 필요합니다 ㅎㅎ;;;
이유는 바로 톰캣은 자바에 의존하는 프로그램이기 때문입니다.

그래서 저는, 우선 `자바`를 설치후 `톰캣`을 설치하고 `젠킨스`를 설치하도록 하겠습니다.



1. 자바(JAVA) 설치

자바도 설치하는 방법은 여러가지 있는거 같습니다만 저는 rpm 형식으로 된 파일을 다운받아 설치하도록 하겠습니다.
아래의 사이트에 들어가 rpm으로 제공하고 있는 자바(JAVA)를 다운받아 주세요.

1. http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 에 접속
2. `Accept License Agreement` 를 선택하신후 자신에게 맞는 product의 rpm파일을 다운로드
(저는 centos7 이라 Linux x64의 rpm 파일을 다운받았습니다.) 




3. 내려 받으신후 파일을 설치할 서버의 `/var/local` 로 옯깁니다.

(파일을 옮기는 방법 또한 여러가지가 있으나 저는 파일질라 라는 프로그램으로 서버에 접속하여 파일을 옮겼습니다.)




4. 터미널에 접속할수 있는 프로그램을 이용하여 서버에 접속후 다음의 명령어를 사용하여서 자바(JAVA)를 설치합니다.

(터미널관련 프로그램으로는 윈도우 같은 경우는 putty, xshell 같은데 있고, 맥일 경우에는 기본 터미널이 있습니다. 그외에

호스팅사에서 지원하는 웹 터미널도 있을수 있구요... 저는 맥 기본 터미널을 이용하여서 서버에 접속 하였다는 전제하에 설명을 이어나가겠습니다.)


 sudo  su


 시스템 권한을 주는 명령어 입니다.


 cd /var/local

 

 해당 경로로 이동하는 명령어 입니다.


 ls

 

 현재 위치에 있는 폴더 내용들을 보여주는 명령어 입니다.

 이걸 이용해서 폴더에 옮겨진 파일이 있는지 확인합니다.


 rpm -ivh {파일명.파일확장자}


 {파일명.파일확장자} 에는 자신이 다운받은 파일명, 확장자를 넣으면 됩니다.

 ex) rpm -ivh jdk-8u121-linux-x64.rpm


 java -version 

 
 자바(JAVA)가 잘 설치되었는지 버전 확인을 하는 명령어 입니다.




이로써 자바(JAVA) 설치를 완료하였습니다.



 

2. 톰캣(tomcat) 설치

톰캣또한 설치하는 방법은 여러가지 있습니다만 저는 아파치 톰캣 홈페이지에서 압축 형태의 파일을 다운받아 설치 하겠습니다.


1. http://tomcat.apache.org/download-80.cgi 에 접속

2. `Core` 목록에 있는 리스트중 `tar.gz` 를 다운로드

(참고로 제가 다운로드 할때에는 8.5.9가 최신 버전이었던걸로 기억합니다...)




3. 이번에도 자바(JAVA) 설치할때와 같이 내려 받은 파일을 설치할 서버의 `/var/local` 로 옯깁니다.




4. 터미널로 서버에 접속한후 아래와 같은 명령어를 사용하여서 톰캣을 설치합니다.


  sudo su 

 

 시스템 권한을 주는 명령어 입니다.


  cd /var/local

 

 해당 경로로 이동하는 명령어 입니다.


  tar -zxvf {파일명.파일확장자}

 

 압축된 파일을 풀어주는 명령어 입니다.

 {파일명.파일확장자} 에는 자신이 다운받은 파일명, 확장자를 넣으면 됩니다.

 ex) tar -zxvf apache-tomcat-8.5.9.tar.gz


  ls

 

 현재 위치에 있는 폴더 내용들을 보여주는 명령어 입니다.

 이걸 이용해서 압축이 잘 풀려 폴더가 생겼는지 확인합니다.


  cd {ls로 나온 폴더명 입력}

 

 해당 경로로 이동하는 명령어 입니다.

 ex) cd apache-tomcat-8.5.9


  bin/startup.sh

 

 톰캣 실행 명령어 입니다.

 아무런 설정없이 톰캣을 실행하게 되면 기본 포트인 8080으로 사이트가 

 열리게 됩니다. (또한 톰캣 종료 명령어는 bin/shutdown.sh 입니다.)



.

.

.



5. 모두 완료 하였다면 웹 브라우저로 http://서버IP:8080 으로 접속해 보셔서 아래와 같이 사진이 나온다면 설치를 완료하신겁니다.




3. 젠킨스(Jenkins) 설치

마지막으로 젠킨스 설치입니다.


1. https://jenkins.io/ 에 접속

2. `Download Jenkins`를 눌러 LTS Release 목록에 있는 war 형식의 파일을 다운로드




3. 요것도 위와 같이 내려 받은 파일을 설치할 서버의 `/var/local/{톰캣폴더}/webapps` 로 옮깁니다.




4. 터미널로 서버에 접속한후 아래와 같은 명령어를 사용하여서 젠킨스의 환경을 설정해 줍니다.



 cd


 

 터미널을 최상단 경로로 이동합니다. 


 

 export JENKINS_HOME=/var/jenkins


 

 젠킨스 환경설정을 하는 명령어 입니다.


 

 source ~/.bash_profile


 

 위에 설정한 환경설정을 저장하는 명령어 입니다.


 

 echo $JENKINS_HOME


 

 설정한 환경설정이 잘 되어있는지 확인하는 명령어 입니다. 


 

 /var/local/{톰캣파일명}/bin/shutdown.sh


 

 톰캣을 종료하는 명령어 입니다.


 

 /var/local/{톰캣파일명}/bin/startup.sh


 

 톰캣을 시작하는 명령어 입니다.



.

.

.



5. 모두 완료 하였다면 웹 브라우저로 http://서버IP:8080/jenkins 로 접근해 보시면 아래와 같은 화면이 나오면 됩니다.

빨강색으로 되어있는 부분을 (비밀번호 파일 저장 경로입니다.) 터미널로 이용하여 접근하면 비밀번호가 나오는데 그걸 복사해서 넣으시면 됩니다.



 vi /root/.jenkins/secrets/initialAdminPassword 


  vi 편집기로 해당 경로의 파일을 여는 명령어 입니다.




6. 이제부터는 계속 브라우저를 통해 설치하게 됩니다.

(왼쪽은 기본 플러그인들을 설치하고, 오른쪽은 자신이 선택하여서 플로그인들을 설치할 수 있습니다만 저는 기본 플로그인들을 설치하는 방향으로 가겠습니다.)




7. 플로그인들이 모두 설치가 될때까지 지달리시면 됩니다.




8. 플로그인들의 설치가 완료 됬다면 아래와 같이 마스터 계정을 생성하는 페이지가 나옵니다. 다 설정하여서 다음을 누르면 설치가 완료 됩니다.




9. 모두 설치가 완료되었다면 아래와 같은 페이지가 나오며 끝나게 됩니다.




4. 마무리

이것으로 젠킨스까지 설치가 완료되었는데요. 이대로 사용하셔도 문제는 없으나 그래도 보안 문제가 있음으로

몇가지를 설정해 주셔야 합니다. 그건 다음 글에서 이어가도록 하겠습니다.


+ Recent posts