마이갤러리 개발 삽질기 – 2) AJAX는 축구팀이 아니다

사실 이번 미니프로젝트를 기획하며 가장 주안점을 둔 사항 중 하나는 "JS와 친해지기" 그 중에서도 "AJAX 기법과 친해지기" 였다.

AJAX는 "Asynchronous JavaScript and XML" 의 약자로 비동기적인 웹 애플리케이션 제작을 위한 웹 개발 기법이라고 한다. 우리나라 개발 커뮤니티에선 "에이작스" 라고 읽는 것이 보편적인 것 같고 아주 가끔 "아작스" 랄지 "아약스" 라고 읽는 분 있다.

기술 이름이 참 거창하다..... 참고로 내가 옛날부터 좋아하고 잘 아는 Ajax는 아래 사진과 같다. 

마! 암스테르담 등킨 드나스 무 밨나!

죄송하다.

AJAX를 만든 분이 해당 축구팀과의 매칭을 노리고 이름을 지은 것 같진 않지만...AJAX라는 명칭은 내가 생각하는 신박한 IT기술 네이밍 중 하나이다. 

사용 분야는 방대하다. 아마 우리가 요즘 살면서 하루라도 AJAX 기술을 경험하지 않고 살기는 정말 어려울 것이다. 네이버 야구 생중계창에서 자동으로 스코어 바뀌는 것, 그것이 바로 에이작스다. 페북 댓글 단다고 새로고침 되지 않는 것, 그것이 바로 에이작스를 통한 웹 앱 구현이다. 

백엔드 개발을 하며 AJAX를 위한 API개발을 하지 않는 경우는 거의 없다. 더구나 지금 내가 기획한 것처럼 CRUD기능이 있고 회원가입 등 폼에서 중복 방지 로직을 구현하려면 AJAX의 적용은 선택이 아닌 필수가 된다.

 

AJAX 실행의 흐름

간단하다. 웹페이지 상의 특정 이벤트(문자열의 입력, 버튼의 클릭, 화면 아래 끝까지 스크롤을 내리기 등)를 받았을 때 미리 정의해놓은 스크립트가 실행되며 XMLHttpRequest를 서버로 전송하고, 그 요청에 대한 response를 받아와 다시 스크립트 상에 정의된 바에 따라 웹페이지를 통해 사용자에게 노출시키는 것이다.

옛날부터 사용되었던 XMLHttpRequest, 즉 XHR이라는 명칭이 즐겨 사용되고 있지만 최근 AJAX 구현에서 request와 response는 JSON(JavaScript Object Notation)을 사용하는 것이 일반적이다. 이는 JSON의 포맷 자체가 몹시 가벼우면서도 인간도 이해하기 쉬운 직관성을 갖고 있기 때문이고, 그냥 다른 사람들이 많이 써서 그렇기도 하고, 무엇보다 jackson 등의 의존성을 통해 POJO에서 JSON으로의 변환이 무척 빠르고 쉽기 때문이기도 하다.

그래서 AJAX를 구현하고 실행시키기 위해서는...

  • Script가 필요하다. 외부에 정의된 .js 파일이든 웹페이지 내의 스크립트 영역이든 스킙트가 정의되어 있어야 한다.
  • 백엔드 로직이 필요하다. 이 로직은 적당한 JSON 응답을 돌려줄 수 있어야 한다.
  • 통신을 시작시킬 이벤트를 구상해야 한다. 버튼을 클릭하게 할 것인가? 폼을 채워넣게 할 것인가? 심지어 일정 주기로 계속 AJAX 요청을 날리게 짤 수도 있을 것이다(이 기법을 "에이작스 폴링" 이라고 하는데 1단계에선 다루지 않는다).

<마이갤러리> 에서의 적용.

마이갤러리 프로젝트에선 다음의 분야들에서 AJAX 통신을 적용했거나, 적용할 예정이다. 

  • 회원가입 시, 아이디 중복의 체크. 아이디를 입력받음과 동시에 서버에 XHR을 날려 중복 여부를 실시간으로 체크한다.
  • 카테고리 생성 시 카테고리명 중복의 체크. 개념은 상동.
  • 방문자 초대링크 생성. 버튼을 누르면 짠 하고 새 링크가 뜨는 개념.
  • 추후 구현할 메시지 수발신 로직 구현 시에, 받을 회원 이름을 자동완성시켜주는 로직(구현예정).
  • 일정 주기로 서버에 접속해 새 메시지가 있는지 여부를 체크(구현예정).

 

아이디를 입력하다가....
중복이 발생돼 경고창을 보여줬다.

시행착오 끝에 이제 AJAX에 대해 조금이나마 이해하게 된 바, 그 눈물나는 삽질기를 여러분과 차근차근 공유해 보고자 한다. 

회원가입 폼

회원가입 폼에서 AJAX의 역할은 단 하나 - 중복된 아이디로 회원가입이 이뤄지는 것을 프론트단에서 막아내는 것이다.  우리가 흔히 누르는 [중복 확인] 버튼을 구현하는 개념이라고 생각하면 쉬울 듯하다.

버튼을 누르는 방법도 충분히 괜찮지만, 그냥 입력하기만 해도 자동으로 판정이 떨어지는게 더 힙하다(...)고 생각해서 사용자가 한 칸 한 칸 아이디를 채울 때마다 에이작스 통신이 일어나도록 기획하였다.

그런데 칸이 비어있거나 아이디가 너무 짧은데도 에이작스 통신이 일어나는 것은 낭비라고 생각했다. 칸이 비어있다면 아직 입력하지 않은 것으로 간주해 어떠한 동작도 하지 않고, 아이디가 다섯 글자 이하라면 좀 더 입력하라는 메시지를 프론트단에서 노출하고 서버로는 어떠한 통신도 이뤄지지 않게 설계하였다.

비밀번호에 대한 중복체크는 (당연히) 구현하지 않았고 다만 6글자 이상을 암호로 사용하도록 설계했다. 아이디가 중복되지 않으면서 비밀번호가 6글자 이상인 경우 회원가입 버튼을 활성화하도록 구현하였다.

아래는 회원가입 폼을 위한 자바스크립트 코드다:

 join.js


간단한 코드인데 쓸데없이 엔터만 많이 쳐 놔서 길어보이는 거다;;

원리는 정말 간단하다. 아래에서도 설명하겠지만 아이디 입력 폼에서 텍스트 입력 이벤트가 일어날 때마다 checkId()를 실행시킬 것이다.

아래는 글자가 한땀한땀 입력될 때마다 상기한 스크립트가 실행되게끔 설계한 HTML 폼이다.

JOIN.HTML


checkId()는 서버와의 AJAX 통신을 수행한다. 데이터는  HTTP POST로 던질 것이고, 서버는 중복 여부를 unique라는 boolean 오브젝트에 담아 돌려줄 것이다.

만약 입력한 아이디가unique하다면(중복이 일어나지 않아 서버가 unique = true를 반환했다면) 전역 변수로 선언한 idCheck에 true가 입력될 것이고, 아이디 중복 경고창은 jQuery hide 메소드를 통해 사라질 것이다. 마지막에는 setJoinButtonActive()가 실행되어 아이디와 비밀번호 모두 조건을 충족한다면 회원가입 버튼을 활성화시킨다.

말로 하니 어렵다;;

백엔드 로직도 한 번 살펴보자.

APICONTROLLER.JAVA

DUPLICATEDINFOCHECKER.JAVA


본래 AJAX를 위한 비즈니스 로직 구현에 있어서, 받은 오브젝트를 그대로 되돌려주는 것이 best practice라고 알고 있다. 즉, 지금 우리의 상황을 보면 회원가입을 통해 Admin 객체를 만들어내고 있기 때문에 에이작스 response로도 Admin 객체를 똑같이 되돌려주는 것이 가장 좋은 구현이란 얘기다.

그러나 지금의 케이스에 똑같이 적용하기에는 무리가 있다. 우선 우리는 회원가입 과정 중 하나인 "아이디 중복 체크" 를 만들고 있기 때문에 논리적으로도 아직 Admin 객체가 만들어지지 않은 상태다.

