본문으로 건너뛰기

· 약 7분
조준철

개발자는 코드를 작성하거나 문제를 해결할 때 숙고하며 알고리즘을 구상하는 논리적인 사고에 익숙합니다. 그래서 특정 주제를 가지고 사람들 앞에서 발표하거나 회의에서 자신이 주장하는 내용에 유연한 사고를 해야 하는 상황을 어려워하는 경우가 있습니다.

여기에는 여러 가지 원인이 있겠지만 이때, 툴민의 논증 모델을 활용하면 주장을 더 명확하게 표현하고, 그 주장을 지지하는 증거와 논거를 제시하며, 반론을 예상하고 대응할 수 있습니다.

툴민의 논증 모델은 영국의 철학자인 스티븐 툴민이 개발한 논증법으로, 어려운 내용은 제쳐두고 당장 써먹을 만한 실용적인 논증법을 제시합니다.

핵심은 주장하고자 바의 설득력을 높이려면 단순히 근거를 몇 개 제시하기보다는 자신이 제시한 정당한 이유를 반박하는 반론을 본인이 구상하고 그것을 재반박해서 얻게 된 결론이 설득력을 얻게 된다는 겁니다.

개발자의 숙고하며 논리적인 사고에 익숙한 장점을 활용하여 발표나 회의 전에 주제에 대해 미리 생각해 보고, 툴민의 논증 모델을 활용해 보세요. 그러면 주장을 더 명확하게 표현하고, 그 주장을 지지하는 증거와 논거를 제시하며, 반론을 예상하고 대응할 수 있습니다.

툴민의 논증 모델은 다음과 같이 6개의 구성 요소로 이루어져 있습니다.

  • 주장 (Claim): 주장은 논증의 목표로, 증명하려는 주제나 판단입니다.
  • 증거 (Data/Frame/Evidence): 증거는 주장을 지지하는 사실이나 정보입니다.
  • 논거 (Warrant): 논거는 주장과 증거 사이의 논리적 연결고리입니다.
  • 보강 (Backing): 보강은 논거를 지지하는 추가적인 정보나 설명입니다.
  • 조건 (Qualifier): 조건은 주장의 힘을 약화하거나 한정하는 역할을 합니다.
  • 반론 (Rebuttal): 반론은 주장이나 논거에 대한 예외 사항이나 반대 의견을 제시하는 것입니다.

논증 모델은 크게 기본구조 (4) + 보조구조 (2)로 구성합니다. 기본구조는 (주장, 증거, 논거, 보강)으로 이루어져 있고, 보조구조는 (조건, 반론)으로 이루어져 있고, 상황에 따라 필요한 구성 요소를 추가하거나 수정해서 사용하면 됩니다.

논증의 구성 요소에 대한 주요 흐름을 이렇게 구성하면 좋습니다. & (AND) | (OR) 는 각 구성 요소를 구분하기 위한 구분자입니다.

  1. 주장 (Claim)
  2. 근거 - 증거 (Data/Grounds/Evidence)
  3. 왜냐하면 - 논거 (Warrant) & 때문에 - 보강 (Backing)
  4. 그래서 So (So) | 어쩌면 - 조건 (Qualifier) | 예외로 - 반론 (Rebuttal)
  5. 주장 (Claim)

주요 흐름에 대한 예시를 들면 다음과 같습니다. 본인 성향에 따라 필요한 구성 요소를 추가하거나 수정해 보세요.

  1. 나는 우리 반 학생들이 모두 A 학점을 받을 것이라고 믿는다. "주장 (Claim)"
  2. 왜냐하면 우리 반 학생들은 모두 열심히 공부했기 때문이다. "증거 (Data/Grounds/Evidence)"
  3. 우리 반 학생들은 좋은 시험 성적을 거두었으며, 과제물에서도 좋은 평가를 받았다. "논거 (Warrant)" & 시험성적과 과제물 점수가 높은 학생은 학칙에 따라 좋은 점수를 부여하게 되어 있다. "보강 (Backing)"
  4. 그래서 "So (So)" | 어쩌면 대부분의 학생은 "조건 (Qualifier)" | 따라서 시험에서 부정을 저지르거나 수업시간에 불성실한 태도를 보인 경우가 아니라면, "반론 (Rebuttal)"
  5. A 학점을 받게 될 것이다 "주장 (Claim)"

한두 번만 활용해 보면 동료들에게 더 명확하게 주장하고 설득하는 사람으로 인지되어, 향후 예상하지 못한 돌발 상황에서는 좀 더 생각해 보고 다시 예기할 수 있는 상황을 만들 수 있습니다.


한 주간의 여정 (2024-05-06 ~ 2024-05-10)

  • 프로젝트 빌드에 필요한 시간을 줄이는 MSBuild 옵션 추가
  • 종속 패키지 버전 업데이트
  • 변수명 변경
  • Node.js 함수 테스트 기능 개선
  • 스크립트 로더 기능 개선
  • 공통 리소스 BindingAction (Replace, Append, None) 옵션 추가
  • 배치 스크립트 디렉토리명 변경
  • 디자인 개선
  • LoadOptions 중복 방지를 위해 시스템에서 부여하는 키에 '$' 접두어 사용
  • 거래 실행시 접근 권한 정보를 dbclient, function 모듈에 전달하도록 개선
  • JSON 데이터 쿼리 및 변환 라이브러리 jsonata 추가
  • C# 서버리스 함수 개발 테스트 API Controller 추가
  • Node.js 서버리스 함수 개발 테스트 서버 추가

· 약 8분
조준철

살다보면 가끔 내적인 이유든 외적인 이유던지간에 가볍게 또는 진지하게 그냥 막막하거나 무엇이 맞는 것인지, 어떻게 시작해야 할지 도저히 모를 때가 있는 슬럼프가 찾아옵니다.

그럴때 용기와 희망을 주는 의미를 담고 있는 자기관리 명언이나 책들을 보면 머리로는 이해가 되는데 생각보다 내 상황에 도움이 되지 않는 데 그 이유는 대부분 "성공"이라는 목표를 가지고 있기 때문입니다.

성공이라는 목표를 가지고 있으면 그 목표를 달성하지 못했을 때 좌절하게 되고, 그 좌절로 인해 더 막막해지고, 무엇을 해야할지 모르게 힘든 시기를 겪게 되는데, 이를 극복하고 성장하는 과정을 통해 더 강해지고 성숙해질 수 있습니다.

