비즈니스맨을 꾸며주는 아이템들

이 글은 크몽 재능인, nathan.ree님이 원고를 기고하셨습니다.

얼마 전 모 대사관 담당자와 업무적인 미팅을 가졌다. 약 30분 남짓 짧은 미팅자리에서 나의 눈길을 끈 것은 그녀의 패션이었는데 국가기관에 근무하는 사람으로서는 감히 시도하기 어려운 과감한 패션이 인상적이었다. 화려하고 굵은 꽃무늬 프린트에 에스닉한 굵은 동남아풍 반지, 그리고 패션디자인 회사에서나 볼법한 엄청난 굵기의 뿔테 안경과 귀가 떨어져나갈 것 같은 두꺼운 귀걸이, 그리고 징이 군데군데 박혀있는 높고 뾰족한 킬힐까지.. 미팅 말기에 슬쩍 그녀의 패션에 대해 ‘디자이너이신 줄 알았어요. 정말 멋지시네요’ 라고 칭찬 아닌 칭찬을 보냈다. 그러자 그녀는 내게 ‘굉장히 스탠다드한 포멀함을 지니셨다’ 며 이해하기 힘든 알쏭달쏭한 답변을 보내왔다. 어쨌든 그날 난 대화도중 계속 힐끔힐끔 그녀의 의상에 시선이 쏠려 업무적으로 무슨 이야기를 했는지 잘 메모하지 못했다.

이렇게 자신을 마음껏 표현할 수 있는 자유가 어느 정도 보장된 여성들에 비하여 남성들은 전통적으로 여성에 비해서 자신을 꾸밀 수 있는 아이템이 많지 않다. 물론 요즘 들어 자신의 외형을 위하여 성형수술을 감행하거나 패션에 지대한 공을 들이는 메트로 섹슈얼 (Metro sexual) 틱한 남성들이 많이 생겨나고 있지만 아직 나를 포함한 대다수의 남성들은 여성에 비하여 자신을 꾸밀 수 있는 아이템이 극히 드물다고 볼 수 있다. 외모가 경쟁력인 최첨단의 시대를 살면서 너무 내 자신에게 무심한 것이 아닌가라는 자조 섞인 푸념(?)도 늘어놓아 보지만 어쨌든 귀찮은 것은 귀찮은 거다. 인정할 것은 인정해야 하지 않을까?

남성들은 여성에 비해 현란한 화장을 할 수도 없고 화려한 귀금속으로 자신을 치장할 수도 없다. 알록달록 프린트가 들어간 옷은 비즈니스맨에겐 절대 금기시되는 옷들이며 심지어 유교문화권에 있는 우리나라는 귀를 뚫거나 염색한 남성조차 그다지 달가워하지 않는다. 나 역시 학창시절 반항 아닌 반항으로 어린 마음에 다양한 패션을 시도해 본 경험은 있지만 패션센스가 절대적으로 부족해서인지 내가 나 자신을 봤을 때 그다지 멋져 보이지 않아 좌절했던 웃지 못할 기억도 가지고 있다.

그런데.. 사회생활을 하면서 만난 수많은 남성들 중 아주 일부는 이런 천혜의 악조건들을 딛고 소품 몇 가지와 간단한 스타일링만으로 자기 자신을 아주 스타일리쉬하게 잘 표현해내기도 한다. 스타일리쉬한 비즈니스맨이 되기 위해 당신이 필요한 5가지 아이템을 적어본다.

5위. 멋진 수트 (중요도 ★★☆☆☆)

세계적인 팝스타이자 섹시심벌 마돈나는 ‘가장 섹시한 남성은 수트가 잘 어울리는 남자’ 라고 말했다. 그만큼 수트는 하루에도 수억 명이 입고 다니는 가장 대중적인 아이템이지만 어떤 수트를 어떻게 입느냐에 따라 비즈니스맨에게 날개를 달아줄 수 있는 아이템이다. 한국인의 경우 대부분 검은 색 수트를 선호하는 경향이 강하지만 내 개인적인 경험에 의하면 남색 계통(물론 본인에게 어울려야 함. 잘못 입으면 촌스러울 수 있음)의 수트도 상당히 고급스럽고 세련됨을 줄 수 있다.

백화점에서 로로 피아나나 브리오니 같은 수천만 원짜리 수트가 아니더라도 상관없다. 펑퍼짐하고 입은 지 오래되어 맨들맨들해진 수트만 아니면 된다. 자신의 체형에 가장 잘 어울리는 단정한 수트 한 벌은 사회생활에서 당신의 이미지를 깨끗하고 점잖은 사람으로 만들어주기에 충분하다. 물론 나이트 웨이터풍의 소위 은갈치 양복이라 불리는 밝은 회색 수트나 서양인에 비해 키가 작고 팔다리가 짧은 한국인의 체형상 체크무늬 수트는 가급적 지양하길.. 하지만 수트는 입는 사람을 그야말로 파격적으로 바꿔주지 못한다. 옷이 날개란 말도 있지만서도. 이게 수트가 5위인 이유다. 그리고 넥타이는 가급적 끈 넥타이는 피하기 바란다. 편하다는 이유 하나만으로 끈 넥타이를 선호하는 사람이 많은데 목 언저리에 덜렁덜렁 매달려 있는 넥타이 끈처럼 보기 흉한 것도 없다는 것이 내 생각이다.

4위. 고급스러운 손목시계 (중요도 ★★★☆☆)

회중시계가 아니다. 손목시계다. 남성 패션잡지에서 흔히 권장하는 만년필 이야기는 여기서 빼기로 한다. 그 이유는 대부분의 패션전문가들은 와이셔츠에 수십만 원짜리 몽블랑 만년필을 꼽고 다니는 것이 당신의 이미지를 한 번에 바꿔줄 수 있다고 조언한다. 하지만 내 생각은 다르다. 자칫 잘못하면 상대방에게 거만한 이미지를 줄 수 있고 건방지다는 생각마저 들 수도 있다. (실제로 그랬다. 수십억짜리 부자들도 그냥 플러스펜으로 서명하는 경우가 많다. 서명할 때 칼을 빼듯이 폼을 잡으며 몽블랑 빼 드는 사람치고 제대로 된 사람 보지 못했다)

seiko_watch

현재 내가 차고 있는 세이코 트랙실버,

가격은 10만원 후반대이며 이 정도면 내게는 충분하다.

자신의 경제사정에 가장 어울리는 고급스러운 손목시계를 하나 추천한다. (금색 시계는 주의할 것) 요즘은 시계 제조기술이 많이 발전했기 때문에 그리 높지 않은 가격에도 상당히 세련된 디자인의 시계들을 구매할 수 있다. 당신의 팔목에서 은은하게 빛나는 시계는 당신의 이미지를 한층 업그레이드 해 줄 수 있을 것이다. 아참, 가죽밴드는 비추한다. 여름에 땀이 차면 냄새가 나기 때문이다.

3위. 커프스 (중요도 ★★★☆☆)

살며시 드러난 수트 소매 끝간에서 반짝거리며 빛나는 커프스 단추만큼 고급스러운 디테일을 가지고 있는 물건이 또 있을까? 커프스는 아주 작은 투자만으로 당신이 대단히 예의 있고 세련된 사람이며 비즈니스에 있어 정중한 태도를 견지하고 있다는 느낌을 주기에 너무나 충분한 아이템이다. 커프스는 반드시 격식 있는 자리에서만 사용된다는 것은 편견이다. 얼마든지 자신의 수트를 더욱 업그레이드 시켜줄 수 있는 든든한 우군이 될 수 있다는 것이 내 생각이다.

2위. 멋스러운 안경 (중요도 ★★★★☆)

2위는 안경이다. 안경이야말로 가장 전통적이며 투박스러운 아이템일 수 있지만 안경을 어떻게 착용하느냐에 따라서 자신의 얼굴이 리디자인되는 놀라운 효과를 발휘하기도 한다. 흔히 안경이 잘 어울리는 사람을 안경미남이라고 하는데, 이토록 안경은 얼굴의 결점을 커버해주는 좋은 아이템이 된다.

참고로 안경은 뿔테, 은테, 무테 등 여러 가지 종류가 있을 수 있겠지만 개인적으로 비즈니스맨에게 잘 어울린다고 생각하는 안경의 형태는 바로 하금테이다. 하금테의 경우 내가 가장 선호하는 안경테이기도 하지만 일반적으로 수트에 가장 잘 어울리는 안경테로 알려져 있다. 두꺼운 뿔테나 세련된 은테도 물론 좋지만 일반적으로 하금테는 다양한 얼굴형태에 고루 잘 어울리는 세련된 안경이다.

phf_474a

내가 애용하는 폴휴먼 하금테 (PHF -474A)
가격은 10만원 초반대

1위. 세련된 헤어스타일 (중요도 ★★★★★)

앞에서 열거된 4가지 아이템이 바꿀 수 있는 사람의 인상은 매우 제한적이다. 하지만 헤어스타일의 경우 어떤 스타일을 가져가느냐에 따라서 완전히 다른 사람이 되어버린다. 이 것이 내가 단정하고 세련된 헤어스타일이 비즈니스맨의 인상을 바꿀 수 있는 가장 강력한 아이템이라고 꼽는 이유다. 만일 이 글을 읽는 이웃이 여성이라면 헤어스타일이 사람의 인상을 얼만큼 강력하게 변화시킬 수 있는지 공감할 수 있을 것이다. 몸이 1,000 냥이라면 간은 900냥이라는 모 제약회사의 CF 문구처럼 패션이 1,000냥 이라면 헤어스타일의 가치는 900 냥이다. 나머지는 그냥 부수적인 조건에 불과하다.