또한 회원가입 폼에 구현된 AJAX의 응답으로 Admin 객체를 반환한다면, 그 안에 담겨있는 암호를 비롯한 각종 회원 정보가 불필요하게 한번 더 전송되는 취약점을 갖게 된다.

따라서 나는 AJAX response를 위한 별도의 클래스를 구현하는 것이 맞다고 판단했고 그 결과가 DuplicatedInfoChecker 다. 이름이 맘에 들지 않는다. 이런 경우에 사용하는 컨벤션이 있는지 알고 싶다. 

ApiController에는 @RestController 어노테이션을 붙여놓았다. 이를 통해 리턴값이 POJO가 아닌 JSON으로 반환될 수 있게 구현할 수 있다. POJO에서 JSON으로의 변환은 com.fasterxml.jackson에서 담당하게 된다.

회원가입 창에서의 AJAX 구현 삽질은 이것으로 마무리됐고, 다음 포스팅에서 초대링크 생성 과정에서의 AJAX 적용 삽질기를 공유해보고 싶다.

public static void main (String args[]){
System.out.println("hello, wordpress!");
}

마이갤러리 개발 삽질기 – 1) 나는 왜 이걸 만들고, 어떻게 만들 셈인가 + 1단계 완성 회고

코드스쿼드에서의 과정을 마치고 집에서 빈둥거리던 참이었다. 뭐라도 하지 않으면 배운 것을 곧 까먹겠다는 불안감이 몰려왔다.

배운 것을 복습하는 건 성실한 학생의 기본이지만 나는 사실 성실한 학생이 못 된다. 초등학교 시절부터의 유서 깊은 전통이다. 그럼에도 운이 좋아 노력한 것에 비해 늘 좋은 성과를 거뒀고 주변인들은 이런 나를 보고 “머리가 좋다” 며 칭찬하지만, 사실 머리가 좋다는 말 자체가 그리 좋은 칭찬이 못되는 데다가 나는 내 머리가 그리 좋은 편이 아님을 잘 알고 있다.

그간 잊고 살아도 상관 없었던 학교에서의 수많은 쓰잘데기 없는 배움들을 머릿속에서 비워낸 건 오히려 좀 자랑스럽게 생각하지만, 코딩이야 앞으로 내가 밥을 지어먹고 살 도구로 삼을 예정이므로 복습은 물론 심화 학습을 할 필요가 있었다.

그래서 시작했다. 이런 걸 만들기로….

포부는 거창해야 제맛….

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

진지하다.

코드스쿼드 박재성 선생님의 과정 회고 슬라이드를 보면서 내가 지난 6주간 학습한 내용을 다시 한 번 정리해 보았다:

  • Spring Boot 시작하기
  • Spring JPA, MySQL 맛보기
  • 원격 환경 배포하는 경험, 특히 AWS를 중심으로(사실 과정 전에도 수도없이 했던 것.)
  • TDD, 냄새 안 나는 코드를 향한 집념. 특히 TDD와 유닛 테스트에 대해 배운 것은 정말 큰 배움이었다. 
  • “동의되지 않는 권위에 굴복하지 말라” 사실 동의되는 권위가 별로 없어서 문제…. 

그리고 내가 구상한 마이갤러리의 기술적 요구사항, 그리고 단계별 구현 계획을 구성해 봤다.

마이갤러리가 사용할 기술.

  • Spring JPA + Java Persistence를 활용한 기본적인 CRUD.
  • Amazon S3 + AWS Java SDK를 활용한 오브젝트 관리.
  • AJAX. (AJAX polling 포함)
  • Spring Security + Social
  • WebSocket(Probably? 언젠가 실시간 메시징을 이걸로 구현해보고 싶다)

단계별 구현할 기능

1단계.
  • 사진 / 카테고리 CRUD. DB 기반 회원정보관리
  • AJAX 기반 파일 업로드.
  • 세션 기반 사용자 초대 기능.
2단계.
  • Spring Security를 이용한 회원 정보 관리 + Social Login 클래스 활용.
  • AJAX 폴링 기반 푸시알림.
  • Amazon S3 upload tracker stream을 이용한 파일 업로드 progress bar 구현. 이건 어떻게 해야 할지 정말 감도 안 온다 ㅋㅋㅋㅋ

썩 만족스럽지는 않지만 지난 2주간의 삽질로 1단계는 그 구현이 완전 성공하였다.

http://mygallery.ap-northeast-2.elasticbeanstalk.com/

실제 사진이 어떻게 표시되는지를 보고싶다면 아래의 초대 링크를 눌러보면 된다: mygallery.ap-northeast-2.elasticbeanstalk.com/invitation/wpfoipdkr

노파심에 드리는 말씀이지만 지금 서비스는 완전한 개발 허접이 개발로 개발한 수준이고 보안과 DB 운영이 모두 눈뜨고 봐 주기 어려운 수준이다(인메모리 H2를 사용중이다). 실제 회원가입을 한 후 이 서비스를 사진 공유용으로 사용해보려는 분이 없기를 기대한다. 아울러 모든 정보는 평문으로 전송되고 있음을 유념하시기 바란다.

그래도 2주 삽질해서 이런 걸 만들어냈다.

“개발은 원래 작게 시작하는 것” 이라고 많은 전문가들이 이야기한다. 몇 안되는 동의되는 권위 중 하나이므로 그들처럼 나도 아주 작게, 그리고 단순하게, 지난 6주간 배운 것들을 즐겁게 복습하며 만들었다.

즐겁게 출발했기에 앞으로의 고도화 과정도 즐거우리라 확신한다.

1단계 구현 회고.

긍정 평가
  • 처음으로 제공받은 템플릿도 없이 스스로 부트스트랩 예제를 뒤지고 CSS, JS 파일을 만들어가며 하나의 작동하는 웹 서비스를 배포하는 경험을 했다. 임기응변에 능한 나의 강점을 잘 발휘했다.
  • AWS 파일 업로드를 구현하며 AWS IAM roles에 대해 심화학습할 기회를 가졌다.
  • 매일 조금씩 나아가는 모습을 보였고, 큰 그림을 그려놓고 세부적인 부분을 더해가는 꼼꼼함이 좋았다. 이 과정 속에서 정해진 납기 (9월 17일, 지난 일요일)를 정확히 지킬 수 있었다.
  • AJAX에 대해 많은 공부를 했고, 이제 당황하지 않고 클라이언트 사이드와 백엔드 모두 원하는 내용대로 구현해볼 수 있는 수준이 됐다.
부정 평가.
  • 작업 우선순위의 설정에 대해 더 깊은 고민이 필요하다. 지금처럼 프론트-백엔드를 모두 구현해야 하는 프로젝트에 임할 때, 프론트가 먼저인가? 백엔드가 먼저인가? 알 수 없지만 지금처럼 프론트와 백을 왔다갔다하며 개발하는 것은 좋지 않다.
  • 완전한 TDD를 하지 못했고 유닛 테스트를 게을리했다. 아직도 Model 클래스의 구상을 잘 못하고 있다. Model 클래스와 Domain 클래스의 역할에 대한 더 깊은 공부와 고민이 필요하다.
  • 상기한 TDD를 게을리한 것의 대가로 만족스럽지 않은 코드를 얻어야했다. 기능 구현에 충실하여 목표했던 기능은 다 이루었으나 깔끔한 코드라는 인상을 받지 못한다.
  • 남의 JS 라이브러리 등을 참고했으면, 내가 무엇을 어디서 보고 어떻게 참고했는지를 정확히 기록해 두는 것이 좋겠다. 남들이 “이거 어디서 보고 따라했어요?” 라고 물으면 바로 대답해줄 수 있어야 한다. 그래야 나도 복습이 용이해진다.

-1단계까지 구현한 현재 코드는 https://github.com/seulgiwendy/yoojingram 에 올라가 있습니다. 


public static void main (String args[]){
System.out.println("hello, wordpress!");
}

