KTX 타고 동해바다로! - 남강릉삼각선[2019.08.20]


 2017년 평창 동계올림픽 개최를 대비하여 경강선이 강릉역까지 개통되어 강릉에서 KTX를 탈 수 있게 되었습니다. 이어 올해 진부에서 강릉으로 이어지는 선로에 삼각선을 새로 추가하여 KTX가 동해역까지 어이질 수 있도록 남강릉삼각선을 건설하여 앞으로는 서울역에서 정동진역까지 KTX로 한 번에 갈 수 있게 됩니다.


 올해 12월에 개통될 남강릉삼각선 구간을 안인해변을 들리는 도중에 둘러보았습니다.





현재 무궁화호만 운행되고 있는 비행장건널목입니다.

건널목 너머에는 강릉선KTX가 운행되고 있는 경강선 고가가 있습니다.



이 두 노선은 강릉역에 도착하기 전 합류한 후 지하로 이어집니다.



건널목 이름의 유래는 인근의 군부대에서 따온 듯 합니다.

횡단보도 옆에는 해당 부대의 이름이 적혀 있습니다.



안인역(정동진역 방향)에서 바라본 모습

오른쪽에 살짝 보이는 고가가 남강릉삼각선입니다.



강릉역 방향

여기서 얼마 안가 경강선과 합류합니다.



강릉역 구간이 지하화 되는 동안 이 곳도 약간의 개량을 거친 듯 합니다.



기존에는 없던 철조망을 설치하여 안전도를 높였습니다.


이번에는 남강릉삼각선이 영동선과 합류하는 부분으로 이동하였습니다.





사동3건널목



이곳 건널목에서 길이 두 갈래로 나뉘어집니다.

왼쪽은 진부역, 오른쪽은 강릉역



KTX의 종착역이 될 동해역 방향입니다.



건널목 바로 앞이 급곡선으로 되어있어 경보기가 건널목에서 떨어진 위치에 있습니다.



이런식으로 두 대의 경보기가 설치되어 있습니다.



분기점이 의외로 가까운 곳에 있었습니다.



나중에 이 곳으로 KTX가 지나다니겠군요.



버스정류장 이름이 매우 적절합니다.



2차선이던 도로가 여기서부터는 좁아집니다.

건널목이 좁아서 차량이 한대가 지나갈 공간만 있습니다.



차량이 그렇게 많이 지나다니지는 않아서 굳이 2차선으로 확장할 필요는 없어보입니다.



갑자기 경보기가 울리다너 차단기가 내려옵니다.

곧 열차가 통과할 모양입니다.



안인역 방향에서 기관차가 울리는 경보음이 들립니다.



강릉까지 운행되는 무궁화호 열차였습니다



열차는 순식간에 지나 뒷꽁무니만 보인 채고 강릉역으로 향합니다.



남강릉삼각선을 설치하는 과정에서 주민들의 반발이 컸나봅니다.



남강릉삼각선이 경강선과 합류하는 지점입니다.

아직은 공사가 한창인 모양입니다.



KTX가 지나다니게 된다면 이 마을은 이제 고요하지는 않을 것 같네요.



남강릉삼각선이 마을을 관통하는 구간으로 와보았습니다.



고가로 설계되어 통행 자체는 큰 문제는 없을것 같아 보입니다.



확실히 고가는 마을을 관통하는 위치에 있습니다.



마을 안의 산을 깎은 부분이 보입니다.



지금은 공사중이지만 마무리만 하면 금방 완성될 만큼 진척도는 빠릅니다.



공사중인 철길 위에 희안한 이동체가 보입니다.

설마 사람의 힘으로 움직이는 걸까요?



공사가 끝난 후 서울역에서 KTX를 타고 정동진에 갈 수 있는 날을 고대해봅니다!


300x250

시내를 관통하던 철길이 공원으로 변신하다 - 강릉 월화거리[2019.08.20]


 동해선의 강릉 시내구간이 지하화되면서 철길로 단절되었던 공간이 사람들이 돌아다닐 수 있는 공간이 되면서 월화거리는 많은 사람들이 왕래할 수 있는 산책로가 되었습니다. 특히 평창동계올림픽을 치루고 난 이후에는 강릉을 찾아오는 관광객들이 걸어다닐 수 있는 관광지로 부상하였죠.



  남대천 인근에 있는 월화정 인근에서 부터 월화거리를 걸어보았습니다.



철길로 단절되었던 마을이 통행로가 되면서 길이 아름답게 꾸며졌습니다.



야간에 방문한다면 꽤 좋은 경치가 될 것 같습니다.



터널 내부는 특별히 조명시설을 갖추고 있지는 않았습니다.

짧은 구간이어서 굳이 조명이 크게 필요하지는 않은 듯 합니다.



터널을 통과한 후 나와보니 생각보다는 어두워보이네요.



과거에 건널목이 있을법한 부분에서는 이렇게 횡단보도를 철길처럼 그려놨습니다.



공원 인근에 위치한 O Chair와 월화정



남대천을 건널 수 있도록 기존의 철교를 보강하여 보행이 가능하게 만들어졌습니다.



철고 위에서 바라본 강원도의 풍경



그 반대편의 모습



바닥에는 마치 철도를 형상화한 듯 남겨둔 것 같아 보입니다.



바로 옆부분에는 바닥을 투명하게 하여 남대천을 직접 볼 수 있도록 만들어 놓았습니다.



철교 위에서 월화정을 바라보고서...




300x250

하나된 열정, 뜨거운 열정! 평창 동계올림픽(5) - 1년후 이야기 [2019.08.20]


  평창올림픽이 개최된지 벌써 1년이 지났습니다. 올림픽의 열기는 아직까지 느껴지는것 같지만 기억속의 모습들은 서서히 옅어져가고 있습니다. 지난 겨울 환호성이 울려퍼졌던 평창올림픽 경기장에 방문하여 그 때의 함성을 기억해보았습니다.



가톨릭관동대학교에 위치한 하키경기장입니다.

남북단일팀이 이 곳에서 경기를 하였을 때 엄청난 인파가 줄을 이었던 기억이 나네요.



하키장 인근은 공원으로 잘 꾸며져 있습니다. 작년에도 이 정도로 만들었던 것으로 기억하고 있습니다.



시설이 사용되고 있지 않는지 관계자 외에는 출입을 하지 못하게 하고 있습니다.

1988년 서울올림픽이 개최되었던 한양대학교 올림픽체육관이 지금도 활용되고 있는 걸 생각하면 참으로 아쉬운 부분입니다.

비록 하키경기장으로 설계되었지만 사후 활용 방안을 만든다면 학생들이 사용할 수 있지 않을까 싶지만