크몽 재능

원리금 균등분할 상환이라는 이름의 덫

이 글은 크몽 재능인, nathan.ree님이 원고를 기고하셨습니다.

약탈적 대출이라는 용어가 있다. 일반적으로 판단하는 약탈적 대출이란, 부족한 채무상환능력을 지닌 사람에게 빼앗을 자산 (담보, 급여압류) 을 보증케 하거나 또는 보증인을 정하는 방식으로 상환능력 이상의 돈을 빌려주는 것을 말한다. 특히 경기가 안 좋은 최근의 대출은 투자나 기타 구입비용 보다는 생계를 위한 대출이 대부분을 차지하고 있다고 해도 과언이 아닌지라 대출을 하면 할 수록 점점 소득대비 과도한 상환비율을 갚아나가야 하는 악순환을 거치게 되므로 대부분 약탈적 대출에 속한다.

소득이 없는 대학생에게 신용카드를 발급해주거나, 1금융권에서 대출이 어려운 서민들에게 말도 안 되는 과도한 이자율을 내세워 울며 겨자 먹기로 대출을 사용하게끔 만드는 2,3 금융권의 어이없는 행태 역시 약탈적 대출에 포함된다.

4년제 대학 졸업자의 40%가 졸업과 동시에 1,000 만원 이상의 빚을 지게 된다는 설문조사 결과 또한 현재 우리나라의 대출구조가 얼마나 소비자 보호와는 거리가 먼 지 알려주는 데이터다. 특히 2금융권에서 의무적으로 원리금균등분할상환방식을 채택하고 있는 것이 얼마나 무서운 것인가에 대해 논술하고자 한다.

원리금균등분할상환이란

상환초기 원금은 거의 상환되지 않고, 대부분 이자만 납부하게 되며, 대출 후기로 갈 수록 이자부담이 적어지면서 원금이 많이 상환되는 방식을 말한다.

예를 들어보자

신용등급이 6등급 이하로 안 좋은 편에 속하거나 기존 대출이 연 소득수준에 육박하는 경우, 국내 시중은행인 1금융권에서는 대출이 거의 불가능하다. 따라서 대부분의 대출 신청자들은 국내 저축은행 및 캐피탈권, 심지어 대부업체를 이용하게 되는데 여기서부터 두 가지 문제가 발생한다

  1. 평균 20% 이상의 살인적인 고금리 (심지어 30%대도 즐비하다, 현재 대한민국의 법정 최고금리는 39%)
  2. 원리금균등분할상환방식만을 선택할 수 있음
  3. 높은 조기상환 수수료 (평균 1%에서 많게는 4%까지)

해당 대출기관이 원리금균등분할상환방식만을 고집할 때 올 수 있는 가장 치명적인 덫은 대출자의 조기상환심리(여유자금이 생길 때마다 부담스러운 빚을 일찍 갚아버리기 위한 심리) 를 역이용하여 대출 초기에 이자를 많이 부담시킴으로써 해당 대출기관의 수익을 극대화시킨다는 점이다.

신용등급 6~7등급에 해당하는 대출자가 3,000 만원을 울며 겨자 먹기로 29.9% 금리 약정한 후 5년간 원리금 균등분할 상환시에 아래에 나와있는 일정대로 상환하게 된다.

:: 계산 결과

pyo1

pyo2

본 표에 나와있듯이 상환초기부터 무려 33개월까지는 납입해야 하는 이자가 원금보다 많다. 33개월이 지나면서 납입원금이 이자보다 겨우 많아지기 시작하는데 바로 여기서 문제가 발생한다. 현재 국내 가계대출자 1,200만명 중 평균 대출 납입완료 시점은 대출기간 중간 이전에 끝나는 경우가 70%에 육박할 정도로 많다 (금융연구원 자료, 2009)

그렇다면 원리금균등상환방식을 강제로 채택 당하고 있는 대부분의 상환자들은 대출 초기 여유자금이 생겨 돈을 갚으려 해도 생각보다 너무나 비싼 조기상환 수수료에 한 번 울고 상환방식의 특성상 중반까지 원금보다는 이자만 잔뜩 납부했기에 생각보다 엄청나게 남아있는 원금 때문에 또 한 번 울게 된다

게다가 현재 시중의 2금융권 대출기관 (저축은행, 캐피탈) 들은 원리금균등분할상환방식이 그 어떤 상환방식보다 이자를 덜 낼 수 있는 상환방법이라고 공공연하게 홍보마저 하고 있으니 이 것이 바로 약탈적 대출이 아니고서야 무엇일까?

사람이 살면서 갑자기 어려운 일이 생겨 돈을 필요로 하는 경우는 쉽게 찾아볼 수 있다. 지푸라기라도 잡고 싶은 대출자의 심리를 교묘하게 역이용하여 원리금균등분할상환방식만을 강요하여 조기 상환하려는 대출자에게 최대의 수익을 뽑아내는 금융권들은 지금이라도 정책을 수정하여 다양한 대출상환방식 중 대출자에게 유리한 방식을 본인 스스로 선택하게끔 해주어야 한다고 생각한다.

아울러 저렇게 살인적인 금리를 부과하는 이유 또한 소득수준을 넘어선 위험한 대출이기 때문이라는 은행의 리스크 관리 차원에서 비싼 금리를 부과할 수 밖에 없다는 말도 안 되는 명분 또한 당장 폐지하여 선진국처럼 2금융권 대출금리를 10% 중반대로 끌어내려야 한다고 생각한다. 그 것이 현재 말 못하고 가슴을 치며 매 달 금융기관의 이자놀음에 멍들어가는 수많은 서민들을 구하는 길이다.

크몽 재능

딜레마에 빠진 브랜드

이 글은 크몽 재능인, perot님이 원고를 기고하셨습니다.

우리는 늘 선택의 기로에 서 있다. 이번 주말에 어떤 영화를 볼 것인가에서부터 어디에 가서 뭘 먹을 건지, 그리고 어떤 옷을 살 것인지 등등…. 언제나 우리는 선택을 요구하는 삶 속에서 스트레스라면 스트레스라고 할 수 있는 긴장감 속에서 살고 있는 것이다. 하지만 이러한 선택이 단순한 삶의 한 부분에 있어서의 선택이 아닌 국가 운명을 좌우하는 선택이라고 하면 그 스트레스의 정도는 상상을 초월할 것이다. 간단한 예가 바로 핵무기의 사용 여부라고 할 수 있다. 아이러니하게도 냉전 시대 미국과 소련의 이러한 핵무기 사용에 대한 팽팽한 긴장감이 평화를 유지하는 데에 일조를 했다는 사실은 과연 평화란 무엇인가에 대해서 우리에게 시사하는 바가 크다.

국가의 운명을 좌우하는 선택이 먼 나라 이야기처럼 들린다면 조금 더 현실성이 있는 한 브랜드의 운명을 좌지우지할 수 있는 선택에 대해서 한 번 상상해 보자. 우리는 늘 브랜드를 어떻게 운영할 것인가에 대해서 고민하며 경영이라는 활동을 하고 있다. 이 브랜드를 다음 시즌에 확장을 할 것인가, 아니면 지금 현 상태를 계속 유지할 것인가, 이도 저도 아니면 이 브랜드를 죽이고 새로운 브랜드를 다시 런칭할 것인가 등등…. 이처럼 브랜드 경영에 있어서 선택의 강요는 국가 운명을 좌지우지할 만큼 큰 스트레스는 아니겠지만, 브랜드 하나로 먹고 살고 있는 브랜드에 관련된 수 많은 샐러리맨들에게 있어서는 자신의 밥그릇과 직결되기 때문에 어떻게 보면 보다 현실적인 스트레스를 주고 있음에 틀림이 없다.

그리고 브랜드 경영에 있어서 선택의 문제는 경쟁 브랜드의 선택의 문제와 함께 우리들이 흔히 말하는 딜레마에 빠지고 마는 안타까운 현실이 기다리고 있다. 죄수의 딜레마로 잘 알려진 선택의 문제에 있어서의 딜레마는 앞서 말한 냉전 시대에 예방 전쟁을 줄기차게 주장했던 게임이론의 창시자 존 폰 노이만에 의해 대중들에게 널리 알려 졌다. 존 폰 노이만이 주장한 예방 전쟁은 적국 소련이 먼저 핵무기로 미국, 더 나아가서 전세계를 초토화하기 전에 선제 공격으로 소련을 무력화 하자는 주장으로 그 당시 많은 극우주의자들의 지지를 받았다. 하지만 당시 소련 또한 미국의 선제 공격에 대비한 자구책을 마련하고 있었던 상황이었기 때문에 두 국가 모두 섣불리 핵무기로 선제 공격을 할 수 없는 상황이었다. 이런 아이러니한 상황이 세계 평화를 유지했던 것이다.

위의 미국과 소련의 상황은 딜레마에 빠져 있다고 할 수 있다. 적국의 핵무기 사용을 저지하기 위해서 계속해서 핵무기를 만들어야 하는 상황에서도 결국 이 핵무기를 섣불리 쓸 수 없는 선택의 딜레마 속에서, 이러지도 저러지도 못 하고 있는 것이다. 여기서 딜레마 조건이 하나 나온다. 바로 적국의 상황을 파악하고 있어야 한다는 것이다. 만약 미국이 소련의 핵무기 보유에 대한 정보가 없었다면 아마 선택의 딜레마 속에서 고민하는 일 없이 바로 선제 공격을 개시했을 것이다. 하지만 소련이 미국과 비슷한 핵무기를 보유하고 있는 것을 알고 있었기 때문에 섣불리 선제 공격을 하지 못했다. 결국 아래와 같은 상황에서 이러지도 저러지도 못 하는 딜레마에 빠져 버리게 된 것이다.