MAN ND363F A95(경기도 굿모닝 2층버스) 시승기

지난 2014년 남경필 경기도지사가 취임한 이래 경기도는 천만 도민의 염원과는 다르게(....) 지하철/경전철 중심 교통 대신 광역버스 확충 정책을 열심히 밀어붙이고 있다. 

이는 물론 남경필 도지사의 탓이 아니라 중앙정부의 수도권 교통정책이 중전철 증설 억제/기초자치단체 중심의 경전철 추진, 광역버스 확충 등으로 바뀐 것에도 이유가 있다. 그러나 황당한 노선 선정으로 계획 단계에서부터 욕을 먹던 용인 에버라인이 한동안 공기수송 상태를 면치 못했고 의정부 경전철은 얼마 전 파산해버렸다. 덕분에 경전철, 특히 고가 경전철에 대한 경기도민들의 인식은 거의 혐오시설 수준으로 떨어진 상황이다. 

내가 살고있는 김포시의 경우 고가 경전철 추진이 수 년 전부터 계획되어 왔으나, 용인과 의정부에서의 실패로 고가 경전철은 범시민적 저항 운동에 직면하게 되었고, 2014년 지방선거 당시 지하철 9호선 연장을 공약한 유영록 후보가 시장에 당선되었으나 9호선 연장은 애초에 실현 가능성이 0에 수렴하는 허황된 공약이었다. 

결국 김포공항~한강신도시 구간에 8개 정거장을 갖는 지하 경전철 노선이 확정, 착공되었고 2018년 중순 개통을 앞두고 있는 상황이다. 

하지만 2010년부터 본격적으로 입주에 들어간 김포 한강신도시의 대중교통 대책은 사실상 없는 것과 다름이 없었고, 한강신도시 지역을 위한 유일한 교통 대책은 개화동에서 올림픽대로와 직결되는 왕복 6차로의 도시고속도로인 김포 한강로 건설 뿐이었다.

당연히 서울로 나가는 광역버스마다 승객이 가득 찼고, 광역버스 입석 금지가 실시된 이후 버스 노선을 둘러싼 주민간의 갈등도 첨예해졌다. 김포에 사는 공무원이 거의 없는 김포시청은 이런 황당한 짓거리를 하기도 했다. 

썰이 너무 길었는데, 여튼 오늘 타 본 1004번 광역버스, MAN ND363F는 이런 시대적 배경(?) 속에 남경필 도지사께서 교통 취약지역 김포에 친히 하사하신 감사한 문명의 이기이며, 동네 초등학생들의 선망의 대상이다. 

버스의 전체적인 외관은 위 사진과 같으며 총 좌석 수는 72석, 휠체어석 1석을 장비하고 있다. 1층에 12석과 휠체어석, 2층에 60석이 배치되어 있으며, 1층 후미부는 엔진룸으로 좌석이 배치되지 못한 것이다. 

버스의 전고는 4.3m, 전장은 12.8m이다. 엔진은 360마력을 발휘하는 MAN A95 엔진이며 유로 6 대응, 요소수 시스템을 갖추고 있다. 

노선 중 가장 낮은 지장물의 높이가 4.5m 정도이며, 그야말로 머리 바로 위로 표지판과 육교 등이 지나가는 수준이다.

한가한 시간대에 탑승해서 그런지 승객은 거의 없었다. 탑승하자마자 2층으로 올라갔다. 계단은 굉장히 가팔랐고 2층에 올라서자 허리를 완전히 펴기 어려울 정도로 천정 높이가 낮았다. 

2층에서도 정차벨을 잘 누를 수 있도록 좌석마다 정차벨이 장치되어 있었으며, 안내방송 시스템도 완비되어 있었다. 천정 곳곳을 유리로 뚫어 놓아 개방감을 준 것도 좋았다. 

운전석이 없는 2층의 특성을 잘 살려, 전방은 통유리가 장착되어 있다. 어린이 동반 승객이라면 이 유리를 바로 앞두고 있는 4개의 좌석이 무척 탐날 것 같다. 그러나 햇빛을 정면으로 받는 낮 시간대엔 굉장히 덥다는 점을 참고해야 할듯. 에어컨이 빵빵하게 나오지만 시원한 느낌이 별로 들지 않을 정도로 더웠다. 

물론 내가 더운 걸 좀 싫어하는 편이기는 하다. 

2층에서 조망한 서울 시내의 모습은 정말 색다르게 다가왔다. 마치 도로의 제왕, 도심 정글의 포식자가 된 기분. 모든 차량과 행인들을 내려다볼 수 있다는 점이 굉장한 특권처럼 느껴졌다. 

높이가 실감이 좀 나시는지....

앞서가는 버스의 지붕, 공조 장치까지 훤히 보일 정도로 이 버스의 높이는 상상 외로 훨씬 높았고, 표지판과 고가 도로 밑을 지나갈 때엔 혹여 닿지는 않을까 아찔할 정도였다. 

이런 높이 덕에 차체의 흔들림이나 기우뚱거림은 정확히 두 배로 증폭되어 승객들에게 전달되는 기분이었다. 물론 1층 좌석은 훨씬 덜하겠지만 적어도 2층에서는 스마트폰으로 글을 읽기 어려울 정도로 어지러움이 느껴졌다.  

이 점은 운전기사님도 잘 알고 계시기에, 2층 버스는 무조건 정속 주행, 서행을 최우선시하는 모습이었다. 탑승 중 티맵 안전운전모드로 속도를 측정해 본 결과 서울 시내 구간에서는 70km/h를 넘지 않았고 올림픽대로에서도 80km/h 정속주행이었다. 멀미가 좀 나긴 해도 난폭운전으로 인한 것이 아닌 만큼 오히려 일반 광역버스에 비해 더 안전하겠다는 생각조차 들었다.

비행기 착륙하는 느낌. 뭔가 갑자기 쑥 하고 낮아진 기분.

버스는 광화문역에서 50분 정도 달려 우리집 앞에 도착했다. 좌석마다 장착된 정차벨을 누른 후, 하차 준비를 위해 1층으로 내려갔다. 가파른 계단을 내려가며, 바쁜 아침 출근길에 급히 계단을 내려갈 누군가는 반드시 여기서 넘어질 거라고 생각했다. 버스에서 내린 후에야 내가 얼마나 높은 곳에 앉아 있었는지 실감이 났다. 

멀미가 좀 났던 점을 제외하면 즐거운 2층 버스 경험이었다. 물론 맨날 타면 즐겁지는 않을 것 같다. 그러나 광역 버스의 입석 수송이 금지된 지금 시점에서 2층 버스는 광역전철/지하철 사각지대 주민들을 위한 거의 유일한 교통 대안이다.

많은 논란과 우려 속에 도입된 2층 버스지만, 아직까지는 당산역에서의 가벼운 사고 외엔 안전사고가 기록되지 않고 있다. 안전하게 운행된다면 앞으로 2층 버스는 수많은 경기도민들의 고마운 교통수단으로 자리잡게 될 것 같다. 무엇보다 장애인 승객들도 집 앞에서 안전하게 탈 수 있는, 지금으로썬 거의 유일한 서울행 교통 수단이 아닐까 싶다.

2017 쉐보레 볼트 EV 시승기

서울에서 부산까지 충전 없이 갈 수 있는 자동차, 뒷좌석에 앉아도 머리 안 닿는 자동차, 사고싶어도 못 사는 자동차 등 이 차를 설명하는 수식어는 정말 많지만 나는 아래의 광고가 이 차의 본질을 그대로 보여주고 있다고 생각한다.

150km ~ 190km을 달리는 전기자동차도 충분히 훌륭하고, 특히 시계를 벗어날 일이 없는 운전자에게는 훌륭한 통근수단 옵션이 될 수도 있다. 그러나 볼트 EV는 300km대 후반의 레인지를 확보해 장거리 주행은 물론이고, 전기차 운전자라면 으레 감내해야 할 "잔여 거리 불안감" 을 제대로 해소시켜줬다. 말하자면, 오늘 밤 주인공이 내가 된 것 같은 날, 100km도 안 남은 주행거리를 보며 드라이브 욕구를 애써 삼키는 대신, 내 마음 내키는 대로 어디로든 액셀 페달을 밟을 수 있단 얘기다. 

