(vi 명령어) 알아두면 유용한 set 명령어

|

vi 편집기 사용시 알아두면 좋을 set 명령어를 요약해 보았습니다.
자주 쓰는 명령어는 계정의 home 디렉토리에 “_vimrc” 라는 파일을 만들고 set 옵션 내용을 저장하면 vi편집기 실행시마다 자동으로 적용됩니다.

명령어 축약 설명
:set ignorecase :set ic 검색/치환시 대소문자를 구분하지 않습니다.
:set number :set nu 문서에 줄 번호를 보여줍니다.
:set showmatch :set sm 괄호 입력시 자동으로 대응되는 괄호를 표시해줍니다.
:set autoindent :set ai 자동으로 들여쓰기를 합니다.
:set hlsearch   검색한 단어를 하이라이팅 합니다.

(vi 명령어) 문자열 치환하기

|

세미콜론을 입력 후 아래 명령어를 통해 내용 치환이 가능합니다.

:[range]s/old/new/[option]

위 영역별 옵션은 아래와 같습니다.

range

커맨드 설명 예제
s 현재 행에서 치환 :s/old/new/
%s 모든 행에서 치환 :%s/old/new/
.,$s 현재부터 끝까지 치환 :.,$s/old/new/
D1,D2s D1 ~ D2행까지 치환 :10,20s/old/new/
-N,+Ms 현재 커서위치 기준으로 -N ~ +M행까지 치환 :-3,+5s/old/new/
g/pattern/s pattern에 해당하는 모든 행을 치환 :g/veryold/s/old/new/

old 영역은 정규표현식을 사용가능하며 new영역은 바뀔 내용을 씁니다.

old

vi에서 지원하는 old영역 정규표현식은 아래와 같습니다.
※ vim에서는 좀더 많은 정규표현식을 지원합니다.

표현식 기능 예제코드 변경케이스
. 문자 하나 :s/t.e/XXX/ the -> XXX
there -> XXXer
* 0개이상 문자 :s/t*e/XXX/ the -> XXX
test -> XXXst
^ 시작 :s/^The/XXX/ The test -> XXX test
test The -> test The
$ :s/$The/XXX/ The test -> The test
test The -> test XXX
\ escape 문자 :s/\[test\]/XXX/ [test] -> XXX
[] 대괄호 안의 문자중 하나 :s/[a-z]*1/XXX/ test1 -> XXX
\{n,m\} 문자 반복횟수가 n ~ m개인 가능한 많은 문자와 매칭
\{n,\} \{,m\} 과 같이도 사용 가능
:s/b\{2,3\}/x/g ababbabbba -> abaxxaxxxa
\{-n,m\} 문자 반복횟수가 n ~ m개인 가능한 적은 문자와 매칭
\{n,\} \{,m\} 과 같이도 사용 가능
:s/b\{2,3\}/x/g ababbabbba -> abaxxaxxxa
\(\) 괄호안의 패턴을 1~9까지 버퍼에 저장, new영역에서 사용 :s/\(aaa\)\(bbb\)/\2\1/ aaabbb -> bbbaaa
\<\> 문자의 앞뒤를 매칭 시킴 :s/\<The\>/XXX/ The There -> XXX There

\{n,m\}\{-n,m\}의 차이는 가능한 많이 / 가능한 적게 적용하는 것입니다.
예를 들어
x xx xxx xxxx xxxxx
와 같은 문장을 치환 하면 아래와 같습니다.
:s/x\{2,\}/y/ -> x y y y y
:s/x\{-2,\}/y/ -> x y yx yy yyx

new

new영역에서의 교체패턴은 아래와 같습니다.

표현식 기능 예제코드 변경케이스
\d \(\)로 지정된 d번째 버퍼를 사용 :s/\(aaa\)\(bbb\)/\2\1/ aaabbb -> bbbaaa
\ escape 문자 :s/test/\[test\]/ test -> [test]
& 찾기패턴 :s/test/_&_/ test -> test
~ 이전 교체패턴을 사용 :s/aaa/xxx/
:s/bbb/_~_/
aaabbb -> xxxbbb -> xxxxxx
\u 교체패턴의 첫문자를 대문자로 변경 :s/aaa/\ubbb/ aaa -> Bbb
\U 교체패턴의 모든문자를 대문자로 변경 :s/aaa/\ubbb/ aaa -> BBB
\l 교체패턴의 첫문자를 소문자로 변경 :s/AAA/\uBBB/ AAA -> bBB
\L 교체패턴의 모든문자를 대문자로 변경 :s/AAA/\uBBB/ AAA -> bbb

option

옵션 설명
g 한 줄 내의 모든 패턴 변경
i 대소문자 구분 안함
c 변경여부 확인

(vi 명령어) 라인번호(줄번호) 보기, 라인이동, 맨위/맨밑 이동

|

vi 편집기에서 라인을 자유롭게 이동하기 위한 몇 가지 커맨드들을 외워둡시다.

기능 커맨드
라인번호(줄번호) 보기 :set number
라인이동 숫자입력후 Shift + g
맨위 이동 gg
맨밑 이동 Shift + g, :$

라인보기

IFrame을 숨기는 방법

|

웹 작업시 내부적인 통신을 위해 iframe 숨겨서 사용하는 경우가 있습니다.
이 때 iframe은 보여선 안되기 때문에 width=0, height=0으로 설정하는데 그럴 경우 크롬에서 아래 그림과 같이 여백으로 떠버리는 경우가 있습니다.