neuclear_war_dilema
[Table 1] 냉전 시대 미국과 소련의 핵공격에 대한 선택의 딜레마
상대국이 자국과 비슷한 위력의 핵무기를 보유하고 있으며, 선제 공격을 했을 경우 상대국이 반격하지 않을 가능성이 거의 없기 때문에 결국 공격을 안 할 수 밖에 없는 차선책을 택해야 하는 상황이 냉전 시대에 벌어졌다.

그럼 다시 브랜드 경영으로 돌아가 보자. 앞서 미국과 소련의 경우처럼 브랜드 경영에 있어서도 경쟁 브랜드의 가격이나 유통 등의 전략을 우리는 예전에 비해 더욱 빨리 알 수 있다. 이는 정보화 시대의 축복이자 브랜드 경영에 있어서 딜레마에 빠지게 만드는 저주라고 할 수 있는데, 경쟁 브랜드가 세일을 하면 우리도 같이 세일 전략을 펴고 경쟁 브랜드가 브랜드 확장을 하면 우리 또한 브랜드 확장을 통해서 서로를 견제한다. 하지만 이러한 브랜드 경영의 의사 결정 과정에서 과연 “우리는 이러한 선택이 올바른 것인가”에 대한 질문 이전에 “어떠한 선택을 할 것인가”를 먼저 강요 받는다. 최근 저가 화장품 시장의 상황을 살펴 보자. 기존 미샤와 더페이스샵을 선두로 저가 화장품 시장이 급부상하면서 업계 1위인 태평양의 입지가 위협받게 되었다. 게다가 업계 2위인 LG생활건강이 미샤에게 밀려나기 직전까지 몰리면서 태평양의 위기감은 더해 졌다.

cosmetic_price_war
[Table 2] 태평양의 저가 화장품 시장 진출에 대한 선택의 딜레마
태평양이 기존 가격 정책을 계속 유지한다면 저가 화장품 시장의 선도력이 상실될 것이며 저가 화장품 매장을 오픈하면 경쟁사와의 치열한 가격 경쟁이 예상되는 상황에서 태평양은 경쟁사와의 치열한 경쟁을 선택했다. 업계 1위의 힘을 보여 주려는 것인가?

결국 태평양은 위와 같은 선택의 딜레마에 빠지게 되었다. 이러한 선택에는 “선택이 옳다 그르다”를 떠나서 어떤 선택을 할 것이냐가 관건이다. “저가 화장품 매장을 낼 것이냐, 아니면 지금의 현재의 가격 정책을 고수할 것이냐” 중에서 선택하기를 강요당하는 상황에서, 태평양은 기존 휴플레이스의 저가 브랜드 매장인 휴영을 오픈하면서 결국 저가 시장의 치열한 경쟁을 예고했다. 사실 태평양의 선택은 딜레마의 상황이 아닐 수도 있다. 이미 경쟁사가 저가 시장 진출이라는 선택을 먼저 한 상황에서 태평양은 단지 그 상황에 맞게 대처를 했다고 할 수도 있기 때문이다. 하지만 태평양이 저가 시장에 진출하기로 결정하기까지 그 선택의 과정은 분명 딜레마였을 것이다.

그럼 조금 더 복잡한 상황에 대해서 알아 보자. 패션 브랜드에서 트렌드의 반영은 다음 시즌 브랜드의 생명을 좌우할 정도로 아주 중요한 선택의 문제다. 하지만 이미 시장에는 다음 시즌 트렌드가 다 나와 있다. 매년 해외 컬렉션 등을 통해서 발표된 다음 시즌 트렌드에 대한 반영 여부를 언제나 패션 브랜드는 고민하게 된다. 이번 시즌의 예를 보자. 이번 2005년 S/S 시즌은 그 어느 때보다도 많은 캐릭터 디자인이 난무했다. 복고와 키치의 트렌드를 대부분의 캐주얼 브랜드에서 반영했는데, 우리들이 어릴 때에 즐겨 봤던 만화 영화 주인공들이 티셔츠의 주인공으로 수없이 등장한 것이다. 베트맨에서부터 루니툰에 이르기까지…. 아래와 같은 선택의 기로에서 대부분의 캐주얼 브랜드들은 트렌드 반영을 통해서 만화 영화 캐릭터를 디자인 모티브로 사용했고, 소비자 입장에서 보면 이는 브랜드들의 담합으로 여겨진다.

brand_war
[Table 3] 패션 브랜드의 트렌드 반영에 대한 선택의 딜레마
대부분의 패션 브랜드들이 해외 컬렉션 등에서 발표한 트렌드를 반영함으로써 소비자의 입장에서는 이들이 담합한 것처럼 보인다. 가장 대표적인 예가 이번 시즌 캐주얼 브랜드들의 만화 영화 캐릭터 사용이다.

하지만 브랜드들의 담합이 말 그대로 효과가 있으면 다행이지만 소비자가 외면해 버린다면 이는 정말로 큰 문제가 아닐 수 없다. 이번 시즌이 바로 소비자가 외면한 시기인데, 매장에는 만화 영화 주인공 티셔츠들이 넘쳐 나는데, 정작 주요 상권에서는 이러한 티셔츠를 입은 사람들을 찾아 볼 수가 없는 것이다. 예전에 미니스커트 유행 이후 다시 미니스커트가 크게 유행할 것으로 예측해서 너도나도 미니스커트를 만들었는데(브랜드 담합), 결국 소비자들은 외면해서 크게 낭패를 봤던 그 상황이 다시 재현되고 있는 것이다.

brand_character_war
[Table 4] 만화 영화 캐릭터 디자인에 대한 소비자와 브랜드 사이의 선택
이번 시즌 캐주얼 브랜드들의 만화 영화 캐릭터 차용에 대한 담합은 철저히 소비자들의 외면을 받았다. 결국 대부분의 캐주얼 브랜드들이 매출 하락에 허덕이는 어려움을 겪게 되었다.

그럼 도대체 무엇이 문제였을까? 어차피 딜레마 속에서 선택을 강요 당하게 되는 브랜드 경영에서 트렌드 반영이라는 보다 안정적인 선택을 했음에도 불구하고 철저하게 소비자들의 외면을 당한 것은 왜일까? 사실 딜레마에서의 선택은 게임 참가자가 합리적이라는 가정하에서 차선책이 최선의 선택임을 유명한 경제학자 존 내쉬는 증명한 바 있다. 이를 내쉬 규형이라고 하는데, 앞서 미국과 소련의 딜레마에서 서로 공격을 안 하기로 한 점, 태평양이 기존 중고가 시장에서 구축한 브랜드 이미지 상쇄를 각오하고서라도 차선책으로 저가 화장품 시장에 뛰어 든 점, 그리고 마지막으로 캐주얼 브랜드들이 자신의 브랜드 색깔을 포기하고 트렌드 반영을 통해서 만화 영화 캐릭터를 사용한 점은 모두 게임 참가자들의 차선책으로 볼 수 있다. 하지만 결국 만화 영화 캐릭터 디자인에 대한 소비자들의 반응은 냉담했다.

바로 여기에 패션 브랜드들이 저지르는 아주 중대한 실수가 있다. 다음 시즌 트렌드에 대한 예측에 있어서 소비자들의 행동은 전혀 고려하지 않은 것이다. 단순하게 해외 컬렉션을 통해서 발표된 트렌드만을 가지고 이를 반영할 것인가 아니면 반영하지 않을 것인가에 대해서만 고민했지, 여기에 소비자라는 게임 참가자는 염두에 두지 않은 것이다. 앞서 예를 든 태평양의 경우는 저가 화장품 시장에 대한 소비자들의 반응이 폭발적이라는 것이 이미 증명된 상황이었다. 즉 브랜드들의 담합(저가 화장품 매장)이 소비자들에게 반응이 있었던 것이다. 하지만 캐주얼 브랜드들이 이번 시즌 만화 영화 캐릭터들에 대한 소비자들의 반응을 미리 예측했을까? 대부분의 브랜드들이 담합에 참가한 것을 보면 답은 “아니오”다. 아마 소비자들의 반응이 미비할 것을 미리 예측했다면 절대로 담합에 참가하지 않았을 것이다. 그러므로 패션 브랜드들의 트렌드 반영에 있어서 아래의 표처럼 소비자들을 게임 참가자로 참가시킨 선택의 문제를 해결해야 한다.

brand_customer_war
[Table 5] 다음 시즌 트렌드 반영에 앞서 소비자를 게임 참가자로 염두에 둔 선택의 과정
이러한 딜레마 속의 선택의 과정에서 내쉬의 균형점인 차선책을 찾는 것이 중요하며, 이를 위해서는 다음 시즌 소비자 행동에 대한 예측이 먼저 선행되어야 한다. 소비자 행동에 대한 예측은 직감에 의존하든 리서치에 의존하든 브랜드 매니저에게 있어서 아주 중요한 능력이다.

이처럼 소비자를 게임 참가자로 염두에 둔 선택의 문제가 먼저 해결이 되면 그 다음에 트렌드의 반영 정도를 해결하는 순서로 다음 시즌에 대한 브랜드 운영에 대해서 생각하는 것이 중요하다. 사실 딜레마에 빠진 선택의 문제에 있어서 그 누구도 최선의 선택을 할 수는 없다. 단지 최악의 결과를 피하는 것이 최선의 선택일 뿐이다. 경제학자 내쉬가 증명한 균형점이 차선을 선택하는 것에 있음이 이를 잘 말해 준다. 하지만 브랜드 경영에 있어서 기존 의사 결정 과정을 거꾸로 해 보면 최선의 차선을 찾아내는 것은 그다지 어렵지가 않다. 바로 여기에 딜레마에 빠진 브랜드를 구하는 딜레마 경영의 핵심이 있는 것이다.