배터리를 아낄 방법을 "공부" 하며, 내가 닿고자 하는 목적지에 가는 최적의 주행 경로를 "계획" 해야 하던 전기차의 시대를 과감히 청산하고 일상에서 자연스레 탈 수 있는 전기차의 시대를 개막한 것이다. 

전기차의 새로운 시대를 열고 있는 볼트 EV가 국내 시장에 진출한 시점부터 시승 기회를 호시탐탐 엿보고 있었으나, 돈 주고 사기도 어려운 차를 시승하는 일은 (업계사람도 아닌 대학생의 입장에선) 거의 불가능에 가까웠다. 

아쉬움에 괜히 유튜브에 올라오는 시승기만 반복 재생하고 있었지만, 너무나 감사하게도 이번 제주 여행 기간 중 롯데렌터카가 볼트 EV의 시승 기회를 마련해 주셔서 나도 드디어 이 새로운 전기자동차를 운전해볼 수 있게 됐다.

"거대한 쇼핑카트처럼 생겼다" 는 생각을 잠시 해봤다.

차의 외관은 전기차/친환경자동차들이 갖고 있는 전형적인 패스트백의 형태를 그대로 따랐다. 실내 거주공간을 충분히 확보하면서도 공기 저항을 줄이기 위한 디자인이 차 외관 곳곳에서 엿보였다. 

특히 현대 아이오닉과 달리 뒷 좌석의 머리 공간을 충분히 확보하고, 무엇보다 뒷유리의 시야를 넓게 확보해 둔 점은 높이 평가할 만하다.

언급한 김에 좀 더 비교를 해보자면, 현대 아이오닉의 경우 HEV/PHEV/BEV의 세 모델에 패밀리 룩을 적용했기 때문에 순수 전기차 모델의 라디에이터 그릴부가 좀 심심해 보이는 단점이 있었다. 볼트 EV는 쉐보레의 디자인 코드를 적용하면서도 앞모습을 세련되게 마감한 점이 더욱 마음에 들었다. 

또한 이 차는 전방 시야가 넓고 운전석 포지션이 높은 편으로, 골목길 주행에 서툰 초보 운전자나 체격이 작은 운전자에게도 안정감을 줄 수 있을 것 같다.

실내 공간은 3~4인이 탑승하기에 부족함이 없었고, 뒷좌석 플로어 아래에 배터리가 배치되는 전기차의 특성을 잘 살려 2열 좌석 바닥을 평평하게 마감한 부분이 특히 마음에 들었다. 계기반은 충분한 정보를 제공하면서도 직관적이었고 10.9인치 콘솔 디스플레이는 다양한 정보를 큰 글씨로 제공해줬다. 그러나 내비게이션이 미탑재되어 있고 메뉴 화면 진입 시 로딩이 너무 긴 점은 개선이 필요해 보인다. 

디스플레이, 실제로 보면 정말 크다
직관적인 레이아웃의 계기반.

이 차의 실내에서 가장 아쉬운 부분은 트렁크 공간으로, 경차보다 크고 준중형 세단보다 작은 수준의 공간을 제공한다. 쉐보레의 설명에 따르면 트렁크의 용량도 경쟁차종에 비해 적지 않으며 2열 좌석 폴딩 시 충분한 적재공간을 확보할 수 있다지만, 어떻게 봐도 이 차의 트렁크 공간은, 특히 이 차를 구입하거나 이용할 평균적인 사람들에게는 부족하다. 

언뜻 보기엔 크지만...
캐리어 세 개에 이렇게 된다.

외관 상 차가 MPV 스타일을 하고 있다고 해서 트렁크 공간도 넓을 거라고 오해할 수도 있고, 실제로 나도 그런 오해와 기대(?) 를 갖고 차를 인수받았지만, 내 짐과 일행의 캐리어 두 개를 다 싣고 나니 트렁크가 꽉 차는 모습을 보며 오해와 기대를 일순간에 깰 수 있었다. 특히 여행 목적으로 제주를 방문해 이 차를 빌리는 사람들에게 작은 트렁크 공간은 큰 제약으로 작용할 수도 있다. 

트렁크에 짐을 가득 싣고 곧바로 도로로 나갔다. 환산 출력 204마력을 뿜어내는 전기 모터는 성인 3명에 여행가방 세 개를 싣고도 거침없이 치고나가는 매력을 뽐냈다. 초반부터 풀 토크가 발생하는 건 이미 널리 알려진 전기차의 주행 특성이지만, 볼트 EV는 경쟁 차종에 비해 고출력 전기모터를 채용해 그 장점을 극대화했다. 

80km/h ~ 100km/h 준고속 영역에서의 주행 안정성은, 개인적인 느낌이지만 아이오닉을 능가하는 것처럼 느껴졌다. 아이오닉은 하이브리드/플러그인/일렉트릭 세 모델 모두에서 준고속 주행 시 뒤가 약간 흔들리는 문제가 있다. 물론 아이오닉의 경우 내가 주로 혼자 탑승한 상태에서 시승을 진행했다는 점은 감안해야 한다. 뒷좌석과 트렁크 영역에 하중이 걸린 상태에서 평가해볼 기회가 있었으면 더 정확한 비교가 되었을 듯 싶다. 

전기자동차는 구동계통의 소음이 없기 때문에 노면 소음이나 풍절음이 강하게 들어오는 것처럼 느껴지게 마련이다. 아이오닉 일렉트릭을 수 차례 타면서도 이 점이 늘 거슬렸었는데, 볼트 EV는 주행 소음이 거의 느껴지지 않는다. 오히려 전동 열차가 출발할 때 느껴지는 전기 모터 구동음이 실내로 유입되는데, 이 소리가 나쁘게 들리지 않는다. 초반 토크와 이에 따른 가속감으로 만들어진 기분 좋은 주행 느낌이 오디오 효과로 완성되는 기분이다. 

"펀 드라이브" 라는 걸 입모양이 말해주는 모습이다.

2박 3일간 500여 킬로미터를 주행했고, 충전은 두 번 했다. 물론 이 자동차의 환경부 공인 주행거리 383km을 감안해 본다면 한 번 정도의 충전으로도 전체 일정을 소화하는 것에 큰 무리는 없었을 터다. 그러나 여름철에는 에어컨을 가동하게 되고, 주행 가능거리의 30% 정도는 항상 남겨둬야 한다는 일종의 불안 심리가 작동하게 된다. 에어컨의 경우 23~24도 AUTO 모드로 작동 시 약 30km 정도의 주행 가능거리가 차감됐다. 

롯데렌터카가 제공하는 전기차 충전 카드는 한국전기차 충전서비스에서 운영하는 <해피 차저> 충전기에서만 사용할 수 있었다. 이 카드를 이용해 충전하면 충전비가 전액 무료다. 

문제는 이 충전카드를 제공하는 렌트카 업체가 제주 도내에 꽤 많다는 사실이다. 제주도에서만큼은 해피차저 충전기가 환경부 충전기보다 인기가 많았다. 1일차 일정을 마치고 2일차 새벽에 찾은 조천농협 충전기는 아침 7시라는 시간이 무색하게 충전을 기다리는 차들이 있었다. 내가 충전을 마치고 나설 때도 충전 차례를 기다리는 차량이 한 대 있었다. 

볼트 EV는 DC콤보 방식 급속충전을 지원한다. 포트 위치는 앞쪽.

여행 중 찾은 두 곳의 충전소는 모두 잘 작동하고 있었고 회원카드 인증도 잘 됐지만(환경부 충전기보다 인증이 더 빠르다는 느낌을 받았다) 무슨 이유에선지 충전인프라 API 연동이 잘 되지 않는 것 같았다. 대기중이라고 표시된 충전기에 충전중인 차가 있다던지, 내가 충전을 꽂아 놓은 충전기가 비어 있다고 표시된다던지 하는 자잘한 버그가 있었다. 