방법을 찾아보기 어려운가봅니다.



이번에는 강릉역 너머에 위치한 올림픽파크에 도착하였습니다.



이곳에 있는 강릉 하키 센터는 당시 사용했던 안내판을 그대로 사용하고 있었습니다.



올림픽 당시에 이 곳에 많은 사람들이 있었다는게 한편으론 믿어지지가 않는군요.



이번에는 강릉종합운동장으로 이동해봅니다.

작년 이 곳에 방문했던 기록은 아래의 링크로 확인해봅니다.


하나된 열정, 뜨거운 열정! 평창 동계올림픽(1) - 남북단일팀[2018.02.14]

https://elecs.tistory.com/249



올림픽이 개최되었던 곳임을 이 스케이트 한 짝의 모형이 나타내고 있습니다.



모형 옆에는 수많은 원형 모형들 사이 오륜기가 그려져 있습니다.



비록 올림픽은 끝났지만 오륜기는 남아있습니다.



실내 로울러스케이트장



경기장 한컨에는 암벽등반장이 마련되어 있습니다.

며칠전 영화 '엑시트'를 보았었는데 암벽등반이 결코 쉬운 액티비티는 아니더군요.



경기장 내부의 모습입니다.

올림픽 당시에 이 곳을 보지 못한건 참으로 아쉽습니다.



동네 축구동호회 회원들이 경기 준비를 하는 듯한 모습이 보입니다.



오륜마크만이 덩그러니...



강릉스피드스케이팅경기장



이곳도 외부인은 출입을 제한하고 있습니다.



2019년 11월에 강릉커피축제를 한다는군요.


이번에는 올림픽 개폐회식이 진행되었던 평창 대관령으로 이동해봅니다.



평창올림픽의 시작을 알린 성화는 이 곳에 있습니다.

작년 이 곳에서 성화에 불이 활활 타던 모습은 아래의 포스팅에서 확인해봅니다.


하나된 열정, 뜨거운 열정! 평창 동계올림픽(3) - 성화

https://elecs.tistory.com/251



2019년 현재 평창올림픽 성화대는 이렇게 황량하게 서있습니다.



정말 성화 주변은 그 어떤 건물도 하나 없습니다.



성화대 근처에 가까이 가보니 안으로 들어갈 수 있게 되어 있습니다.



성화가 서있던 곳에서 올림픽스터디움이 있던 곳으 바라본 모습입니다.

대관령답게 험준한 산령이 펼쳐져 있습니다.



평창 올림픽 및 패럴림픽 로고

처음 발표되었을 땐 한글 가지고 유치하게 만든거같아 보였는데

지금 다시 보니 정말 잘 만들어진 로고입니다.



성화 내부 벽에는 각종 경기 기록들을 기록하고 있었습니다.



양쪽 벽에 각각 올림픽과 패럴림픽 기록을 걸어두었더군요.



평창올림픽의 기록이 이렇게나마 남아있는건 그나마 다행이라 볼 수 있겠지요?

서울올림픽 시설들처럼 남아있을 것이라 기대하고 어렵게 오신 분들께는 조금은 아쉬울 수도 있겠네요.



정말 놀랍게도 성화대 너머에는 비닐하우스 철골들이 줄지어 있습니다.



성화대 너머로 보이는 마을의 모습들입니다.

올림픽이 끝난 지금은 관광객도 많이 줄어들었다고 하네요.



영동고속도로를 힘차게 차를 몰고 여기까지 올라왔습니다.

올림픽이 개최되었던 곳이지만 택시 구하기도 마땅치 않아 차를 몰고 돌아다니는게 오히려 편한 동네였습니다.


부디 내년에도 지금보다 더 나은 모습으로 시설들이 남아있었으면 하는 마음입니다.

올림픽을 성공적으로 치루었던 만큼 남은 시설들이 애물단지가 되지 않도록 활용된다면

앞으로 우리나라도 동계올림픽 강국이 될 수 있지 않을까요?






300x250

평창올림픽의 열정을 다시 한 번, 평창남북평화영화제 [2019.08.19]


 2018 평창 올림픽이 개최된지 벌써 1년이 지났습니다. 작년 1월 1일 북한의 평창올림픽 참가 제안으로 시작된 남북관계가 다시 교류를 시작하게 된 계기가 되어 지금까지 좋은 관계를 유지하나 싶었지만 지난 2019년 5월부터 계속되고 있는 북한의 미사일 발사 위협이 평창올림픽이 개최되기 이전의 차디찬 관계로 다시 돌아가게 될까 싶은 나날이 벌어지고 있습니다.


 그렇다고 해서 지난 세월처럼 서로를 경계해야만 할 필요는 없지요. 2019년 8월 현재와 같이 한국과 일본의 정치적 갈등이 심화되고 있다 하더라고 사람과의 교류만큼은 흔들림 없이 계속 이어가야 할 것입니다. 비록 지금 당장 관계가 회복될 수는 없다 하더라도 말이죠.


 2019년 개최된 제 1회 평창남북평화영화제는 평화와 관련된 다양한 주제로 평창과 강릉에서 영화제가 개최되었습니다. 


 영화 주제는 남북관계 뿐 아니라 전 세계에서 전쟁으로 고통받는 사람들에 대한 이야기와 같이 평화와 관련된 메시지를 담고 있는 영화들이 주를 이루고 있습니다. 영화를 보고 난 후 메시지를 되새겨볼 때 평화란 과연 무엇인가 라는 생각을 할 수 있는 기회가 되기도 합니다.



영화제 3일차인 2019년 8월 19일 평창 알펜시아에 위치한 영화관을 방문하였습니다.





이날 제가 선택한 영화는 '모가디슈에서 온 소녀'입니다.

전쟁으로 혼란스러운 나라인 소말리아에서 도망쳐 나온 소녀의 이야기인데

전쟁의 참상이란 말로 설명할 수 없을 정도로 매우 끔찍합니다.



영화관 앞에 비치된 팜플렛이 상당히 재밌게 생겼습니다.

북한 여권에 항공권을 끼운 듯한 모습입니다.

북한 주민들도 당당하게 여권을 들고 여행을 다닐 수 있는 날이 왔으면 좋겠네요.



알펜시아에 있는 영화관은 마치 시민회관 큰 강당을 빌려서 영화를 상영하는 분위기였습니다.

어찌보면 시민회관을 빌려 영화를 상영하는 듯한 분위기처럼 보이기도 합니다.



작년 평창올림픽의 마스코트였던 수호랑과 반다비가 보입니다.

올림픽 축제 분위기로 달아올랐던 평창이 생각나는군요.



드디어 영화관에 입장하였습니다.