크몽 재능

 

수트 무비(Suit Movie)

이 글은 크몽 재능인, perot님이 원고를 기고하셨습니다.

사무엘 L.잭슨 주연의 영화 ‘샤프트(Shaft, 1999)’에서는 한 악당이 주인공 샤프트를 밀치는 장면이 나온다. 이때 기분이 나빠진 샤프트가 소리치는 한 마디!

“내 아르마니에 함부로 손대지 마!”

그렇다. 그가 입은 옷은 구겐하임 미술관에 상당한 기부금을 내고 전시 공간 대부분을 자신의 작품(?)들로 채워 넣은 아르마니의 것이었다.

  • 깔끔한 수트,
  • 빳빳한 와이셔츠의 칼라,
  • 은은한 컬러의 넥타이,
  • 자켓 소매 사이로 간간히 보이는 반짝이는 커프스 링크…

영화 속의 남자 주인공들과 주변 인물들이 이러한 모습을 하고 등장하는 경우가 종종 있다. 남자 영화, OO 느와르 등으로 불리면서, 다소 딱딱하면서도 차가운 분위기가 전반적인 영화의 이미지로 각인되는 것들이다. 물론 이 외에도 다양한 장르 속에서 이런 모습의 남자 주인공과 주변 인물들이 다양한 모습으로 나타나고 있다. 이처럼 깔끔한 수트 차림의 주인공과 주변 인물들이 영화 속의 스토리를 이끌어 나가는 영화 장르를 수트 무비(Suit Movie)라는 하나의 또 다른 장르로 분류해서 보면, 수트 무비가 가지고 있는 특징들이 몇 가지 있다는 것을 알 수 있다.

 

수트 무비, 남성미를 찬양하다!

수트 무비는 남성적인 미가 가장 잘 표현되어 있는 장르다. 수트라는 의상 자체가 남성의 미를 가장 아름답게 표현할 수 있는 아이템이기도 하거니와, 영화의 내용 또한 남성미를 부각시키는 과정을 그리고 있는 경우가 대부분이기 때문이다. 가장 대표적인 수트 무비라고 할 수 있는 말론 브란도와 알 파치노 주연의 영화 “대부(Mario Puzo’s The Godfather, 1972)” 시리즈에서 보여주는 남성들의 여러 모습들은 여성 못지않게 남성 또한 아름다워질 수 있다는 것을 잘 말해 준다.

미국에 대부가 있다면 아시아에서는 바로 홍콩 느와르라고 불리는 주윤발표 액션 영화가 있었다. 블랙 코디네이션에 선글라스, 그리고 이쑤시개를 물고 있는 홍콩 느와르에 표현된 주윤발은 남성미에 대한 찬양을 넘어, 폭력 미학에 대한 논란까지 불러 일으키면서 수트 무비란 이런 것이다라는 것을 잘 말해 주었다. 이러한 홍콩 느와르는 마이클 만 감독의 영화 “히트(Heat, 1995)”로 이어져, 선악의 대결 구도에서 보여지는 남성미를 극도의 차가움으로 표현하는 데에 크게 일조했다.

국내에서는 조폭 영화에서 주로 수트 무비 스타일이 다루어지고 있지만, 헐리우드나 홍콩은 수트 무비 스타일을 통해서, 수트 무비이기 때문에 가능한 시나리오와 아름다운 남성에 대한 다양한 영상미들로 가득 채우면서 관객들의 가슴을 설레게 하고 있다. 그리고 바로 수트 무비의 남성미에 대한 찬양의 중심에는 많은 디자이너가 서 있다. 수트 무비는 남성복 디자이너의 수트 아이템을 가장 아름답게 표현할 수 있는 가장 남성적인 매체이기 때문이다.

수트 무비, 디자이너를 만나다!

서두에 예를 든 영화 샤프트가 아니더라도 많은 수트 무비에는 디자이너의 수트들이 등장한다. 화려한 캐스팅이 압권인 영화 “언터처블(The Untouchable, 1987)”은 디자이너 아르마니가 최고의 전성기를 누릴 수 있게 만든 수트 무비의 대표작이다. 깔끔한 수트와 트렌치 코드, 그리고 우수에 젖은 듯한 눈빛으로 악과 대결하는 주인공들의 모습에서 수트 무비 스타일은 극에 달했으며, 그와 함께 아르마니의 수트 또한 크게 빛났다.

untouchables
[Figure 1] 영화 언터처블의 포스터
깔끔한 아르마니의 수트가 크게 돋보인 영화. 이는 곧 아르마니가 세계적으로 큰 명성을 얻으며 전성기를 누리게 되는 가장 큰 요인이 되었다.

이처럼 수트 무비는 스타일에 있어서 차별화되는 요소가 거의 없는 남성복 디자이너의 수트 아이템에 미묘한 이미지를 부각시키는 효과적인 역할을 한다. 그러므로 아르마니의 성공 이후 많은 남성복 디자이너들이 헐리우드에 러브콜을 외치면서 수트 무비의 남성미를 자신의 수트 아이템에 부여하려는 노력을 쉬지 않고 있다. 수트 무비 속에 그려진 남성미의 이미지가 곧 디자이너 브랜드의 이미지에 각인되기 때문이다. 그리고 수트 무비에서 남성미의 아름다운 선을 잘 표현할 수 있는 디자이너의 수트가 필수적인 영화 소품이 되면서, 수트 무비와 디자이너 수트는 상호 보완적인 길을 걷게 된다.

수트 무비, 배우를 만들다!

수트 무비와 디자이너가 이처럼 필연적인 관계를 갖게 되면서 진정한 남성미를 가진 배우의 존재가 점점 부각되기 시작했다. 대부의 알 파치노와 007시리즈의 숀 코네리 등이 1대 수트 무비 배우라면, 오션스 일레븐(Ocean’s Eleven, 2001)의 조지 클루니와 브래드 피트는 2대 수트 무비 배우라고 할 수 있다. 이들은 수트 차림이 너무나도 잘 어울리며, 수트를 통해서 남성미를 가장 잘 표현할 수 있는 배우들이다. 수트 무비가 가진 남성미를 극대화하는 영상과 디자이너의 수트, 그리고 이 수트가 잘 어울리는 배우의 만남은 바로 진정한 수트 무비를 만들어 내고 있는 것이다.

수트 무비의 중심에 선 배우들은 그 시대의 가장 닮고 싶은 남성상에 자신의 이름이 거론되는 것을 즐기면서 진정한 남성미에 대한 표본이 되어 간다. 스타일리시(Stylish)라는 말이 잘 어울리는 배우가 되며, 섹시(Sexy)한 남성, 깔끔하고 세련된 이미지 등을 가진 배우라는 평가를 받으며, 수트 무비의 진화와 함께 배우 또한 진화하게 되는 것이다. 이처럼 수트 무비는 그 시대의 가장 남자다운 배우를 만들어 나가면서 그 기준을 제시하고, 메트로섹슈얼(Mertosexual)이라는 미명하에 점점 양성화되어 가고 있는 성에 대한 모호한 구분의 추세 속에서도 진정한 남성의 아름다움을 보여 주면서 남성을 지켜 주는 역할을 하고 있다.

수트 무비는 진화한다!

snatch
[Figure 2] 영화 스내치의 등장 인물
유머러스한 시나리오와 다양한 색감의 브리티시 룩이 돋보이는 스타일이 특징인 가이 리치 감독의 영화 스내치는 수트 무비의 진화된 모습을 잘 보여 준다.

예전의 수트 무비는 깔끔한 블랙 수트에 선글라스, 차가운 영상과 우수에 젖은 듯한 눈빛, 그리고 폭력 등이 주요 키워드였다면, 최근에는 그 트렌드가 다소 변하고 있다. 가이 리치 감독의 “록 스탁 앤 투 스모킹 배럴즈(Lock, Stock and Two Smoking Barrels, 1999)”와 “스내치(Snatch, 2001)”에서 보여지는 브리티시 룩(British Look)의 다양한 컬러감과 소재감이 특징인 수트와 덥수룩한 수염, 유머러스한 미소와 눈빛, 오션스 일레븐과 같은 다소 부담이 덜한 시나리오 등이 최근 수트 무비의 큰 트렌드라고 할 수 있다.

그리고 이러한 수트 무비의 진화와 함께 많은 남성복 디자이너의 수트 또한 브리티시 룩을 반영한 스타일이 많아지고 있으며, 그 시대의 남성상을 대표하는 배우의 기준 또한 수트가 잘 어울리면서도 유머러스하고 여유를 가진 인물로 변하고 있다. 영화 “나를 책임져, 알피(Alfie, 2004)”에서 깔끔한 수트를 입고 많은 여성들과 유머러스한 잡담을 나누면서 분위기를 이끌어 가는 주드 로가 바로 그러한 인물이다. (벌써 주드 로는 세계에서 가장 섹시한 남자 1위에 등극했다!) 이처럼 수트 무비는 점점 진화하면서 이 시대의 가장 세련된 스타일과 가장 남성다운 미를 한 발 앞서서 뭇 남성들에게 새로운 미에 대한 기준을 말해 주고 있는 것이다.

알피

[Figure 3] 영화 나를 책임져, 알피의 포스터
현재 주드 로는 수트 무비의 가장 진화된 모습을 보여 주는 배우이며, 세계에서 가장 섹시한 남자이다.

 

한국형 수트 무비를 말한다!