상쾌한 주행 느낌에 유류비도 한 푼 들지 않는 볼트 EV를 타고 2박 3일간 제주도 곳곳을 누볐다. 그때 그때 가 보고 싶은 곳을 중심으로 일정을 짠 바람에 동선이 그렇게 효율적이지 못했고, 덕분에 3일간 500km이 넘는 거리를 주행했다. 

고작 500여 km을 타 본 느낌으로 이 차를 감히 평가할 순 없겠지만, 아주 좋은 첫 인상을 받았다. 이 차가 왜 "Game Changer"라는 평가를 받았는지, 왜 출시 2시간만에 완판됐는지 그 이유를 엿볼 수 있었던 시승이었다. 

트렁크 공간이 좁다는 점을 제외하면 이 차는 나와 같은 제주도 단기 여행객의 렌트카로도 적절하다. 2~3인의 팀에게 충분한 실내 거주공간을 제공하고, 운전자에게는 넓은 시야와 높은 시트 포지션을 제공해 제주의 좁은 골목도 쉽게 파고들 수 있게 해 준다. 제주도청이 제공하는 공영주차장 무료이용 등 각종 전기차 혜택도 빼놓을 수 없다. 

맑은 제주를 지켜야 한다는 과분한 사명감을 제외하더라도, 볼트 EV는 한번쯤 타볼 이유가 충분한 차였다.

(이 포스팅은 롯데렌터카의 시승차량 지원으로 작성되었습니다.)

2017/03/16

아침에 학교를 가려고 화장실에 들어가 거울을 보니, 흰머리가 꽤 났다. 꽤 라는 표현도 부적절하다. 수북하게 났다. 새치라고 보기 어려운 수준이다.

사실 내게 하얀색의 체모가 나는 문제는 하루이틀 된 문제가 아닌 것으로써, 지난 방학 침착맨처럼 수염을 길러 보겠다고 덥수룩한 산적 모드로 들어갔을 때 턱과 구레에서 솟아나오는 낚시줄 더미를 보고 말 그대로 경악을 한 적이 있다.

20대 중반의 나이에 흰머리라니, 미중년의 상징이기도 한 멋진 흰-회색 그라디안트 백모도 아닌 애매모호한 낚시줄 색깔의 머리가 이렇게 잔뜩 올라오다니 그야말로 고민이 아닐 수 없다.

생각해보면 나는 어릴 때부터 흰머리가 많았다(그때 당시엔 나이가 나이인지라 “새치”라고 칭하고 넘어갔다) . 부모님과 주변인들은 내가 어린 나이에 여러 이유로 스트레스를 많이 받아, 몸이 견디질 못해 그렇게 된 것이라고 나름의 분석을 했다. 그러나 초등학교 6학년 짜리가 스트레스로 인해 흰머리를 발모시킨다는 것은 학계에 보고된 바가 없는 케이스로서 일고의 가치가 없는 낭설에 불과했다.

나는 내가 흰머리가 나기 시작한 이유를 정확하게 알고 있다. 나는 초등학교 5학년 여름, 그러니까 열두 살이 되던 해의 여름에 “흰머리의 저주”에 걸렸다. 어쩌다가 그런 몹쓸 저주가 걸렸는지도 기억하고 있다.

그 해, 2004학년도에 같은반이 된 여자애가 하나 있었다. 대중적인 인기를 끄는 스타일의 소유자는 아니었지만 나의 특이한 이성관에 비추어 보았을 때 (열두 살의 내 눈에) 너무나 매력적인 여학생이었던 것으로 기억한다. 좋아하면 좋다고 말해야 하는데 그 무렵의 남자새끼들이 늘 그렇듯이 난 그애를 쫓아다니면서 별 시답잖은 걸로 시비를 털고 다니기 시작했었다.

그러다가 우연히 그 아이 아버지의 사진을 보게 됐다. 내 기억에 의하면 그 분은 지금 기준으로도 꽤나 미중년으로서, 대한항공 조종사 유니폼이 엄청 잘 어울리는 분이었다(우리 동네엔 예나 지금이나 항공조종사 분들이 꽤 많이 거주하신다). 멋있으면 멋있다고 말을 해야 하는데 역시나 그 무렵의 남자새끼들이 늘 그렇듯이 나는 파일럿 모자 사이로 슬쩍 삐져나온 그의 흰머리를 발견하곤 엉뚱하게도 낄낄거리며 그 여자애를 아래와 같이 놀리기 시작했다.

“니네 아빠 흰머리, 니네 아빠 흰머리.”

예상에도 없던 니네아빠 흰머리 어택을 당한 그 친구는, 이내 당황하는 표정을 짓더니, 곧 닭똥같은 눈물을 흘리며 엉엉 울고 말았다.

그리고 정확히 그 해 2학기부터 내 머리에 흰색 새치가 올라오기 시작했다. 13년이 지난 지금까지도 이는 현재진행형이다.

지금까지도 다행스럽게 생각하는 것은, 그애 아버지가 대머리가 아니였단 점이다.

R 공부하기- 1) AWS EC2, AMI, GitHub

기대를 갖고 수강신청한 전공 수업 "온라인데이터커뮤니케이션"의 사용 언어가 Python에서 R로 변경되었다. Python은 이미 데스크탑에 IDE를 갖춰 놓았고, iPad에도 거금 10.99$를 투자하여 Pythonista라는 IDE 비스무리한 애플리케이션을 설치해둔 터였다. 무엇보다 Python은 코드잇 선생님들의 지도 하에 기초를 꽤 닦아둔 언어여서 갑작스러운 변경이 당혹스러울 수밖에 없었다. 

새로운 언어를 배우는 것은 물론 내게 도움이 될테니 꺼려지는 변화는 아니겠지만, R언어를 사용하기에 마땅한 iPad 애플리케이션이 아무리 찾아봐도 없다는 게 문제였다. 물론 가장 좋은 방법은 짱짱한 노트북을 한 대 장만해 학교에 들고다닐 수 있는 개발 환경을 구축하는 것이겠지만, 이 수업 하나 듣자고 딱히 필요성도 느끼지 못하는 노트북을 구입할 수 없었다. 이미 왠만한 일은 iPad로 클라우드상에서 끝내고 있기 때문에..... 

구글에 무작정 "R언어 아이패드" "아이패드 R코딩" "R on the ipad"와 같은 쿼리를 던져넣었고, R의 IDE인 Rstudio가 Web에서 접근 가능한 서버 형태로 배포되고 있다는 사실을 파악했다. 그리고 단숨에 떠오른 것은 아마존의 클라우드 서비스 AWS, 그리고 EC2였다. 

이 로고를 처음 보는 사람은 거의 없을 것이다.

AWS는 물론 종량제 클라우드 서버지만 감사하게도 처음 사용자용 Free Tier를 제공하고 있고, 이 요금제는 언제나 실행 가능한 ubuntu 서버를 포함한다. 

오랜만에 리눅스 명령어 좀 치겠구만....이라고 생각하던 차에, 또한 구글링으로 아래와 같은 블로그를 발견. 

능력자는 도처에 있다.

http://www.louisaslett.com/RStudio_AMI/에서는 이미 다 세팅된 아마존 가상머신 이미지(AMI:Amazon Machine Image)를 배포하고 있었다. 정확히 말하면, 해당 AMI가 AWS Marketplace에 등록되어 있다. 

평소 미국에서의 삶을 동경하는 나는 내 서버만이라도 북가주에 둬 볼까 하고 N, California를 클릭할 뻔 했으나, 사용중인 LG U+망의 극악무도한 해외망 접속 속도를 떠올리고 아쉬움을 잔뜩 머금은 채 Seoul Region을 선택할 수밖에 없었다. 

저 링크를 누르기 전에 미리 AWS 계정을 만들어 두는 것이 좋다. Amazon 계정이 있다면(직구를 한번이라도 해본 적이 있다면) 해당 account에 AWS 서비스가 등록될 것이고, Amazon 계정이 없다면 이 참에 새로 하나 만들면 그만.