워크샵을 온 사람들의 행사 소음이 극장 안까지 들려오는것이 흠이군요.



영화가 끝나고 숙소로 가던 도중 보았던 PyeongChang2018.

이러한 표기가 이 곳이 올림픽이 열렸던 곳임을 알 수 있을듯 합니다.



올림픽이 끝난 지금 보면 이런 깡촌에 화려한 장식들이 있는 것이 약간 위화감이 듭니다.



다음날 아침 강릉 시내에서 영화제가 개최중안 상영관을 찾아가 보았습니다.





평창남북평화영화제, 파프라고도 부르는군요.



엘리베이터에도 상영관임을 붙여놓았군요.



이번에는 독립영화관인 신영극장에 찾아가 보았습니다.





이 건물에 입주한 가게들이 신영이라는 이름을 즐겨 쓰는 듯 보입니다.



매표소는 상영관이 위치한 4층에 올라가면 보입니다.

1관과 2관은 별개의 건물이지만 건물 사이에 다리를 놓아 건널 수 있게 되어 있습니다.



영화제의 개회식은 평창 올림픽 스터디움이 위치했던 곳에서 진행되었습니다.

축제의 막바지여서인지 사람 없이 한산합니다.



평창을 떠나기 직전 영화제의 포스터의 모습입니다.



과연 내년에도 평창에서 영화제가 이어서 개최될까요?

그 때엔 우리나라에 평화가 찾아오기를 간절히 기도해봅니다.







300x250

C++에서 Boost ASIO를 사용하여 TCP 동기화(Blocked) 통신 프로그래밍

공대생의 팁 2019. 7. 21. 19:58

 지난 포스팅에서 C++에서 제공하는 Boost 라이브러리의 통신 라이브러리인 ASIO를 사용하여 비동기 통신 프로그래밍을 하는 방법에 대해 소개를 하였던 적이 있었습니다.



C++에서 Boost ASIO를 사용하여 TCP 비동기(Unblocked) 통신 프로그래밍

https://elecs.tistory.com/314


 서버-클라이언트 통신 시스템을 구축하던 도중 Java에서 사용하던 객체 통신 프로그래밍 방식이 상당히 편했던 기억이 있어 이를 C++에서도 편하게 사용할 수 있는 방법을 찾았던 것이어서 이를 정리하였던 글이었는데 생각보다 많은 분들께서 도움을 받으셨다는 답변을 받았습니다.


 그래서 이번에는 ASIO 통신 프로그래밍에서 다룰 만한 내용으로 동기화(Synchronization, Blocked) 프로그래밍 방식에 대해 이야기 해보고자 합니다.





 위 그림은 ASIO 프로그래밍의 동기화 통신 방식의 흐름도를 나타낸 것입니다. 이전 포스팅에서 다루었던 비동기화 통신 방식과는 달리 동기화 통신은 상대로부터 response를 대기하는 과정이 추가됩니다.

 비동기 모드의 경우 Handler를 등록해두면 response의 수신 여부와 관계 없이 서버는 프로그램의 동작을 멈추지 않고 별개의 동작을 수행할 수 있습니다. 반면 동기화 통신의 경우 상대방의 response가 들어오고 나서 동작하는 방식이므로 서로가 통신이 확인이 되었는지의 여부를 확인할 수 있다는 장점이 있습니다.


 먼저 프로세스는 socket에 자신의 IP 정보를 기록한 후 이를 io_service(Boost 1.66 버전 이후는 io_context)를 통해 운영체제 커널에 정보를 등록합니다. 이후 운영체제가 다른 컴퓨터로부터 응답을 수신하게 되면 이를 프로세스의 socket에게 전달하고 프로세스는 전달 받은 정보를 가공하는 방식으로 통신이 이루어집니다.


자세한 내용은 아래의 소스코드를 통해 알아보도록 하겠습니다.



 프로그램을 실행하기에 앞서 자신의 컴퓨터에 Boost 라이브러리를 설치합니다. Ubuntu를 기준으로 다음과 같이 실행합니다.


$ sudo apt install libboost-all-dev



 이제 어러분의 컴퓨터에는 Boost 라이브러리가 설치되었습니다. 다음으로 아래의 소스코드를 작성해줍니다.


sync_server.cc


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<cstdlib>
#include<iostream>
#include<boost/asio.hpp>
 
using namespace std;
using boost::asio::ip::tcp;
 
class session
{
public:
    session(tcp::socket& sock)
    //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
    //session(boost::asio::io_context& io_service)
    : socket_(sock){
        start();
    }
 
    void start(){
        try{
            while(1){
                boost::system::error_code error;
                size_t length = socket_.read_some(boost::asio::buffer(data_), error);
                if(error == boost::asio::error::eof){
                    //클라이언트로 부터 정보를 모두 받았으므로 종료한다.
                    break;
                }else if(error){
                    throw boost::system::system_error(error);
                }
                cout << "Message from client: " << data_ << endl;
                boost::asio::write(socket_, boost::asio::buffer(data_, length));
            }
        }catch(exception& e){
            cerr << "Exception in server: " << e.what() << endl;
        }
    }
 
    tcp::socket& socket(){return socket_;}
 
private:
    tcp::socket& socket_;
    enum { max_length = 1024 };
    char data_[max_length];
};
 
class server
{
public:
    server(boost::asio::io_service& io_service, short port)
    //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
    //server(boost::asio::io_context& io_service, short port)
    : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), port))
    {
        while(1){
            //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
            //new session(acceptor_.accept());
 
            //sever의 소켓 생성
            tcp::socket sock(io_service);
            //client로부터 접속 대기
            acceptor_.accept(sock);
            new session(sock);
        }
    }
private:
    boost::asio::io_service& io_service_;
    //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
    //boost::asio::io_context &io_service_;
    tcp::acceptor acceptor_;
};
 
int main(int argc, char* argv[]){
    try{
        if(argc != 2){
            cerr << "Usage: server <port>" << endl;
            return 1;
        }
        boost::asio::io_service io_service;
        //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
        //boost::asio::io_context io_service;
        server s(io_service, atoi(argv[1]));
 
    }catch(exception& e){
        cerr << "Exception: " << e.what() << endl;
    }
 
    return 0;
}
cs



sync_client.cc


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<cstdlib>
#include<iostream>
#include<boost/asio.hpp>
 
using boost::asio::ip::tcp;
using namespace std;
 