iframe이 공백으로 보이는 현상

그래서 추가하는 방법이 style에 display:none;을 추가하게 되는데 이 역시 다른 브라우저에서 문제를 일으킬 소지가 있습니다.

The iframes used to load test requests all have style=”display:none”.
Firefox does not compute styles or perform certain other rendering tasks in elements that are display:none or are children of an element with display:none.
Therefore, there are numerous test failures that are false negatives because the behavior in question isn’t being triggered.
This problem can be easily resolved by using style=”visibility:hidden” instead.

display:none;으로 할 경우 iframe이 정상 로딩 되지 않을수 있다는 점인데, 이를 해결하기 위해 display:none; 대신 visibility:hidden;을 사용하면 됩니다.

iframe을 숨기기 위해 최종적으로 아래와 같은 방법으로 할 수 있습니다.

    iframe.setAttribute('style', 'height:0;width:0;border:0;border:none;visibility:hidden;');
    

Agile 방법론 정리

|

Agile 방법론에 관해 공부한 내용에 대해 정리한 문서입니다.

1. 배경

  • 소프트웨어 위기의 원인과 해결방안을 찾음
  • 변화하는 요구사항과 측정하기 힘든 작업량
  • 기술적인 해결책으로 객체지향 등장, 그리고 객체지향 개발을 하기 위한 적합한 개발 프로세스 필요

2. Waterfall의 문제점

  • 수행단계가 명확하게 나뉘어 있어, 앞선 파트가 끝나야만 다음 단계 실행가능
  • 요구사항에 맞게 개발되고 있는지 개발 후반부가 되어야 확인 가능함
  • 하위 단계 수행중 상위 단계(기획/요구사항등…)에서 수정될 경우 영향도가 매우 큼

    가장 큰 문제는 요구사항을 내는 고객도 실체가 보이기 전까진 완벽히 원하는 것을 내놓기 힘들다는 것입니다.

3. Agile 이란

Agile방법론의 기존 방법론과 가장 큰 차이점은 사상과 철학에 있습니다.

Agile 선언문

  • 공정과 도구보다 개인과 상호작용
  • 포괄적인 문서보다 작동하는 소프트웨어
  • 계약 협상보다 고객과의 협력
  • 계획을 따르기보다 변화에 대응하기를

어쩔수 없는 부분

고객의 요구사항은 바뀝니다.   
한번에 제대로 할 수 없습니다.   
개발 기간이 길수록 변경사항이 발생할 확률이 높습니다.   

해결 방안

짧은 개발기간으로 빠르게 실체를 만드며 지속적인 결과물을 전달합니다.
최대한 단순화 합니다.
고객과의 피드백/의사소통을 자주하여 바른 방향을 잡습니다.
개개인에게 동기부여하고 가장 효율을 낼 수 있는 환경을 만듭니다.
하나의 팀이 역활과 책임을 공유합니다.

4. Agile 종류

eXtreme Programming(XP)

명칭 설명
Whole Team 개발자외에 기획,고객,디자이너,테스터등 모든 사람을 팀원으로 구성합니다.
그 중 요구사항을 도출하는 고객이 가장 중요합니다.
Planning Game 이번 주기의 개발 범위를 결정하고 그 이후 개발 반복에서 무엇을 할것인가를 계획합니다.
Customer Test 의뢰인이 원했던 것과 다른지를 반복적으로 테스트 합니다.
짧은 주기별로 실체를 만들어 내기 때문에 가능.
Small Release 릴리즈 주기를 짧게 잡아 주기적으로 프로토타입을 제공합니다.

XP를 지키기 위한 기법으로는 아래와 같습니다.
출처 : 애자일 실천 사례 - XP편

  • 함께 앉기 : 커뮤니케이션 비용을 줄여줍니다.
  • 페어프로그래밍 : 특정 사람에게 의존성이 생기는 것을 방지합니다.
  • 사용자스토리 : 프로젝트에 참가하는 모든 사람이 이해하기 쉽습니다.
  • 주단위 계획 : 작업계획의 크기를 2~3주 단위로 구성합니다.
  • 휴식 : 집중력을 향상 시켜줍니다.
  • 지속적 통합(CI) : 나중에 한번에 통합했다가는 날벼락을 맞을수 있습니다.
  • 테스트 주도 프로그래밍(TDD)

Scrum

스크럼은 제품책임자(PO), 스크럼마스터(SM), 그 외 모든 팀원으로 구성됩니다.

PO SM
어떤 순서로 제품이 개발되어야 하는지 결정
팀 외부의 이해관계 당사자들의 피드백을 필터링
팀원들의 이슈를 듣고 해결하는 주체

스크럼은 아래와 같은 방식으로 진행됩니다.

순서 설명
제품 백로그 작성 사용자 스토리를 수집하여 제품 개발할 항목을 설정
스프린트 계획 미팅 제품 백로그중 이번 스프린트에서 개발할 항목을 정하고 공수산정
위 과정에서 스프린트 백로그가 생성됩니다.
1~4주 사이로 기간을 정하고 개발을 수행합니다.
스프린트 개발 진행 매일 스크럼 미팅을 통해 작업 계획및 이슈사항을 공유합니다.
번다운 차트를 통하여 개발 진척사항을 관리합니다.
스프린트 회고 이번 스프린트의 장단점을 도출하여 다음 스프린트에 반영합니다.
릴리즈 1~N개의 스프린트를 돌고 제품을 릴리즈 합니다.