AMI를 내 EC2에 설치했다. 설치하는 과정은 물 흐르듯 자연스러워서 스크린샷을 찍거나 설명을 참고할 것 조차 전혀 없었다. 내 데스크탑에 오리진 게임 설치하는 거보다 쉬웠음. 난생 처음 만져보는 클라우드 서버라고 바짝 쫄아 있었는데 민망하게 됐다. 

보안 그룹? 보안 군집? 뭐라 번역을....

딱 하나 신경써줄 부분은 생성한 EC2 Instance에 http로 접근할 수 있게 보안 그룹 설정을 만져줘야 하는 것이다. 해당 AMI로 배포되는 R Studio 서버는 HTTP 80번 포트를 사용한다. 80번 포트까지 모든 포트가 열려있도록 Inbound 설정을 하면 된다. SSH도 열어줘야하는데 아마 default로 열려있을 것이다. 

모든 설정을 마치고 생성한 Instance의 Public DNS로 접속하면 아래와 같은 R studio 로그온 창이 잘 보일 것이다. 기분이 매우 좋다. 

로그온 화면. 기본 ID/PW는 rstudio/rstudio임.

이제부터 이 콘솔에서 수행하는 모든 작업은 EC2가 연산하고, 해당 EC2에 귀속되어 있는 EBS에서 데이터를 저장할 것이다. 기본 저장용량 세팅은 10GB로 되어 있는데 한학기간 수업을 수강하는 데에 아마 충분하고도 남을 거라 본다.

Web 기반이니까 머신에 관계없이 HTTP페이지를 탐색할 수 있는 기기라면 어디서나 이 R studio에 접근할 수 있다. 당초 이 삽질(?)을 한 목적이었던 iPad에서 스튜디오에 접근해 보았다.  

잘 된다.

보시는 것처럼 노트북 살 돈을 굳혔음을 알 수 있다. 

어차피 모든 작업이 클라우드 상에서 연산되고 기록되므로 GitHub Integration은 딱히 필요없을 것 같기도 했지만, 그래도 그때그때 배운 내용을 노트해 둔다는 의미가 있으므로 GitHub 연결을 수행하기로 했다. 이 과정이 의외로 까다로웠다. 

우선 R Studio에서 내 리파지토리로 접근할 수 있게 public key를 추가시켜주는 과정이 필요하다. R Studio에서 발급한 public key를 GitHub에 등록시켜두면, R Studio에서 그 키를 제시해서 내 리파지토리에 코드를 푸시하는 방식이다. 말이 어려운데 그냥 현관문 디지털 도어락에 암호 설정하는거랑 똑같다 말만 그런게 아니라 원리가 그거랑 똑같음. 

GitHub Integration 과정 전반은 이 포스팅을 보고 따라했다. 

여기서 키를 만들고,
여기서 등록한다.

shell을 두려워하면 안된다. 아주 간단한 코드 몇 줄을 치고 나니 R Studio가 그간 commit됐던 변경 내용들을 리파지토리에 푸시하기 시작한다. (프로젝트를 만들 때 Version Control을 사용하겠다고 체크해둬야 함.) 

벨덕이라서 죄송합니다.

코드 달라고 열심히 remote repository 접근법을 알려주던 내 OnlineDataComm 리파지토리가 R 코드를 받아먹고, R언어의 리파지토리임을 파란색으로 나타냈다. 여담이지만 저 언어별 색깔 커스터마이즈할 수 있는 것인지 궁금. 자바가 9호선색(...)이라니 영 어울리지가 않아서...... 

샘플 코드라도 몇 개 올려놓고 스샷을 올리고 싶지만 R은 전혀 몰라서 (hello world도 모름) 그럴 수 없는 사정을 양해해 주시기 바란다. 

오늘 배운 점

  • iPad R 코딩 환경(혹은 어디서나 접속할 수 있는 클라우드기반 개발 환경)을 구축하기 위해 AWS 인스턴스를 세팅하는 방법.
  • R Studio에서 GitHub 연결을 수행하는 방법.
  • 코딩한다는 핑계로 노트북을 굳이 살 필욘 없단 사실.  

더 알고싶은 점

  • 헬로월드라도 할 줄 알았으면 좋았을걸.....
  • AWS Instance는 종량제 과금인데, Instance를 Free Tier 한도 이상 사용했을 때 내게 알림 없이 바로 과금이 시작되는 건가? 

리빙 포인트

  • 노트북 없이 코딩 수업을 수강하려면, 클라우드 서비스를 적극적으로 알아보는 것이 좋다. 
  • 아이패드는 한번 사놓고 두고두고 뽕을 뽑아 갈아 마시는 것이 좋다.

전기차 빌려서 하루 놀기 -3-

충전을 성공적으로 마치고 화성시청에서 수원으로 향하기로 했다. 수원은 내 고교시절 3년간의 추억이 깃든 도시다. 물론 기숙사학교에서의 학교생활이란 게 학교 안에서만 지내기가 쉽고 지역사회 탐방의 기회를 갖긴 어려운 게 보통이지만, 나는 고등학교 3년 내내 방학이었기 때문에 수원 곳곳을 누비고 다닐 기회가 많았다. 

김포의 3분의 1 정도 면적에 김포시 인구의 세 배가 모여 살고 있는 신기한 도시인 수원시는, 성실하게 학교생활 하겠다는 핑계로 기숙사에만 갇혀있기에는 너무 볼거리가 많고 신나는 도시였다. 

식상하다고 느껴질지 모르겠지만 나는 "수원 볼거리" "수원 관광지" 등을 묻는 질문에는 거의 예외없이 "화성 일주"라고 대답한다. 화성을 제대로 보고 느끼려면 최소한 계절에 한 번씩은 와서 일주할 것을 추천한다. 입문자에게는 늦봄~초여름에 일주하는 것을 추천한다. 오르막 내리막이 반복되어 체력적으로도 부담이 없고, 물 흐르는 화홍문이 너무 예쁘기 때문이다. 특히 화홍문은 낮에 한 번, 밤에 한 번 찾는 것이 좋다. 

이런 느낌.

화성 일주는 팔달문 서편에서 시작해 동쪽 끝(동남각루)에서 끝내는 것이 가장 좋다. 수원시민이 아니라면 소정의 입장료를 징수한다. 개방식 요금소이기 때문에 매표소가 설치된 구간을 피한다면 무료로 일주할 수도 있겠지만, 이정도 문화유산을 관람하는데 그정도 관람료는 기꺼이 지불할 줄 알아야 한다고 생각한다. 

경기 남부권에서 차를 몰 일이 있다면 일부러라도 수원시내를 통과하는 편인데, 고등학생 시절 버스로만 오가던 거리를 내가 운전대를 잡고 지나가는 느낌이 새롭기도 하고, 아는 동네 나올 때마다 아는척 하느라 운전이 즐거워지기 때문이다. 어쨌든 이번에도 화성시청까지 왔으니 수원을 안 찾을 수 없었다. 내비게이션에 "수원화성 창룡문" 을 검색하고 가속 페달을 밟았다. 

권선터미널 조금 지나서 기아자동차의 시험주행차를 발견. 남양연구소에서 나온 것 같은데, 모델은 뭔지 모르겠다. 아마 K8?

익숙한 동네들을 지나고 나서 연무대 공영주차장에 도착. 시간상 화성 일주를 하긴 어려웠고 주변 탐방로를 잠깐 둘러보는 것으로 만족하기로 했다. 

전기차/하이브리드차는 주차요금 50% 감면.

다음 포스팅에서 계속.....

“아이오닉 하이브리드” 가격표를 살펴보며

동영상 한 편 보고 포스팅을 시작하도록 하자. 