class client
{
public:
    client(boost::asio::io_service& io_service,
    //client(boost::asio::io_context& io_service,
    const string& host, const string& port) : socket_(io_service)
    {
        tcp::resolver resolver(io_service);
        //서버에 접속을 시도한다.
        boost::asio::connect(socket_, resolver.resolve({host, port}));
 
        string msg = "Hello, world!";
        size_t msg_length = msg.length();
 
        //서버로 데이터를 전송
        boost::asio::write(socket_, boost::asio::buffer(msg, msg_length));
 
        char reply[max_length];
        //서버로부터 데이터를 수신
        size_t reply_length = boost::asio::read(socket_, boost::asio::buffer(reply, msg_length));
        cout << "Reply is: " << reply << endl;
        
    }
 
private:
    tcp::socket socket_;
    enum { max_length = 1024 };
};
 
int main(int argc, char* argv[]){
    try{
        if(argc != 3){
            cerr << "Usage: client <host> <port>" << endl;
            return 1;
        }
 
        //boost 1.66이후 (Ubuntu 18.10 이후) 버전의 경우 io_context를 사용
        //boost::asio::io_context &io_service;
        boost::asio::io_service io_service;
        client c(io_service, argv[1], argv[2]);
 
    }catch(exception& e){
        cerr<<"Exception: " << e.what() << endl;
    }
 
    return 0;
}
cs



CMakeLists.txt


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cmake_minimum_required(VERSION 3.0)
add_compile_options(-std=c++11)
 
project(asio_sync)
find_package(Boost REQUIRED system)
find_package(Threads)
 
include_directories(${Boost_INCLUDE_DIR})
 
add_executable(client
    sync_client.cc
)
 
add_executable(server
    sync_server.cc
)
 
target_link_libraries(client
    ${Boost_LIBRARIES}
    ${CMAKE_THREAD_LIBS_INIT}
)
 
target_link_libraries(server
    ${Boost_LIBRARIES}
)
cs



Linux 환경에서 다음과 같이 프로그램을 컴파일합니다.


$ mkdir build

$ cd build

$ cmake ..

$ make


 이제 우리가 만든 프로그램을 실행하여봅니다.



Server

1
2
$ ./server 2222
Message from client: Hello, world!
cs



Client


1
2
$./client 127.0.0.1 2222
Reply is: Hello, world!
cs



 축하합니다! 이제 여러분들도 Boost 라이브러리의 ASIO를 사용하여 동기화 통신 프로그래밍을 만들 수 있게 되었습니다!

300x250

무더운 여름날 김유정역 강촌레일파크 [2019.07.17]


 평소에 레일바이크를 타보고 싶었던 적이 있었는데 마침 친구와 단둘이 여행을 할 수 있는 기회가 생겨 친구와 함께 레일바이크에 도전해 보게 되었습니다. 마침 춘천 인근에 있는 김유정역에 레일바이크가 있다는 이야기를 듣고 찾아가 보았습니다.




레일바이크의 시작점에서..



자전거 타듯이 페달만 열심히 저어주면 됩니다.



레일바이크 옆으로 펼쳐지는 풍경이 정말 대단합니다.



레일바이크 종착지에는 이렇게 쉼터가 마련되어 있습니다.

여기서 바라보는 풍경도 상당히 좋더군요.



종착지에서 강촌역까지는 특수열차를 타고 이동합니다.



열차에 올라서 바라보는 풍경도 꽤 장관입니다.



무궁화호를 타고서는 보기 힘든 광경들이 이렇게 지붕 없는 객차에서는 새로운 풍경으로 비쳐집니다.



어느덧 강촌역 인근에 도착



바닥을 보니 생각보다 높은 위치더군요



오랜만에 본 옛 강촌역의 모습

비록 열차는 정차하지 않지만 그 당시의 모습만은 고이 간직하고 있군요.



또오리 강촌!


300x250

바다가 보이는 간이역 월내역에서 기차가 서던 마지막날 [2019.07.14]


 지난 달에 동해선 덕하역을 다녀간지 한 달만에 동해선 부산 구간은 또 한번의 격변기를 맞이하게 되었습니다. 오늘로써 일광역부터 태화강역까지 기존의 철길에서 새로운 철길로 이사를 가게 되면서 이제는 지금까지 기차가 지나다니던 그 모습들은 역사속으로 사라졌기 때문이지요.


 오늘은 그러한 역사속 모습을 마지막까지 간직하고 있던 월내역 인근을 돌아다녀 보았습니다. 지금의 월내역은 기존역 역을 철거하고 임시로 세워져 있지만 여전히 무궁화호가 정차하던 역이었는데 오늘을 끝으로 더이상 무궁화호는 정차하지 않게 됩니다. 다만 앞으로 이설될 새로운 월내역은 고가역이 되어 바다가 훨씬 더 잘 보일 것으로 보입니다!



지난달에 방문하였던 덕하역 인근 구간을 지날 때 였는데

놀랍게도 이번에는 새로 이설한 고가 구간을 통과하는 겁니다!

아래의 이설 전 고가는 벌써부터 철거에 들어가 있더군요.


혹시 이설 바로 전날 이 곳의 모습이 궁금하시다면 아래의 포스팅을 확인해주세요!


철길도 이사를 간다? 덕하역 이설 전날 풍경(2) [2019.06,16]

https://elecs.tistory.com/327




5개월만에 다시 월내역에 방문하는군요. 승강장에는 벌써 잡초가 무성합니다.



승강장 너머 고가철로 끝에는 새로운 월내역이 건설중입니다.



아직 광역전철이 개통하기까지 1년 넘게 남았는데 벌써 폐쇄된다니



새로운 월내역과 기존의 철길 모습입니다.

역 내에는 굴삭기가 개통 준비를 서두르고 있습니다.



남창역 방향을 향하여 찍은 모습입니다. 아마 내일이면 더이상 열차는 다니지 않습니다.



고가와 건널목.. 공존할 수 없는 관계일까요?



저 멀리 월내역의 임시승강장이 보입니다.



기존 철교와 새로 지어지고 있는 철교 사이의 자전거도로입니다.

한적하게 낚시를 하시는 분이 보입니다.



옛 철교 뒤로 내일부터 새로 개통될 철교가 보입니다.

이런 구도 쉽지 않은데!



넓디넓은 4차선 도로에 건널목 하나가 떡하니 서 있습니다.



원래 여기는 2차선 작은 도로였는데 인근에 아파트가 건설되면서 4차선으로 확장되었습니다.



아마도 이 철길이 이설될 예정이라서 불편해도 미리 길을 확장해둔 듯 합니다.



그 덕에 기존의 관리원님들이 계시던 건물을 허러내고 저렇게 컨테이너로 건물이 대체된 상황입니다.



아마 이보다 더 큰 길에 건널목이 있던게 9년전 경춘선 이설 직전 화랑대역 인근 건널목이었을겁니다.

그땐 아마 6차선이었을겁니다.



어느덧 건널목은 우렁차게 울리기 시작하고



