agolta
36
2021-04-22 17:57:56
19
826

동적타이핑 vs 정적타이핑


함수형 프로그래밍이 유행하면서 정적타이핑을 옹호하는 분들이 많아지네요.

그런데, 실제 응용 프로그래밍에서 정적타이핑을 통해 조기 에러를 식별하고, 함수결합을 쉽게 한다는 게 말처럼 쉬운가요?

프로그램 기초 이론 배울때나 int -> str 이런 식의 타이핑이 가능하지 실세계의 프로그램에서는 저런 자료형 보다는 nested json을 입력받아 filter 걸고 netsted json의 3레벨 깊이로 들어간 key의 value(얘 또한 nested json이고, child가 있을 수도 없을 수도 있죠.)를 리턴하는 함수가 많을 텐데요. 이걸 정적 타이핑 할 수 있나요?

nested json 특징 상 parent-child가 고정되어 있지도 않고, 그 때 그 때 늘었다 줄었다 하겠죠.

대표적인 게 ORM 데이터 베이스 쿼리 또는 REST Interface 결과겠구요.

json -> json 이런 타이핑은 아무 별 도움도 의미도 없을 것이고, 정말 타입시스템으로 에러 식별에 도움이 되려면 json의 구조를 in/out에 타이핑으로 정의해야 할 텐데, 있을 수도 없을 수도 있는 child 까지 고려하여 타이핑 할 수 있나요? 할 수 있다 해도 너무 복잡하고 오버헤드가 클 거 같은데.

보통 일반적인 프로그램에서는 json 받아서 자식 있는지 검사하고 있으면 별도 처리로직 돌리고, 없으면 어쩌고, if-else 등올 처리하던가, 재귀로 처리하던가 하겠죠. 정적 타입이 이런 프로그램 오류 식별에 도움이 될까 하네요.

요약하자면 int->int, int->str 같은 간단한 함수는 정적타이핑으로 오류 식별이 되겠지만 저정도 간단한 함수는 동적타이핑에서도 오류 날 일 없을 거구요. json->json 같은 수준의 복잡한 in/out이라면 정적타이핑으로 정의조차도 못할테니 별 의미 없을 것 같네요.

사실 모나드 등 함수 결합도 실세계의 복잡한 자료구조의 함수 결합이 가능할 지 판단이 안서네요.

REST로 받은 nested json을 세계의 함수로 나누어 처리하는 함수 bind을 했다고 했을 때 그 함수들을 다른 곳에서 재사용하여 사용할 일이 있을까요?

그냥 하나의 함수에서 처리하는 기존 명령행 방식이 더 개발도 쉽고 디버깅도 쉬울 것 같은데요?

인터넷상의 Future 모나드, Either/Result 예제등을 봐도 connection 까지만 예제로 있고 실제 받은 json 데이터에 대한 처리 부분이 죄다 생략 되어 있네요. 그냥 출력하고 마는 예제만 있구요. 자식이 있냐, 자식의 자식은 있냐, 자식의 항목 중 이 항목이 있냐 없냐 등등 이부분이 더 어렵고 괴로운 부분인데도 불구하고요.

제가 모르는 다른 정적타이핑의 현란한 세계가 혹시 있는가요?