"본인의 칼은 본인이 갈아야 한다" 라는 말은 지인이 제게 자주 하는 말입니다. 성공의 기반이 되는 것은 자신의 노력과 끈기로 경험을 통해 얻는 것들을 말합니다만, 여기에는 좀 더 생각 해볼 만한 철학적인 의미를 가지고 있습니다.

내 경험을 쌓기 어려운 시대

예전에는 "젊어서 고생은 사서한다." 라는 속담이 있을정도로 경험을 쌓기 위해 노력하고 경험을 통해 성장하는 과정을 거쳤지만, 현재는 인터넷과 스마트폰, 결정적으로 AI 기술이 발달하면서 정보를 얻기 쉬워졌습니다. 이 말은 이러한 정보를 통해 얻는 지식은 경험을 통해 얻는 지식보다 덜 가치가 있다는 것일까요? 아니요. 그렇지 않습니다. 사실에 근접한 정보는 가치에 우위가 있을 수 없습니다.

문제는 경험을 쌓기 위해 노력하고 성장하는 과정의 기회가 점점 줄어들고 있다는 것입니다. 학습(지식을 습득)을 한다는 것은 누군가 잘 정리해둔 정보를 받아들이는 것이지만, 경험을 통해 성장한다는 것은 그 정보를 받아들이고, 이를 토대로 자신만의 결과와 지혜를 만들어내는 것입니다. 분명히 아는 것과 전달 하는 영역은 다릅니다.

습관적으로 미디어, 책, 강의 등을 통해 정보를 얻는 것만 한다면 그 정보를 토대로 자신만의 지혜를 만들어내는 것은 뇌과학적으로도 어렵습니다. 사람은 본능적으로 시각 + 청각적인 자극에서 80% 에 가까운 집중력을 보인다고 합니다. 문제는 새로운 자극을 받아들이기 위해 수많은 정보들은 잊혀집니다. 그래서 본인의 칼을 만들어야합니다.

성공이 아닌 성장을 목표로 삼는 것

한번 쯤은 내가 성공했을 때의 모습을 상상해보았을 것입니다. 그리고 그 상상을 통해 당신이 어떤 사람이 되고 싶은지, 어떤 모습을 가지고 싶은지 생각해보았을 것입니다. 그리고 그 모습을 향해 나아가기 위해 노력하고 있을 것입니다.

그런데 성공을 하면 그 이후에는 무엇을 할 것인가요? 성공을 위해 칼을 갈고, 닦고, 쓰고, 다시 갈았는데, 성공을 하고 나면 그 칼은 더 이상 갈 필요가 없어집니다. 그리고 그 칼을 버리고 새로운 칼을 만들어야 할 지 모릅니다.

먹고 사는 것은 기초적인 삶을 위해 기본적으로 필요한 것이지만, 그 이상의 삶을 살기 위해서는 좋아 하는 일, 해야 하는 일, 할 수 있는 일을 찾아내고, 그것을 통해 좀 더 편하게 해낼 수 있는 본인의 칼을 갈아야 하는 과정을 자연스럽게 해야합니다.

나를 만들어가는 것

그런데 제일 어렵고 중요한 것은 칼을 버릴 줄 알아야 하는 것입니다. 칼은 성장을 위한 도구이지 무기가 아닙니다. 그래서 성장에 더 도움이 된다면 더 많은 칼을 만들고 사용할 수 있도록 언제든 본인의 칼을 버릴 수 있어야합니다.

칼을 바꾸거나 버린다는 것은 어떤 이에겐 자신이 그동안 해온 것들을 부정하는 것 같아 더욱 쉽지 않습니다. 그래서 평생 한 직장에서 근무한 직장인이나 스포츠 선수들이 전성기를 지나 은퇴 이후에는 무엇을 할지 고민하는 것은 당연한 일입니다.

칼을 버린다는 것은 당신이 성공하지 못했다는 것이 아닙니다. 오히려 칼을 무기로 생각한다면 내가 나의 칼로 다칠 수도 있다는 것입니다.

사람들은 나의 칼을 보고 신기해 하거나 부러워 할 수 있어도 그것만으로 알아주거나 인정하지 않습니다. 오히려 크기에 상관없이 그 사람만이 할 수 있는 결과나 능력 또는 고민하지 않고 믿고 맡길 수 있는 신뢰를 쌓아야합니다.

증명하거나 설득할 필요없이 작더라도 하나씩 하나씩 자신만의 더 나은 내일을 만들기 위해 노력하는 당신은 이미 성공한 사람입니다.


한 주간의 여정 (2024-04-29 ~ 2024-05-03)

  • 환경설정 자동화 기능 개선
  • 배치 스크립트 호출 후 로그 출력을 콘솔, 파일로 출력하는 기능 추가
  • 운영체제에 따라 사전에 정의된 배치 스크립트 업무를 수행 기능 추가

· 약 9분
조준철

작년부터 개발을 하면서 ChatGPT 도움을 많이 받다 보니 프롬프트 엔지니어링에 대한 관심이 생겨 최근에 마이크로소프트의 Semantic Kernel을 사용해서 HandStack 프로그램에서 생산성에 도움이 될 만한 다양한 문법을 테스트 해보고 있습니다.

몇 년 전에 머신러닝을 기초 레벨에서부터 학습을 해본 적이 있습니다. 회귀, 분류, 군집, 예측, 추천 기능을 활용해서 업무 프로그램에 적용해야 하는 미션을 부여받아 진행했는데, 그 당시 고생한 거에 비하면 의미 있는 성과를 내지는 못했습니다.

머신러닝은 기본적으로 적용하려는 수학적 알고리즘에 의한 매개변수 값에 따라 의도한 결과가 달라지다 보니 만족할 만한 학습 모델을 만들기 까지 반복되는 살짝 지겨운 (?) 학습 과정을 많이 거쳐야 하는데, 이렇게 만들어진 학습 모델을 운영 서비스에 적용해서 클라이언트에서 확인하기 위한 자동화된 MLOps 프로세스와 그에 필요한 인력이 필요합니다. 지금에서 생각해보니 크게 2개의 이슈가 있었네요.

  1. 업무 시나리오에 따라 필요한 학습 데이터의 수량이 부족하거나 불균형하게 되어 있으면 학습 모델의 성능이 떨어지게 되어 실제 운영 환경에서는 예측한 결과가 실제 결과와 다르게 나타나는 경우가 종종 발생합니다. 학습 모델은 학습 시점의 과거 데이터를 기반으로 하기 때문에 정기적으로 최신 데이터를 추가한 학습 데이터의 재학습이 필요하게 되는데 이 부분을 얼마나 자동화 할 수 있는지가 중요합니다.

  2. 그렇게 고생하며 얻은 지식이 1년도 안 되어 Auto ML로 불리는 학습 데이터의 크기와 그에 적절한 학습 시간만 넣으면 알아서 최적의 수학 알고리즘과 매개변수의 재학습을 통해 결과로 만들어주는 솔루션이 나왔습니다. Auto ML의 학습 모델 성능이 좋다는 것을 보고 그 당시에 AI의 발전 속도가 개인이 기초 분야에서 학습하는 속도보다 빠르다는 것에 놀랐습니다.

