Author: 정원사

  • 2026년에 읽은 책

    1. 한 권으로 끝내는 스마트팜 만들기

    • 지은이: 김정규
    • 출판사: 플루토

    스마트 팜에 필요한 시설과 장비에 관한 대략적인 설명을 한다. 그리고 직접 스마트팜을 구현하기 위한 오픈소스 프로그램인 tasmota를 소개한다. tasmota는 ESP32 칩을 탑재한 보드에 설치하여 사용할 수 있다. tasmota는 시간이나 센서로부터 취득한 값이 특정 조건이 되면 구동기를 제어할 수 있는 최소한의 원격 제어 프로그램이다. 이 책은 스마트팜에 입문하려는 사람에게 추천할 수 있다. 단, tasmota를 설명하는 부분은 개발을 해보지 않은 사람이 이해하기에 조금 어려울 수 있을 것 같다.

    2. 인류 최후의 블루오션 팜비즈니스

    • 지은이: 류창완
    • 출판사: 샘파커스

    국내/외의 농업 기반 기업을 소개한 책이다. 주로 스타트업 위주로 소개한다. 1, 2, 3차 산업을 융합한 6차 산업 비즈니스를 강조했다. 1차는 농업, 2차는 제조, 3차는 서비스업이다. 모두를 아우를 수 있어야 미래가 유망해진다고 설명한다. 예시로 든 사례가 재미있었다. 해녀의 부엌, 상하농장. 소개한 업체의 현재 상태는 어떤지 모르겠다. 굉장히 유망하게 바라보던 그린랩스는 망했고, 엔씽도 농업계에 큰 영향력이 없는 듯 하다. 농업을 비즈니스로 바라볼 수 있음을 알게되었다.

    3. 시골 빈집에서 행복을 찾다

    • 지은이: 이케다 하야토
    • 옮긴이: 김정환
    • 출판사: 라이팅하우스

    지은이가 이야기한 도시를 떠나야하는 이유는 충분히 공감갔다. 지은이의 주장을 내세우기 위해서 다소 과격하게 말하긴하지만 틀린 말은 아니다. 도시에서 살아야만 하는 이유가 생각보다 많지 않다. 오히려 도시는 우리를 힘들게 한다. 시골로 이주했을 때 가장 우려되는 일자리 문제는 걱정이 없다고 했다. ‘일자리’는 적어도 ‘일거리’가 많은 곳이 시골이라고 한다. 우리나라 현실이 어떤지 아직 모르지만, 그럴듯했다. 그런데 우선은 블로그에 글쓰기를 잘 해야한다는 생각이 들었다.

    4. 오늘부터 베란다 농부

    • 지은이: 이해솔
    • 출판사: 유노라이프

    베란다에서 작물을 키우기 시작한 이유가 번아웃이라는 점에서 다른 사람도 힘들 때 식물을 찾는다고 생각했다. 책 내용이 어렵지 않아서 처음 시작하는 사람에게 권하기 좋은 책이다. 베란다에서 직접 키운 작물로 요리하는 내용을 읽을 때는 군침이 돌았다. 그래서 더욱 베란다에서 작물을 키워보고 싶다는 생각이 들었다.

    5. 흙을 알아야 농사가 산다

    • 지은이: 이완주
    • 출판사: 씨앗을뿌리는사람

    노지에 쓰이는 정밀 농업 장비를 개발하려면 흙에 대해 알아야겠다는 생각을두고 읽기 시작했다. 흙이라고 다 똑같은 흙이 아니다. 땅에서 작물을 키우려고 한다면, 그 땅이 무엇으로 이루어져 있는지 어떤 성질을 가졌는지 반드시 이해해야겠다. 우리나라의 황토는 결코 좋은 흙이 아니다. 흙은 검어야 좋다. 그만큼 유기물을 많이 품고 있다는 의미다. 토경 재배는 대충해도 작물이 잘 큰다는 말이 있지만, 이 책을 읽고 마냥 그렇지 않다는 것을 알게 되었다. 땅에서 농사를 지으려 한다면 꼭 알고 가야 하는 지식이 담겨있다.

  • MD5

    임베디드 장치에 파일을 전송해야하는 일이 생겼다. AI 에이전트에 전송 스크립트를 요청했다. 그랬더니 파일 유효성 검사를 할 것인지, 한다면 MD5를 사용하는게 어떻겠냐고 했다. 나는 MD5가 뭔지는 정확히 몰랐고, 유효성 검사를 할 때 사용한다는 것 정도만 알고 있었다. 그래서 간단히 알아보기로 했다.

    개요

    MD5(Message Digest Algorithm 5)는 임의 데이터를 입력받아 128비트(16바이트) 고정 길이의 해시값을 출력하는 암호화 해시 함수이다. 1991년 Ron Rivest가 MD4를 대체할 목적으로 설계했다.

    핵심 특성

    • 고정 출력: 입력 크기와 무관하게 항상 128비트(32자리 16진수) 출력
    • 단방향성: 해시값으로 원본 데이터를 역산 불가
    • 결정론적: 같은 입력 -> 항상 같은 해시값
    • 눈사태 효과: 입력이 1비트만 바뀌어도 해시값이 완전히 달라짐

    파일 검증에서의 활용

    파일을 다운로드하거나 전송할 때, 파일이 손상/변조되지 않았는지 확인하는 용도로 쓰인다.

    1. 배포자가 MD5 계산값을 공개한다.
    2. 수신자가 파일을 받고 MD5를 계산한 뒤 공개된 값과 비교한다.

    주의할 점

    MD5는 보안 용도로는 취약하다. 현재는 파일 무결성 검사에서만 사용한다.

  • PEM

    PEM은 Privacy Enhanced Mail의 약자다. 원래는 이름 그대로 이메일 보안을 위해 만들어졌다. 하지만 지금은 인증서, 키 그리고 기타 데이터를 저장하고 전송하는 파일 형식으로 널리 쓰인다. 원래 표준은 널리 채택되지 못했지만, 텍스트 인코딩 방식은 매우 대중화되었다고 한다.

    PEM의 형식

    많은 암호화 표준은 ASN.1으로 데이터 구조를 정의한다. 그리고 DER(Distinguished Encoding Rules)를 사용해 직렬화한다. 직렬화된 데이터는 ASCII만 지원하는 이메일 시스템으로 전송하기 어려울 수 있다. 그래서 고안된 것이 PEM이다.

    Base64를 이용해 이진 데이터를 ASCII로 표현할 수 있는 텍스트로 인코딩한다. 그리고 헤더와 푸터를 이용해 해당 데이터 유형을 정의할 수 있다. 예시는 아래와 같다.

    -----BEGIN CERTIFICATE-----  # 헤더
    MIIDXTCCAkWgAwIBAgIJAKlqKBRWTGvhMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
    BAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
    aWRnaXRzIFB0eSBMdGQwHhcNMjMwMTAxMDAwMDAwWhcNMjQwMTAxMDAwMDAwWjBF
    ....(Base64 데이터)....
    -----END CERTIFICATE-----  # 푸터

    정리하면 PEM을 아래와 같은 요소로 구성된다.

    • ASN.1: 인증서 데이터를 표현하는 규격 (이른, 만료일, 공개키 등)
    • DER: ASN.1을 바이너리로 직렬화한 것
    • Base64: 바이너리를 텍스트(A-Z, a-z, 0-9, +,/)로 변환
    • PEM: Base64에 헤더/푸터를 붙인 최종 파일

    실제 데이터 구조는 DER이고, PEM은 그것을 텍스트로 표현한 포장지이다.

    형식 정의

    PEM 데이터로 만들어진 파일은 다음과 같은 확장자로 저장한다.

    • 일반: .pem
    • 인증서: .cer 또는 .crt
    • 공개 키, 개인 키: .key

    일반적인 .pem 형식 파일이라면 데이터 유형을 정확하게 표현하기 위해 헤더를 사용한다. 헤더의 종류에는 다음과 같은 종류가 있다.

    -----BEGIN CERTIFICATE-----           # 인증서 (서버/CA 인증서)
    -----BEGIN CERTIFICATE REQUEST-----   # CSR (인증서 서명 요청)
    -----BEGIN PRIVATE KEY-----           # 개인키 (PKCS#8 포맷)
    -----BEGIN RSA PRIVATE KEY-----       # RSA 개인키 (PKCS#1 포맷)
    -----BEGIN PUBLIC KEY-----            # 공개키

    TLS에서 PEM이 쓰이는 흐름

    sequenceDiagram
        participant C as 클라이언트
        participant S as 서버
        participant CA as CA (인증기관)
    
        rect rgb(240, 248, 255)
            Note over S,CA: 사전 준비 (인증서 발급)
            S->>CA: CSR 제출 (공개키 포함)
            CA-->>S: server.crt 발급 (PEM 형식)
            Note over S: server.key (PEM) 개인키 보관
        end
    
        rect rgb(245, 255, 245)
            Note over C,S: TLS Handshake
            C->>S: ① ClientHello (지원 암호화 목록)
            S-->>C: ② ServerHello + Certificate (DER 바이너리)
            Note over C: ③ 인증서 검증 (CA 공개키로 서명 확인)
            C->>S: ④ Pre-master secret (서버 공개키로 암호화)
            Note over S: ⑤ server.key로 복호화
            Note over C,S: ⑥ 세션키 생성 (양쪽 동일)
            C->>S: ⑦ Finished (세션키 암호화)
            S-->>C: ⑦ Finished (세션키 암호화)
        end
    
        rect rgb(255, 255, 240)
            Note over C,S: 암호화 통신
            C->>S: HTTP 요청 (암호화 됨)
            S-->>C: HTTP 응답 (암호화 됨)
        end