도로위를 부지런히 다니던 차량들이 잠시 정차합니다.



장안2건널목의 마지막날에도 이렇게 기차는 순식간에 지나갑니다.



이제 관리원님들께서도 내일부터는 이 곳에서 더이상 볼 수 없게 됩니다.



다시 월내역을 돌아옵니다.

아까 고가 위에 보았던 굴삭기가 여전히 분주히 작업을 진행하고 있습니다.



내일부터는 이 출입구도 폐쇄되겠지요



앞으로 이 곳에 오기 위해서는 좌천역에서 운행하는 대체 버스를 타고 와야 할 듯 합니다.



마지막날인 오늘도 승객들은 이 곳에서 열차를 기다립니다.



지금은 사라졌지만 광역전철이 개통하면 서생역에도 열차가 정차하게 됩니다.



어느덧 열차는 월내역으로 들어옵니다.



이 역의 마지막을 아는지 탑승객들이 기차를 바라보며 셀카를 찍습니다.



이제 열차에 탑승합니다.



방금전에 들렀던 곳을 이렇게 사진으로 님기기는 처음입니다.



방금 뵙고 갔던 관리원님도 마지막날까지 열심히 일을 하고 계시는군요.



덕하역 인근에 이설된 고가 인근의 모습입니다.

저 곳에서 이 열차가 달리는 임시철교를 만들고 있던게 떠오르는군요.


과연 다음 여행지는 어디가 될까요?




300x250

리눅스(우분투)에서 USB가 동작하지 않을 때 수동으로 연결하기(Failed to open the USB device!)

공대생의 팁 2019. 7. 5. 14:45


 PrimeSense사에서 제작한 RD 1.09 RGB-D 카메라를 USB 3.0에 꽃아서 openni2 환경에서 실행을 해보려 하던 도중 다음과 같은 문제가 발생하였습니다.


No matching device found.... waiting for devices. Reason: openni2_wrapper::OpenNI2Device::OpenNI2Device(const string&) @ /tmp/buildd/ros-indigo-openni2-camera-0.2.2-0trusty-20141015-0837/src/openni2_device.cpp @ 74 : Initialize failed


    Could not open "1d27/0609@1/12": Failed to open the USB device!


보아하니 RD 1.09 버전에서는 USB 2.0 버전만 지원이 되서 발생하는 문제로 추측됩니다. 즉, 디바이스 노드를 생성하지 못하는 상황으로 추측할 수 있습니다. 이 경우 USB 기기를 수동으로 설정하기 위해서는 다음과 같이 진행해줍니다.


 1. 먼저 현재 리눅스(우분투)에 연결된 USB 드라이버의 리스트를 출력합니다.


$ lsusb


 위의 명령어를 입력하시면 다음과 같이 현재 컴퓨터에 연결된 USB 기기들의 리스트가 나타납니다.



 위 목록을 보았을 때 자신의 기기가 어떤 것인지를 파악합니다. 저의 경우 1d27:0609로 써있는 부분으로 추정됩니다.


 2. udev를 사용하여 USB 드라이버를 수동으로 연결하는 규칙을 만들어줍니다. 여기서 .rules의 이름은 자신이 파악하기 쉬운 이름으로 붙여줍니다. (ex: 40-libopenni2-0.rules)


$ sudo vi /etc/udev/rule.d/my_rule.rules


3. 다음과 같이 입력해 주시고 ':wq'를 입력하여 저장해줍니다. ATTR의 'idProduct'와 'idVendor'는 위에서 lsusb를 입력하였을 때 나왔던 ID를 각각 입력해주시고 GROUP의 경우 자신에 맞는 그룹을 설정해줍니다. 저의 경우 카메라를 사용하므로 'video'로 설정하였습니다.


SUBSYSTEM=="usb", ATTR{idProduct}=="0609", ATTR{idVendor}=="1d27", MODE:="0666", OWNER:="root", GROUP:="video"


4. 여기까지 진행하신 후 다시 기기를 사용해보신다면 정상적으로 연결되는 것을 확인하실 수 있습니다.


 혹시 udev에 대해 자세히 알고 싶으신 분은 아래의 블로그 글을 읽어보시기를 추천드립니다!

https://mokga.tistory.com/54

300x250

C++에서 Graphviz로 그래프 이미지 그리기

공대생의 팁 2019. 7. 4. 01:04


 자료구조를 공부하거나 특정한 환경을 그림으로 표현하고자 하는 경우가 있습니다. 특히 위상수학 같이 이산수학이 사용되는 분야에서는 각 객체들의 상호관계를 나타내야 하는 것이 중요하지요. 이러한 특성을 이미지로 나타낸 것을 흔히 그래프(Graph)라고 부릅니다.



 위의 그림은 같은 Depth를 유지하는 것을 목적으로 설계된 B+ 트리를 나타냅니다. 각 노드(혹은 Vertex)가 화살표(혹은 Edge)로 연결되어 있습니다. 특정한 프로그램의 알고리즘을 위와 같이 그림으로 표현한 것을 그래프라고 합니다.


 그렇다면 과연 우리들이 직접 설계한 프로그램을 바로 그림으로 나타낼 수 있는 방법이 있을까요? C++의 Boost library에서는 그래프를 생성할 수 있는 Graphviz를 지원합니다. 이산수학의 그래프 이론을 잘 알고 계시다면 Graphviz를 사용 하는 것이 상당히 쉬워질 것입니다.


 Graphviz를 사용하기에 앞서서 간단한 그래프 이론에 대해 설명을 드리겠습니다. 예를들어 다음과 같은 그래프가 있다고 가정합니다.




 위 그래프는 Graphviz로 생성한 4개의 Vertex와 4개의 Edge를 가지고 있는 그래프입니다. 한 눈으로 봐도 각 vertex인 A, B, C와 D가 각각 edge로 어떻게 연결되었는지 한 번에 알 수 있습니다. 이를 인접 행렬(Adjacency matrix)로 나타내면 다음과 같습니다.



 각 행과 열의 첫 번째 부터 A, B, C, D로 보았을 때 나타낸 인접 행렬의 모습입니다. 첫째 열의 경우 [0 1 0 1] 로 나타내어졌는데 각각 A는 두 번째인 B와 4 번째인 D와 연결된 부분을 1로 나타낸 것입니다. 나머지 열의 경우는 직접 위의 그림과 비교해 보신다면 쉽게 아실 수 있으실 겁니다!


 지금까지 우리는 무방향 그래프(Undirectional graph)를 설명하였습니다. 다음으로는 Edge에 방향성이 포함되어 있는 방향 그래프(Directional graph)를 보도록 하겠습니다.



 위에서 보았던 그래프에 화살표로 방향이 추가된 그래프입니다. 이 그래프 또한 인접 행렬로 다음과 같이 나타낼 수 있습니다.



 위에서 보았던 인접 행렬과 다른 점은 각 열은 출발 vertex, 각 행은 도착 vertex를 나타낸 것입니다. 즉 A의 경우 B와 D의 방향으로 향하고 있기 때문에 첫 번째 열의 경우 [0 1 0 1] 순서로 나타나는 것입니다. 반면, C의 경우 무방향 그래프의 경우 A와 같은 [0 1 0 1]이었으나 B로는 연결 방향이 존재하지 않기 때문에 [0 0 0 1]로 나타내는 것입니다. 또한 방향 그래프는 인접 리스트(Adjacency list)로 아래와 같이 나타낼 수 있습니다.



 위에서 보았던 방향 그래프를 생각하시면 이해하기 쉬우실 겁니다. 각각의 Vertex인 A와 B, C, D를 생성한 후 각 Vertex가 향하는 방향의 Vertex를 연결 리스트(Linked list)로 이어주는 것이지요. 연결되는 순서는 상관 없습니다. 즉 [A → B → C] 로 표기하거나 [A → C → B]로 표기하여도 모두 같은 값을 나타낸다고 보시면 되겠습니다. 여기서 D로부터 시작하는 방향은 존재하지 않으므로 D는 그 어떤 Vertex와 연결되있지 않음을 위에서 보실 수 있습니다.


 그러면 이번에는 위에서 설명한 그래프들을 직접 소스코드로 구현해봅시다. 먼저 Boost library를 컴퓨터에 설치해 줍니다.