그동안 딥러닝 기반의 AI로 음성인식, 영상 객체 인식, 자율주행, 상담원 챗봇 등 사람이 하는 업무 보조 역할을 대체하는 기술들로 발전하고 일반사람들이 쉽게 접근하지 못하는 스며드는 방식으로 도입이 되었었다고 한다면, 최근에는 다양한 좋은 품질의 학습 모델을 내려받거나 API로 호출할 수 있는 서비스를 제공하는 허깅페이스(https://huggingface.co) 를 보며 이전보다 초기 접근성이 좋아졌다는 것을 새삼 느꼈습니다.

그 중에서 LLM(Large Language Model)은 기존의 AI와는 다르게 상상할 수 없는 대규모의 데이터를 학습하여 텍스트 생성, 번역, 요약 등 다양한 언어 처리 작업을 수행하는 데 사용됩니다. 큰 변화의 핵심은 수요자가 필요한 업무에 따라 활용 용도에 따라 학습 곡선의 선택지가 생겼다는 것인데, 접근성이 좋아진 만큼 더 많은 사람이 쉽게 AI 기술을 활용하고 있습니다.

예를 들어 최근 Meta에서 ChatGPT 4 와 유사한 성능을 보여줄 것으로 보이는 Llama3 학습 모델을 오픈소스로 공개했습니다. 당연히 영어로 학습된 모델을 발 빠르게 야놀자에서 한국어로 파인 튜닝해서 공개를 해주었고, 이제 AVX2 명령어를 지원하는 최신 CPU를 탑재하고 NVIDIA의 RTX 3060+ 또는 AMD 의 RX 7800+ 그래픽 카드를 가지고 있는 개인 PC에서도 파이썬이나 랭체인 같은 기술을 모르더라도 LM Studio (https://lmstudio.ai) 와 같은 도구를 활용하거나 랭서브(https://www.langchain.com/langserve) 를 이용해서 셀프 호스트로 ChatGPT 서비스를 실행할 수 있습니다.

Open AI에서 제공하는 ChatGPT API를 사용하려면 유료 API 키를 발급받아야 하는데, 셀프 호스트로 동일한 품질의 서비스를 운영하고 ChatGPT 질문과 결과값을 벡터 값으로 임베딩하여 저장하고 검색할 수 있는 벡터 DB들을 사용 가능하면 기업에서는 물론 개인이나 학생들도 쉽게 AI 기술을 활용할 수 있을 것입니다.

그런 의미에서 학생, 직장인에 상관없이 누구나 프롬프트에 필요한 문법을 정리하고 이를 활용해서 ChatGPT를 사용하는 방법을 알아두면 앞으로 써먹을 게 많을 거로 보여집니다.

문법을 학습하기 위한 참고 웹 사이트로 랭스미스 (https://smith.langchain.com/hub) 를 추천드립니다. 예를 들어 데이터베이스 쿼리를 생성하기 위한 프롬프트에 대한 예로 https://smith.langchain.com/hub/rlm/text-to-sql/playground 를 참고하시면 괜찮을 것 같네요. 굳이 Open AI의 유로 API 키가 없더라도 여기에 있는 문법을 ChatGPT에 그대로 적용해도 됩니다.

영어로 되어 있지만 DeepL로 번역해서 얻은 프롬프트를 ChatGPT에 붙여서 사용해 보면 확실히 기존보다 좀 더 나은 답변을 얻으실 수 있으실 겁니다.

랭스미스와 유사한 방식으로 기업 또는 개인이 프롬프트에 대한 문법을 정리하고 이를 테스트 하기 위한 셀프 호스트 가능한 오픈소스로 랭퓨즈 (https://github.com/langfuse/langfuse) 를 추천드립니다.


한 주간의 여정 (2024-04-22 ~ 2024-04-26)

  • arm64 빌드 ack 프로그램 삭제
  • Http 응답 상태 코드 표준화 정리
  • 환경변수 비밀키 로드 및 조회 기능 개선
  • 환경변수, 포함 리소스 조회 기능 개선
  • 배포 스크립트 개선
  • HandStack 개발 환경 설치가 완료 후 실행 방법 개선
  • checkup.sln 솔루션 파일 삭제
  • C# 함수 반환 결과가 Task 일 경우 대응 수정
  • WordWrap 확장 메서드 추가
  • Semantic Kernel 기본 패키지 추가
  • CLI list 에 명령 인수가 출력되도록 개선

· 약 4분
조준철

최근 HandStack 을 실행하기 위한 필수 프로그램 설치 및 종속 라이브러리를 다운로드 하고 번들링을 구성하는 install 배치 스크립트에 버그가 있다는 피드백을 받고 이번 기회에 버그도 잡을 겸, 다음의 클린 설치 운영체제에서 설치 스크립트 점검하고 개선되었습니다.

  • Windows 10
  • Windows 11
  • Ubuntu 22.04
  • macOS 11 (Big Sur): Intel CPU
  • macOS 14 (Sonoma): Arm CPU

개발 환경과 실행 환경에 필요한 필수 프로그램과 도구를 설치하는 과정은 각 운영 체제의 관리 정책과 버전에 따른 보안 수준에 따라 설치 프로그램을 만들때 각 운영 체제의 특성과 설치 절차를 이해하는 것을 필요로 합니다.

사실 제공되는 install 설치 스크립트는 설치 프로그램 이라기 보다 매뉴얼 작업에 가까운 설치 과정인데, Windows, macOS, Linux에 따라 인스톨러를 개발하는 것은 시간과 비용면에서 부담스럽고 좀 더 동일한 설치 경험을 제공해야 향후 유지보수에 도움이 될거라는 판단이 들었습니다.

Linux 서버를 다루는 분들은 패키지 매니저를 사용하는 CLI (Command-Line Interface) 명령으로 필요한 프로그램을 설치하는 것이 익숙하실 겁니다. Windows나 macOS 에서는 GUI (Graphical User Interface) 방식의 설치 관리자를 이용한 설치가 편하실거구요.

그런데 점차 Windows, macOS 에서도 업무에 필요한 대부분의 프로그램을 패키지 매니저를 사용하여 설치 하는 것이 일반화 되고 있습니다.

Windows에서는 winget, macOS에서는 Homebrew, Linux에서는 apt-get 와 같은 CLI 명령으로 자동화된 설치 프로세스를 수행하게 되는데 한번 적응되면 편리하게 사용할 수 있습니다.

제가 Windows 기반에서 HandStack 을 개발하는 데 필요한 개발 및 도구 프로그램을 설치하는 스크립트를 추가로 정리했습니다. 매번 공식 웹 사이트가 가서 프로그램을 받고 설치하고 하는 과정없이 명령 프롬프트에서 동일한 프로그램을 빠르게 설치합니다. 자세한 내용은 Winget 추천 개발 도구 설치하기 문서를 확인하세요.

개선된 프로그램 설치 스크립트는 빠른 시작에서 확인 가능합니다.


한 주간의 여정 (2024-04-15 ~ 2024-04-19)

  • 의미 없는 alpha, beta 릴리즈 삭제
  • publish, install 설치 스크립트 기능 개선
  • 버그 수정 및 안정성 기능 개선
  • 화면 개발 프로젝트 템플릿 추가
  • libman.json 에 정의된 파일을 압축 파일로 제공
  • 번들링 기본값 변경
  • HandStack CLI 기능 개발자 문서 추가
  • publish 과정에 HandStack CLI 추가
  • assetsCachingID 적용 기준 수정
  • 공통/화면 브라우저 캐시 적용 기능 분리

· 약 7분
조준철

"Simple is Best" 라고 문장을 쓰니, "But, it's not easy. It's HardCore." 라고 AI 가 제안을 해주네요...

ChatGPT 의 대부분의 학습 데이터가 영어권으로 되어 있는 걸 생각해보면 Simple is Best 에 대한 생각은 동서고금 비슷한가 봅니다. ^^;

제품이나 서비스를 사용자가 고민하지 않고 사용 가능하도록 직관적으로 만드는 것. 그것이 진정한 간단함이라고 생각합니다.

비즈니스 SW의 경우 꼭 필요한 개인화 된 기능을 선택 옵션을 제거하면 어느정도 간단하게 만드는 것이 가능합니다. 다만 이러한 다품종 소량 개발 방식은 여러가지 이유로 개발 비용이 비싸지고 확장성은 나빠질 가능성이 높습니다.

HandStack 을 만들어야 겠다고 생각 했을때 우선적으로 고려했던 것은 기존 운영중인 프로그램에 고객의 신규 요구를 반영하는 시간을 어떻게 하면 더 줄일 수 있을까? 였습니다.

비즈니스 SW의 큰 특징은 고객의 요구를 반영한 추가/변경에 있기 때문에 VOC (Voice of Customer) 처리를 줄이는 것이 중요하다고 생각했습니다.

모놀리식 기반의 패키지 SW나 웹 서비스들은 배포 과정에서 아무리 신중하게 스테이징 테스트를 하더라도 다양한 운영 상황에 따라 장애가 발생시 장애 등급에 따라 프로그램 다운타임이 필연적으로 길어지기 때문에 장애로 인한 비용 보상에 민감한 프로젝트 일수록 고객 요구를 반영하는 작업은 기본적으로 어렵습니다.

거기에 최근 마이크로서비스 아키텍처를 지향하는 클라우드 네이티브 기반의 서비스들과 SaaS 제품들은 이러한 문제를 더욱 복잡하게 만들었다고 생각합니다.

그래서 HandStack 은 다른 솔루션에는 없는 차별화된 3개의 방안을 제시합니다.

1. 개발과 배포 과정을 단순화

복잡한 코딩 및 배포 과정을 단순화해서 적은 학습 비용으로 업무 화면을 개발 가능하게 합니다. 이러한 방식은 개발 및 유지보수, 인수인계에 유리하며 일반적인 비즈니스 SW를 업무를 처리하는 데 적합합니다.

화면 개발 > 쿼리 개발 > 무중단 배포 > 변경 항목 즉시 확인

2. 업무 모듈로 패키징 및 실행

비즈니스 앱에 필요한 모든 설정과 소스는 다음과 같이 구성됩니다.

디렉토리설명
dbclient데이터베이스 SQL을 XML 문서로 관리
functionC# 또는 Node.js 기반 Function 개발 기능 관리
repository단일, 다중, 이미지, 첨부파일 등등 파일 업로드/다운로드 관리
transact거래 요청 검증 및 접근 제어 관리와 요청 정보를 dbclient, function 등등 module로 라우팅 기능 관리
wwwroot웹 공통 static assets 및 화면 단위 소스 호스팅 관리

위와 같은 소스코드 구조 단위 묶음으로 업무 모듈을 패키징하고 실행할 수 있습니다. 예를 들어 회원관리, 제품관리, 주문관리, 배송관리 등등 업무 비즈니스 SW들을 기능 단위로 모듈화하여 업무 규모에 따른 스케일링이 가능하도록 서버를 구성해서 가용성, 확장성 보장할 수 있습니다.

3. 특화 요구사항이 반영되는 확장 서비스

제조, 설비 실행에 필요한 하드웨어 연계, 다양한 네트워크 통신 프로토콜에 특화된 전문 처리 기능을 2번 방식과 동일한 방식으로 모듈화하여 기존 프로그램을 수정하지 않고 기능을 확장 가능하며 사전에 제작된 프로젝트 템플릿 기반의 업무 화면들을 만들어 적용 가능합니다.

최근에 피드백을 받아 HandStack 을 기반으로 필수 프로그램 설치 및 종속 라이브러리를 다운로드 하고 번들링을 구성하는 install 배치 스크립트에 버그가 있는 것을 확인했습니다. Windows 10, 11 클린 설치 기반에서 테스트 후 GitHub에 커밋 하겠습니다.


한 주간의 여정 (2024-04-08 ~ 2024-04-14)

  • 네임스페이스 변경
  • handstack CLI purgecontracts 기능 추가 및 개선
  • 컴파일 경고 문구 및 오류 대응 수정
  • HandStack 라이선스 v1.0 게시

· 약 4분
조준철

공공 데이터 포털에 올라온 주요 오픈 API에 대한 프로토콜 문서를 학습하는 도중에 공공 분야 뿐만 아니라 의미 있는 데이터를 제공하는 쪽 입장에서 가지고 있는 정보를 간단하게 Open API 형태로 서비스 할 수 있는 기능이 있으면 좋겠다는 생각이 들었습니다.

그래서 본래 예정에 없었던 도메인의 데이터베이스의 정보를 Open API 형태로 서비스 할 수 있는 openapi 모듈을 개발했습니다.

openapi 모듈로 별도의 개발 없이 다양한 포맷(JSON, XML, SOAP, RSS 2.0, ATOM 1.0)들을 지원하는 Endpoint를 관리 할 수 있는데 별도의 개발 없이 5개의 테이블의 정보를 구성하여 간단하게 Open API 서비스를 구성 가능합니다.

요약하면 다음과 같습니다.

  • Open API 서비스 개발 인력 없이 단기간에 구축이 가능합니다.
  • SqlServer, Oracle, MySQL, PostgreSQL, SQLite DBMS의 SQL을 사용하여 도메인 데이터를 외부에 노출합니다.
  • Open API 서비스 설정 변동 시 무중단 으로 실시간으로 반영됩니다.
  • OWASP 10대 취약점에 대응하여 안전하게 운영이 가능합니다.

Open API 서비스를 관리하기 위해 테이블의 데이터를 추가하거나 변경해야 하는데 웹 기반의 UI는 향후 forbes 로 제공됩니다.

그 전까지는 데이터 엔티티 정보와 초기 데이터 SQL을 참고하여 데이터를 직접 관리해야 자신만의 Open API를 관리 가능합니다.

openapi 모듈은 SqlServer, SQLite 데이터베이스에서 테스트 했으며 Oracle, MySQL, PostgreSQL에서 운영 동작은 확인이 필요 할 수 있습니다.

좀 더 자세한 내용은 SQL만으로 Open API 생성하기를 참고하세요.


한 주간의 여정 (2024-04-01 ~ 2024-04-05)

openapi 주요 기능

  • API 서비스 관리
  • 회원 정보 관리
  • 서비스 키 발급
  • 접근 권한 제어
  • API 메타 정보 캐시 관리
  • 로깅 및 거래 횟수 업데이트
  • 거래 제한 조건 적용
  • Json, Xml, Soap, Rss/Atom 출력 포맷 지원
  • 필수 매개변수 및 기본 매개변수 적용 확인
  • 공개, 비밀 키, IP 주소 접근 제어
  • 기간 내 호출 수 제한 및 제한 조건 일별/월별 자동 갱신
  • 응답 결과 캐싱
  • 시간 단위 API 사용 통계 수집
  • SqlServer, Oracle, MySQL, PostgreSQL, SQLite 데이터베이스 지원

· 약 7분
조준철

SNS에 올릴 만한 나를 위한 플렉스나 행운은 좋은 경험인가요? 자신에 대한 부당한 처우, 열정 페이를 강요 받는 것은 나쁜 경험인가요?

논증의 여지가 있고 관점을 바꾸면 같은 경험도 다르게 받아들여 집니다.

같은 경험도 사람들의 개인적인 관점에 따라 다르게 해석될 수 있습니다. 이는 우리가 각자의 생각, 감정, 경험, 가치관 등을 가지고 있기 때문입니다. 이러한 다양성은 우리가 세상을 이해하고 해석하는 방식을 풍부하게 만듭니다.

서로 다른 관점을 이해하고 존중하면서, 자신의 견해를 명확하게 표현하고 논리적으로 논증하는 것은 대화와 의사소통에서 중요한 역할을 합니다. 물론 사람은 감정의 동물이기 때문에 감정적인 부분을 배려하면서 대화를 이어가는 것도 중요합니다.

그러나 반론의 여지가 없거나 적다면 좋은 것은 좋은 것이고 나쁜 것은 나쁜 것이라는 사실은 변하지 않기 때문에 현실을 정확하게 인식하고, 사실에 기반한 결정을 내릴 때 후회할 일이 적어집니다.

현 상황을 객관적인 시각을 유지하면서도 다양한 관점을 고려하는 습관을 길러야 하는 이유입니다. 특히 주입식 교육에 익숙하고 현장 경험이 적은 사람일수록 다음과 같은 의문에 대해 연습 삼아서 생각해 볼 수 있습니다.

  • 직장에서 얻는 안정적인 월급은 마약일까?
  • 과외 선생님의 던지는 돌직구는 학생을 위한 것일까?
  • 누군가를 도와주는 것은 상대가 불편해서일까?

생소한 질문에 대해 객관적인 시각을 가지기 어렵다면 개인적으로 2개의 방법으로 시작 해보는 것을 권장합니다.

의문에 대해 제삼자에게 도움을 구하기

  • 가족이나 친구의 의견 보다 나랑 관계없는 동종 업계의 선배나 커뮤니티가 좋습니다.
  • 동종 업계의 다양한 선배에게 본인의 상황을 진솔하게 써서 개인 DM을 보내보세요.
  • 컨퍼런스, 세미나, 학회 등 강연자에게 진솔하게 질문을 해보세요.
  • 진심을 담아 솔직하게 도움을 구하면 상대방도 가능하면 진심을 담아 답변해 줄 것입니다.
  • 상대방이 나의 고민에 대해 시간을 내주었다면 물질로 성의 표시하세요. 금액이 중요한 것이 아니라 감사의 마음이 중요합니다.

저의 경우 익명성의 다양한 의견을 받을 수 있는 커뮤니티에 질문을 올리는 것 보다, 직접적인 대화를 통해 의견을 듣는 것을 선호합니다.

상대방 관점에서 바라보기

  • 내가 즐겨보는 연예인 광고, SNS 게시글, 유튜브 등등 콘텐츠를 수요자가 아닌 공급자의 관점에 생각해 보세요.
  • 아무리 간단해 보여도 대부분 정기적인 콘텐츠는 혼자서 만들 수 없고 대략 3명 이상의 스텝이 참여하게 됩니다.
  • 얼마나 많은 사람들이 해당 콘텐츠를 만들었을지 그 사람들의 월급을 역으로 비용 추산해보세요.
  • 그만한 비용을 지급하면서 해당 콘텐츠로 공급자가 수요자에게 얻어 가려는 가치는 무엇일까요?

저의 경우 "콘텐츠를 보며 웃고 있다면 그 웃음을 만들어주는 사람에게 좋은 것이고, 심각하거나 진지해진다면 그게 내 예기이기 때문이다." 라고 생각합니다.

제가 생각하는 좋은 경험은 내가 이겨내야 할 시련에서 얻을 수 있다고 보입니다. 다른 사람들은 쉽게 쉽게 하는 것 같은데 나는 일 복이 많아서인지 매번 어렵고 힘든 과정이 많다고 느껴진다면, 이것을 자신만의 경제학 개념의 "해자"를 쌓아가는 삶의 여정이라고 생각해 보세요.

그러므로 나에게 나쁜 경험을 피하고 적절한 스트레스 해소 방법을 찾아서 좋은 경험을 만드는 것이 중요합니다.


한 주간의 여정 (2024-03-25 ~ 2024-03-29)

  • HandStack에 대한 비즈니스 모델 초안 작성 완료
  • 데이터베이스를 Open API로 만들어주는 openapi 모듈 개발 진행중 차주 오픈 예정

· 약 10분
조준철

사람과의 대화는 어렵습니다. 자주 보는 사람이라도 그 사람의 지식, 생각, 경험, 상황, 배려에 따라 의도와는 다르게 예기가 다르게 전달 되거나 오해를 불러 일으키기도 하며, 어쩌다 1 년에 한번 만나더라도 어제 만났던 것 처럼 스스럼 없이 편하게 대화를 나눌 수도 있습니다.

대화의 핵심은 관심과 존중에 있습니다. 상대방에게 관심을 가지고 그 사람의 말을 경청하며, 그 사람의 의견을 존중하며 대화를 나누는 것이 중요합니다. 그러나, ChatGPT와 대화를 나눌 때는 어떨까요? ChatGPT는 사람이 아니기 때문에 관심과 존중을 가지지 않습니다.

다만 ChatGPT는 몇가지 규칙을 준수하면 좀 더 나은 대화를 나눌 수 있습니다. 우리가 로마에 가면 로마의 법을 따라야 하듯, 데이터베이스에 저장된 정보를 조회하기 위해 SQL 문법을 사용하는 것처럼, ChatGPT와 대화를 나누기 위해서는 ChatGPT가 이해할 수 있는 방식으로 대화를 나누어야 합니다.

ChatGPT와 대화를 잘하는 법

한글로 대화하면 알아서 번역해서 찾아주고 한글로 응답합니다.

저의 경우 한국어로 대화를 하는 것이 더 편리하고 자연스러워서 한국어로 대화를 나누고 있습니다. 아시다시피 ChatGPT는 주로 영어로 된 지식을 학습합니다. 그래서 영어로 대화를 하는 것이 더 정확한 답변을 받을 수 있습니다.

그러나, 한국어로 대화를 하면 ChatGPT가 영어로 번역해서 답변을 해줍니다. 그러니까, 한국어로 대화를 해도 ChatGPT가 영어로 번역해서 답변을 해줍니다.

언어 보다도 다음과 같이 간단한 규칙을 적용하는 것이 더 나은 결과를 얻을 때도 있었습니다. 아직 ChatGPT를 사용해보지 않았거나 규칙을 적용해보지 않았다면 다음 예시 문장을 응용해서 질문을 해보세요.

저의 경우 https://copilot.microsoft.com/ 에서 대화 스타일 선택에서 "보다 정밀한"을 선택하고 있습니다. 이렇게 하면 ChatGPT가 더 정확한 답변을 제공할 수 있습니다.

1. 역할을 부여하기

조금 더 시간이 걸리더라도 대화의 빌드업을 구성한다고 생각하면서 ChatGPT에게 대화를 시도하기 전에 다음과 같이 역할을 부여할 수 있습니다.

내가 지금 영어를 초급 레벨로 독학을 하고 있는데 네가 강사 역할을 해주면 좋겠어~

내가 제주도 여행을 가려고하는데 네가 한국 전문 여행사의 직원 역할을 해주면 좋겠어~

지금부터 네가 초등학생을 대상으로 과학을 가르치는 선생님 역할을 해주면 좋겠어~

C# 언어를 배우려고 하는데 네가 .NET Core C# 언어 전문가 역할을 해주면 좋겠어~

ChatGPT에게 역할을 부여하면 ChatGPT가 더 정확한 위한 준비를 합니다.

2. 정보와 예시 제공하기

"문장 예시", "URL 참고 링크 주소", "이미지 링크 또는 파일", "markdown 문법 테이블", "CSV 데이터" 를 참고해서... 식으로 정보를 제공하면 ChatGPT가 더 정확한 답변을 제공할 수 있습니다. 예를 들면 다음과 같이 정보를 제공할 수 있습니다.

"https://news.hada.io/topic?id=13903" URL 에서 전달하려고 하는 내용을 발표 자료 용도로 요약 해줘

응답된 결과는 5 장의 슬라이드로 구성하기 좋은 내용이라고 생각합니다. 이 내용을 발표 자료로 활용하면 좋을 것 같습니다.

또는 TAB 으로 구성된 CSV 데이터를 제공하면 ChatGPT가 더 정확한 결과를 만들어 줍니다.

"FieldID FieldName DataType IsKey IsIndex IsUnique IsNullable IsAutoIncrement Length MemberNo 회원NO String String 1 0 0 0 0 36 EmailID 이메일ID String String 0 1 0 1 0 256 EmailVerifyAt 이메일확인일시 DateTime DateTime 0 0 0 0 0 8 Celluar 핸드폰번호 String String 0 0 0 0 0 20 CelluarVerifyAt 핸드폰확인일시 DateTime DateTime 0 0 0 0 0 8 MemberName 회원명 String String 0 0 0 0 0 100 PositionName 직위명 String String 0 0 0 0 0 100 DepartmentName 부서명 String String 0 0 0 0 0 100 CompanyName 회사명 String String 0 0 0 0 0 100 Roles 역할 String String 0 0 0 0 0 200 BirthDate 생년월일 String String 0 0 0 0 0 10 JoinAt 가입일시 DateTime DateTime 0 0 0 0 0 8 RetireAt 탈퇴일시 DateTime DateTime 0 0 0 0 0 8 Address 주소 String String 0 0 0 0 0 510 AddressDetail 상세주소 String String 0 0 0 0 0 100 Gender 성별 String String 0 0 0 0 0 1 TermsOfServiceConsentYN 서비스 이용약관 String String 0 0 0 0 0 1 PersonalInformationUseConsentYN 개인정보 이용동의 String String 0 0 0 0 0 1 ThirdPartyProvisionConsentYN 제3자 제공동의 String String 0 0 0 0 0 1 CreatedUserNo 생성사용자NO String String 0 0 0 0 0 36 CreatedAt 생성일시 DateTime DateTime 0 0 0 0 0 8" 로 구성된 Member 테이블 정보로 SqlServer 데이터베이스의 DDL 을 생성해줘

물론 상세한 데이터 유형과 제약 조건 및 인덱스를 고려해서 다듬을 필요가 있지만 테이블 명이나 생성하고자 하는 데이터베이스 대상을 좀 더 구체적으로 명시하거나 응용 해서 INSERT, SELECT, UPDATE, DELETE 등의 SQL 문을 생성해 줄 수 있습니다.

핵심은 비유나 은유 사용하지 말고 명확한 맥락을 가지고 주어, 목적어, 기간을 포함하는 질문하는 것이 좋습니다.

3. 응답 대상의 역할을 부여하기

동일한 결과에도 응답 대상에 따라 다르게 응답을 해야 할 때가 있습니다. 이럴 때는 다음과 같이 응답 대상에 대한 정보를 제공하면 ChatGPT가 더 정확한 결과를 제공할 수 있습니다.

... 초등학생이 이해 할 수 있게 요약 해줘

... 초보 개발자가 이해 할 수 있게 예시를 들어가면서 자세하게 설명 해줘

... 직장 상사에게 보고서를 전달하기 위해 전문가의 근거 자료를 제공해서 이해 할 수 있게 자세하게 설명 해줘

4. 결과를 기준으로 다시 물어보기

한번에 원하는 답을 얻는 건 생각보다 어렵습니다. 답변을 받은 후에 결과를 기준으로 다시 물어보면 생각치 못한 새로운 정보를 추가로 얻을 수 있습니다.

"위의 결과에서~" 시작하여 1,2,3 질문 다시하기

ChatGPT 를 이용해서 HandStack 기반 화면과 기능을 개발 하기 위해 만족할 수준은 아니더라도 단순 반복 작업을 줄이고, 효율적으로 개발을 진행할 수 있는 아이디어를 생각중인데 원하는 결과를 얻기 위해 머신러닝 학습 모델을 만드는 느낌이 드네요.


한 주간의 여정 (2024-03-18 ~ 2024-03-22)

  • ChatGPT 기반 소스 생성기를 만들 아이디어를 간단한 POC를 진행
  • 데이터베이스를 Open API로 만들어주는 openapi 모듈 개발 진행중

· 약 7분
조준철

일반적으로 100 명 정도의 기업내 동시 사용자가 사용하는 비즈니스 앱의 경우 모놀리식 아키텍처로 개발합니다. 대부분의 중소기업에서 사용 가능한 수준입니다.

소프트웨어는 변경하지 않고 1,000명 ~ 10,000 명 정도의 동시 사용자가 사용하게 하려면 서버 CPU, RAM, DISK, NETWORK 자원을 비용을 지불하여 높이면 됩니다. 이것을 스케일 업이라고 합니다. 스케일 업 방법은 업그레이드 성능 대비 비용 지출이 급격하게 증가하는 한계점이 있습니다.

비즈니스 업무를 작은 서비스 단위로 분리하여 마이크로서비스 아키텍처로 개발 한 다음, 자원 소모가 큰 부분을 골라내어 병렬로 서비스를 운영합니다. 이것을 스케일 아웃이라고 합니다. 스케일 아웃은 초기 비싼 운영 비용과 각 서비스간의 의존도로 인한 관리 운영 비용이 추가로 발생합니다.

인건비와 관리 운영 비용을 탄력적으로 지불하기 위해 클라우드 기반으로 비즈니스 앱을 개발하고 적용하는 것을 고려하게 되는데 일정 규모의 성능을 보장 받으려면 온프레미스라는 자체 서버 운영 비용 대비 매우 비쌉니다. 그리고 클라우드 업체의 일방적인 가격 인상에 동의하기 어려운 부분이 많습니다.

그래서 하이브리드 방식의 온프레미스와 클라우드를 혼합한 개발 방식을 선택하게 됩니다. 이것을 멀티 클라우드라고 합니다. 멀티 클라우드는 클라우드 업체의 가격 인상에 대한 대응이 가능하고, 서비스의 안정성을 높일 수 있습니다.

비즈니스 앱의 변화의 핵심은 "비용"이며 비용은 눈에 잘 보이지않는 서버 호스팅 방식, 개발, 배포, 유지보수의 담당 주체, 소프트웨어와 데이터의 소유권과 사용 방식에 따라 결정됩니다.

SaaS (Software as a Service)나 로우코드 솔루션과 같이 기업이 IT 리소스를 효율적으로 활용하고, 비용을 절감하며, 비즈니스 요구 사항에 더욱 유연하게 대응할 수 있도록 돕는 도구들을 도입하는 비용에 대해 공급자와 수요자 관점에 바라보는 시야가 필요합니다.

슈퍼앱: SoD (Software on Demand) 시대

비즈니스 앱 분야는 넷플릭스와 멜론과 같은 플랫폼에서 원하는 영화나 음악을 구매하거나 구독하는 것 처럼 소프트웨어를 공급자 중심에서 수요자가 필요에 의해 하나의 앱에서 여러 가지 기능을 이용할 수 있는 혼합 구동 방식의 앱으로 변화 할것으로 예상합니다.

슈퍼앱이라는 용어는 블랙베리 창업자인 마이크 라자리디스가 2010년에 처음 주창했습니다.

일종의 앱 분야의 폐쇄된 포털로 이해할 수 있으며, 슈퍼앱 안에 들어있는 수많은 '미니앱(Mini app)'이 바로 사용자들에게 별도의 앱 다운로드 및 설치 없이도 다양한 기능을 제공할 수 있게 해주는 핵심 요인입니다.

"SoD (Software on Demand)"와 "SaaS (Software as a Service)"는 비슷한 개념이지만, 몇 가지 중요한 차이점이 있습니다.

  • 제 3자가 아닌 기업의 온프레미스나 클라우드를 선택하여 인프라를 관리합니다.
  • 필요에 따라 소프트웨어를 사용하며 사용자 당 추가 비용과 라이선스를 구매할 필요가 없습니다.
  • 소프트웨어와 데이터의 소유권이 제 3자가 아닌 기업에게 있습니다.

슈퍼앱은 미니앱을 담고 통합하는 컨테이너로 작동해야 하기 때문에 미니앱이 원할히 작동하고 이들을 통합하기 위한 플랫폼이 갖춰져 있어야 합니다. 비즈니스, 개발, DevOps, 플랫폼 엔지니어 조직이 협업하여 플랫폼을 개발해야 합니다.

국내 대표적인 사례로 네이버, 카카오, 토스, 신한은행이 있습니다.

생성형 AI 로 인해 소프트웨어 개발, 학습, 운영 비용이 크게 절감되고 있습니다. 이러한 변화는 개발자의 관점에서 보면 J 커브의 곡선을 따라가는 것과 같습니다. 초기 접근성은 높지만, 시간이 지날수록 접근성이 낮아지고, 비용이 저렴해지며, 효율성이 높아지는 것을 경험하게 됩니다.


한 주간의 여정 (2024-03-11 ~ 2024-03-15)

  • HandStack 기능 테스트
  • Forbes 앱 템플릿 자동화 기능 개발
  • HandStack CLI 환경설정 배포 기능 테스트
  • 비즈니스 모델 검토

· 약 8분
조준철

S/W를 통한 고객의 문제해결 역량이 모든 기업에게 선택이 아닌 필수인 시대입니다. S/W 경쟁력을 갖춘 제조/유통/서비스 기업이 시장을 주도하고 있으며 어느 기업이든 비즈니스 성장을 위해 반드시 필요한 역량이기 때문입니다.

그런면에서 개발 직군은 앞으로도 중요한 역할을 할 것으로 예상됩니다. 그러나 개발자라는 직업은 어떤 성장과정을 거쳐야 하는지, 어떤 기술을 어떤 순서로 배워야 하는지, 어떤 경험을 쌓아야 하는지에 대한 명확한 가이드라인이 없습니다.

단계별 기술 커리어 패스

소프트웨어 개발자라는 직업의 정점이 무엇인지는 개인마다 차이가 있어 정확히 알 수 없으나 다음과 같이 추구하고자 하는 성향으로 개발자가 원하는 미래를 살짝 엿볼 수 있습니다.

  • 예술가: 독보적인 감각과 창의력을 가지고 개발 하는 사람
  • 엔터테이너: 고객과 동료에게 즐거움을 주는 코딩하는 사람
  • 요리사: 필요한 것을 제공하는데 집중하는 사람
  • 건축가: 시스템을 설계하고 솔루션과 도구를 적극 활용해서 구축하는 사람
  • 직장인: 주어진 일에 충실하고 성실한 사람

개발 직군이 타 직군에 비해 좋은 것은 어떠한 성향이든 기업의 성장 단계별로 직장이 아닌 직업으로서 개발자의 커리어 패스를 만들어가는 것이 가능합니다.

  • 1명 ~ 5명 이하의 S/W 기술자가 있는 기업: MVP를 만들어내는 최소한의 기술력과 전문성을 갖추는데 집중합니다.
  • 5명 ~ 수십명의 S/W 기술자가 있는 기업: 아키텍처 전략 수립과 개발 문화를 정착하기 위해 기술적인 부채를 해결하고 팀원들을 이끌어가는 능력을 갖추는데 집중합니다.
  • 수십명 이상 S/W 기술자가 있는 기업: 조직의 역할과 책임을 분명히 하고 기술에 대한 전략과 비전을 제시합니다.

본인만의 기술 커리어 패스를 만들어가는 것은 주어진 일과 직업의 기본에 충실하되 그 위에 자신만의 경험을 쌓아가는 여정입니다.

하지만 기업은 S/W 경쟁력을 갖추기는 커녕 S/W 개발자를 고용하는 것 조차 쉽지 않습니다. 잘 생각해보면 같은 이유 때문에 개발 직업에 대한 장점과 단점이 있는듯 합니다. 그 이유는 크게 3가지로 다음과 같습니다.

1. S/W 비즈니스 모델이 불확실

S/W 개발 조직을 운영하면 기업의 비즈니스 모델을 구축하고 경쟁력을 확보할 수 있으나 경쟁사간의 우위를 확보할 수 있을지 확신할 수 없습니다. 기업 규모에 상관없이 신규 비즈니스 모델에 대한 가설을 검증하고 증명하는 실패의 과정은 필수적인데 그 비용을 기업은 감수하기 쉽지 않습니다.

2. 개발 업무에 대한 어려운 접근성

S/W 개발의 기본적인 업무들는 코딩이 아닙니다. 개발 업무 정의, 솔루션 확보, 서버/네트워크 인프라 관리, 아키텍트 설계, 데이터 모델 수립, 운영 및 유지보수, 개발, 디자인 등의 업무를 이해하고 있어야 합니다. 그래야 인하우스나 아웃소싱으로 프로젝트를 진행할 때 의사소통이 원할하게 진행될 수 있습니다.

당연히 업무 담당자들은 개발 업무에 대한 어려운 접근성을 가지고 있습니다.

3. CTO 마인드의 부재

개발자들은 다른 직군들에 비해 본인만의 기술 커리어 패스를 만들어가는 것이 중요합니다. 그래서 S/W 경쟁력을 원하는 기업은 이에 대한 교육과 지원을 제공해야 합니다.

개발자는 넘쳐나는데 채용할 만한 사람이 없다는 것은 기업과 개발자 모두 생각해 볼 과제입니다.


이번 주에 2개의 의미있는 개선이 이뤄졌습니다.

  1. Windows 10 이상 운영체제에서 개발/실행 환경에 필요한 설정을 자동화하는 install.bat 설치 스크립트가 추가 되었습니다. (Linux, Mac 용 install.sh는 테스트중 입니다)
  2. HandStack내 화면 개발에 사용중인 오픈소스 55 종을 cdnjs, jsdelivr, unpkg 설치 과정에서 한번에 내려 받도록 개선 되었습니다. (자세한 목록은 libman.json을 참고하세요)

향후 소스 코드를 내려받고 한번 클릭으로 개발/실행 환경에 필요한 S/W 설치와 종속 라이브러리의 버전 업데이트를 자동화하며 배포 프로그램의 파일 크기가 절감됩니다.

한 주간의 여정 (2024-03-04 ~ 2024-03-08)

  • 빠른 시작 문서 개선
  • 기본 modules 소개, 모듈 관련 문서 내용 추가
  • syn.js 라이브러리 syn.domain 추가
  • syn.js 주요 사용법
  • HandStack 개발 환경 설치 스크립트 개발
  • ack 실행 환경 설치 스크립트 개발
  • 클라이언트 라이브러리 CDN 정리