한국의 영화 산업은 아주 급속도로 발전해 왔다. 영화 “쉬리(1998)”의 흥행 이후, 기적과도 같은 관객 동원 1,000만을 돌파한 “실미도(2003)”, “태극기 휘날리며(2003)” 등까지 정말로 쉬지 않고 달려 왔다. 그러는 과정에서 이런 저런 많은 장르적인 시도와 한국 영화만의 독특한 색깔 찾기가 있었지만, 수트 무비에서는 그다지 큰 진화의 모습은 보여 주지 않고 있는 것 같다.

초기에는 주로 조폭 스타일이 수트 무비에 반영되면서 폭력물의 대표적인 스타일로 자리잡기 시작하더니, 그 후 학원 폭력물에 조폭 스타일이 더해 지면서 전혀 엉뚱한 길로 나가고 있는 듯 한 느낌을 주고 있다. 바로 “두사부일체(2001)”가 그 대표작이라고 할 수 있다. 이러한 수트 무비의 성숙하지 못 한 모습은 한국의 남성미에 대한 모멸감을 느끼게 해 주는 것이며, 한국 영화의 발전에 있어서도 큰 방해 요소가 아닌가 하는 생각이다.
그때 그사람

[Figure 4] 영화 그 때 그 사람들의 포스터
늘 같은 모습만 보여 주었던 한국의 대표적인 수트 무비 배우 한석규가 이번 영화 “그 때 그 사람들(2005년 2월 개봉 예정작)에서는 좀 더 진화된 모습으로 한국형 수트 무비의 가능성을 보여 주었으면 하는 바람이다..

사실 수트 무비는 그 시대의 남성상을 상징적으로 표현할 수 있는 문화의 집합체이다. 그러므로 헐리우드의 수트 무비는 바로 세계의 남성미를 하나의 서구화된 기준으로 묶어 가고 있는 남성 문화의 중심이라고 볼 수 있다. 우리는 헐리우드의 수트 무비를 접하면서 주인공의 직업, 주인공의 옷, 주인공의 행동 하나하나까지 동경하고 닮아 가기 위해 노력한다. 그리고 점점 서구의 남성미에 대한 기준에 동화되어 간다. 이는 결코 바람직한 현상이 아니다. 우리는 우리 나름대로의 남성미를 가지고 있으며, 또한 이를 지켜야 할 의무가 있다.

한국형 수트 무비의 존재는 한국적인 남성미가 존재하며, 남성의 아름다운 선을 살릴 수 있는 남성복 디자이너가 존재하며, 남성 문화의 정체성을 가지고 있다는 것을 의미한다. 그리고 앞으로 한국이 가질 수 있는 세계적인 경쟁력이 바이오 산업과 영화로 대표되는 문화 산업임을 봤을 때, 한국형 수트 무비의 존재는 반드시 필요한 장르라고 할 수 있다. 이는 곧 한국적인 남성 문화를 지키는 길이기 때문이다.

크몽 재능

 

 

워드프레스(WordPress)로 나만의 블로그 만들기

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

이제 막 블로그(blog)를 시작하려고 마음 먹었다면, 워드프레스 블로그를 사용하기를 권한다. 물론 네이버 블로그, 다음 티스토리 블로그도 상당히 좋다. 하지만 워드프레스 블로그가 제공하는 다양한 기능을 활용하면 홈페이지 수준의 블로그를 쉽게 만들 수 있다. 또한 유료 테마를 구매하면, 정말이지 맛깔나는 나만의 블로그를 구축할 수 있다.

블로그 만들기

워드프레스 사이트에 회원가입한 후, My Blog 페이지에서 블로그를 생성한다.

Screen Shot 2014-03-24 at 9.18.13 PM

블로그의 URL과 블로그 타이틀을 입력한다.

Screen Shot 2014-03-24 at 9.19.29 PM

Privacy(정보보호)

내 블로그의 컨텐츠를 어디까지 공유할지 설정할 수 있다.

  • viewable by everyone(모두 공유)
    블로그에 올린 모든 컨텐츠를 공유한다.
  • viewable by everyone, but to block search engines(모두 공유, 검색 제외)
    블로그에 올린 모든 컨텐츠를 공유하지만, 검색엔진의 접근은 허용하지 않는다.
  • private(개인)
    컨텐츠에 대한 외부 접근을 모두 허용하지 않는다.

워드프레스 라이센스(WordPress License)

워드프레스 블로그는 무료로 만들 수 있지만, 총 3가지의 라이센스를 제공한다.

  • Beginner
    무료이며, 워드프레스 블로그를 처음 시작한다면 Beginner로 무난하게 만들 수 있다.
  • Premium
    1년에 99달러이며, eCommerce와 Premium Themes 기능을 제외하면 대다수의 기능을 사용할 수 있다.
  • Business
    1년에 299달러로, 모든 기능을 사용할 수 있으며 용량에도 제한이 없다.

일단 무료 라이센스인 Beginner로 시작해보자.

워드프레스 관리

블로그를 만들고 나면, 이제 블로그의 세부사항을 설정할 수 있다. 블로그 관리(Manage My Blogs) 페이지로 접속해보자.

Screen Shot 2014-03-24 at 9.32.26 PM

블로그 관리에는 왼쪽에 총 12개의 메뉴가 제공된다.

  • Dashboard
    블로그 사용 통계를 확인할 수 있다. 페이지뷰(Page View), 클릭 카운트(Click Count) 등 블로그 운영과 관련한 통계지표를 확인한다.
  • Store
    워드프레스에서 제공하는 유료 기능(테마, 라이센스 등)을 구매할 수 있다.
  • Posts
    블로그에 쓴 글을 관리하거나, 새로운 글을 등록할 수 있다.
  • Media
    이미지, 동영상 등 블로그 글에 삽입할 컨텐츠를 관리할 수 있다.
  • Links
  • Pages
    블로그에 게시할 정적인 웹 페이지를 만들 수 있다.
  • Comments
    블로그에 등록된 댓글을 관리할 수 있다.
  • Feedback
  • Appearance
    블로그 테마를 바꾸거나, 위젯 등을 추가할 수 있다.
  • Users
    네이버 블로그, 티스토리 블로그와는 달리 워드프레스 블로그에는 다른 사용자들이 회원가입을 할 수 있다.
  • Tools
    블로그 글을 일괄 입력(import) 또는 출력(export)할 수 있다.
  • Settings
    블로그의 전반적인 설정을 할 수 있다.

블로그 테마 바꾸기

Appearance > Themes 메뉴를 선택하면, 사용할 수 있는 다양한 테마가 제공된다. 무료 테마인 Sorbet을 찾아서, Activate 버튼을 클릭한다.

Screen Shot 2014-03-24 at 9.45.18 PM

이처럼 몇차례의 클릭만으로 아래와 같이 깔끔한 나만의 블로그를 금방 만들 수 있다.

Screen Shot 2014-03-24 at 9.50.57 PM

 

이 외에도 워드프레스에서 제공하는 기능이 너무 많다. 따라서 시작할 때 너무 많은 설정을 하기보다는, 블로그 글을 하나 둘씩 써나가면서 필요한 부분을 적용하는 편이 낫다.

크몽 재능

도메인 특화 언어(DSL) 관점에서 바라본 CSS 프리프로세서(Preprocessor)

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

dsl_book_face

작년에 마틴 파울러님이 쓴 “DSL, 고객과 함께 하는 도메인 특화 언어(인사이트 출판사)”를 번역을 했었다.

첫 번역 작업이니만큼 쉽지는 않았지만, 많은 것들을 배울 수 있었다. 책이 출판되고 나서야 실제 적용 사례에 관심을 갖기 시작했는데, 적용사례가 생각보다 많지 않았던 것 같다.

요즘에는 트위터 부트스트랩(Bootstrap)을 배우는 중인데, 알맞은 사례를 찾을 수 있어서 관련 내용을 써보려고 한다. 사실 이미 책에서 소개되었던 내용이었는데, 너무 게을러서 찾아보지 못했었다.

CSS는 DSL이다.

“DSL, 고객과 함께 하는 도메인 특화 언어”의 10장, “Zoo of DSLs”에서 CSS를 DSL의 사례로 들었다. CSS가 DSL인 이유로 아래의 특징을 들었다.

  • CSS는 도메인 전문가가 읽을 뿐만 아니라, 도메인 전문가가 직접 작성하기도 한다.
    CSS를 작성하는 사람은 자신을 프로그래머가 아닌 웹 디자이너로 본다. 다시 말해 CSS에서 도메인 전문가는 웹 디자이너다.
  • CSS는 선언적 컴퓨팅 모델을 가진다.
    범용 프로그래밍 언어가 “이것을 해라,그리고 나서 저것을 해라”라는 식으로 명령형 모델을 가지는 것과는 달리, CSS는 선언적이다.
  • CSS는 특정 도메인에 특화된 언어다.
    웹 생태계에서 CSS는 HTML 요소에 대한 스타일을 적용하기 위해서 사용된다. 전체 웹 어플리케이션을 CSS만을 사용해서 개발할 수는 없다.

CSS에는 추상화 기능이 부족하다

대다수의 DSL과 마찬가지로 CSS에는 새로운 추상화를 만들 수 있는 방법이 아예 없다. DSL이 특정 도메인에 특화되어 제한적인 방식으로만 사용할 수 있기 때문이다. 그래서 CSS에는 아쉬운 점이 몇가지 있다. 아래의 예를 보자.

h1, h2 {
    color: #926C41;
    font-family: sans-serif;
}

b {
    color: #926C41;
}

*.sidebar {
    color: #928841;
    font-size: 80%;
    font-family: sans-serif;
}