$ sudo apt install libboost-all-deb graphviz


 다음으로 아래와 같은 소스코드를 입력합니다.


graphviz.cc


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <cstdio>
 
using namespace std;
 
struct VertexP { string tag; };
struct EdgeP { string symbol; };
struct GraphP { string orientation; };
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, VertexP, EdgeP, GraphP, boost::listS> ListGraph;
 
int main()
{
    ListGraph g(GraphP{"Example"});
    boost::dynamic_properties dp;
    dp.property("node_id", get(&VertexP::tag,g));
 
    ofstream dot_file("graph.dot");
    string dcmd = "dot -Tpng graph.dot -o graph.png";
 
    // Create the vertexes
    ListGraph::vertex_descriptor a = add_vertex(VertexP{"A"},g);
    ListGraph::vertex_descriptor b = add_vertex(VertexP{"B"},g);
    ListGraph::vertex_descriptor c = add_vertex(VertexP{"C"},g);
    ListGraph::vertex_descriptor d = add_vertex(VertexP{"D"},g);
 
    // Create the edges
    // A → B
    add_edge(a, b, g);
    // B → D
    add_edge(a, d, g);
    // B → C
    add_edge(b, c, g);
    // C → D
    add_edge(c, d, g);
 
    // Print graph
    write_graphviz_dp(dot_file, g, dp);
 
    std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(dcmd.c_str(), "r"), pclose);
    if (!pipe) {
        throw runtime_error("popen() failed!");
    }
 
    return 0;
}
 
cs



 여기서 소스코드의 중요한 부분을 하나씩 설명해 드리겠습니다.



typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, VertexP, EdgeP, GraphP, boost::listS> ListGraph;


 위에서 설명드렸던 인접 리스트(Adjacency list)를 만들수 있도록 해주는 Boost library입니다. Graphviz로 그래프를 만들어주기 위해 사용됩니다.


14
15
16
    ListGraph g(GraphP{"Example"});
    boost::dynamic_properties dp;
    dp.property("node_id", get(&VertexP::tag,g));
cs


하나의 인접 리스트 변수 g를 선언합니다. 인접 리스트의 이름은 "Example" 입니다. dynamic_properties는 Graphviz에서 Adjacency list의 내용을 설정해 주기 위해 사용되는 변수입니다. 각 vertex의 이름은 VertexP 구조에 저장되므로 16번 줄을 작성하여 Adjacency list 변수 g에 선언해줍니다.


18
19
    ofstream dot_file("graph.dot");
    string dcmd = "dot -Tpng graph.dot -o graph.png";
cs


 Graphviz를 생성해 주기 위해 파일을 생성합니다. 파일의 이름은 "graph.dot"입니다. Graphviz를 이미지로 생성시켜주는 과정은 Terminal의 명령어로 이루어지므로 명령어를 설정해 줍니다. 명령어는 다음과 같습니다.


$ dot -Tpng graph.dot -o graph.png


 위 명령어는 생성되는 이미지의 확장명은 png로 설정하며 파일명은 graph.png로 저장하겠다는 의미입니다.


21
22
23
24
25
    // Create the vertexes
    ListGraph::vertex_descriptor a = add_vertex(VertexP{"A"},g);
    ListGraph::vertex_descriptor b = add_vertex(VertexP{"B"},g);
    ListGraph::vertex_descriptor c = add_vertex(VertexP{"C"},g);
    ListGraph::vertex_descriptor d = add_vertex(VertexP{"D"},g);
cs


 Vertex들을 생성해줍니다. vertex_descriptor에 해당 vertex를 저장해 줍니다.


27
28
29
30
31
32
33
34
35
// Create the edges
// A → B
add_edge(a, b, g);
// B → D
add_edge(a, d, g);
// B → C
add_edge(b, c, g);
// C → D
add_edge(c, d, g);
cs


 바로 이 부분이 제가 위에서 말씀드렸던 인접 리스트의 방식을 나타낸 것입니다. 각 vertex와 연결하고자 하는 vertex를 위의 순서대로 입력하시면 우리가 원하는 방식대로 edge가 연결됩니다.


37
38
    // Print graph
    write_graphviz_dp(dot_file, g, dp);
cs


 지금까지 우리들이 만들었던 그래프를 Graphviz로 만듭니다. 이를 실행하면 dot 파일이 생성됩니다.


1
2
3
4
    std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(dcmd.c_str(), "r"), pclose);
    if (!pipe) {
        throw runtime_error("popen() failed!");
    }
cs


 dot 파일로 생성된 Graphviz를 이미지로 만들기 위해 실행되는 부분입니다. 이 과정은 Graphviz 프로그램에서 직접 실행되기 때문에 위와 같이 설정해 주시면 직접 사용자가 dot 명령어를 입력하지 않고도 이미지가 생성됩니다.


여기까지 완성되었다면 이제 컴파일을 해줍니다. 다음과 같은 파일을 만들어줍니다.


Makefile

1
2
3
4
5
CC = g++
CFLAGS = -g -Wall -std=c++11
 
