결혼식 때 신혼여행지로 눈독 들였지만, 코로나19의 압박과 체력적인 문제로 포기했었던 스코틀랜드 위스키 증류소 여행을 결혼 1주년을 맞이하여 다녀왔다.
여행 기간은 2023년 8월 19일 ~ 8월 29일. 앞에 카타르 항공을 이용하며 앞에 이틀을 카타르 도하에서 스탑오버하며 호캉스로 보낸 것을 제외하면 약 일주일 남짓.
동행한 아내는 어떨지 모르겠지만, 나에겐 스코틀랜드 여행을 결심한 목적의 (거의) 전부가 스카치 위스키, 그 위스키를 만드는 증류소를 내눈으로 직접 보는 것이었고 위스키 증류소는 대부분 스코틀랜드에서도 외진곳에 위치하는 경우가 대부분이기 때문에 렌트카는 선택이 아닌 필수 였다.
각 증류소 방문 후기는 추후 틈틈이 별도의 포스팅을 통해 다루겠지만, 우선은 이번 여행의 전체적인 경로와 함께 국내 인터넷 상엔 정보가 많이 없는 스코틀랜드 렌트카 여행 및 운전에 대한 개요 + 간단한 팁에 대해 다뤄보고자 한다.
허츠(Hertz) 렌터카 에든버러 공항점 & 차량 정보
스코틀랜드의 수도라고 할 수 있는 에든버러(Edinburgh)에서 Hertz 렌터카를 빌릴 수 있는 곳은 에든버러 공항점 뿐이다.
예약의 경우 후불 지불 옵션으로 국내에서 가장 큰 허츠 딜러(?) 중 하나인 여행과 지도 를 통해 예약 하였으며, 예약 단계에서는 오토매틱 KIA CEED 선택하여 신청하였으나, 동일 그레이드 내에 하이브리드 차량인 토요타 코롤라로 수령했다.
첫 이틀은 차 없이 에든버러 시내 여행하다가, 다시 공항로 이동하여 렌트 진행하였는데 대기 시간이 극악이라는 허츠 에든버러 공항점 구글 리뷰가 무색하게, 약 10분 정도 대기 이후 바로 차량 수령 가능하였다.
허츠 골드 멤버쉽이고 계정에 등록된 결제 정보 등에 문제가 없으신 경우 더빠른 차량 수령도 가능 했을 것으로 보이나, 나는 허츠 계정에 등록된 신용카드 정보가 만료되는 바람에 렌트일 오전에 사전 결제가 정상적으로 이루어지지 않아서 확인 과정에서 시간이 조금 소요 되었다.
에든버러 공항점 직원들도 대체로 명확하게 소통되며 사전 예약시 선택한 슈퍼커버 옵션 이외에 추가 옵션에 대한 가입 강요는 전-혀 없었습니다.
다만, 사전 연료 구매 옵션에 대해선 설명해주기 때문에 반납 시 주유에 대한 스트레스를 없애려면 사전 연료 구매 옵션을 구매하는 것도 나쁘지 않은 것 같다.
영국/스코틀랜드의 우핸들 좌측통행 운전 난이도
오랜만에 접하는 우핸들 좌측통행(대략 3~4년전에 일본 후쿠오카와 유후인/뱃부 지역에서 1000km정도 운행 경험이 있었음) 대략 일주일 동안 아일라 섬을 포함한 1300km 에 달하는 운전거리가 걱정이 되었으나, 결론적으로는 작은 사고 하나 없이 잘 여행 마쳤다.
여행 구간
에든버러(Edinburgh) ~ 글래스고(Glasgow) ~ 캠벨타운(Campbeltown) ~ 아일레이(Islay – 페리로 이동) ~ 오반(Oban) ~ 테인(Tain) ~ 스페이사이드(Speyside) ~ 에든버러(Edinburgh) / 총 주행 거리 약 1300km
운전 후기/스코틀랜드 운전 팁
인터넷 상에서 스코틀랜드나 영국 운전 검색하면 가장 악명 높은 것이 좁은 2차선 도로, 회전 교차로인 라운드어바웃(Round about) 두개 정도 이고 많은 분들이 어렵다 힘들다 등 겁을 주시는 경우가 많은데 사실 한국에서 충분한 운전 경력을 가진 분들이라면 반나절에서 하루 정도면 거의 적응이 되는 수준이다. 너무 걱정하실 필요 없을 듯 하다.
도로 사정이 양호한 대도시 제외하고 특히 스코틀랜드 여행하시는 분들 한정으로 워낙 외진 곳들이 많다보니 도로 팟홀은 주의 할 필요가 있다. 아무리 외진곳이더라도 주변 차량 흐름을 고려하여 운행하다보면 꽤 고속으로 주행하게 되는데(보통 외진 시골길이더라도 제한 속도가 60MPH인 경우가 대부분) 고속 주행 하다가 팟홀 잘못 밟으시면 바로 타이어 펑크나 휠 손상이 발생 할 가능성이 높아보였다. 항상 예측하지 못한 곳에서 팟홀이 등장 할 수 있다고 생각하시고 전방 노면을 살피시면서 운행하시면 좋을 것 같다.
가로등이 없는 좁은 도로가 많으므로 가급적 밤 운전은 하지 않도록 일정을 세우는게 필요하다. 가로등이 없는건 둘째치더라도 길 주변에 야생동물이 워낙 많아서 로드킬 및 그로 인한 사고 위험성이 항상 존재 한다.(하루에도 로드킬된 다람쥐, 노루, 새 사체를 수십번 목격)
허츠 렌트카는 페리 탑승에 대한 제한 규정이 별도로 없었지만, 렌터카 업체에서 페리 탑승 불가라고 하더라도 크게 걱정 하지 않으셔도 될 듯 하다. 아마 아일레이 혹은 스카이, 아란 등 이동 하실 때 대부분 칼레도니안 맥브레인(Caledonian MacBrayne)이라는 회사에서 운행하는 대형 페리를 탑승할텐데 차량을 별도로 결속하는 장치가 없을 뿐더러 그냥 주차브레이크 체결 하는 수준으로 배를 타고 이동 하기 때문에 차량이나 휠에 손상이 발생할 가능성은 거의 없다.
주유는 영국 내 대형 마트체인인 Tesco 에 딸려 있는 주유소를 활용하면 접근성도 좋을 뿐더러 가격도 평균대비 저렴 하다. 다만 해외 신용 카드의 경우 기계에서 결제(Pay at pump)가 안되고, 주유 먼저 진행하고 카운터에가서 결제해야 한다. 어차피 테스코를 제외하고 로컬 주유소는 대부분 카운터 결제로 진행한다.
스코틀랜드의 환상적인 자연경관도 담을 겸, 블랙박스도 대체할 겸 고프로 같은 액션캠 + 차량용 거치대 + 고용량 SD카드(최소 256gb * 2장이상) 챙겨 가시면 좋다.
렌트 차량 후기 – 토요타 코롤라 하이브리드(Toyota Corolla Hybrid)
하이브리드에선 정상급 기술력을 자랑하는 토요타 답게, 최강의 연비를 보여준다. 휘발유 리터당 24km 이상. 하이브리드 차량은 보통 가속과 감속이 반복되는 시내 주행이 더 유리한 결과를 보여주지만 구불구불한 도로와 오르막/내리막이 반복되는 스코틀랜드 시골 도로 환경에서도 충분한 효율을 보여주었다. 영국의 유가가 우리나라에 비해 그다지 싸지 않으므로, 장거리 주행이 예정되어 있다면 렌트 시점에 하이브리드 차량을 요청 해보는 것도 좋을 것 같다.
실내 공간은 협소하고 모든게 필요한 정도로만 맞춰져 있는 전형적인 일본차 느낌. 트렁크는 그래도 26인치/28인치 수트케이스 2개를 넣으면 딱 꽉차는 정도
무선 애플 카플레이 지원. 국산차 외제차를 막론하고 무선 애플 카플레이 지원에 인색한 국내 판매 차량들과 달리 저가 차량임에도 불구하고 무선 애플 카플레이를 지원한다. 써보면 신세계다.
주행과 실용성 측면에선 아무런 문제가 없었지만, 다소 시끄럽고(노면소음과 풍절음 극악) 가속 성능이 떨어져서 고속주행 중 변수가 빈번한 스코틀랜드에선 가끔 답답하게 느껴질 때가 많았다.(풀악셀 밟아도 딱히 변화가 없는..체감상 130마력대 이하 차량이 아닌가 생각했는데 마지막에 차량 안 메뉴얼을 살펴보니 122마력이었다.)
약 1시간 남짓의 와이너리 투어가 끝난 이후 시작된 와인 시음 및 점심 식사 시간. 자리마다 세팅되어 있는 와인잔을 보며, 얼마나 많은 와인을 서브해줄까 기대하게 되는 시간
오늘 마시게될 와인 들. 왼쪽 부터 차례로 산지오베제를 이용해 만든 로제 스파클링 / 가장 기본적인 라인업인 베라짜노 끼안띠 클라시코 / 좀 더 엄격한 규정으로 생산된 고품질 와인이라고 볼 수 있는 리제르바(Reserva) / 최상급 이라고 볼 수 있는 그랑 셀레지오네(Gran Selezione).
역시 술은 이렇게 동일한 계열의 제품들을 등급에 따라 버티컬 테이스팅 해봐야 확연한 차이를 알 수 있는 법. 기본 라인업과 리제르바, 그랑 셀레지오네 모두 각각의 독특한 캐릭터를 가지고 있었지만 역시나 높은 등급으로 갈 수록(즉, 비쌀 수록) 맛과 풍미의 깊이가 미묘하게 달라짐을 확연히 느낄 수 있었다.
복잡한 조리기법 보다는 원재료 자체가 가지고 있는 힘을 믿는, 토스카나 지방의 요리 스타일을 잘보여주는 빵. 질좋은 올리브유와 잘 구운 빵이면 왠만한 전채 요리 못지 않다.
이어서 준비되는 이탈리안 샤퀴테리 플레이트와 치즈. 대부분 와이너리 근처에서 직접 생산되는 제품들이라고 하며, 모두 맛이 좋았지만 돼지 전지 혹은 목살로 추정되는 생햄의 맛이 인상적이었다.(사진에서 가장 오른쪽 가운데)
역시나 재료가 가진 특성을 최대화 시키며, 조리의 방식에 있어서는 심플함이 돋보이는 토마토 소스의 파스타. 특별할 것 없는 요리라고 볼 수도 있겠지만, 이탈리아 토마토가 가지는 깊은 감칠맛에 다시 한번 감탄(이탈리아에서 토마토 먹다가 한국의 토마토를 먹으면 너무 싱겁다…)
숯불에서 구워진 오늘의 단백질. 폭립과 초리조, 구운 감자의 조합으로 대단한 맛은 아니었지만, 끼안띠 클라시코와의 페어링이 최상이었다.
와이너리 투어 마지막에 구경했던 진짜 발사믹도 한 스푼. 슬슬 식사의 마무리 단계로 나아간다.
찐한 에스프레소와 함께 제공된 오늘의 디저트. 다소 투박한 이탈리아 스타일의 비스코티와 과일 타르트. 사실 이쯤되니 취기가 오르기도 하고 배도 불러서 ㅎㅎ 절반은 남긴듯.
마지막엔 그라빠도 한잔. 그라빠는 와인을 만들고 난 후 남은 과육, 껌질, 씨앗, 줄기 등의 포도 찌꺼기(Pormace)로 만든 이탈리아 고유의 증류주라고 할 수 있다. 보통 식후 주로 마시는 경우가 많은 것 같고, 높은 알콜 도수에 비하여 투명한 색깔과 브랜디와는 다른 독특한 풍미를 느낄 수 있다.
즐거웠던 식사 시간.
마지막으로 오늘의 식사 장소 풍경. 커플이나 가족 단위 방문객이 많은 듯 했고, 음식이 모두 제공된 이후에도 각자 여유롭게 대화를 나누다가 일어나면 되는 시스템이라서 좋았다.
포도 밭 중간에 위치한 베라짜노 농가 민박 장소의 아름다운 정원
이렇게 와이너리 투어와 식사가 끝나고, 약간은 알딸딸해진 상태에서 숙박 장소로 향했다. 베라짜노 와이너리 초입에 위치해있는 이곳 숙박장소에 체크인 하기까지 베라짜노 담당 직원가 만나지를 못하여 사실 많은 우여곡절이 있었지만 30여분 만에 어찌저찌 체크인 성공. 숙소 앞의 아름다운 정원이 우리를 맞아주었다.
정원에 앉아서 잠깐의 여유도 누려 본다. 건너편 언덕 꼭대기에 보이는 또다른 성. 아마 저곳도 지금은 와이너리로 쓰이고 있을 것이다.
숙소 외관. 오래된 이탈리아 농촌 주택을 게스트 숙박용도로 개조한듯하다. 현대적인 시설이라고 볼 수는 없지만, 이곳에서만 느낄 수 있는 고즈넉한 느낌이 오히려 좋았다.
우리가 하루동안 묵을 숙소 내부. 객실 내부는 생각보다 넓었고,청결했다. 에어컨은 없었지만 건조한 토스카나 지방 기후 특성 상 천장 실링팬만 켜놔도 충분히 시원했다. 침구 역시 잘 정리되어 있었고 베라짜노 와인 하프바틀 한병과 와인잔도 제공된다.
건물에 다른 숙박객들도 있긴 했지만, 거의 마주칠 일이 없었고 준비되어 있는 객실들에 비해 투숙객이 많지는 않은 것 같았다. 일정에 여유가 된다면 며칠동안 머물러도 좋을 것 같다는 느낌. 다만, 주변이 정말 시골이고 베라짜노 와이너리 역시 투어에 포함된 식사를 제외하고는 별도의 식사를 하기 어렵기 때문에 저녁 식사 등은 2~3 km 떨어지 근처 마을까지 직접 이동해서 해결 해야한다는 점은 참고가 필요하다. 우리는 숙소에서 자전거를 빌려서 저녁 식사를 해결했다.
호텔은 아니지만 조식도 제공 된다. 로컬에서 만들어진 신선한 유제품과 베이커리, 계란 등. 대단히 인상적인 맛은 아니지만, 진짜 이탈리안들의 아침식사 같은 느낌이라 만족스러웠다.
이렇게 1박 2일간의 베라짜노 와이너리 투어를 마쳤다. 사실 근방의 안티노리나 끼안띠 지방의 유명한 와이너리 들에 비하면 인지도가 떨어지는 곳이지만, 와이너리 투어와 그에 포함된 식사 및 농가 민박 경험까지 포함하면 누구에게나 만족스러운 경험을 제공해주는 곳이라 생각된다. 다음에 끼안띠 지역을 여행할 일이 있다면 다시 한번 경험해보고 싶다.
작년 5월 결혼식을 마치고 이탈리어로 떠났던 허니문 여행. 결혼식으로 몸과 마음이 지친 상태였지만, 먹고 마시는 것엔 진심인 커플이 미식과 와인의 나라 이탈리아에서 와이너리 투어 만큼은 제대로 한번 해봐야 하지 않겠나 하는 마음에 이탈리아 숙박 일정중 하루를 이탈리아 3대 와인 산지 중 하나인 토스카나 와이너리에 배정하기로 결정 하였다. (사실 운전 걱정 없이 와이너리 투어에서 와인 실컷 마시려고) 토스카나 지방에서 숙박이 가능한 와이너리는 몇군데가 있었는데, 예약이 어렵거나 너무 비싸거나(반피…) 한 경우가 대부분이었고 위치와 예산이 합리적인 곳을 찾다보니 결과적으로 끼안띠(Chianti)지방의 그레이브(Greve) 에 위치한 “카스텔로 디 베라짜노(Castello di Verrazzano)“ 와이너리에서 투어 및 숙박을 하기로 결정 하였다.
와이너리 초입에 위치한 숙소
베라짜노 와이너리 투어와 숙박은 별개로 운영되는 프로그램이기 때문에 홈페이지를 통해 각각 예약을 진행하면된다. 베라짜노에서의 숙박은 Agritourism 이라는 명칭으로 홈페이지에 소개되어 있는데, 우리나라에선 흔히 ‘농가숙박’으로 알려진 형태라고 생각하면 쉽다. 이탈리아의 여느 와이너리들 처럼 산 비탈을 따라서 실제로 경작 중인 와이너리 소유의 포도밭이 형성되어있는데, 그 비탈 초입에 실제 과거에 포도밭을 관리하기 위해 사용되었을 법한 아담한 주택이 위치하고 있다.
역시 모든 와이너리 투어의 시작은 역사 설명 부터 ㅎㅎ
베라짜노 와이너리는 그 이름에서 알 수 있듯 산 비탈 위에 있는 성(Castello = Castle)이었으며, 그 옛날 에르투아인 시절 부터 존재했다고 한다. Verrazzano라는 이름은 7세기에 이 성을 소유하게 된 Verrazzano 가문의 이름에서 따온 것으로, 현재는 Cappellini 가족이 성을 소유하고 있지만 1150년경 부터 와인을 양조해온 전통을 존중하여 현재까지도 Verrazzano라는 이름으로 와인을 생산해왔다고 한다.
비탈을 따라 형성된 포도밭
투어 초반부에는 비탈을 따라 형성된 광활한 포도밭을 바라보며 포도 농사에 대해 설명하는데, 굳이 가이드의 열정적인 설명이 아니더라도 잘 관리된 포도밭의 모습과 환상적인 날씨에서 좋은 와인을 만들기 위해선 역시나 좋은 포도밭이 필요하다는 것을 알 수 있었다.(떼루아의 힘)
끼안띠 클라시코에만 부착 할 수 있는 ‘검은 수탉’ 로고
이곳에서 생산하는 와인의 대부분은 그 유명한 ‘끼안띠 클라시코(Chianti Classico)’ 이다. 끼안띠 클라시코는 이탈리아 3대 와인 산지로 유명한 토스카나 지역에서도 대표격인 레드 와인이며, 끼안띠 클라시코는 끼안띠 와인 중에서도 가장 엄격한 제조 기준(품종, 제조방식, 숙성 기간 등)과 전통의 방식을 보존한 와인이라고 생각하면 쉽다. 끼안띠 클라시코는 1932년 이탈리아 정부로부터 DOCG(Denominazione di Origine Controllata e Garantita) 인증을 받은 최초의 와인이기도 하다.
열일 하시는 베라짜노 가이드
포도밭 구경을 마친 이후엔 성 안쪽의 와인 숙성고(셀러) 쪽으로 이동하여 먼저 베라짜노가 가지고 있는 포도밭의 토양 특성, 기후 등과 관련된 설명을 들었다. 언덕의 고도에 따라 토양의 특성이 달라지고 기후 역시 미세하게 달라지기 때문에 그러한 부분까지 고려하여 포도 농사를 짓는다고. 끼안띠 클라시코의 주 재료인 산지오베제(Sangiovese) 품종에 대한 설명도 들었다. 산미가 높은편이고 중간 이상의 타닌감을 주는 것이 특징이라고.
DOCG를 통해 인증된 끼안띠 클라시코의 생산자들
다음은 와인의 생산방식에 대한 설명을 들으러 와인 발효조들이 위치한 공간으로 이동하였다. 많은 내용들을 설명 해주었지만, 결국 전통 방식에 대한 집념과 품질을 향한 열정이 느껴지는 설명이었다. 베라짜노가 유명한 생산자라고 볼 수는 없겠지만 끼안띠 클라시코 인증을 받은 사실 자체만으로도 역시 명불허전이랄까. 수많은 스파클링 와인 중에서 샴페인이라는 분류 자체가 일정 수준 이상의 퀄리티를 보장하듯, 토스카나 지방의 와인을 선택하는데 있어서 끼안띠 클라시코를 선택한다면 적어도 실패는 없을 듯 하다는 생각이 들었다.
베라짜노에서는 와인뿐만이 아니라 전통 방식으로 오크통에서 오랫동안 숙성한 발사믹 제품도 생산한다. 전통 방식의 발사믹은 최소 12년 이상 숙성 시키는게 원칙이기 때문에 매년 증발로 인한 엔젤스 쉐어가 많은 편이고 그래서 증발 기간에 따라 보통 오크통의 사이즈를 줄여가며 숙성한다고 한다.(그래서 왠만한 와인보다도 제대로 만든 발사믹이 더 비싸다)
여기까지가 투어였고, 글이 너무 길어지니 투어 이후 시음&식사와 숙박편은 2편에 이어서..
이미 만들어진 Django 프로젝트의 ORM을 새로운 데이터베이스(DB)에 migration 할 때 종종 접하게 되는 대표적이 오류가 django.db.utils.IntegrityError: (1215, ‘Cannot add foreign key constraint’) 오류이다.
그 의미를 해석하자면 말그대로, ORM을 DB로 옮기는 과정에서(주로 Table을 생성하거나 수정) foreign key 제약 조건을 추가하는 작업을 DB 단에서 수행하지 못하였다는 뜻
이 문제가 발생하는 원인에는 여러가지 이유가 있겠지만, 크게 아래와 같이 두가지 경우가 실무단에서 가장 자주 발생하는 문제이다.
Django ORM에서 Foreign key 관계로 연결되어 있는 Model들이 DB 상에서 서로 다른 Collation을 가지거나 Engine을 가진 Table로 표현된 경우
MySQL/Aurora 기준으로 서로 다른 Engine(InnoDB, MyISAM 등)이거나 테이블에서 사용하는 문자열 인코딩을 의미하는 Collation이 서로 다르거나 할 경우, 그 두개의 테이블을 Foreign Key 관계로 연결하는 과정에서 문제가 생기는 경우이다.
일반적인 경우에 같은 DB Scheme 아래에서 서로 다른 Collation이나 Engine을 가지는 테이블이 생성되는 경우는 드물지만, 프로젝트를 진행하는 도중에 어떠한 사유에 의해서건 테이블의 Engine을 변경하였거나 Collation을 변경하여 Foreign Key로 연결된 테이블간에 서로 다른 Engine/Collation을 가지고 있는게 아닌지 확인이 필요하며 확인 후 다른 부분이 있다면 동일한 Engine/Collation으로 통일하여 테이블들을 변경하거나 다시 생성하면 해당 문제가 해결된다.
Django App(Model) 간 Circular Import Dependency가 존재하는 경우
INSTALLED_APPS = [
'membership',
'posts',
]
Django 프로젝트 내에서 위와 같은 App 이 존재하고 가정했을 때, 아래와 같이 각 App 내에서 서로가 서로를 참조하는 형태로 설계가 되어 있다면,
membership/models.py에서 from posts.models import Post를 선언
파이썬 인터프리터는 위 구문에 따라서 Post를 import하기 위해서 post/models.py로 갔더니 from membership.models import Member라는 구문 만나게 된다.
파이썬 인터프리터는 2의 구문에 따라 다시 membership/models.py로 가서 다시 from posts.models import Post 를 마주하게 된다.
서로가 서로를 무한히 참조하는 루프에 빠지게 된다.
어떤 App에 속한 Model 정의가 채끝나기도 전에 다시 해당하는 App 자신이 참조되기 때문에 발생한 문제이다.
보통 이러한 경우 모델에서 ForeignKey 필드를 선언 할 때, 참조할 대상 클래스를 직접 넣는 대신 model의 이름을 string 형태로 아래와 같이 직접 넣는 형태로 작성하면 해결이 된다.
이 방법 대신,
from posts.models import Post
class MemeberLike(models.Model):
user = models.ForeignKey(Post, on_delete=models.CASCADE)
아래와 같이.
class MemeberLike(models.Model):
user = models.ForeignKey('posts.Post', on_delete=models.CASCADE)
하지만, 이렇게 작성하더라도 문제가 발생하는 경우는 여전히 존재할 수 있으니 이미 작성된 Django Project 바로 새로운 데이터베이스에 DB migration을 최초로 진행 할 때이다. Django는 Migration을 진행 할 때INSTALLED_APPS 에 입력되어 있는 App의 Model들을 순차적으로 DB 상의 테이블로 생성 하는데, 테이블을 생성하는 과정에서 위와 같은 Circular Dependency가 존재하다보니 아직 존재하지 않는 테이블을 Foreign Key로 참조하는 Model들이 발생하고 그 Model들이 발견되는 즉시 1215, ‘cannot add foreign key constraint’ 에러를 출력하며 Migration 작업을 중단하게 되는 것 이다.
이 경우에 대한 해결책 역시 생각보다 간단하다. Migration 과정에서 오류가 나는 App의 Model 들을 확인하고 Circular Dependency가 존재하는(즉, 위의 예시에서와 같이 Foreign Key 필드 정의 시 대상 모델의 이름을 클래스 대신 string 형태로 넣은) 모든 필드를 주석 처리하고 migration을 진행 한 이후에 성공적으로 첫번째 migration이 완료되어 원래 Foreign Key 필드에서 참조하려는 모든 Model들의 테이블이 정상 생성된 이후에 주석을 다시 해제하고 makemigrations 명령어 이후 다시 migrate 명령어를 통해 migration을 진행 하는 것.
이렇게 진행 할 경우 과정 상으로는 Foreign Key에서 참조 대상이 되는 모든 Model의 테이블이 생성된 이후에, 해당 테이블을 참조하기 위한 Foreign Key 필드가 추가되는 형태이기 때문에 Django 의 migrate 명령어를 통해서 오류 없이 정상적인 migration이 가능해진다.
떼땅져에서의 즐거운 투어를 마치고, 근방의 레스토랑에서 샴페인 한잔과 점심을 먹고 오후 두시반으로 예약된 뵈브 클리코의 셀러 투어를 위해 이동 했다. 뵈브 클리코의 경우 앞서 투어에 참여했던 떼땅져보다 랭스 시내에서 남쪽으로 5~10분거리 더 떨어져 있다.
뵈브 클리코는 돔페리뇽, 모엣샹동과 함께 흔히들 말하는 세계 3대 샴페인으로 불리는 샴페인 브랜드이다. 애초에 전국/세계 N대 라는 식의 표현을 크게 선호하지는 않지만(그런 표현의 기준이 무엇인지 당최 알수 없다), 샴페인의 경우 약 120여개의 샴페인 메이커 중 상위 20여개의 샴페인 메이커가 전체 생산량의 70%이상을 담당하고 있고 이런 측면에서 본다면 뵈브 클리코는 생산/판매량 기준으로 최상위에 속하는 브랜드이다.
뵈브 클리코 특유의 Yellow Label 포인트로 장식된 대기장소와 셀러 입구
뵈브클리코는 지금은 명품 재벌(?) LVMH에 인수되어 모엣샹동, 돔페리뇽과 함께 LVMH 산하에서 운영되는 브랜드이기 때문에 투어 시작 전부터 LVMH의 브랜딩 파워(?)와 자금력을 체감 할 수 있었다. 투어 장소 전체가 뵈브 클리코 특유의 Yellow Label 색상을 테마로 하여 포인트있게 잘 꾸며져 있었달까.
내가 예약한 영어 투어 예정시각인 오후 2시반이 다 되도록 대기장소에서 아무도 만날 수가 없어, 혹시 장소를 잘못 찾아온 것은 아닌지 불안해 하며 데스크에 다시 문의를 했는데 알고보니 나와 동시간대 투어를 예약한 단체 손님(아마도 영국에서 가족 여행 오신 분들인듯)이 지각을 하는 바람에 나와 가이드 단둘이 투어를 시작하게 되었다.(어색함은 나의 몫)
길고긴 샴페인 숙성 동굴
앞서 방문한 떼땅져와 비슷하게 뵈브 클리코 역시 백암(Chalk) 암반 밑으로 펼쳐진 넓디 넓은 샴페인 숙성고를 가지고 보유하고 있었고, 각 샴페인 숙성고는 과거 백암 체굴을 위해 굴뚝 모양으로 다듬어진 모양새였다. 오늘의 투어 가이드에게 떼땅져 투어를 이미 다녀왔다고 말했더니, 떼땅져와 유사한 숙성고 이지만 그 규모는 자기네가 훨씬 크다고. 숙성고의 총 길이가 25km 정도로 랭스지방에선 가장 넓다고 한다. 전 세계에서 생산되는 모든 뵈브 클리코가 이 숙성고에서 숙성과정을 거친다고, 너가 마셔본 모든 뵈브 클리코 bottle이 여기서 왔다고 말하는 모습에서 그 규모를 짐작 해볼 수 있었다.
가이드의 설명에 따르면 뵈브 클리코의 원래 이름은 ‘뵈브’ 클리코가 아니였다고 한다. 원래는 샹파뉴 지역에서 직물 유통업을 하던 필립 클리코가 사업을 시작했는데, 필립 클리코는 직물 관련 사업을 주력으로 했고 와인 생산업은 부업 정도로 생각했다고 한다. 한편 같은 지역의 니콜라 퐁샤르당이라는 사업가 역시 직물 사업을 했는데, 이 둘이 친분이 두터웠는지 가 자녀들을 결혼시키면서 사업적 제휴관계도 발전 시켜왔다. 그래서 니콜라 퐁샤르당의 딸 바르브-니콜 퐁샤르당과 필립 클리코 가문의 프랑수아 클리코가 결혼했는데, 당시 바르브-니콜 퐁샤르당은 겨우 21살이었다고 한다.
결혼 후 아들 프랑수아는 사업을 잘 번창시켜 나갔고 그래서 아버지 필립은 아들에게 경영을 물려주고 은퇴했다. 특히 처음에는 주력이 아닌 부업 정도였던 와인 생산 쪽이 프랑수아가 경영을 맡으면서 사업이 잘 되어서 오히려 주력 사업 으로 올라설 정도였다고 한다. 그런데 결혼 6년 만에 남편이 갑자기 앓기 시작하더니 비슷한 증상을 보이고 며칠만에 세상을 떠났다. 그 바람에 퐁샤르당 여사는 27살의 어린 나이에 과부가 되었다. 그래서 브랜드에 ‘미망인, 과부’라는 뜻의 뵈브(Veuve)가 붙은 것.
퐁샤르당 여사는 남편의 죽음이 헛되지 않도록 하기 위해서, 남편이 일구어온 와인 사업을 본인이 직접 맡아 진행하기로 결심했다. 사실 당시 프랑스 사회에서는 여성이 사업의 전면으로 나서는 것이 거의 불가능한 시대였는데(투표권 조차도 없었던 시대) 퐁샤르당 여사는 이에 굴하지 않고 사업을 진행하여 오히려 남편이 하던 시절 보다도 더욱더 사업을 번창 시켰다고 한다.
퐁샤르당 여사가 개발한 데고르쥬망 기법을 설명하는 가이드
가이드의 설명에 따르면 오느날 샴페인 병 안에 들어 있는 효모 찌꺼기를 제거하는 방법인 데고르쥬망을 개발한 것도 퐁샤르당 여사였다고 한다. 그 전까지 샴페인은 병 안에서 2차 발효 과정에서 발생한 효모 찌꺼기를 병에서 쉽게 빼낼 방법이 없어서 잘 가라앉힌 다음 음용 했는데(흡사 막걸리??) 이 방법은 시각적으로도 좋지 못할 뿐더러(샴페인의 묘미 중 하나는 금빛의 맑은 액체에서 터져나오는 버블 아니겠는가?) 맛과 품질 유지의 측면에서도 좋지 못한 방법이었기 때문에 오느날의 샴페인을 만든 장본인이 바로 뵈브 클리코의 창립자인 것이다.
투어는 생각보다 다채롭게 구성이 되어 있었는데, 투어 중 가장 인상 적이었던 파트는 샴페인을 만드는데 사용되는 각 포도 품종들을 시각, 후각적으로 체험 할 수 있도록 구성했던 장면. 동굴 벽면에 펼쳐지는 영상과 함께 각 포도 품종별 향기와 그 포도 원액들을 블랜딩해 만들어지는 샴페인의 향을 직접 공간에 분사해서 느낄 수 있게 해준다.(역시 LVMH의 클라스란 이런 것인가..) 물론 그 향기가 실제 포도나 샴페인의 향기와 어느정도 거리감은 있었지만(다소 인공적이라는 느낌이 듦) 나 같은 샴페인 초보자들도 차이에 대해서는 명확하게 느끼고 이해 할 수 있었다.
이동하는 각 동굴마다 번호가 있고, 그 번호를 테블릿에 입력하면 동굴에서 진행되는 투어와 관련된 설명이 나온다.
원래 일반적인 투어에서는 가이드만 들고다니고 투어 참가자에게 테블릿을 제공하지 않는 것 같지만, 운 좋게도(?) Private Tour로 시작 했기 때문에(결국 중간에 지각한 영국 가족도 합류했다) 테블릿을 제공 받아 컨텐츠를 살펴보는 기회가 쏠쏠했다. 테블릿 내에 동굴의 지도가 그려져있고 투어를 진행하며 동굴을 이동 할 때마다 동굴 벽면에 적혀진 고유 번호를 입력하면 해당 동굴에서 진행될 투어와 관련된 각종 자료가 제공되는 방식.
투어의 묘미는 역시 시음 시간. 일반적인 뵈브 클리코의 Yellow Label (이것도 숙성 기간이 좀 더 긴 한정판이긴 했다)과 2012 Vintage의 Rose 를 비교 시음 할 수 있었다. 처음에는 블라인드 형식으로 제공하고 어떤 샴페인이 좀 더 복합적인 향을 가지고 있다고 생각하는지, 왜 그런지에 대해 각자 논의 하는 시간.
출구로 나가는 계단
출구로 나가는 계단에는 연도가 표기되어 있었는데, 이는 포도의 작황이 좋아 해당 년도의 포도만을 가지고 Vintage 샴페인을 만드는 경우 계단에 하나씩 표기를 한다고 한다. 샴페인의 경우 여러해에 걸친 포도를 이용하여 만든 와인을 혼합하여 제조하는 Non Vintage 방식이 일반적이었지만(지금도 그게 더 일반적이다), Vintage 방식의 샴페인을 선도적으로 시장에 내놓은 것도 뵈브 클리코 여사 였다고 한다. 이 정도면 샴페인 역사에 있어서 여러모로 큰 발자취를 남겼다고 볼 수 밖에.
살거면 사고 말려면 말아 였던 떼땅져와 다르게 뵈브클리코는 투어를 마친 이후 유료로 추가 시음도 가능했고, 특유의 노란색 포인트가 들어간 굿즈들을 열심히 팔고 있었다.
명품은 안사도 술은 못참지. 뵈브클리코 포인트가 들어간 샴페인 잔이 생각보다 합리적인 가격에 판매되고 있었고, 2012년 빈티지 샴페인의 가격도 국내 대비 합리적인 편이라(58유로) 캐리어가 무거워짐을 감수하고 샴페인 한병과 잔 2개를 구매했다.
이로서 랭스 여행의 목적이었던 샴페인 투어 2곳을 성공적으로 마무리하였다. 파리에서 랭스로 이동하는 것이 3일이라는 짧은 자유 시간 동안 나름의 큰 투자였지만 술을 사랑하는 사람으로서 술이 만들어지는 곳을 방문하는 것은 늘 즐겁고 짜릿한 일이 아닐 수 없는 것 같다.
랭스(REIMS) 남쪽에 위치한 TAITTINGER CELLAR Visit Center 입구
와인과 술에 대한 전문 지식이 많다고 볼 순 없지만, 술을 향한 열정만큼은 누구보다도 높다. 크래프트 맥주로 시작해서 위스키, 와인 까지 주종을 가리지 않고 한국에서도 열심히 마시고 공부하고 있다.
지금까지 세계를 여행하면서 여행하는 도시나 그 도시의 인근 지역이 유명한 술을 생산하는 곳이라면 일부러 시간을 내서라도 꼭 와이너리(와인 양조장)나 브루어리(맥주 양조장) 혹은 디스틸러리(고도주 증류소) 투어를 신청하여 다녀오곤 했다. 그렇게 다녀온 곳들이 벌써 대략 10곳 이상. 관련 업계 종사자가 아니고서 이렇게 여러곳을 다녀온 한국인은 아마 드물지 않을까?
매번 방문시 마다 느끼는 것이지만, 한국 인터넷 상에서는 방문과 관련된 정보가 극 소수 이기 때문에 혹시 나처럼 방문을 하실 분들에게 조금이나마 도움이 되길 바라며 그간의 술 생산지 방문기를 기록해보려고 한다.
파리에서 열리는 전 세계에서 가장 큰 식품 박람회 2022 SIAL PARIS에 회사 부스를 운영하게 되어 약 10일간 프랑스에 머무르게 되었다. 첫 7일간은 박람회 운영 준비와 실제 바이어 상담 등으로 파리에서 시간을 보냈지만 박람회를 마치고 부터 약 3일간은 개인 시간을 보낼 수 있었기에, 샴페인을 생산하는 샹파뉴 지방에서 가장 큰 도시인 랭스(Reims, 프랑스에서는 랭스라고 발음 하지 않지만 한국어 표기는 모두 랭스로 되어 있어서 랭스로 통일)로 이동했다.
파리 동역(Paris Gare de l’Est)TGV inOui First Class
랭스로 이동하는 방법은 간단하다 파리 동역(Paris Gare de l’Est)으로 이동하여 TGV inOui 기차를 탑승하는것. 약 40분 정도 소요되며, 기차는 고속철도의 강국 프랑스 답게 우리나라의 KTX/SRT 만큼이나 쾌적하다. 기차표는 인터넷으로 미리 예약하는게 기본이며 나 같은 경우는 시간대를 잘 고를 경우 일반석(Second Class)의 경우 31유로, 일등석의 경우 33유로 정도에 티켓을 구매 할 수 있었다. 짐이 많고 좀도둑들이 기승을 부리는 프랑스 이기 때문에 왕복 모두 조금 더 지불하여 일등석을 이용하였다.
샴페인 투어가 두개나 예정되어 있기 때문에, 1박을 랭스에서 하기로 결정하고 랭스역 바로 앞에 위치하고 있는 Ibis Reims Centre로 숙소를 잡았다. 역 개찰구에서 거의 3분 미만의 거리에 위치하기 때문에 파리를 오갈 때 시간에 대한 부담을 덜 수 있다는 점이 큰 장점이다.
호텔에 짐을 맡기고 투어 전까지 시간이 남아서 방문했던 랭스 노트르담 대성당. 파리에 있는 그것과 같은 이름이지만 개인적으로는 랭스의 대성당이 더 크고 아름다워 보였다.(물론 파리 노트르담의 경우 화재 사고로 복원이 진해 중이지만)
랭스(REIMS) 남쪽에 위치한 TAITTINGER CELLAR Visit Center 입구
드디어 방문한 떼땅져. 대성당을 기준으로 랭스의 남쪽으로 도보 15분 거리에 위치하고 있다.
FIFA WOMEN’S WORDCUP 후원 기념 포스터
떼땅져는 여러 예술가 들을 후원하고, 그들과 협업하여 한정판 보틀 디자인을 내는 것으로도 유명하다. 위 작품은 로비에 걸려있던 FIFA 여성 월드컵을 후원 기념 포스터. 떼땅져의 경우 투어를 시작하기전에 약 15분정도 떼땅져의 역사와 샴페인에 관한 영상을 시청하고 시작한다. 사실 별로 재미는 없지만, 투어를 시작하기전에 관련 배경지식을 어느정도 가지게 해준다는 측면에선 효율적인 방식 인듯.
오늘의 투어 가이드
투어는 영어/불어 중 선택 가능하고 각 시간대별로 인원 수가 정해져 있기 때문에 인터넷으로 반드시 미리 에약을 하고 오는 것이 좋다. 현장에서 구매하는 것도 가능은 한 것 같지만, 도착 했는데 남는 자리가 없다면 낭패. 더불어 시음하는 샴페인이 종류와 잔 수에 따라서 가격이 모두 다르기 때문에 본인이 맛보고 싶은 샴페인이 어떤 것인지에 따라 티켓을 구매하면 되겠다. 나는 투어에서는 가급적 가장 좋은 종류의 술을 먹어봐야 가격에 따른 맛과 품질의 차이에 대해 알 수 있게 된다는 지론을 가지고 있기 때문에 항상 가장 높은 등급의 티켓을 구매하는 편(기본 라인업인 Brut Reserve와 상대적으로 고가 라인업인 Comtes de Champagne Blanc을 맛볼 수 있는 L’ Instant Signe 선택)
이 글을 읽는 분들과, 대부분 샴페인 투어에 참여하시는 분들은 대부분 ‘샴페인 와이너리’ 등으로 검색하여 투어와 관련된 정보를 찾는 경우가 대부분일 것이다. 하지만, 사실 랭스 및 샹파뉴 지방에서 진행되는 대부분의 샴페인 투어의 경우 ‘와이너리’ 투어가 아닌 ‘숙성고(Cellar)’ 투어이다.
이 지역에서 생산되는 샴페인의 양이 어마어마하기 때문에 하나의 와이너리에서 와인을 양조하는 것도 아닐뿐더러, 일반적인 스틸 와인과 다르게 탄산을 만들어야하는 샴페인의 경우 병입 후 숙성 과정이 가장 중요하기 때문에 와이너리 보다는 숙성고 투어가 오히려 샴페인이라는 술을 설명하기에 좋은 장소가 아닐까?
어마어마한 규모의 지하 숙성고
이 지역의 유명 샴페인 생산자들의 경우 대부분(전부는 아니다) 떼땅져와 같이 깊은 지하동굴로 이루어진 자체 숙성고를 가지고 있다. 이 지하동굴의 경우 분필과 같은 다공성의 백암(Chalk) 암반 밑으로 형성되어 있으며, 대부분이 과거에는 백암을 채취하기 위해 형성된 일종의 광산이라고 한다. 그렇기 때문에 대부분의 동굴 천장은 위 사진에서 보는 것 과 같이 굴뚝 형으로 되어 있으며 벽면에는 과거에 돌을 채취하기 위해 사용 했던 도구들의 흔적이 그대로 남아 있다.
떼땅져의 경우 지하에 약 10~15km 에 달하는 동굴을 보유하고 있다고 하며, 투어에서 방문하는 곳은 그러한 동굴 중 한정된 일부 구역이다. 우리의 친절한 가이드는, 미리 정해진 동선대로 동굴의 각 영역들을 방문하며 샴페인의 역사와 만들어지는 방식에 대해 약 30여분간 설명을 이어간다.
사실 모든 투어 참여자가 가장 기대하고, 투어의 핵심이라고 할 수 있는 시음 시간.
샴페인은 맛있는 온도로 충분히 칠링되어 있고, 투어 종료에 맞게 모두 잔에 따라져있다. 투어 시작 전 리셉션에서 받은 본인의 티켓을 제출하면 티켓의 가격대에 맞는 샴페인을 내어주는 시스템.
나는 기본 라인업인 Brut Reserve와 상대적으로 고가 라인업인 Comtes de Champagne Blanc을 맛볼 수 있는 L’ Instant Signe를 선택 했기 때문에 두 잔의 샴페인을 손에 들었다.
샴페인의 전문가는 아니지만, 두 샴페인 모두 떼땅져 특유의 섬세하면서도 우아한 풍미를 가지고 있었다. 특히 고가 라인업인 Comtes de Champagne Blanc의 경우 그랑 크뤼 등급의 밭에서 생산된 100% 샤도네이 품종만을 사용하여, 첫번째 착즙한 포도쥬스로만 만들며, 빈티지가 좋은 년도에만 출시된다는 장황한 설명에 어울릴만큼 시트러스와 꽃향, 위스키를 연상 시키는 부드라운 바닐라 향 까지 누가 먹어도 좋은 샴페인이라고 느낄 수 있을 정도라서 매우 만족스러운 시음이었다.
현장 판매가격
일반 라인업의 가격 차이는 대략 5~6배 정도? 원래 맛보고 나서 만족스러우면 현장에서 한병 구매할까 생각하였으나 긴 출장 기간동안 점점 무거워지는 캐리어와 파리 내 백화점이나 주류판매점 대비 가격 매리트가 커보이지 않아서 구매는 생력하기로 했다. 뒤에 방문할 뵈브 클리코는 LVMH의 브랜드 답게 굿즈나 샴팡 판매에 열정적이어 보였으나, 떼땅져의 경우 그냥 관심있으면 사고 아니면 말아라 하는 식이라서 크게 사고 싶다는 생각이 들지 않기도 했고..
약 15분간 시음시간을 가지고, 떼땅져 샴페인 투어는 이렇게 마무리 했다. 주변 식당에서 샴페인 한잔과 함께 점심을 해결하고 바로 다시 두번째 샴페인 하우스인 뵈브 클리코로 이동.
Elastic Beanstalk 를 이용해서 웹 서비스를 Deploy 할 경우 어플리케이션의 Reverse Proxy로 사용되는 Nginx의 설정 때문이다. Nginx의 설정 값 중 client_max_body_size를 이용하면 client가 너무 큰 사이즈의 request를 보내지 못 하도록 제한을 걸 수 있다. 이 설정은 request의 Content-Length 헤더값이 client_max_body_size에 설정된 값을 넘을 수 없도록 제한한다.(악의적인 대용량 파일 업로드 등을 방지하는데 사용)
다만 이 client_max_body_size 의 기본 값이 1MB 정도로 너무 낮게 설정되어 있기 때문에, 1MB를 초과하는 파일을 POST로 업로드 하는 일반적인 상황에서도 에러메세지가 표시되며 요청이 실패하는 경우가 발생 한다.
해결 방법
Elastic Beanstalk 환경이 아니라면, Nginx 설정(nginx.conf)파일을 직접 수정하는게 가장 빠른 해결책 이겠지만, Elastic Beanstalk 을 사용하여 배포된 환경에서 해당 인스턴스에 직접 접속하여 Nginx 설정 파일을 직접 수정하는 것은 좋은 생각이 아니다. 직접 Nginx파일을 수정하면 오토스케일링 상황에서 새로 생성된 인스턴스에서는 여전히 동일한 이슈가 발생하거나 해당 어플리케이션을 새로운 환경에 배포 했을 때에도 동일한 문제가 재발 하여 환경의 강건성(Robustness)을 떨어뜨리는 요인이 되기 때문이다. 어플리케이션 코드 이외의 인프라에 신경을 쓰지 않아도 되도록 만들어주는 Elastic Beanstalk의 장점을 십분 살리기 위해서는 Elastic Beanstalk 에 업로드 되는 어플리케이션 패키지 내에서 해당 이슈를 해결 할 수 있도록 구성하여야 한다.
AWS Elastic Beanstalk 공식 문서 중 Extending Elastic Beanstalk Linux platforms 를 참고 하면 배포되는 환경의 Nginx 설정을 수정하는 방법에 대해 정확히 서술되어 있는데 어플리케이션 루트(아래 구조 예시에선 ~/workspace/my-app/)에서 아래와 같은 경로에 Nginx 설정 파일을 추가하면 해당 설정을 배포 환경의 Nginx가 포함하게 된다.
거의 6개월에 가까운 고생 끝에 결국 어느정도 마음에 들고 조건에도 맞는 매물을 찾아 계약을 진행하게 되었다. 모든 재화를 구매할 때 우리는 그 재화가 판매되는 가격에 상응하는 가치를 가지고 있는지, 그리고 해당 재화에 결함이나 특별한 하자가 없는지 판단하고 구매를 하는 것이 일반적일 것인데 주택의 경우 우리가 살면서 구매하는 재화 중 가장 비싼 축에 해당하기 때문에 이러한 두가지 과정을 더욱더 신중하게 진행 할 수 밖에 없다.
지난 6개월간 서울 전역을 임장하고 돌아다니면서 고생한 것은 사실 전자에 관한 것 이었고(예산, 거주 환경, 통근 등 다양한 제약조건 내에서 가격 대비 최고의 가치를 가진 아파트를 찾아내는 것) 막상 물건을 정하고 계약을 진행하려고 하니 후자와 관련된 것이 걱정이 되기 시작했다. 몇천만원 짜리 자동차를 살 때에도 인수 직전 물건에 문제가 없는지 꼼꼼히 살피는데, 아파트의 경우 그것에 비해 몇십배 비싼 재화 이면서도 자동차와 비교도 할 수 없을 정도로 많은 요소들(토지, 건물, 인테리어, 샷시, 배관, 보일러 등)이 하나의 재화를 구성하고 있는데 오죽 하겠는가.
신축 아파트의 경우 상대적으로 시설의 상태가 양호할 확률이 높고, 해당 아파트를 시공한 시공사가 일정기간 ‘하자보수’ 기간을 보장하기 때문에 크게 걱정할 것은 없지만 우리와 같이 준공 후 20년이 넘는 ‘구축아파트’를 매수 할 경우 세월의 풍파에 따라 시설물의 상태가 악화되어 있을 가능성이 높고 그러한 상황에서 매수한 아파트에 문제가 발생할 경우 이 문제에 대한 책임을 두고 매도인과 매수인사이에 분쟁이 발생할 가능성이 높아진다.
매도인의 ‘하자담보책임’
이러한 분쟁의 상황에 대비하여 대한민국 민법 제 580조에서는 매도인의 ‘하자담보책임’을 아래와 같이 규정하고 있다.
제580조(매도인의 하자담보책임) (1) 매매의 목적물에 하자가 있는 때에는 제575조 제1항의 규정을 준용한다. 그러나 매수인이 하자있는 것을 알았거나 과실로 인하여 이를 알지 못한 때에는 그러하지 아니하다.
제575조(제한물권있는 경우와 매도인의 담보책임) (1) 매매의 목적물이 지상권, 지역권, 전세권, 질권 또는 유치권의 목적이 된 경우에 매수인이 이를 알지 못한 때에는 이로 인하여 계약의 목적을 달성할 수 없는 경우에 한하여 매수인은 계약을 해제할 수 있다. 기타의 경우에는 손해배상만을 청구할 수 있다.
제582조(전2조의 권리행사기간) 전2조에 의한 권리는 매수인이 그 사실을 안 날로부터 6월내에 행사하여야 한다.
민법 제580조, 제575조 제1항, 제582조
즉, 매매의 목적물(아파트)에 하자가 존재하는 경우 매수인은 매도인에게 해당 하자에 대한 손해배상을 청구 할 수 있고 더 나아가 매매 계약을 해제 할 수 있다는 것이다. 다만, 위 조항은 무조건적으로 하자 발생 시 매도인에게 손해배상을 청구하거나 계약을 해제 할 수 있다는 조항은 아니며 일반적으로 아래와 같이 네개 조건을 충족해야 한다.
정당하게 성립된 매매 계약 이어야 함
매수인이 계약 시점에 해당 하자의 존재에 대해 알지 못했어야하며, 매수인의 과실로 알지 못한 경우는 인정되지 않음(즉, 매도인이 하자에 대해 계약시점에 미리 고지하고 매매한 경우는 해당하지 않으며 하자에 대해 충분히 확인이 가능하였으나 매수인측의 과실로 계약시점에 인지하지 못한 경우는 해당하지 않음)
매수인은 하자를 인지한 날로 부터 6개월 이내에만 손해배상 청구 혹은 계약해제를 요구 할 수 있음(즉, 계약 시점이 기준이 아니고 하자를 인지한 시점을 기준으로 6개월 이내임)
하자는 계약시점에도 존재하여야 함(판례 상, 계약 시점은 계약 체결일 뿐만이 아니라 계약의 최종 이행일인 잔금일 까지를 의미함. 잔금일 이후 매수인이 하자를 발견하게 되는 경우 매수인은 적어도 잔금일 이전에도 해당 하자가 존재함을 입증해야 함)
인터넷에 관련된 내용을 찾아보면 특히 3과 관련하여 잘못된 정보가 공유되고 있는 경우를 심심치 않게 목격 할 수 있는데 – 가령 잔금일로 부터 6개월내 발생한 하자는 모두 매도인의 책임이라는 둥 – 이는 위에서 언급한 민법 조항만 잘 읽어보아도 잘못된 내용임을 알 수 있으며 심지어 개업 공인중개사 분들도 잘못된 내용을 작성, 공유하여 많은 혼란을 초래하고 있으므로 반드시 유의가 필요하다.
하자 담보 책임과 관련한 계약서 상 특약 조항 관련
보통 노후한 아파트에서 발생하는 중대하자의 경우 누수, 균열 등으로 발생 할 경우 비용이 크게 발생될 뿐만 아니라 해당 문제를 해결하는 과정에서 이웃간에 불필요한 스트레스가 발생하는 경우가 많기 때문에 매도인과 매수인 모두 해당 문제에 대해 민감하게 반응하기 마련이고, 이로인해 보통은 매매 계약서 상 특약을 넣고 계약을 체결하는 경우가 많다.
하지만 이번 매매 계약을 진행하면서 여러 방면으로 공부하고 정리를 해본 결과 정답은 ‘어차피 법에서 정의하고 있는 내용으로, 관련된 내용에 대해서는 별도로 계약서에 기입하지 않는 것’이라고 결론 내렸다.
통상 특약사항에 기입되는 내용들이 ‘중대하자가 발생할 경우 잔금일 이전에는 매도인 책임 잔금일 이후에는 매수인 책임'(이 경우 매도인이 발견하기 어려운 중대하자에 대해 잔금일 까지도 숨길 경우 매수인에게 불리함) 이라던지 ‘중대하자가 발생할 경우 잔금일로 부터 6개월까지는 매도인이 손해를 배상한다.'(이 경우 매수인의 과실여부나 계약 시점 하자 존재 여부와 무관하게 매도인이 배상하여야 하므로 매도인에게 불리함) 등 매도인이나 매수인 일방에 유리한 쪽으로 공평하지 않게 기입되는 경우가 많고(아마 공인중개사들이 분쟁 발생 시 책임 회피용으로 넣는 경우도 많은 것으로 안다.) 이렇게 공평하지 않게 작성된 특약은 어차피 큰 분쟁이 발생 하였을 경우 법정 공방으로 이어질 가능성이 높기 때문이다.
어차피 법에서 정확히 정의하고 있는 사안이라면, 매도인과 매수인 사이에서 특약 내용과 관련하여 불필요한 논쟁을 발생시키기 보다는 아예 관련 조항을 빼버리고 분쟁 발생 시 법적인 판단을 받는 것이 더 현명한 방법이라고 판단하였다.
중대 하자를 대하는 매수인의 태도
결국, 하자 발생 시 매도인의 하자담보 책임과 관련하여 가장 까다로운 부분은 해당 하자가 ‘계약시점(판례에 따르면 계약체결일 뿐만이 아니라 계약의 이행 시점인 잔금일 까지)’부터 이미 존재 하는 하자이어야 한다는 것이다.
따라서, 이사한 바로 다음날 갑자기 누수 등 중대한 하자가 발생한다고 하여도 그 하자가 잔금일에도 존재한다는걸 입증하지 못한다면 매수인은 매도인에게 하자보증책임을 요구하기 어렵다.
이러한 상황에서는 결국 아래와 같이 잔금일 이전까지 꼼꼼하고 지속적으로 매수 대상 물건에 대한 하자를 점검하는 것이 매수인에게 가장 중요한 자세라고 생각한다.
매물 탐색 과정에서 첫 방문시 부터 집의 하자 유무에 대해 다방면으로 파악한다.(주요 하자 요소들에 대한 리스트를 미리 머리속에 담아두고 점검, 매도인 혹은 세입자와의 대화를 통해서 간접적으로 하자 유무 및 과거 히스토리 파악)
계약서 작성일에 매도인에게 하자 유무와 하자 발생 시 책임에 대한 질문을 하며 그 답변 사항에 대해 녹음(분쟁이 발생하여 소송전에 이르게 될 경우 최소한의 안전 장치 확보, 본인이 대화에 참여하면 녹음이 불법이 아님)
잔금일 잔금을 치르기전 주택의 최종 상태 확인하여 미리 고지되지 않은 하자 사항이 발견될 경우 매도인과 보상 협의
잔금일 이후 만약 하자가 발생할 경우, 즉시 해당 하자의 전문가와 객관적인 상담을 진행하고 계약 시점에도 존재하였을만한 하자로 판단될 경우 하자 발생 사실에 대해 매도인에게 내용증명 등을 통해 통보
결론 : ‘어차피 완벽한 보호장치는 없다.’
결국, 매수한 주택에서 하자가 발생하는 일은 실제로 존재 할 수 있고 구축 아파트라도 매우 비싼돈을 주고 구매해야하는 작금의 현실 속에서 하자가 발생 할 경우 보상 책임에 대해선 매도인과 매수인 사이에서 피곤한 책임 공방전으로 이어질 가능성이 높다. 어떠한 경우에도 매도인 혹은 매수인 한쪽을 일방적으로 보호 할 수 있는 수단이 존재한다고 볼 수 없고, 계약의 당사자인 매수자가 인터넷에 떠도는 카더라식의 정보나 공인중개사의 말을 일방적으로 믿기보다는 스스로 관련 조항에 대해 공부하고 대비책을 마련하여 하자 발생 시 리스크를 헷징하는 것이 가장 최선의 길이라고 생각한다.
“세상에 내 편은 아무도 없고, 결국 모든 계약을 진행 할 때는 스스로를 지킬 방법을 항상 연구하자” 오늘의 교훈.
(저는 법률 전문가가 아니며, 위 내용은 법률 전문가의 검토를 받은 사항도 아닙니다. 부동산과관련된 모든 결정과 판단은 본인의 책임하에 신중하게 진행 하시길 바랍니다.)
이 글은 작년 7월경 본 블로그에 작성 하였던 Python/Django로 쇼핑몰 만들기 와 연결되는 글이며, 해당 글이 인프라와 사용하는 패키지 등이 혼합되어 작성되어 있었던 것과 달리 좀 더 서비스 인프라의 관점에서 작성되었습니다.
안녕하세요. 인테이크에서 시스템 개발과 운영을 담당하고 있는 조영일입니다. 인테이크는 현재 총 2개의 쇼핑몰(인테이크, 라이브스토어)을 운영하고 있으며 국내 대부분의 쇼핑몰과 달리 Cafe24, 고도몰 등의 쇼핑몰 솔루션을 사용하지 않고 프론트엔드 부터 결제 연동 등 백엔드 시스템 까지 모두 100% 자체 개발된 쇼핑몰을 운영하고 있습니다.
이 글은 이러한 쇼핑몰을 구축하면서 저희가 어떠한 도구와 스택을 도입하였는지, 쇼핑몰의 요소별로 설명한 글입니다. 쇼핑몰 기능에 집중하여 설명하므로, 일반적인 서비스 스택과는 다소 다른 구조를 가지고 있음을 참고 부탁 드립니다.
서비스 개발
개발 언어 : Python
그 유연성과 확장성 덕분에 너무나 많은 서비스들이 선택하고 있는 개발 언어인 Python을 사용 하고 있습니다. 웹 서비스 뿐만 아니라 사내 업무용 챗봇 및 통계 산출 도구 등 90% 이상의 프로젝트가 Python으로 개발 되었습니다.
웹 개발 프레임워크 : Django
전 세계적으로 가장 유명한 Python 기반 웹 프레임워크인 Django를 사용하고 있습니다. “The web framework for perfectionists with deadlines.”라는 캐치프레이즈에 맞게, Django는 웹 개발에 필요한 매우 풍부한 기능을 기본 탑재하고 있어서(덕분에 때로는 너무 무겁다고 평가 받지만) 필요한 기능을 가장 빠르게, 체계적인 방식으로 개발 할 수 있는 장점이 있습니다. 현재 인테이크 쇼핑몰, 라이브스토어 쇼핑몰, 쇼핑몰 및 외부 채널 주문을 취합 수집하고 물류센터와의 연계를 위한 SCM 시스템, 회사 공식 홈페이지 등 인테이크의 거의 모든 웹 서비스는 Django를 통해 개발 되었습니다.
서비스 호스팅
서비스 호스팅 : AWS
서비스 초기에는 국내 IDC를 사용하였으나, 서버에 대한 유지보수 이슈가 커짐에 따라 서비스의 개발과 운영에 집중하기 위하여 AWS(Amazon Web Service)를 도입하여 현재는 모든 서비스를 클라우드 상에서 제공하고 있습니다.
배포/오토 스케일링
배포/오토스케일링 : AWS ElasticBeanstalk
AWS에서 제공하는 어플리케이션 배포 서비스인 AWS ElasticBeastalk를 이용하여 어플리케이션을 배포하고 있습니다. AWS ElasticBeanstalk의 경우 기본적으로 AWS ELB(Elastic Load Balancer)를 통한 로드 밸런싱을 지원하며 git push 만으로도 새로운 버젼의 어플리케이션 배포 작업이 가능하여, 복잡한 배포 절차를 직접 구성 할 필요가 없습니다.AWS ElasticBeanstalk의 경우 배포 과정에서 pip를 통해 repository에 정의된 requirements.txt를 바탕으로 python dependency에 대해 자동으로 설치를 해주지만, 프로젝트에서 요구되는 python 이외의 dependency(리눅스 패키지 등)의 경우 ElasticBeanstalk에서 지원하는 Config Script를 작성하여 배포 단계에서 자동으로 설치되도록 하였습니다.오토스케일링의 경우 위에서 말한대로 AWS ElasticBeanstalk에서 ELB 를 통해 기본 제공하는 기능으로서, AWS 설정 콘솔에서 일정 시간 동안 Network In/Out 발생 할 경우 자동으로 서비스 인스턴스를 늘이고 줄일 수 있도록 하였습니다.
정적 컨텐츠 처리
스토리지 : AWS S3
인테이크는 기본적인 서비스 인프라를 AWS(아마존 웹 서비스) 상에서 운영하기 때문에 정적 컨첸츠 역시 AWS에서 제공하는 정적 컨텐츠 스토리지인 AWS S3를 통해 관리하고 있습니다.
CDN : AWS CloudFront
정적 컨텐츠는 모든 사용자가 상시적으로 접근 하며, 쇼핑몰의 경우에 일반적으로 그 용량이 크므로(다수의 상품 썸네일, 긴 상품 상세 이미지 등) 컨텐츠를 제공하는 속도를 높이는 노력이 필요 합니다. 일반적으로 컨텐츠를 제공하는 서버와 사용자 사이의 물리적인 거리가 컨텐츠의 전송 속도에 큰 영향을 미칠 수 밖에 없는데, 인테이크는 이 문제를 AWS CloudFront 를 통해서 해결 하고 있습니다.AWS CloudFront는 AWS에서 제공하는 CDN(Contents Delivery Network)로서, S3에 존재하는 원본 정적 컨텐츠를 전 세계에 존재하는 50여개의 CloudFront 엣지 로케이션 서버에 캐싱 하므로서 전 세계의 사용자가 동일한 주소로 이미지를 요청하더라도 그 사용자에게 물리적으로 가장 가까운 엣지 로케이션 서버에서 파일을 제공하므로서 컨텐츠 빠르고 안정적으로 서빙 할 수 있도록 해줍니다.또한 AWS CloudFront를 사용 함으로서 모든 컨텐츠에 대해 사용자 도메인을 적용 할 수 있으며(예를 들면, 인테이크의 모든 컨텐츠는 https://i.intakefoods.kr의 도메인을 가집니다.) SSL 인증서를 적용 하여 모든 컨텐츠를 안전한 HTTPS 프로토콜로 제공 할 수 있습니다.
비동기 작업 처리/작업 스케쥴링
비동기 작업 처리 : Celery
쇼핑몰에 무슨 비동기 작업이 필요할까 의문을 품을 수 있지만, 실제로는 꽤 많은 비동기 작업에 대한 처리가 필요합니다. 사용자의 액션(주문완료 등)과 함께 작업이 실행되어야 하나 그 작업이 사용자의 경험에 해로운 blocking을 유발할 우려가 있는 작업들(eg. 외부 API와 I/O 작업이 필요한 Email/SMS/카카오 알림톡 발송), 실행 시간이 긴 작업(eg. 회원 대상 대량 SMS 발송) 등을 비동기로 처리하지 않을 경우 쇼핑몰의 매끄러운 운영에 상당한 방해요소가 될 수 있습니다.이러한 비동기 작업을 처리하기 위하여 python에서 가장 유명한 비동기 작업 워커 패키지인 Celery를 도입하였습니다.
작업 스케쥴러 : Celery-beat
또한 쇼핑몰을 운영하다보면 주기적으로 수행되어야 할 작업들 역시 많습니다. (eg. 매일 자정에 당일 매출 통계를 전 멤버한테 메일로 발송하기, 물류센터 API로 부터 자동으로 운송장 번호 가져오기, 특정 기간 동안 쇼핑몰 사용기록이 없는 회원 휴면 계정 처리하기, 매월 회원들의 구매 기록을 기반으로 회원 등급 평가하기 등)이러한 정기적 작업 스케쥴링을 위해서는 보통 리눅스의 crontab 등을 고려할 수 있지만, 위의 Celery 패키지에 포함된 celery beat가 이러한 작업 스케쥴러 기능을 제공하고 있어 해당 기능을 통해 작업 스케쥴러 기능도 Celery와 유연하게 통합하였습니다.
메세징 큐(브로커) : AWS ElastiCache
Celery와 같은 비동기 워커를 사용하기 위해선 메세징 큐가 반드시 필요합니다. 워커가 처리할 task들을 쌓아놓고 task의 처리 상태를 공유함으로서 다수의 워커가 중복된 task를 처리하는 일 없이 효과적으로 task를 처리 할 수 있습니다.Celery의 경우 기본적으로 RabbitMQ, Redis Amaon SQS, Zookeeper 등의 메세징 큐를 지원하지만 그 중 현재 가장 Stable 하게 지원되는 것은 RabbitMQ와 Redis 입니다. 저희는 그 중 상대적으로 좀 더 범용성이 있는(메세징 큐 이외에 캐싱 용도로도 효과적으로 사용 가능한) Redis를 선택하여 메세징 큐로 사용하고 있으며, 유지보수의 편의성을 위하여 AWS ElastiCache를 통해 호스팅된 Redis를 사용하고 있습니다.
버그 레포팅/운영
버그 레포팅 : Sentry
서비스 운영 시 발생하는 예상 밖의 exception이 발생하는 경우에 대비하기 위해 real-time crash reporting 도구인 Sentry 서버를 자체 구축하고, 해당 서버를 통해 live 서버에서 발생하는 exception이 발생할 경우 해당 내역을 자동으로 메일과 사내 커뮤니케이션 도구인 Slack으로 레포팅 되도록 하고 있습니다.
ChatOps : Slack
ChatOps는 DevOps의 방법론 중 하나로, 메신저를 통한 사람의 명령에 따라 운영과 관련된 다양한 처리를 수행하고, 그 응답을 메세지 형태로 제공하는 ChatBot을 서비스 운영에 적극적으로 도입하는 것을 의미합니다.
인테이크는 사내 업무용 커뮤니케이션을 위한 도구로 Slack을 사용하고 있으며, Slack API를 통하여 사용자의 명령에 응답 하는 ChatBot을 개발하였습니다. ChatBot은 사내 SCM 시스템, BitBucket, 버그 레포팅 시스템 등과 연계 하어 운영과 관련된 다양한 수치를 명령어 하나로 간단히 조회하고, 운영 시 발생하는 각종 이슈들을 해당 서비스에 직접 접속 할 필요 없이 Slack 상에서 담당자가 처리 할 수 있도록 구성 하였습니다.
이상 인테이크 서비스 스택에 대한 설명이었습니다. 이 글에 대한 피드백이나, 저희와 비슷한 환경에서 개발하시는 분들의 질문 등은 언제든 환영이니 아래 메일 주소나, 댓글로 연락 주시면 가능한 빨리 답변 드리도록 하겠습니다. 감사합니다.