두 요소에 동일한 색상 코드(#926C41)를 사용했다. 프로그래밍 세계에서 중복은 해악이므로, 이러한 색상 코드를 추상화할 수 있는 기능이 있었다면 더욱 좋았을 것이다. 또한 사이즈나 여백을 조작할 때 필요한 산술연산도 CSS에는 없다.

DSL 상위 레이어 만들기

CSS DSL에 부족한 기능을 추상 레이어로 얹어서, 새로운 DSL을 만들 수 있다. 예를 들어 앞의 코드를 다음과 같이 만들어 볼 수 있다.

@baseColor : #926C41

h1, h2 {
    color: @baseColor;
    font-family: sans-serif;
}

b {
    color: @baseColor;
}

*.sidebar {
    color: #928841;
    font-size: 80%;
    font-family: sans-serif;
}

물론 CSS 자체에서 이러한 기능을 제공하지는 않는다. 하지만 CSS을 추상화한 새로운 형식의 DSL을 만들어서 아래와 같은 절차로 처리해볼 수 있다.

css_dsl

CSS를 추상화한 DSL 사례

사실 위의 설명을 그대로 따르는 DSL이 이미 만들어졌다. 이러한 DSL의 예로 LESS, SASS 등이 있다. 이처럼 DSL의 상위에 추상 레이어를 만들어서 새로운 DSL을 정의할 때 주의할 점은, 기반 DSL(여기서는 CSS)과 유사해야 한다는 점이다. 실제로 SASS나 LESS는 CSS와 동일한 속성명을 사용한다.

크몽 재능

부트스트랩(Bootstrap) 맛보기

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

이번에는 부트스트랩(bootstrap) 맛보기다. 일단 사이트 대문에서 아래와 같이 설명한다.

부트스트랩 : 세련되고 직관적이며 강력한 프론트엔드 프레임워크로, 빠르고 쉽게 웹 개발을 할 수 있도록 돕는다.
(BootStrap : Sleek, intuitive, and powerful front-end framework for faster and easier web development.)

bootstrap의 장점은 하나의 코드로 웹 화면과 모바일 화면 모두를 지원한다는 점이다. 일단 bootstrap 사이트에서, 최신 버전을 다운로드하자.

파일 구조

bootstrap 파일을 다운로드한 후, 압축을 풀면 아래와 같은 디렉토리 구조를 가진다.

./
├── css/
│    ├── bootstrap-responsive.css
│    ├── bootstrap-responsive.min.css
│    ├── bootstrap.css
│    └── bootstrap.min.css
├── img/
│    ├── glyphicons-halflings-white.png
│    └── glyphicons-halflings.png
└── js/
├── bootstrap.js
└── bootstrap.min.js

부트스트랩은 jQuery를 필요로 한다. 아무래도 jQuery 기반의 플러그인으로 볼 수 있을 듯 하다.

구성 요소

제공하는 구성 요소는 다음과 같다고 하는데, 별거는 없어 보인다.

  • 스카폴드(Scaffold)
    body에서 타입, 배경, 링크 스타일, 그리드 시스템, 2개의 간단한 레이아웃을 재설정하기 위한 글로벌 스타일
  • CSS
    글자체, 코드, 테이블, 폼, 버튼 등 공통적인 HTML 요소를 위한 스타일. 작고 멋진 아이콘 집합인 Glyphicons를 포함
  • 컴포넌트
    탭, 필(pill, 모서리가 둥근 사각형), 네비게이션 바, alert, 페이지 헤더 등 공통 인터페이스 컴포넌트를 위한 기본 스타일
  • 자바스크립트 플러그인
    자바스크립트 플러그인은 컴포넌트와 비슷하지만, 툴팁, 팝업, 모달 등과 같은 인터랙티브 컴포넌트(interactive component)

기본 아이콘 집합인 Glyphcions보다는 font-awesome을 사용하기 바란다.

부트스트랩을 사용하기 위한 HTML 템플릿 만들기

일단 아래와 같은 Hello World HTML 파일을 만들자. jQuery가 반드시 필요하다.

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap 101 Template</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <h1>Hello, World!</h1>
        <script src="http://code.jquery.com/jquery.js"></script>
    </body>
</html>

이제 이 파일을 부트스트랩 템플릿으로 만들어 보자. 다운로드 받은 bootstrap 파일들을 적당한 위치에 위치시킨다. 아래는 내가 사용중인 Aptana Studio의 bootstrap-test 프로젝트 디렉토리 구조다.

bootstrap-aptana

hello.html 파일에 리소스 파일인 자바스크립트와 CSS 파일을 포함한다.

<!DOCTYPE html>
<html>
    <head>
        <title>Bootstrap 101 Template</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
    </head>
    <body>
        <h1>Hello, World!</h1>
        <script src="http://code.jquery.com/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </body>
</html>

이제 부트스트랩을 사용할 준비는 끝났다.

부트스트랩 쉽게 개발하기

http://bootply.com 로 접속하자. 샘플과 템플릿 등을 작성해서 바로바로 실행해볼 수 있다. 아래는 Bootstrap Starter Template을 사용한 hello.html 파일이다.

<!DOCTYPE html>
<html>
<head>
    <title>Bootstrap 101 Template</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="css/bootstrap.min.css" rel="stylesheet" media="screen">
    <style>
    body {
        padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
    }
    </style>
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="navbar-inner">
            <div class="container">
                <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="brand" href="#">Project name</a>
                <div class="nav-collapse collapse">
                    <ul class="nav">
                        <li class="active">
                            <a href="#">Home</a>
                        </li>
                        <li>
                            <a href="#about">About</a>
                        </li>
                        <li>
                            <a href="#contact">Contact</a>w project.
                            All you get is this message and a barebones HTML
                        </li>
                    </ul>
                </div><!--/.nav-collapse -->
            </div>
        </div>
    </div>
    <div class="container">
        <h1>Bootstrap starter template</h1>
        <p>
            Use this document as a way to quick start any new project.
            <br>
            All you get is this message and a barebones HTML document.
        </p>
    </div>
    <!-- /container -->
    <script src="http://code.jquery.com/jquery.js"></script>
    <script src="js/bootstrap.min.js"></script>
</body>
</html>

아래와 같이 큰 수고를 들이지 않고도 꽤 이쁜 화면을 만들 수 있다.

bootstrap_web_sample

부트스트랩 유용한 사이트

부트스트랩을 날 것 그대로 사용하기보다는 이미 만들어진 테마(theme)을 사용하는 편이 낫다. 유료가 좀더 멋들어지긴 하지만, 무료도 꽤 많이 있으니 관심을 가지고 살펴보기를 바란다.

bootstrap_buttons

Beautiful Buttons for Twitter Bootstrappers

http://charliepark.org/bootstrap_buttons/

부트스트랩이 제공하는 7가지 기본 버튼 색상 이외의 다른 색상으로 바꿀 수 있는 CSS 생성기를 지원

bootmetro

Bootmetro

http://aozora.github.com/bootmetro
부트스트랩 테마 제공

font_awesome

Font Awesome

http://fortawesome.github.io/Font-Awesome/

부트스트랩에 포함된 아이콘은 Glyphicons에서 제조한 아이콘으로, png 파일이다. 따라서 크기나 색상 변경이 쉽지 않다. Font Awesome 사이트에서는 말그대로 기가믹힌 폰트 형식의 아이콘을 무료로 제공하며, 폰트 아이콘은 크기와 색상 변경이 더 자유롭다.

icomoon

IcoMoon

http://icomoon.io/

폰트 아이콘을 커스트마이징하여 사용할 수 있다. 무료는 아니다. “트위트 부트스트랩/위키북스”의 저자인 김덕기님의 블로그에서 사용법을 살펴볼 수 있다.

wrapbootstrap

{wrap]bootstrap

http://wrapbootstrap.com

부트스트랩으로 만든 테마를 판매한다. 유료이지만, 싼 가격에 꽤 수준 높게 디자인 된 웹 사이트를 만들 수 있다.

크몽 재능

git 정말 필요한가?

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

이 글은 총 4부 중 마지막인, git이 필요한지에 대한 개인적인 의구심을 정리해 봤습니다.

요즘 git에 대해 이것저것 실험삼아 해보고, 자료를 보면서 드는 생각은

“Git이 정말 필요한가?”

이다. 서브버전과 비교하여 장단점을 비교하기에 앞서 git의 구조와 CI(Continuous Integration) 관점에서 전체 아키텍처를 한번 살펴보자. 이 글은 git을 쓰려고 시도한 후배님들과 대화한 내용을 중심으로 썼기에, 잘못된 부분이 있을 수도 있다.

프로젝트 공유

우선 2명의 개발자가 협업할 때 로컬 저장소(master)와 원격 저장소(remote repository)간의 구조와 처리 흐름은 다음과 같다.

git_share_project

  1. 개발자 A가 자신의 로컬 머신에서 git 프로젝트를 생성(init)한다.
  2. 그리고 몇가지 작업을 한 후, 프로젝트를 공유하기 위해 원격 서버에 프로젝트를 푸시한다.
  3. 개발자 B는 원격 저장소의 프로젝트를 자신의 로컬 저장소로 복제(clone)한다.

따라서 각 개발자는 자신만의 저장소(master)에서 변경작업을 하고 커밋을 하며, 로컬에서 작업 이력을 관리할 수 있게 된다. 여기에 git의 장점 2가지가 있다.

  • 빠르다
  • 네트워크가 안되더라도 작업 이력을 관리할 수 있다.

장점을 좀더 면밀히 검토해 보자. 우선 커밋이 로컬 머신에서 일어나므로, 빠를 수 밖에 없다. 네트워크 IO가 아니라 단순히 디스크 IO만 발생하기 때문이다. 하지만 서브버전을 쓰면서 느리다는 느낌을 받은 적은 거의 없다. 파일이 많으면 오래 걸릴 수도 있겠지만, 오히려 그 시간에 허리 한번 필 수 있으니 건강에는 도움이 되겠다. 즉 사용성 관점에서 크게 와닿지 않은 빠름일 뿐이다.

네트워크가 안된다? 북한도 인터넷이 되는 마당에, 네트워크는 어디를 가야 안되는지 모르겠다. 전혀 공감되는 장점이 아니다.

프로젝트 수정

그럼 이제 자신의 마스터 브랜치에서 프로그램을 수정한다고 해보자.

git_modify_project

프로젝트의 기능을 추가하거나 변경하는 경우 아래와 같은 흐름을 따르게 된다.

  • 마스터 브랜치에서 새로운 브랜치를 만든다.
  • 개발을 완료한 후 커밋을 한다.
  • 브랜치를 마스터 브랜치에 합친다.
  • 브랜치는 정리한다.
  • 변경된 내용을 중앙 저장소에 푸쉬한다.

유심히 볼 점은 중앙 저장소에 올리기 위해서는 2단계를 거친다는 점이다. 먼저 로컬 저장소에 커밋 한 후, 원격 저장소에 푸시한다는 점이다. 이 점이 중요한데, 이를 위해서는 전체 CI 구조를 이해해야 한다.

CI 관점에서 본 git

전체 CI 구조를 보면 다음과 같다.

git_as_ci

  • jenkins 서버(빌드 서버)에서 형상 서버(Git 서버)에서 소스 코드를 풀링한다.
  • 풀링된 코드를 빌드하여 실행 파일을 만든다.
  • 실행 파일을 운영 서버에 배포한다.

이처럼 CI 환경을 구성할 때 가장 어려운 점은 빌드시 2가지 문제가 흔히 발생한다는 점이다. 첫 번째는 컴파일 에러이며, 두번째는 개발이 완료되지 않아 배포하지 말아야 할 기능이 실수로 배포된다는 점이다.

이러한 문제가 발생하는 원인은 개발자가 완성되지 않은 프로그램을 형상 서버에 커밋하기 때문이다. 그러면 개발자는 완료되지도 않은 프로그램을 왜 형상 서버에 커밋하는가? 그 이유는 2가지다.

첫 번째는 자신의 로컬 환경에 장애가 발생할 수도 있으므로, 완성되지 않았더라도 백업하기를 원하기 때문이다. 즉 형상 성버는 백업의 공간으로 지금까지 활용되어 왔다. 두 번째는 이력을 관리하기 위해서다. 퇴근하기 전, 또는 사용자 스토리 중 하나의 기능이 완료가 되었을 때, 해당 시점의 프로그램에 대한 스냅샷을 저장하기 위해서다.

이러한 점에서 볼 때 git은 이 문제를 매끄럽게 해결한다. 자신의 로컬에 저장소를 따로 가지므로, 백업을 위한 공간인 동시에 로컬에서 이력을 관리할 수도 있게 된다.

사실 이러한 상황 뒤에는 커밋(commit)이 가지는 두 가지 의미가 이전까지는 제대로 정의되지 않아서라고 본다. 서브버전을 예로 들어보자. 서브버전에서 커밋이라는 행위에 2가지 의미가 내포된다. 첫 번째는 내가 완성한 프로그램을 운영서버에 배포하기 원한다는 뜻이며, 따라서 형상 서버에 올리겠다라는 행위다. 두 번째는 좀 전에도 얘기한 백업과 이력을 관리해 달라고 요청하는 것이다.

결국 서브버전을 CI 환경에 중심 형상 서버로 사용하게 되면, 개발자가 커밋한 행위가 배포를 요청한 것인지, 아니면 이력을 관리해달라고 요청한 것인지 구분이 불가능하다. 이로 인해 빌드하거나 운영 서버에 새로운 기능이 배포될 때 마다 늘 지옥문이 열리곤 한다.

git의 경우 커밋이 가지는 2가지 의미를 완전히 분리된 액션으로 만들었다. 즉 커밋은 자신의 로컬 저장소에만 요청하며, 배포는 원격 저장소에 푸시를 통해 요청하는 것이다. 사실 이러한 이해가 git의 사상에 맞는지는 제대로 활용한 경험이 없어 아직 모르겠다. 하지만 얼추 맞지 않을까?

한국 자바 직장인 개발자를 위한 내용

리눅스 머신에서 자바 개발을 하는 직장인 개발자를 본 적이 있는가? 결국 나처럼 윈도우에서 이클리스 기반으로 자바를 사용해 프로그래밍을 할 것이다. git이 윈도우를 공식적으로 지원하지 않기 때문에 윈도우 버전인 egit 이클립스 플러그인을 설치해서 개발을 해야 한다. 들은 얘기로 윈도우 64비트에서 egit이 제대로 동작하지 않는다. 이런 상황에서 꼮 git이어야만 할까? 잘 모르겠다.

크몽 재능

나도 git 좀 써보자 – 원격 서버 구축하기

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

이 글은 총 4부 중, 3번째 git 원격 서버 구축하기와 관련한 내용입니다.

일단 2명 이상의 개발자가 함께 프로젝트를 하려면 원격 저장소(remote repository)가 필요하다. 원격 저장소를 위한 서버는 직접 운영할 수도 있지만, 무료인 GitHub를 사용할 수도 있다.

원격 저장소는 일반적으로 아래와 같은 작업을 지원해야 한다.

  • 프로젝트를 원격 저장소에 업로드하기
  • 원격 저장소에서 로컬 저장소로 가져오기
  • 변경사항을 원격 저장소에 올리기
  • 다른 개발자가 올린 변경 내용을 로컬 저장소로 가져오기

이제 git에서 어떻게 하면 되는지 하나하나 살펴보려는 찰나, git 매뉴얼을 찾았다. 진작에 봤으면 삽질을 하는 시간이 줄었을텐데, 아쉬울 뿐이다. 대부분 한글로도 번역이 되어 있으므로, 상당히 도움이 된다.

어쨌뜬 서브버전을 쓰든, git을 쓰든 여러 사람과 협업하기 위해서는 원격 서버가 필요하다. Git 서버 매뉴얼에서 설명하는 내용을 따라서 서버를 구축하고 사용하는 법을 살펴보도록 하자.

원격 저장소는 작업 디렉토리(working directory)가 없는 bare 저장소다. 여기서 bare 저장소의 의미는 일반적인 git 프로젝트에서 .git 디렉토리만 있는 저장소라는 뜻이다. 원격 서버를 운영하려면 먼저 원격으로 접속할 프로토콜을 선택해야 한다.

프로토콜

git은 Local, SSH, Git, HTTP 프로토콜을 지원한다. HTTP 프로토콜을 제외한 나머지 방식에서는 모두 서버에 git이 설치되어 있어야 한다.

  • Local
    원격 저장소가 동일한 머신의 다른 디렉토리에 있을 때 사용한다. 즉 팀원이 모두 NFS와 같이 파일 시스템을 공유할 때 사용한다. 결국 쓸데 없을 듯…
  •  Git
    git에 포함된 데몬을 사용하는 방법으로 포트는 9418을 쓴다. 인증 메커니즘이 없으므로, 누구나 프로젝트에 푸시를 할 수 있다. 결국 쓸데 없다.
  •  SSH
    푸쉬를 할 수 있는 유일한 프로토콜이라고 보면 된다. HTTP/S에서도 푸쉬를 하도록 설정할 수 있지만, 잘 사용되지 않는다. 그리고 인증을 할 수 있으므로 보안에 안전하다. 하지만 익명으로는 read가 불가능하다.
  •  HTTP/S
    설정이 간단하다. 하지만 푸시를 설정하기가 까다로우며 거의 사용되지 않는다.

프로토콜을 조합해서 사용해도 되는데, 서버에 푸시를 할 때는 SSH를 사용하고, 익명으로 읽기 권한을 주고자 할 때는 Git 프로토콜을 쓰는 식이다.

서버를 설정하는게 복잡해 보이지만, 실제로도 복잡하다. 매뉴얼 보다가 한숨만 나왔다. Gitosis나 Gitolite를 사용하면 좀 더 간편히 설정할 수 있다고 한다. 현재 일하는 팀에서는 AWS에 Gitlab을 설치해서 사용중이다.

크몽 재능

나도 git 좀 써보자 – 사용하기

이 글은 크몽 재능인, socurites님이 원고를 기고하셨습니다.

이 글은 총 4부 중, 2번째 git 사용하기와 관련한 내용입니다.

설치가 끝났으니 이제 프로젝트를 하나 만들어서 기본적인 활용법을 익혀보자.

저장소 만들기

서브버전을 사용해 왔다면 아마 저장소는 원격 서버에서 호스팅하고, 자신의 로컬 머신에는 복사본 또는 working copy를 유지했을 것이다. 반면 git에서는 복사본 또는 working tree뿐만 아니라, 저장소까지도 자신의 로컬 머신의 .git 디렉토리에 유지한다.

일단 비어 있는 프로젝트를 하나 만들자.

C:\Documents and Settings>mkdir my-project
C:\Documents and Settings>cd my-project
C:\Documents and Settings\my-project>git init
Initialized empty Git repository in C:/Documents and Settings/my-project/.git/

프로젝트 디렉토리 안에서 git init 명령어를 실행하면, git 저장소가 생성된다.

파일 추가하고 변경하기

비어 있는 프로젝트에 index.html 파일을 아래와 같이 만들어서 추가하자.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World
</body>
</html>

이제 프로젝트에 변경 사항이 생겼으므로, 즉 파일이 하나 추가되었으므로 git에 변경사항이 발생했음을 알려주자. 새로운 관리 대상이 생겼으므로, 대상 추가 작업 및 커밋 작업 2단계를 거쳐야 한다.

C:\Documents and Settings\my-project>git add index.html
C:\Documents and Settings\my-project>git commit -m "add new index.html"
[master (root-commit) 9bb9136] add new index.html
1 file changed, 9 insertions(+)
create mode 100644 index.html

커밋 로그를 보면,

C:\Documents and Settings\my-project>git log
commit 9bb9136e023cddf5db8457069be9c317bbc3ab2b
Author: socurites <socurites@gmail.com>
Date: Mon Jun 10 15:51:57 2013 +0900

add new index.html

와 같이 index.html 파일이 추가되었다는 기록을 확인할 수있다.

파일을 변경하기 전에, 현재 작업중인 working tree의 상태를 살펴보자.

C:\Documents and Settings\my-project>git status
# On branch master
nothing to commit, working directory clean

보다시피 working tree는 저장소와 현재 동기화 된 상태임을 알 수 있다. 이제 index.html을 아래와 같이 수정한 후,

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World
Hello Changed World
</body>
</html>

working tree의 상태를 다시 살펴보면,

C:\Documents and Settings\my-project>git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")

index.html 파일이 변경되었으며, 커밋을 하려면 스테이징이 필요하다는 메시지가 나온다.

git의 경우 파일을 세 군데에 저장한다.

  • 작업 트리(working tree)
    로컬에서 작업하는 공간으로, 서브버전에서는 working copy라고도 부른다.
  • 스테이징 영역(staging area)
    작업 트리와 저장소 사이의 버퍼 공간으로, 커밋할 대상을 올려두는 위치다.
  • 저장소(repository)
    실제 파일이 관리되는 공간이다.

git add 명령어를 사용하면, 작업 트리의 파일이 스테이징 영역으로 이동시킨다. 즉 파일을 스테이징하게 된다.

C:\Documents and Settings\my-project>git add index.html
C:\Documents and Settings\my-project>git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#

이제 파일을 저장소로 커밋하자.

C:\Documents and Settings\my-project>git commit -m "add body text" index.html
[master 0ca802d] add body text
1 file changed, 1 insertion(+)

C:\Documents and Settings\my-project>git status
# On branch master
nothing to commit, working directory clean

브랜치(branch) 만들기

이제 프로젝트의 스프린트가 마무리되었고, 릴리즈팀에서 릴리즈해야 한다고 해보자. 하지만 릴리즈와 돵시에프로젝트에 새로운 기능을 추가해야 한다고 해보자. 만약 새로운 기능을 추가할 때까지 릴리즈를 늦추어야 한다면, 사용자는 개발이 이미 완료된 기능을 다음 릴리즈까지 기다리게 하는 셈이다. 따라서 이번 이번 스프린트의 결과는 그대로 릴리즈하면서 동시에 새로운 기능을 개발하려고 할 때, 브랜치를 사용하면 효과적이다.

C:\Documents and Settings\my-project>git branch RB_1.0 master

git branch 명령어는 2개의 인자를 받는데, 첫 번째 인자는 브랜치명이며 두번째 인자는 브랜치할 프로젝트 명이다. 서브버전에서는 마스터 브랜치를 트렁크(trunk)라고 불렀다.

이제 릴리즈팀에서는 RB_1.0 브랜치에서 릴리즈를 하도록 내버려 두고, 개발팀은 마스터에서 새로운 기능을 추가한다. 예를 들어 index.html 파일을 수정해야한다고 해보자.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World
Hello Changed World
Hello New World
</body>
</html>

변경사항을 마스터 브랜치에 커밋한다.


C:\Documents and Settings\my-project>git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")

C:\Documents and Settings\my-project>git commit -a -m "new world"
[master f8e64db] new world
1 file changed, 2 insertions(+)

C:\Documents and Settings\my-project>git status
# On branch master
nothing to commit, working directory clean

이와 동시에 릴리즈팀에서도 릴리즈 브랜치를 약간 수정할 작업이 생겼다. 작업 트리를 릴리즈 브랜치로 변경해 보자.

C:\Documents and Settings\my-project>git checkout RB_1.0
Switched to branch 'RB_1.0'

마스터에서 브랜치로 스위칭하면, 현재 수정한 index.html 파일의 내용이 변경 전의 내용으로 갱신된다. 왜냐하면 릴리즈 브랜치에서는 변경 작업이 발생하지 않았기 때문이다. 따라서 브랜치를 사용하면 릴리즈와 개발을 동시에 진행할 수 있게 된다.

이제 릴리즈 브랜치에서도 index.html을 약간 수정하자.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World
Hello Changed World
Hello Release World
</body>
</html>

그리고 변경사항을 커밋한다.

C:\Documents and Settings\my-project>git commit -a -m "release world"
[RB_1.0 d22029a] release world
1 file changed, 2 insertions(+)

릴리즈 태깅(tagging)하기

이제 릴리즈 준비가 끝난 브랜치에 태깅을 해보자. 태깅이란 거창한게 아니라 단순히 이름, 즉 태그를 붙여서 저장소 이력의 특정 지점을 알기 쉽게 표시하는 것이다.


C:\Documents and Settings\my-project>git tag my-project-1.0 RB_1.0
C:\Documents and Settings\my-project>git tag
my-project-1.0

릴리즈가 완료되면, 릴리즈 브랜치에서 변경된 내용을 마스터 브랜치에도 반영을 해야 하는데, 이러한 작업을 브랜치 병합(merge) 또는 합치기라고 부른다. 먼저 작업 트리를 마스터 브랜치로 변경한다.

C:\Documents and Settings\my-project>git checkout master
Switched to branch 'master'

브랜치를 마스터에 합친다.

C:\Documents and Settings\my-project>git rebase RB_1.0
First, rewinding head to replay your work on top of it...

근데 문제가 생겼다. 릴리즈 브랜치와 마스터 브랜치에서 동일한 라인을 수정했기 때문에, 자동으로 합치는게 불가능해졌다. 이런 경우에는 사람이 직접 개입을 할 수밖에 없다.

일단 동일한 파일의 동일한 라인을 2사람이 동시에 변경할 가능성이 적기 때문에, 이러한 긍정정 잠금(optimistic lock) 기능이 효과적이라고 하는 말에 개인적으로는 동의하지 않는다. 변경 가능성이 적더라도 언제나 충돌이 발생하기 마련이다. 특히 공통 파일 같은 경우 충돌이 발생하면, 정말이지 지옥의 문이 열리는 경우가 한두번이 아니기 때문이다.

어쨌든 충돌을 해결해 보자. 우선 마스터 브랜치에서 파일을 아래와 같이 정리하자.

C:\Documents and Settings\my-project>git commit -a -m "rebase conflict, merged by hand"
[detached HEAD 899bddf] rebase conflict, merged by hand
1 file changed, 2 insertions(+)

C:\Documents and Settings\my-project>git status
# HEAD detached from d22029a
# You are currently rebasing.
# (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean

일단 최신의 파일로 변경한 후 커밋했지만, 저장소의 상태는 문제가 있어 보인다. 그리고 rebase 명령어를 사용하는 경우, 나도 모르게 마스터 브랜치에서 릴리즈 브랜치로 이동한 상태가 되버렸다. 일단 이부분도 강제적으로 해결하자.

C:\Documents and Settings\my-project>git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

899bddf rebase conflict, merged by hand

If you want to keep them by creating a new branch, this may be a good timeto do so with:

git branch new_branch_name 899bddf

Switched to branch 'master'

C:\Documents and Settings\my-project>git status
# On branch master
# You are currently rebasing.
# (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean

C:\Documents and Settings\my-project>git commit -a -m "rebase conflict, merged by hand"
# On branch master
# You are currently rebasing.
# (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean

C:\Documents and Settings\my-project>git status
# On branch master
# You are currently rebasing.
# (all conflicts fixed: run "git rebase --continue")
#
nothing to commit, working directory clean

그럼 이제 불필요한 릴리즈 브랜치는 삭제하자. 릴리즈 브랜치는 태깅해두었기 때문에, 해당 브랜치에서 수정 작업이 필요하다면 태깅한 브랜치에서 얼마든지 다시 분기할 수 있다.

C:\Documents and Settings\my-project>git branch -d RB_1.0
error: The branch 'RB_1.0' is not fully merged.
If you are sure you want to delete it, run 'git branch -D RB_1.0'.

C:\Documents and Settings\my-project>git branch -D RB_1.0
Deleted branch RB_1.0 (was d22029a).

이제 my-project-1.0이라는 이름으로 태깅한 릴리즈를 압축하자.

C:\Documents and Settings\my-project>git archive --format=zip --prefix=my-project-1.0/ my-project-1.0 > mysite-1.0.zip

원격 저장소 사용하기

이제 개발팀에 새로운 팀원이 추가되었고, 프로젝트를 다른 팀원과 함께 개발해야 한다고 해보자. 그러면 지금까지 로컬 저장소에서 관리하던 프로젝트를 팀원과 공유해야 한다. 즉 원격 저장소가 필요하다.

원격 저장소를 만들었다면, 이제 원격 저장소에 지금가지 개발된 코드를 올린다. 그러면 새로운 팀원은 원격 저장소에서 코드를 복제한다. 이제 두명의 개발자가 동일한 프로젝트에서 작업하게 되었으며, 각각 자신만의 저장소를 가지게 되었다. 하지만 두 사람은 모두 변경된 사항을 원격에 푸시(push)해야만 서로간에 최신의 코드를 유지할 수 있다.

일단 원격 저장소 사용하는 법은 이어서 살펴보도록 하자.

크몽 재능