output:graphviz.cc
    $(CC) $(CFLAGS) -o output graphviz.cc
cs


make로 컴파일을 해줍니다.


$ make


이제 컴파일이 실행된 폴더를 확인해보시면 'output' 이라는 이름의 실행파일이 생성됩니다. 이제 실행해봅니다.


$ ./output


 그러면 다음과 같은 이미지 파일이 생성되 있는 것을 확인하실 수 있습니다.



 다음으로 이번에는 방향 그래프를 만들어 보겠습니다. 위 코드에서 다음 부분만 바꿔주시면 되겠습니다.




typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, VertexP, EdgeP, GraphP, boost::listS> ListGraph;


 그러면 다음과 같은 방향 그래프가 생성됩니다.



 이번에는 생성된 그래프를 회전 시켜보겠습니다. 다음과 같은 코드를 추가시켜주세요.


14
15
16
17
    ListGraph g(GraphP{"Example"});
    boost::dynamic_properties dp;
    dp.property("node_id", get(&VertexP::tag,g));
    dp.property("rankdir", boost::make_constant_property<ListGraph*>(string("LR")));
cs


그러면 다음과 같이 그래프가 90도 회전합니다.



만약 위의 vertex의 순서를 반대로 하고자 하시는 분이라면 소스코드를 다음과 같이 고쳐주세요.


14
15
16
17
    ListGraph g(GraphP{"Example"});
    boost::dynamic_properties dp;
    dp.property("node_id", get(&VertexP::tag,g));
    dp.property("rankdir", boost::make_constant_property<ListGraph*>(string("RL")));
cs


 그러면 vertex의 순서가 좌우 반전으로 다음과 같이 출력됩니다.




300x250

철길도 이사를 간다? 덕하역 이설 전날 풍경(2) [2019.06,16]


 2019년도 벌써 절반이 지나가고 또다시 무더운 여름이 다가오고 있습니다. 올해는 부디 좋은 날씨에서 여행을 많이 돌아다니고 싶네요.

 이번 포스팅에서는 지난번에 이어서 덕하역 인근 철길 이설 전날의 모습들을 사진으로 남겨보았습니다.


철길도 이사를 간다? 덕하역 이설 전날 풍경(2) [2019.06,16]

https://elecs.tistory.com/326





건널목 너머에는 셀프빨래방과 카페가 있습니다.

카페의 이름이 '기차길옆에서'라고 되어있군요.



덕하역 방면의 모습입니다.

여기서 좀만 더 나아가면 덕하역이 나타납니다.



남창역 방향을 바라본 모습입니다. 저 멀리 끊어진 교각이 보입니다.



건널목 바로 인근에는 아파트가 들어서 있습니다.

소음이 상당했을 것으로 보입니다.



새로 지어지는 덕하역 방향에서 바라본 모습입니다.

내일부터 모든 열차는 이 곳으로 운행됩니다.



내일부터 운행될 교각임에도 옛 철길과 교차하는 이 부분만 다리가 없습니다.



가까이 와서 보아도 절묘하게 이 부분만 다리로 연결되어 있지 않습니다.



내일부터 연결할 예정인지 인부들이 상당히 바쁘게 개통을 준비하고 있습니다.



보통 이설될 때 기존선에서 다소 떨어진 위치에서 새로운 철길을 만드는데

이 구간은 희안하게 기존부터 사용되어온 철길과 가깝게 교차하는 구간입니다.



그와중에 열차는 그 사이를 통과합니다.



자세히 보니 기존 철교와 높이가 너무 가까워서 미리 만들어서 연결할 수는 없는 상황인것 같습니다.



연결될 부분의 레일이 삐죽 나와있습니다.



교차하는 다리 사이에는 임시로 기둥이 올라와 있습니다.

이 기둥은 지난번에 영주 이설준비중인 구간에서 본 적이 있습니다.



아직 만들어지지 않은 구간을 뺀다면 다리는 거의 다 만들어져 있습니다.



한편 그 아래에서는 인부들의 작업이 한창입니다.



자세히 보니 임시로 올린 기둥에 임시로 철길을 이으려는 모양입니다.



그 때 덕하역 방향에서 열차가 들어옵니다.



이제 이 임시철교가 올라가게 된다면.

이제 이 광경은 내일부터 볼 수 없게 됩니다.



과연 새로 이설될 부분으로 다니는 열차의 모습은 어떠한 모습일까요?



임시철교는 생각보다 꽤 정교하게 만들어져 있습니다.

그래도 이 위로 열차가 다닐것이라는게 조금은 신기해 보입니다.



아마도 오늘 밤 열차가 운행되지 않는 시간에 곧바로 이 다리를 올려서 설치할 모양입니다.



이제 이 건널목도 내일부터는 울리지 않겠지요.



건널목 인근 벤치에 앉아 쉴 수 있는 그늘이 있습니다.

잠시 쉬고 계신 할아버지께서 건널목을 바라보고 계십니다.



이 건널목은 이설 이후 2차선의 도로로 확장될 예정입니다.



이제 이 길은 앞으로 어떤 모습으로 바뀌게 될까요?



꼬불꼬불 철길을 달리던 열차도 이제 내일부터는 쭉 뻗은 교량 위로 달려나갈 것입니다.



철길 너머에는 새로운 덕하역이 건설되고 있습니다.



현재의 덕하역 앞길은 흔한 시골에서 볼 수 있는 풍경입니다.



잠시 읍내를 돌아다니고 오는 사이 안내문이 새로 만들어졌습니다.



아담한 느낌의 이 역사도 이제는 시한부 인생이 되었습니다.



그래도 새로운 역사가 건설이 완료될 때 까지는 계속 사용될 것으로 보입니다.



지금 당장은 임시승강장을 가는 길이 보이지는 않습니다만

내일이면 완성되어 있겠지요?



그 사이에 동대구행 열차가 들어옵니다.



내일부터는 이 모습도 볼 수 없게 됩니다.



열차 마주편에서 부전방면 열차가 들어옵니다.

이제 열차를 타고 동대구역으로 향합니다.



 세월이 지날수록 주변에는 항상 있을거라 생각해왔던 것들이 하나둘씩 추억속으로 사라집니다. 앞으로도 이렇게 추억들을 사진으로 하나둘 담아두는 여행을 계속 이어가고자 합니다!



300x250

철길도 이사를 간다? 덕하역 이설 전날 풍경(1) [2019.06.16]


 마침 부산 벡스코에서 철도 박람회를 다녀오는 김에 현재 이설중인 동해선 일광~태화강 구간을 다녀와보고자 했었는데 마침 제가 방문한 날 남창~덕하 구간 선로가 이설되기 직전의 날이었습니다. 여러모로 절묘한 타이밍이 되어 마지막 순간을 사진으로 담을 수 있어 다행이라 생각됩니다.

 이번 포스팅에서는 이설 전날 덕하역 소재지의 읍내를 둘러보며 이설될 구간을 돌아다녀 보았습니다.