출시된 지 1년이 넘어가는 차의 가격표를 굳이 살펴봐야 하는(...) 이유는 지금 차를 너무나 갖고 싶기 때문이다. 물론 여러모로 살 사정은 되지 못한다. 원래 쇼핑은 윈도우 쇼핑? 아이 쇼핑? 이 제일 재밌다. 더구나 자동차는 세세한 스펙이며 옵션까지 홈페이지에 다 밝혀 놓았으니 얼마나 구경하기 쉬운가. 

요즘 특히 관심있는 차량은 "아이오닉 하이브리드" 인데 아마 2~3년 안에 내 생애 첫 차가 될 수 있으리라 기대한다. 같은 모델에 전기 구동계를 탑재한 "아이오닉 일렉트릭"도 마찬가지로 고려대상이지만, 신차 출고 이후 최소 4~5년간은 부모님 집에 세 들어 사는 상황을 피할 수 없을 것으로 보이는데, 지금 부모님과 함께 살고 있는 아파트단지는 전기차 충전구를 갖추기가 어려운 곳이다. 파워큐브의 이동식 충전 서비스가 제공되는 아파트지만, 220V 공용 아울렛(Outlet)을 사용하기 때문에 충전 시간이 최소 10시간 정도로 너무나 길다. (어디서 직장생활을 시작할진 모르겠지만) 야근 한 번 하고 돌아오면 다음날 출근을 못 할 수도 있는 안타까운 상황..... 

PHEV 차량인 "아이오닉 플러그인(Plug-in)" 또한 고려대상인데, 무슨 사정인지는 몰라도 국내 출시가 안 되고 있다. 

서론이 길었는데, 서두에 첨부한, 이 포스팅을 쓰기 시작한 이유가 된 저 요상한 계기판은 "듀얼모드 버추얼 클러스터"라는 옵션이다. 아이오닉 하이브리드의 밸류플러스(Value Plus), Q 트림에서 기본사양으로 탑재된다. 첨언하자면 아이오닉 하이브리드는 주행 모드 전환을 기어 노브 조작으로 하기 때문에-일반 주행모드(D 레인지)에서 기어 손잡이를 왼쪽으로 탁 치면 스포츠모드로 전환된다-기어 노브의 "착" 소리와 함께 계기판이 노리끼리하게 물들고, 동시에 엔진은 갑자기 굉음을 내기 시작한다. 남자라면 누구나 한번쯤 꿈꾸는 자동차의 모습이 아닐 수 없다. 

자 그래서 이 차의 가격을 살펴보면, 

짜잔.

보조금 혜택(하이브리드 차량 환경부 보조금-100만원)과 세금 혜택을 모두 포함해 가장 저렴한 트림이 2천 195만원부터 시작한다. 

저 이름도 거창한 "듀얼 모드 버추얼 클러스터"를 경험하려면 최소 Value Plus 트림으로 가야 하는데, 최하위 트림 최저가보다 50만원 정도 비싼 가격에서 시작한다. 저렇게 멋진 계기판에 LED램프까지 더 달아주는데 고작 50만원 차이라니! 라고 생각했다면...... 

좀 더 자세히 살펴보자. 지금부턴 숨은 그림 찾기를 해야 한다. 

Value Plus(이하 "밸플") 트림보다 50여만원이 더 비싼 I+ 트림에서 선택할 수 있는 옵션 패키지와, 밸플 트림에서 선택할 수 있는 옵션 패키지에 차이가 있음을 알 수 있다. 밸플에선 업그레이드패키지 두 개만 선택 가능, I+에선 세이프티 팩과 컨비니언스 팩이 선택 가능함을 볼 수 있다. 그리고 I+보다 한 단계 윗 트림인 N에선 휴대폰 무선충전 시스템이 기본 사양으로 탑재되어 있다. 

그리고 밸플의 옵션 패키지엔 휴대폰 무선충전이 없다. 허허...... 

결국 저렴한 하위 트림에선 멋진 디지털 계기판을 경험할지, 휴대폰 무선충전과 몇 가지 실내 편의사양을 누릴지를 선택해야 하는 상황인 게다. 그리고 경험상 휴대폰 무선충전 정말 편리했다. 

요즘 블루투스 없는 폰이 없으니까, 한 번 페어링을 마친다면 폰에서 블루투스 켜고 차 시동 걸면 자동으로 연결되는 것이고, 아무 신경 안 쓰고 무선충전 패드에 던져놓으면 충전까지 할 수 있다. 블루투스 잡고, USB 케이블 뒤적거려서 꽂아야 하는, 유선 충전의 그런 불편함과 완전히 이별할 수 있는 것이다. 

그러니까, 그런 불편함과 이별하는 동시에 디지털 계기판의 멋짐을 누리고 싶다면 최상위 트림인 Q, 즉 아무런 옵션을 더하지 않고도 26,550,000원에서 출발하는 그 트림을 선택해야 한다는 말이다. 

아이오닉 하이브리드 시제차량이 필자를 비웃고 있는 모습이다.

흙수저를 위한 자동차는 없다. 물론 우리는 언제나 답을 찾기 마련이라, 이런 개조작업을 해주는 튜닝샵이 등장했다. 타협 가능한 트림을 선택한 후, 이런 커스텀 작업을 하는 것도 방법일 수 있겠다.

가장 좋은 방법은 현대차가 마음을 좀 고쳐먹어서, 무선 충전 패드 그거 뭐라고 그냥 옵션에 좀 끼워 주거나 하위 트림에도 좀 달아주는 것이다.  

전기차 빌려서 하루 놀기 -2-

2,800원짜리 핫도그를 몇 분 안되어 먹어치운 후 시화나래휴게소에 위치한 전기차 충전소에 가보기로 했다. 사실 주행가능거리는 아직까지도 160여 km이 남아있어 차를 제자리에 갖다 두고도 남을 만큼의 배터리 잔량이 남아있었지만, "정말 인터넷에 공개되어 있는 대로 전기차 충전소가 설치되어 있을까" 하는 궁금증에 찾아보기로 한 것이다. 

환경부 전기차포털(ev.or.kr)에 공개되어 있는 충전소 정보.

결론부터 말하자면 충전소는 실제로 있었고, 잘 작동하고 있었다. 다만 환경부가 제공하는 정보만으로 충전소를 찾는 것은 어려웠고, 위키로 운영되는 사설 전기차 정보제공 애플리케이션을 사용해 "주차장 B" 구역에 위치하고 있음을 파악해야만 했다. 