0
  • 댓글 19

  • NPE
    980
    2021-04-22 18:18:40

    무슨 언어를 보고 얘기하시는지 모르겠지만

    타입과 함수형 프로그래밍은 다른 얘기 같은데요.

  • 피톤
    39
    2021-04-22 18:26:14

    타입과 함수형 언어의 정의는 다르지만 펑터 모나드 등 함수형언어의 특징을 극대화 하려면 강타입체크가 필요해지는거 아닌가요?

    별도 언어를 얘기하는 건 아니고 category 이론이 재밌어서 보다가 얘기합니다.

  • NPE
    980
    2021-04-22 18:31:51 작성 2021-04-22 18:56:36 수정됨

    그저 프로그래밍에서 표현의 차이일 것 같습니다.

    예를 들어, 타입이 느슨한 Clojure는 해당 얘기가 통용되지 않습니다.

    좀 더 자세히 적으려다가 대체할만한 글이 있네요.

    https://grishaev.me/en/no-monads/
  • 피톤
    39
    2021-04-22 18:59:11
    카테고리 이론이 잘 도냐 마냐가 아니고
    1. 카테고리 이론을 읽다 든 생각이 함수형 프로그램에서 함수 재사용을 높이기 위해 결합을 한다.
    2. 결합하기 위해 주고 받는 파라미터의 타입이 같아야 한다.
    3. 그러려면 정적 타이핑이 필요하다.
    뭐 이런 유행하는 논리상에서
    실세계에서 함수결합이 얼마나 사용될까?
    정적타이핑이 실세계 데이터 구조를 반영할 수는 있을까?
    만약 아니라면 정적타이핑이 과연 대세일까? 개발하기나 쉬운 동적타이핑이 더 나은게 아닐까?
    라는 생각까지 든거죠.
    나아가서 함수형 프로그래밍이 생각보다 임팩트가 약한 테마 아닐까 하는 생각까지요.
  • NPE
    980
    2021-04-22 19:06:39

    그냥 지나가던 개발자라 자세히 모르지만,

    Functor만 예를 들면 함수의 사상에서 타입이 중요한 관심사인가요?

  • 피톤
    39
    2021-04-22 19:20:10

    랑크주신 글 잘읽었습니다. 제 감정을 표현한 글이네요.

    모나드, 철도지향을 처음 봤을 때 뿅갔고 몇년간 해보려 했다가 결국 장난감이었다는 내용이 제 생각인 거 같습니다.

    실세계는 훨씬 복잡하고 훨씬 복잡한 데이터를 처리하기 위한 여러 방식이 있는데 간단한 하스켈 이론교육 수준으로 대체가 불가능 하다는 내용도요.

    그거 구현해보겠다고 동적타입언어에서 굳이 정적타입 흉내내며 이것저것 해봤자 코드량만 늘고 실익이 없다죠.

    안전한 프로그래밍이라며 나오는 예제만 봐도 저도 왜 전체를 try catch하지 않을까? 굳이 바인딩한다고 저렇게 낑낑 안되도 try carch하면 가독성 있게 시퀀스하게 표현될텐데... 하는 생각을 했는데 비슷항 내용도 있네요.

  • 피톤
    39
    2021-04-22 19:25:02

    사실 functor, monad 함수 사상으로 표현하고 설명하기 좋은데 수학 함수는 기본이 int->int니까 별 논쟁거리가 없죠.

    f, g 결합 하려는데 f가 스트링 뱉고 g가 정수를 받으면 에러나니까 미리 타입을 정의하고 스트링 뱉으면 실행전에 타입체크에서 거르겠다. 이런 생각때문에 정적 타이핑이 필요하다는 거죠.

  • fender
    21k
    2021-04-22 21:45:01 작성 2021-04-22 21:57:00 수정됨

    제 생각엔 개발 분야를 너무 좁게 생각하시는 것 때문에 시각 차이가 생긴 것이 아닌가 싶습니다. 말씀처럼 개발이 복잡해봐야 모두 JSON 지지고 볶는 걸로 수렴한다면야 설계나 구조 같은 걸 크게 고민할 일도 없겠지만, 실제로는 분야에 따라 훨씬 복잡하고 큰 규모의 개발도 매우 흔합니다.

    그리고 일반적으로 이야기하면, 프로젝트가 크고 복잡해질수록 동적 타이핑의 장점보다는 단점이 더 부각되게 됩니다. (물론 바꾸어 말하면 프로젝트가 간단할수록 동적 타이핑이 유리하다는 말도 성립할 수는 있습니다.)

    또한 위의 여러 분이 지적하셨듯이 정적 타이핑과 함수형이 유행하는 것 사이엔 딱히 큰 연관 관계도 없습니다. 자바나 C#, C++과 같은 방식의 객체지향 패러다임에서도 복잡한 구조를 설계할 때는 기본적으로 타입을 중심으로 사고를 하게 됩니다.

    동적 타이핑에만 익숙한 분들은 타입이라는 것이 실수를 줄이기 위해 귀찮음을 감수하고 써야하는 무언가 쯤으로 생각하시는 경우도 많은데, 실제로는 그런 패러다임에서 타입이라는 것은 추상화의 가장 기본적인 단위이고, API를 통해 설계의 의도를 나타내는 소통의 수단입니다.

    함수형도 그렇지만 패러다임이란 건 개발을 하는 관점과 접근 방법에 대한 내용이기 때문에, 이미 익숙한 패러다임, 혹은 관점과 접근에 기준을 두고 새로운 패러다임을 이해하려 한다면 좋은 결과를 얻기 어렵습니다.

    본문도 어느 정도 그렇지만, 위에 링크한 모나드에 대한 글도 전형적으로 이질적인 패러다임의 관점으로 함수형을 이해하려 하는 바람에 핵심을 놓치고 있는 - 예컨대 선언적 접근에 대한 언급이 없다거나 스칼라의 Option의 용도를 단지 'Nil'이 없어서라고 착각하는 등 - 사례라고 생각합니다.

    함수형이든 타입이든 관점과 접근 방법에 대한 개념은 일단 그걸 제대로 이해해야 유용성을 절감할 수 있습니다. 아마 파이썬을 접해보지 않은 개발자라면 파이썬의 리스트 컴프리헨션을 보여줘도 for나 while로 다 되는데 그런 걸 왜 쓰냐고 반문하기 십상일 것입니다.

    어떤 패러다임에 익숙하지 않은 사람에게 그 패러다임의 유용성을 설득하는 건 쉬운 일이 아닙니다.

  • 지붕뚫고높이차
    1k
    2021-04-22 22:14:28 작성 2021-04-22 22:20:53 수정됨

    데이터만 볼 때 정적 타이핑보다 동적 타이핑이 효과적인건 인정하지만


    데이터를 사용하는 기능(비즈니스로직)으로 관점을 확장하면

    구현한 기능의 정확한 표현을 위해

    정적 타이핑이 필요하더라구요.


    그런데 함수형 언어는 좀 모호한 것 같습니다.

    내가 만든 함수가

    데이터라 하기도 애매하고 기능이라 하기도 모호하죠.


    그래서 데이터 관점으로 취급하면 동적 타이핑

    기능으로 남한테 설명하면 정적 타이핑을 사용하는것 아닐까요?

    (제가 함수형 언어를 사용하지 않아서 이부분은 틀릴 수 있겠네요.)

  • 피톤
    39
    2021-04-22 22:30:19
    JSON 지지고 복는게 간단한 프로그램이라는 말은 이해가 안되네요. DB 조회 웹서비스 연계 다 기반데이터가 JSON인데... 1000억짜리 프로젝트 따지고 보면 JSON 지지고 복는 로직이 절반 쯤 되지 않나요?
    설계할때 타입 중심으로 설계한다는 것도 이상하구요.
    데이터 설계후 연계 프로토콜에 대한 자료구조 설계를 하지요. 물론 이과정에서 타입을 정의하겠지만 타입중심의 설계와는 다르죠.
    차라리 JSON 구조를 설계한다고 봐야겠죠.
    JSON의 각 필드들의 타입은 정하겠지만 그 핗드타입은 프로그램의 정적타이핑에 도움되는 필드는 아니잖아요? 데이터 설계의 일환이죠. 마치 DB필드 명세처럼요.

  • fender
    21k
    2021-04-22 22:42:01 작성 2021-04-22 22:49:06 수정됨

    피톤 // 단적으로 말해서 크롬 같은 브라우저를 만드는 것도, 스프링 같은 프레임워크를 만드는 것도, IDE 같은 복잡한 도구를 만드는 것도 모두 프로그래밍의 영역입니다.

    당연하지만 그런 걸 잘 설계하고 유지보수하려면 데이터베이스에서 JSON으로 데이터 뽑아서 조작하는 것과는 완전히 다른 종류의 지식이 필요합니다.

    애초에 객체지향 같은 방법이 대두한 것이 그런 부류의 복잡도를 제어하려는 시도에서 출발한 점을 고려해보면 이해에 도움이 되실지 모르겠습니다.

    혹시 웹 개발은 다르다고 생각하실지 모르겠지만, 오히려 전통적으로 엔터프라이즈 웹 개발이야 말로 그런 부류의 설계가 가장 크게 발전한 영역 중 하나였습니다. 웹 개발이 어차피 데이터 뽑아서 JSON 조작하는 게 끝이라면 EJB니 DDD니 하는 것들이 왜 유행했을까 생각해보시면 좋겠습니다.

  • fender
    21k
    2021-04-22 23:01:35 작성 2021-04-22 23:04:12 수정됨

    여담이지만, 본문에서 언급한 중첩된 JSON 구조 지지고 볶는 작업 조차, 누구는 키 값으로 객체 뽑아서 조건 문으로 널인지 비교하고 다시 한 단계 아래 키로 같은 일을 반복하고 하는 식으로 접근할 때 다른 누군가는 경로에 대한 '렌즈'를 선언해서 값을 추출하려 할 것입니다.

    그게 꼭 후자의 접근이 무조건 좋다는 뜻이 아니라, 전자의 접근 만을 해본 사람이라면 아예 후자 같은 방법은 생각할 수도 없고 써보기 전엔 필요성을 이해할 수도 없다는 것이 핵심입니다.

    패러다임은 사고의 틀을 정하는 문제이기 때문에 예컨대 애초에 JSON을 다루는 건 조건문으로 널 체크해가면서 값을 읽는 것이다라는 틀 안에서는 그 걸 벗어나는 렌즈 같은 개념을 이해할 수 없습니다.

  • 피톤
    39
    2021-04-23 06:59:09 작성 2021-04-23 07:17:16 수정됨

    크롬, 스프링 개발할 때 데이터 구조는 웹개발만큼 복잡할 것 같군요. 물론 소스를 분석하진 않았지만 당연히 추측은 되는데요?

    Html을 읽어와서 파싱해야 할텐데, 그 html 파싱이야 말로 nested json의 전형적인 영역이겠네요. 물론 nested xml로 봐도 동일하구요.

    이걸 int->int, str->int 로 함수정의해서 결합하는 방식으로 어떻게 개발할 지 상상이 안가네요.

    스프링 또한 마찬가지로 보이네요.

    원천 소스를 가공해서 확장하려면 당연히 원천 소스의 구조가 데이터 구조로 들어나야할테고 이 데이터 구조도 결국 nested 구조겠죠.

    nested json 지지고 볶는게 웹개발에만 한정되지 않을 것 같네요.

    AI 기계학습 또눈 수치해석 정도 되면 데이터 구조보다는 선형, 비선형적 처리 로직의 연계가 더 중요해 질 수 있겠지만 이런류는 동적타이핑의 파이썬이 주류로 있구요. 명령행 개발이지 함수형으로 개발하는 예를 별로 본적 없네요. 

    리플이 길어지니까 원주제가 희미해 지네요.

    결국 실세계 복잡한 데이터 처리에 정적타이핑이 별 도움 안된다. 함수결합등에 정적타이핑이 유리하다지만 함수결합도 단순 데이터 타입 결합 이상은 어렵다. 그냥 개발이나 쉬운 동적타이핑이 더 낫지 않을까 입니다.

  • fender
    21k
    2021-04-23 07:55:03 작성 2021-04-23 08:02:17 수정됨

    피톤 // 다시 말씀 드리지만 이 문제를 이해하시려면 기존에 피톤님이 이해하시는 관점과 접근 방법으로 함수형이나 타입을 중심으로하는 설계 관행이 어떤 것일지 상상하는 대신 아예 개발을 새롭게 배운다고 생각하고 관련 주제에 대한 기술 문서나 소개 사이트라도 보시는 것을 추천 드리고 싶습니다.

    말씀하신 내용을 보아도 크롬, 스프링 같은 걸 설계하는 것도 결국 데이터 파싱 방법의 확장 수준에서 짐작하려 하시는 듯 한데, 그건 마치 어차피 전쟁은 총 쏴서 이기는 거니 전술이니 보급이니 하는 상위 개념도 모두 사격술의 일부로 이해해 보겠다는 관점이나 비슷합니다.

    그리고 타입을 중심으로 한 설계든 함수형이든 피톤님께서 이해하시는지 여부와 무관하게 실무에서 이미 쓰일 만큼 널리 쓰이고 있는 개념입니다.

    전자는 C++, 자바, C#이 메인스트림 언어로 활약하던 지난 30년 간 주도적인 관행이었고 요즘도 여전히 강력한 흐름입니다.

    함수형을 누가 쓰는지 궁금하시다면 C# 개발자에게 LINQ 같은 건 누가 쓰는지 물어보셔도 좋고 자바 개발자에게 스트림 API가 쓸모가 있는지 물어보셔도 되고, 리액트 개발자에게 왜 불편하게 굳이 불변 상태를 쓰는지 물어 보셔도 됩니다.

    모르긴해도 지난 30년 간 등장한 규모있는 소프트웨어 프로젝트는 어지간하면 타입 중심의 객체지향 관점에서 설계했을테고 요새는 러스트 같은 저수준에 가까운 언어조차 함수형 지원을 기본 탑재하고 나오는 세상인데, 내가 해본 것이 거의 파이썬을 스크립트 처럼 써서 데이터 조작하는 개발이었다고 해서 그런 개념들이 불필요하다라고 결론을 내리는 건 솔직히 지나치게 협소한 생각입니다.

  • daywalker
    1k
    2021-04-23 08:33:10

    C  vs JAVA

    어떤게 더 좋은 언어인가요?


    동적이 더 좋은지 정적이 더 좋은지 비교를 하는게 아니라

    주어진 요구사항에 맞는 설계를 하면서 어떤걸 써야될지 결정을 하는거겠죠..

  • 피톤
    39
    2021-04-23 08:40:22

    희한하게 저를 넘겨짚는군요. 그런 말투는 건전한 논의에 도움 안되는 인신공격성 어그로 말투일텐데요.

    제가 파이썬 스크립트 데이터 조작만 개발했고 진지한 다른 개발의 세계를 모르니 공부해라... 좋은 어투는 아니죠?

    전 코볼부터 c, java 개발 25년 이상 해욌으니 초보 개발자 취급은 마시죠. 파이썬은 최근에 재밌네, 동적 타이핑이 더 편하네 하며 본정도...

    정적타이핑으로 당연히 개발해왔고, 시퀀스 다이어그램도 수만장 그려봤습니다.

    그런데 정작 중요한건 복잡한 데이터 구조의 설계이고 이 구조를 어떻게 처리하는 가라는 말을 한거구요. 그동안 상투적으로 해왔던 정적 타이핑이 과연 오류 조기 식별과 함수결합에 도움이 되는지 의문을 던진거구요.

    논의를 하고 싶으면 복잡한 데이터를 어떻게 정적타이핑하고 이렇게 정적타이핑 한 함수들간의 결합이 어떻다라는 예제나 인터넷 링크를 통해 논의하는게 맞지 않을까요?

    그럼 기존 소스는 이럴텐데 어떤 소스가 더 생산성과 유지보수성이 유리할까 하는 논의죠.

    그냥 이철학과 저철학 뭐가 맞냐는 얘기는 해봐야 결론 안나겠죠? 그런데 결론 안나는 얘기에서 가장 조심해야 할 부분이 너가 몰라서 그렇가, 공부나 더해라 라는 말투 아닐까요?

    크롬 얘기해서 크롬도 복잡한 데이터 처리가 메인일텐데 했더니 사격술과 비교하기네요.

    어떤 개발이던 데이터 설계를 한 후 프로그램 기능설계를 합니다. 기왕 전쟁으로 비교하시니 데이터 설계가 전략, 전술이라면 프로그램 설계는 중대 소대단위 전술일테고 말씀하신 함수 타입 설계야 말로 사격술이나 총검술 수준의 얘기 아닌가요? 비유가 거꾸로 된듯하네요.

    정말 더 진지한 얘기 하고 싶으면 인신적 얘기 말고 논의의 주제인 복잡한 실세계 데이터를 정적타이핑 하는 방법 또는 예시, 그리고 그 정적타이핑 된 함수를 결합하는 방법 또는 예시를 보여주시죠.

    다 필요없고 더 복잡한 프로젝트는 간단한 데이터 구조고 함수 결합이 짱이야. 너가 머르니 공부해. 이런 논의는 별로 하고 싶지 않네요. 

  • newchaos
    16
    2021-04-23 08:52:26

    함수형은 데이터 처리단계에서 사용자가 로직 구현하는 부담을 더 효율적이고 안전하게 만들어주는데 의미가 있습니다만.. json으로 지지고 볶고 하는 단계는 그냥 하시던 대로 하시면 됩니다.  있어보이는 단어 남발하고 자기 주장에 논점 흐리기.. 뭐 어쩌다가 공부 좀 하셔서 알거같으니까 신나시는건 알겠는데 ㅎㅎ

  • 엡실론
    2k
    2021-04-23 08:53:23

    동적 타이핑이라고 json이라고 타입이 없는게 아닙니다. 예를 들어 로그인 api를 생각해보죠. api에 입력으로는 id, password 필드를 가진 json이 와야 합니다. json으로 입력받는 api라고 해서 아무런 json이나 던져주면 되질 않죠. 정해진 형식이 필요합니다. 이걸 개념적인 타입이라고 부를 수 있습니다. 동적타이핑이든 json이든 개발할때는 대개 머릿속에는 개념적인 타입이 있습니다.

    그렇다면 로그인 api는 LoginRequest 형식의 json을 입력으로 받아 LoginResponse 형식의 json을 출력한다고 말할 수 있습니다. 그리고 내부적으로는 LoginRequest, LoginResponse 타입을 정적으로 정의할 수 있습니다. 로그인을 처리하는 로직을 가진 함수는 LoginRequest -> LoginReseponse 타입이 되고요. 나머지는 json에서 LoginRequest타입으로, 반대로 LoginResponse타입에서 json으로 변환하는 것입니다.

    따라서 외부에서는 json을 쓰더라도 내부적으로는 얼마든지 타입시스템을 만들고 사용 할 수 있습니다. 아무리 복잡한 타입이라도 가능합니다. 요즘은 자동으로 json관련 코드 생성을 해주는 라이브러리도 많고요.

    동적타이핑인 javascipt에 굳이 정적타입체크를 도입한 typescript가 만들어 지는 걸 보면, 많은 사람들이 정적 타입이 도움이 됨을 느끼고 있다는 것이겠죠.

  • fender
    21k
    2021-04-23 08:55:46 작성 2021-04-23 09:21:51 수정됨

    피톤 // 제가 판단한 것은 님의 경력이 아니라 "크롬이든 스프링이든 어차피 중첩 데이터 파싱 처리 같은 게 핵심인데 타입이 왜 필요하냐"는 식의 관점입니다. 그건 본인이 이 글타래에서 일관되게 주장하신 것이니 넘겨 짚고 말고 할 것도 없었구요.

    그런 협소한 관점에 25년 동안 경험해서 도달하신 것이라면 같은 개발자로서 안타깝긴 해도 솔직히 그 과정에 대해 이러쿵 저러쿵 토 달고 싶진 않습니다. 제가 이야기하는 것은 님이 어떤 과정으로 그런 결론에 도달했던지 간에 그건 지극히 협소한 관점이라는 것 뿐입니다.

    이제와서 인터넷 링크를 내놔라 하실 거면 차라리 제가 이야기한 키워드를 한 두 개라도 검색해서 좀 읽어보시지 그러셨나요? LINQ 하나만 검색해보셨어도 그게 실무에서 별 필요도 없는 것인지 아닌지 쉽게 알 수 있을텐데요.

    그리고 시퀀스 다이어그램이 왜 등장하는지는 알 수 없지만 UML을 써보셨다면 디자인 패턴에 대해서도 최소한 들어는 보셨겠군요. 한 번 구글에서 검색을 해보세요. 그게 과연 JSON 객체 같은데서 데이터 넣고 빼는 일로 퉁칠 수 있는 개념인지, 또는 그런 부류의 기법과는 다른 종류의 지식 체계인지는 바로 알 수 있을테니 말입니다.

    그리고 정작 남의 입장을 넘겨 짚는 건 피톤님입니다. 전 이 글타래에서 "함수 결합이 복잡한 프로젝트에서 짱이다" 같은 이야기는 한 적도 없는데 본인이 무슨 이유에서건 '정적 타이핑 = 함수 결합에나 쓰는 것'이라는 틀에 갖혀서 그렇게 오독하신 걸 마치 제 주장처럼 말씀하시는군요.

    제가 님의 관점을 '협소하다'라고 했다고 '인신공격'으로 생각하신 모양인데, 기본적으로 저는 정적 타이핑이든 함수형이든 이런 저런 사례에서 보듯 나름의 쓸모가 있다는 입장인 반면, 피톤님은 "그거 내가 해보니 데이터 처리하는데 별 쓸모도 없던데"로 일관하고 계시니 그런 말씀을 드릴 수 밖에요.

    피톤님의 개발에 대한 상당히 편협한 주장을 애둘러 지적한 제 글을 '인신공격'으로 받아들이셨다면 안타깝긴 합니다만, 솔직히 말씀하시는 것을 들으니 제가 무슨 이야기를 해도 25년 동안 쌓아 올린 그 확증의 벽이 쉽게 무너질 것 같진 않으니 저도 이 쯤에서 빠지겠습니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.