남창역에서 덕하역으로 넘어가던 도중 건너편에 있는 신선로의 모습입니다.

내일부터는 이 고가선로로 열차가 통행하게 됩니다.



오늘로서 승강장의 역할이 마지막인 덕하역 플랫폼.

달대형 타는곳이 철도청 시절의 검은색인 것으로 보아 바뀐것이 거의 없는 듯 보입니다.



그래도 지주식 역명판은 코레일 양식을 쓰는군요.



이 사진이 내일(2019년 6월 17일)부터는 역사속에만 존재하게 된다는 것이 믿어지지 않습니다.



이렇게 승강장에 서있는 무궁화호의 모습도 이제는 볼 수 없습니다.



열차가 떠나간 후 덕하역의 모습입니다.

고객대기실도 굉장히 오래된 듯 보입니다.



열차는 뒷꽁무니만 빼꼼 보이는 채로 점점 멀어져갑니다.



오늘 처음으로 덕하역에 방문하였는데 다음날이 이설일이라니

정말이지 오늘은 운이 억세게 좋은 것 같습니다.



흔한 간이역의 풍경입니다.

요즘 지어지는 역들은 으리으리 해져서 이런 분위기는 보기 어렵습니다.



오시는 승차권도 미리 사시면 편리합니다.

날짜와 시간을 꼭 확인하십시오.



역 안에는 온갖 공사가 한창입니다.

선로 이설로 인한 승강장 이전 안내판을 붙이는 작업입니다.



마치 임시 승강장을 마련한 좌천역보다 더 멀어보입니다.



덕하역의 모습입니다. 설마 이것도 우리의 기억에서 사라질까요?



역 바깥의 풍경은 생각보다 한산합니다.



이설된다면 이 안내판도 사라질 듯 보입니다.



비록 모습은 비슷하지만 조그마한 간이역도 나름 제게는 볼거리 중 하나입니다.



역에서 읍내 방향으로 걸어가봅니다.



청량읍 주민자치센터의 모습입니다.

청량면에서 읍으로 승격한지 갓 1달이 되어서 '읍' 글자만 이질적으로 느껴집니다.



역앞 거리는 전형적인 면소재지 분위기의 자그마한 가게들이 뭉쳐 있습니다.



덕하 5일장이 열리는 장소입니다. 보아하니 이 곳에서 새로 이설될 덕하역까지 직선도로가 생깁니다.



위의 사진에서 버스정류장 위치에서 반대편을 바라보면 저 멀리 덕하역이 건설되는 모습이 살짝 보입니다.



새로 만들어지는 길 근처의 가게들은 차단되어 있습니다.

철거 후 길을 정돈하려는 것으로 보입니다.



그렇게 걷고 걷다가 끊어진 철교가 눈에 들어옵니다.



자세히 보니 기존의 철길과 끊어진 철교과 서로 교차하고 있는 듯 보입니다.



바로 인근에는 건널목이 있습니다. 과연 이 곳은 어떤 곳이길래 이런 풍경이 펼쳐지고 있는 것일까요?



 다음 포스팅에서 2부가 이어지겠습니다.


철길도 이사를 간다? 덕하역 이설 전날 풍경(1) [2019.06.16]

https://elecs.tistory.com/327



300x250

도심속 작은 간이역 사상역의 흔적들 [2019.06.16]

 

 지난 무더운 여름 부산을 방문하기 위해 사상역에서 하차하였던 기억이 있습니다. 불과 1년도 지나지 않았지만 사상역의 모습은 지금과는 완전히 달라져 있었습니다. 그 모습을 기록하기 위해 경부선 사상역을 방문해봅니다.

 

 작년 방문 당시의 경부선 사상역의 모습을 보고 싶으신분들은 아래 링크를 참조해주세요.

 

 도심속 작은 간이역 사상역의 마지막 모습[2018.08.04]

 https://elecs.tistory.com/272

 

 

 

 

 

도시철도 사상역에서 내려 경부선 사상역 인근에 가보았습니다.

 

 

뭔가 허전하다 했더니 역사는 흔적도 없이 헐렸습니다.

 

 

임시역사 옆에서는 새로운 역 건물을 열심히 올리고 있었습니다.

 

 

구역사 바로 앞에는 시내버스 정류장이 위치해 있습니다.

도시철도 역과 구분을 위해 '코레일사상역'으로 표기하고 있었습니다.

 

 

기초 공사는 완료가 되었는지 벌써 공사가 여기까지 진행되었습니다.

 

 

작년에 임시역사를 찍었던 그 각도에서 다시 한 번 찍어 보았습니다.

 

 

역 주변이 공사중이다 보니 인부들께서 주변 정리를 하고 계십니다.

고생이 많아 보이십니다.

 

 

사상역 주차장 입구에서 바라본 승강장의 모습입니다.

 

 

임시역사 뒷부분의 모습입니다. 안전을 위해 펜스로 막아두고 있습니다.

 

 

역사 안에서 운행대기중인 부산김해경전철이 너머에 보입니다.

생각보다 가까운 위치에 있습니다.

 

 

작은 역임에도 출입문은 두 개나 달려 있습니다.

 

 

열차 도착 5분전 즈음 직원분들이 문을 열어주었습니다.

 

 

불과 작년까지 이 위치에 구 역사가 있었는데 감쪽같이 사라졌습니다.

 

 

경부선에는 수많은 열차들이 수시로 지나가기 때문에 건너기 전에 주변을 조심히 살펴야 합니다.

 

 

상행선은 2번 승강장만 여객을 취급하는 듯 보입니다.

여기서도 서울 방면의 열차를 탈 수 있군요.

 

 

반면 하행선의 경우 부산 방면과 부전 방면으로 나뉘어져 있습니다.

 

 

새로운 역사가 완공된다면 이 위험한 건널목은 사라지겠지요.

 

 

이 트럭은 어떻게 여기까지 들어온 걸까요?

 

 

잠시후 순천발 포항행 열차가 4번 승강장으로 들어옵니다.

 

 

부전역을 시종착하지 않고 정차만 하고 바로 포항으로 향하는 열차입니다.

이 차 이외에 부전역을 정차만 하는 열차로 신해운대행 ITX-새마을이 있을겁니다.

 

 

열차에 오르기전 구 역사 바로 옆에 있떤 건물의 모습입니다.

과연 이 건물은 완공 이후 어떤 운명을 맞게 될까요?

 

 

 

300x250