충전소를 찾은 김에 잠깐이나마 배터리를 채우고 다음 장소로 이동하려고 했지만, 충전기를 이용할 수 없었다. 내가 빌린 그린카의 아이오닉 차량에는 환경부의 충전인프라 사용카드만이 비치되어 있었기 때문이다. 시화나래휴게소에 설치되어 있는 "차지비" (http://www.chargev.co.kr/) 충전기는 현대자동차와 포스코ICT가 운영하는 충전기로, 회원 정보가 상호간에 공유되지 않아 환경부에서 발급해주는 충전 카드로 충전기를 사용할 수 없는 것이다. 비유하자면 셀프 주유소에서 하나카드, BC카드 등은 결제가 되는데 삼성카드는 쓸 수 없는 것과 비슷한 (황당한) 상황이다. 

"차지비"의 홈페이지를 잘 살펴보니 회원카드를 발급받은 후 소정의 절차를 거쳐 등록을 마치면 환경부의 카드도 차지비 충전기에서 사용할 수 있다고 한다. 그러나 이런 절차가 필요한 이유 자체가 공감이 잘 되지 않는다. 더구나 국내 전기차 충전서비스 시장은 많은 업체들이 난립하고 있어 각 충전서비스사별로 회원등록을 하고, 카드를 발급받아야 하는 상황이다. 티머니 카드의 회원번호로 인증을 하거나 휴대폰의 NFC 기능을 활용해 앱 카드를 발급해주면 될텐데, 이해하기 어려운 비효율이다. 

 

탄도항으로 이동하는 길.

내겐 무용지물이었던 충전기를 뒤로하고 (충전 코드는 잘 감아놓고 왔다) 좀 더 달려 대부도에 들어왔다. 

탄도항은 거대한 풍력발전기와 누에섬, 그리고 일몰 명소로 유명한 곳이다. 탄도항 주차장에 차를 세운 후 20여분을 걸어서 누에섬으로 들어갈 수 있다. 한 번도 들어가본 적은 없다. 안산시에서 운영하는 어촌문화박물관이란 곳도 있는데 한 번 볼만한 곳이고 지난번에 들른 적이 있어 이번엔 들어가지 않았다. 

며칠 동안 춥다가 따뜻했음. 
풍력발전기.
아무리 봐도 하얀색이 제일 예쁜 것 같다.

탄도항 구경까지 마치고 나니 이제 정말 배터리 잔량을 걱정해야 할 시기가 왔다. 잔여 주행거리가 150km 밑으로 떨어진 것이다. 많이 남았다고 생각할 수도 있지만 기온이 영하권으로 내려가 배터리 효율이 떨어져 있는데다가 여기서 서울로 돌아가려면 고속도로에서 고속 주행을 해야 하기 때문에 배터리 잔량이 슬슬 신경이 쓰이기 시작했다. 

가장 가까운 전기차 급속 충전소인 화성시청 충전소를 방문하기로 결정. 다행히 이 충전소는 환경부에서 운영하고 있어, 아마 별 탈 없이 충전이 될 것이다. 

관공서 주차장에 위치한 전기차 충전소들은 네이버 지도에도 상세하기 위치가 표시되어 있고, 주차가 쉬운데다가 대부분 환경부 충전기라 잠깐 급속 충전하기에 부담이 없다. 

충전소 도착.
차데모 방식 소켓을 연결했다.

전기차 충전소에 도착하면 우선 완속 충전인지, 급속 충전인지를 확인하고 지금 어떤 충전 방식을 사용할 것인지도 생각해야 한다. 전기차의 충전방식 중 DC 차데모 방식은 완속 충전구와 급속 충전구가 분리되어 있고, 아이오닉 일렉트릭의 경우 완속 충전구가 좌측 앞쪽에, 급속은 좌측 뒷쪽에 위치하고 있기 때문에 급속 충전을 하고자 한다면 후면주차를 해서 차의 후미 부분을 충전기에 가깝게 위치시켜야 한다. 물론 대부분의 충전시설이 충분히 긴 충전 코드를 제공하고 있지만, 이 코드가 은근히 무겁고 풀었다가 감는 과정이 귀찮다. 그리고 겨울엔 손 시렵다. 

충전기에 도착했을 때 배터리 잔량이 58%였고 급속 충전으론 최대 94%까지 채울 수 있다. 차의 시동을 끄고 충전을 시작하니 계기판에 "남은 충전시간 20분" 이라는 문구가 표시됐다. 

환경부 충전기의 경우, 후불 정산 요금제를 신청하지 않은 회원이라면 미리 충전하고자 하는 금액을 입력하고 충전이 완료된 후 제휴 신용카드를 입력시켜(EMV 방식) 결제해야 한다. 보통 1500~2000원 정도를 충전하시는 것 같다. 

70%를 채웠는데 15분을 더 기다리라니 도대체 뭐가 급속이란 말인지....

다음 포스팅에서 이어집니다..

전기차 빌려서 하루 놀기 -1-

개강이 3주 앞으로 다가왔건만 마땅히 한 일이 없다. 알바 몇 군데를 알아봤지만 잘 풀리지 않았고(취업난이 알바 시장까지 덮칠 줄이야), 집안에 일이 좀 있긴 했지만 그 핑계로 너무 풀어진 방학을 보낸 느낌이었다. 종강하자마자 제주도에 다녀온 것은 탁월한 선택이었다. 그마저도 다녀오지 않았다면 정말 방학이 무색한 나날들을 보냈을 것 같다. 

코드잇의 Python 3개월 강의를 하루종일 방에 틀어박혀 몇주만에 해치워버렸고, 지금까지의 방학 동안 일어난 다양한 일들과 경험들로 나의 내면이 한층 두터워졌다는 느낌이지만, 어쨌든 너무 집에만 있는 것은 심신에 좋지 못하기에 돈을 좀 써서라도.... 밖에 나가 보기로 했다. 다행히 설 연휴를 지내며 친척 어른들께 용돈도 좀 받아둔 터였다. 

사실 "전기차로 부산가기" 를 해보고 싶었으나 여러 사정상 어려워 보였다. 개강하기 전에 기회가 닿는다면 꼭 다시 추진해보고 싶다. 

이번 당일치기 여행은 그린존 서울역 4번출구점에서 시작했다. 이번 여행의 주요 목적지들은 구글 지도에 표시해 두었다. 탑승한 차종은 현대자동차의 아이오닉 일렉트릭이다.

쏘카는 수도권에서 전기차를 운영하지 않는다.

집에서 가장 가까운 전기차 대여 그린존은 5호선 개화산역이지만 굳이 서울역 그린존을 택한 이유는, 서울역 그린존이 다른 존에 비해 대여요금이 많이 저렴하기 때문이다. 사설 주차장을 임대해서 쓰는 타 그린존과 달리 서울역 그린존은 그린카(주)의 모회사인 롯데렌터카의 서울역지점에 위치하고 있기 때문에, 차량 관리와 주차공간 임대에 있어서 비용을 절약한 부분을 가격 인하로 반영해준 것이 아닌가 싶다. 

6천킬로도 안 뛴 새 차를 받았다.

출차에 애를 먹어 사진을 찍지 못했는데, 후에 다루겠지만 반납할때도 주차에 애를 먹었다. 남의 차 다루는 일이라 심신이 미약해지는 것도 하나의 이유겠지만 애초에 롯데렌터카 서울역지점은 그린존을 운영하기에 부적절한 곳으로 보여진다. 반납하는 과정을 다루는 부분에서 사진과 함께 그 이유를 상술하겠다. 

제3경인고속도로. 처음 달려보는데 길이 참 좋았다. 주행중 사진촬영은 위험합니다.

경인로와 서부간선도로의 지옥같은 정체를 뚫고 나오니 달릴만한 길이 보이기 시작했다. 주행 모드를 스포츠에 놓고 (제한 속도 안에서) 신나게 달렸다. 전기차는 힘이 딸릴 거라고 막연하게 생각하는 분들이 많은데, 사실 전기차의 실주행영역에서의 토크는 내연기관차에 비해 월등하다. 출발하자마자 100%의 출력을 낼 수 있는 전기모터의 특성이 작용하는데다가, 공차중량도 동급의 내연기관차에 비해 살짝 가볍다. 내가 탄 아이오닉 일렉트릭의 경우 최고속도도 165km/h에 달하기 때문에 최소한 공도 상에서 내연기관 자동차에게 속도로 밀릴 일은 거의 없다. 

제3경인고속화도로 정왕IC에서 나와 시화공단 길을 따라 잠시 달리다보면 시화나래휴게소가 등장한다. 공단 지역 통과하는데 덤프 추레라 형님들 너무 무서웠다.부-앙 

전망대가 있다.
여기 포켓몬고의 성지. 포켓스탑 3개 이상
MB가 또....
핫도그(2,800원) 핵창렬.

시화나래휴게소는 시화호 조력발전소를 건설하며 같이 조성한 곳인데 사실 예전에도 몇 번 온 적이 있다. 나에겐 시원한 바람을 맞고 싶을때 생각나는 첫번째가 이 곳이다. 일단 김포에서 별로 멀지도 않고, 가보시면 알겠지만 바람이 정말 시원하다. 바다 한복판에 방조제를 세워 휴게소를 지었으니 그럴 수밖에...

창 좀 자주 닦지.....
왼쪽이 바다, 오른쪽은 민물.

이 휴게소는 몇 번 찾은 곳인데 전망대를 올라와 본 건 처음이다. 전망은 바닷가 전망대에서 기대할 수 있는 그런 수준. 전망대에선 드랍탑이 성업 중. 평일 오전인데 그렇게 장사가 잘 되다니 솔직히 놀랐다. 

 

다음 포스팅에서 계속.....언제 올릴지는 모르겠네요.