노마드 코더에서 진행하는 챌린지 기록들
노개북 챌린지 9일차
오늘의 범위
- episode 39: 인공지능, 머신러닝, 딥러닝, 아직도 구분하기 힘들다고?
- episode 40: REST API라니, 휴식 API인가? 이게 대체 뭐죠?
- episode 41: 도커가 뭐지? 왜 필요할까?
- episode 42: 암호화폐의 진실
- episode 43: 하이브리드∙∙∙앱? 뭐라고요?
- episode 44: NFT가 도대체 뭐길래?
- episode 45: 멀웨어, 바이러스, 웜 개념 몽땅 정리
Ep 39 인공지능, 머신러닝, 딥러닝, 아직도 구분하기 힘들다고?
AI(Artificial Intelligence), 즉, 인공지능은 좁은 인공지능과 일반 인공지능으로 나눌 수 있다. 우리가 영화에서 흔하게 접하는 인간의 행동을 모두 따라 할 수 있고 그 이상의 지능을 가진 인공지능은 일반 인공지능이고 실제 현실에서 만날 수 있는 인공지능은 시리, 빅스비와 같은 좁은 인공지능이다.
그리고 바로 이 인공지능이 학습하는 방식이나 학습시키는 방식을 머신러닝, 딥러닝이라 한다. 둘을 같다고 혼동하는 경우가 많은데, 엄연한 차이가 존재한다.
머신러닝
머신러닝은 위에서 설명했듯이 인공지능을 학습시키는 방법이다. 기계를 학습시키는 방법에는 크게 지도학습(supervised learning)과 비지도 학습(unsupervised learning) 두 가지가 있다.
지도학습(supervised learning)
신호등을 판별하는 인공지능을 만든다고 가정해보자. 지도학습은 판별 대상의 특징을 토대로 학습시키는 것이다. 신호등의 특징은 불이 두 개거나 세 개이고 (혹인 네 개), 색은 빨강과 노랑, 초록을 가지고 있으며 길쭉한 형태이다. 이러한 특징들을 라벨이라고 하는데, 기계에 사진을 보여준 후, 라벨과 부합하면 신호등이 맞다고 알려주고 부합하지 않으면 아니라고 알려주는 것이다.
그러면 기계는 사진을 보고 ‘사진의 특징이 라벨과 50% 부합하므로 신호등일 확률은 50%이다.‘라고 판단을 내린다.
비지도학습(unsupervised learning)
반대로 비지도학습은 기계에게 답을 미리 알려주지 않고 사진 수만 장만 준 다음 스스로 특징을 찾아 학습하도록 하는 방법이다. 그래서 직접 가르치지 않는 학습, 비지도 학습이라고 하는 것이다.
딥러닝
딥러닝은 머신러닝의 하위 개념으로 머신러닝을 달성하기 위한 방법이다. 구현하는 과정에서 여러 겹의 층을 만들기 때문에 딥러닝이라고 이름 붙여졌다.
정리하면, 딥러닝은 머신러닝 중 하나이고 머신러닝은 인공지능을 만드는 데 필요한 방법이라고 할 수 있다. 관심 있으면 파이썬과 텐서플로를 이용해 머신러닝이나 딥러닝을 배워보도록 하자.
Ep 40 REST API라니, 휴식 API인가? 이게 대체 뭐죠?
REST API는 한 마디로 REST 방식으로 설계된 API라고 할 수 있다. 영화 API를 설계하는 방식으로 REST API를 알아보자.
먼저 영화 정보를 저장, 조회, 수정, 삭제하는 API를 만든다고 가정하면, URL을 아래와 같이 설정할 수 있다.
영화 정보 생성: /createMovie 모든 영화 정보 조회: /seeMovies 특정 영화 정보 조회(영화 <✕✕✕>): /getMovie/✕✕✕ 특정 영화 정보 수정(영화 <✕✕✕>): /editMovie/✕✕✕ 특정 영화 정보 삭제(영화 <✕✕✕>): /deleteMovie/✕✕✕
하지만 위 URL은 특정 패턴이 없다는 게 문제이다. 모든 영화 정보 조회, 특정 영화 정보 조회 둘 다 영화 정보를 조회하는 기능을 하지만 각각 seeMovies, getMovie로 단어를 혼용해 사용하고 있다. 이는 작업 시 팀원들이 혼동하는 경우가 생기므로 좋지 못한 방법이다.
해결책으로 URL에서 동사를 제외하고 HTTP 메서드를 도입하는 방식이 있다. 일단 see, get과 같은 동사를 삭제하면 API에 명사만 존재하기 때문에 간편해진다.
모든 영화 정보 조회: /movies 특정 영화 정보 조회(영화 <✕✕✕>): /movies/✕✕✕
그럼 데이터를 삭제나 수정하는 URL이라면? HTTP 메서드를 사용해보자.
HTTP 메서드는 같은 URL로 백엔드에서 서로 다른 처리를 할 수 있게 갈림길을 만들어 주는 역할을 한다. 대표적으로 GET, POST, PUT, DELETE가 있다. 이를 사용해서 API를 만들면,
GET /movies/✕✕✕ POST /movies/✕✕✕ PUT /movies/✕✕✕ DELETE /movies/✕✕✕
이런 식으로 하나의 URL로 여러 기능을 할 수 있게 되었다. 또한 HTTP 메서드를 사용하면 URL이 단순하게 바뀐다는 것뿐만 아니라 기능 확장이 용이하다는 장점을 얻을 수 있다.
특정 영화의 배우 정보를 조회하고 싶다면 GET /movies/✕✕✕/actors
와 같이 설계할 수 있다는 것이다.
마지막으로 영화 평점을 조회하는 것은 쿼리 파라미터를 사용하면 된다. 평점 8.5인 영화만을 조회하고 싶으면 명사나 HTTP 메서드로는 설계하기 어렵기 때문에 아래처럼 쿼리 파라미터로 간단하게 나타낼 수 있다.
GET /movies?min+rating=8.5 GET /movies?release_date=2023
이렇게 일반 API를 확장성 좋은 REST API로 변경하는 방식을 알아보았다.
Ep 41 도커가 뭐지? 왜 필요할까?
개발 환경 준비를 하는 것은 개발자한테는 때론 귀찮기도, 고생 덩어리이기도 하다. 바로 이런 상황에서 도커(docker)는 개발 환경이 맞지 않은 상황이나 개발 환경 변경 시에 유연한 대처를 도와주는 역할을 한다.
개발 환경이 다른 상황에서의 도커
예시로 개발 운영체제는 윈도우, 서버 운영체제는 리눅스일 때 도커가 어떤 도움을 주는지 알아보자. 먼저 컴퓨터, 서버 모두에 도커를 설치하고 도커 파일을 생성한다. 도커 파일에는 구현하고 싶은 환경 목록이 적혀 있는데, 이를 윈도우와 리눅스에 전달하면 도커가 필요한 것만 내려받아서 설치해준다. 사람이 수동으로 준비하기 어려운 과정을 도커가 대신해주는 것이다.
도커가 준비한 프로그래밍 언어가 동작하는 환경을 컨테이너라고 한다. 도커는 컴퓨터 내의 여러 프로그램의 다른 개발 환경을 컨테이너로 나누어 관리한다. 자바스크립트 컨테이너, 파이썬 컨테이너, 자바 컨테이너와 같이 말이다. 컨테이너를 분리하여 관리하면 특정 애플리케이션 사용량이 증가했을 때 컨테이너 수를 늘리는 등 개발 환경이 갑자기 변해도 쉽게 대체할 수 있다.
이러한 이유로 개발자들이 도커를 좋아하는 것이다.
🎯 도커 정리
- 원하는 개발 환경을 도커 파일에 저장하여 준비
- 컨테이너는 도커가 준비한 프로그래밍 언어가 동작하는 환경
- 컨테이너에 필요한 도구를 따로 모으거나 쉽게 복제할 수 있음
Ep 42 암호화폐의 진실
암호화폐는 정부가 없앨 수 있을까? 정답은 ‘아니요’이다. 정부는 암호화폐를 규제할 수 없다.
암호화폐의 규제와 문제점
암호화폐는 네트워크이기 때문에 없애려면 세상의 모든 인터넷을 꺼야 한다. 기술적으로 불가능하다는 것이다. 거래소를 통해 간접적인 방법으로 규제할 수는 있지만 이미 암호화폐를 산 후에는 정부가 과세하거나 어디에서 무엇을 샀는지 알아낼 방법이 아무것도 없다.
또한 암호화폐는 은행처럼 관리하고 보호해주는 시스템이 없으므로 스스로 관리해야 하는 책임이 따르며, 다른 사람에게 모든 정보가 공개될 수 있다. 누군가 내 비트코인 주소를 알고 있다면 내게 얼마가 있는지, 얼마를 받았고 송금했는지 등의 자세한 정보를 알 수 있다는 것이다.
암호화폐 사기를 피하는 방법
암호화폐 주변에는 사기꾼들이 넘쳐나기 때문에 본인의 자산을 잃지 않기 위해서는 스스로 관련 공부를 열심히 하는 방법밖에 없다. 자신이 곧 은행이라는 생각으로 잘 관리해야 한다.
아래 사기인지 아닌지 판단하는 꿀팁이 있다.
1. 모든 코인에 가치가 있지는 않다.
코인은 누구나 코드를 복사해서 만들 수 있기 때문에 가치 없는 코인도 많이 존재한다.
2. 암호화폐 수식어 남발은 거르고 보자.
암호화폐 앞에 거창한 수식어를 갖다 붙여 소개하는 사이트는 피하자. 머신러닝 ~ 어쩌고 저쩌고 탈중앙화 %$&*@
3. 커뮤니티를 잘 살펴보자.
암호화폐 사이트 소개 글보다는 커뮤니티를 살펴보는 것이 좋다. 코드 업데이트 날짜나 커뮤니티에 참여한 사람 수, 가격 이야기만 하고 있지는 않은지 잘 알아봐야 한다. 업데이트 날짜가 오래되었거나 커뮤니티에서 가격 이야기만 한다면 가격을 올려 팔고 도망가는 것일 수도 있으므로 피해야 한다.
4. 탈중앙화된 코인인지 확인하라.
코인이라고 전부 암호화폐이고 탈중앙화된 것은 아니라 잘 확인해야 한다. 탈중앙화되지 않은 코인은 만든 곳에서 언제든지 마음대로 할 수 있는 코인을 말한다. 위험하다는 뜻이다.
5. 이론상 안전한 코인을 골라라.
안정된 코인을 뜻하는 스테이블 코인(stable coin)은 다른 자산에 코인 가치가 연결되어 있어 가격 변동이 거의 없다는 특징을 가지고 있다. 하지만 책임져야 할 회사가 런하면 스테이블 코인이라도 망하기 때문에 최대한 안전한 코인을 선택할 수 있게 계속 공부해야 한다.
Ep 43 하이브리드∙∙∙앱? 뭐라고요?
우리는 일상에서 모바일 앱을 많이 사용한다. 요즘엔 모바일 앱을 개발하는 방식이 다양해졌는데 크게 하이브리드 방식, 크로스 플랫폼 방식, 네이티브 방식으로 나눌 수 있다. 각각의 장단점이 있으므로 자신에게 맞는 방식을 사용하면 된다.
하이브리드 앱
하이브리드 앱은 웹 사이트를 보여주는 웹 뷰를 말한다. 웹 뷰는 브라우저에서 주소창을 제외한 나머지 부분이다. 즉, HTML, CSS, 자바스크립트로 개발한 웹 앱을 iOS, 안드로이드에서 쓸 수 있게 하이브리드로 만들어 앱 스토어로 보내는 것이다.
하이브리드 앱의 최고 장점은 HTML, CSS, 자바스크립트만으로 개발할 수 있기 때문에 따로 네이티브 앱 개발 지식이 필요하지 않다는 것이다. 웹 개발자라면 지식을 새로 배울 필요 없이 앱을 개발할 수 있으니 시간 절약도 되고 좋다.
단점은 UI를 하나하나 구현해야 하기 때문에 너무 귀찮다는 것이다. 그리고 스마트폰의 고급 하드웨어 기능은 활용하기 어렵다는 한계가 존재한다.
크로스 플랫폼 앱
크로스 플랫폼 앱은 특정 언어로 코딩하면 나중에 네이티브 언어로 변환되는 방식으로 만들어진다. 리액트 네이티브의 경우 리액트로 작성하면 코드가 자바스크립트로 변환되어 그 코드를 iOS, 안드로이드가 자바스크립트 엔진으로 실행한다. 플러터 역시 다트(Dart)라는 언어로 작성되어 C 언어나 C++로 변환되어 실행된다.
장점은 한 번의 코드 작성으로 iOS, 안드로이드 모두 구동할 수 있다는 것이다. iOS, 안드로이드만을 위한 코드는 언어가 달라 따로 코딩해야 하는데, 크로스 플랫폼 방식을 사용하면 한 번에 두 개의 앱을 만들 수 있으니 이득이다.
단점은 네이티브 언어로 변환하는 과정이 존재하기 때문에 네이티브 앱의 성능을 완전히 따라갈 수는 없다는 것이다. 느리다는 것은 아니지만 엄청난 성능은 내지 못한다. 하지만 모든 앱에 최고의 성능이 필요하진 않아 적절하게 사용한다면 크로스 플랫폼 방식은 좋은 선택이 될 수 있다.
네이티브 앱
네이티브 앱은 iOS만을, 안드로이드만을 위한 언어로 코드를 작성해 개발한 앱이다. iOS는 스위프트를 사용하고 안드로이드는 자바나 코틀린을 사용한다.
장점은 스마트폰의 성능을 최대로 활용할 수 있다는 것이다. 스마트폰과 코드 사이에 중간 단계가 없기 때문이다.
단점은 같은 앱을 만든다고 하더라도 iOS, 안드로이드 각각 다른 언어를 배워 코드를 작성해야 하고 유지, 보수도 따로 해야 하므로 시간이 두 배가 걸린다는 것이다.
이 중에 무엇이 정답이다라는 것은 없다. 자신에게 필요하고 적합한 방식을 선택해 개발하면 된다.
Ep 44 NFT가 도대체 뭐길래?
NFT(Non Fungible Token)은 대체 불가능한 토큰의 줄임말이다. 토큰은 이더리움과 같은 블록체인으로 발행하는데, ‘돈을 받는 기능’과 ‘돈을 받고 토큰을 보내주는 기능’이 반드시 존재한다. 이를 합쳐 스마트 계약이라 한다.
스마트 계약에 토큰을 1개만 발행할 수 있도록 하고 그 안에 이미지나, 노래, 계약서 등을 넣으면 그게 바로 NFT인 것이다.
NFT는 왜 비쌀까?
그럼 도대체 왜 NFT가 수십억에 거래될까. 모나리자 그림은 인터넷에서 아무나 다운받을 수 있지만 박물관에 전시된 실물과는 다르다. 그 실물이 유일한 원본, 단 하나이기 때문에 유명한 작품이 큰돈에 거래되는 것처럼 NFT는 유일한 원본임을 증명하기 때문에 비싼 것이다.
NFT의 등장으로 이제 누구든 그림, 영상을 비롯한 모든 것을 판매할 수 있는 세상이 오게 되었다. 이에 따라 산업은 변화하고 새로운 직업도 생겨날 것이다.
Ep 45 멀웨어, 바이러스, 웜 개념 몽땅 정리
멀웨어(Malware)는 악성 소프트웨어를 뜻하며 대표적으로 바이러스(virus)와 웜(worm)이 있다.
바이러스와 웜
바이러스와 웜은 복제되어 전파된다는 공통점이 있지만 웜과는 다르게 바이러스에는 숙주가 필요하다. 어떤 파일을 다운받고 컴퓨터가 감염되었다면 바로 그 파일이 숙주이고 그 안에 바이러스가 존재하는 것이다.
반면에 웜은 숙주 없이 스스로 복제하며 전파된다. 일반적인 USB로도 전파할 수 있기 때문에 사이버 무기로도 사용된다. 참고로 사이버 무기는 국가나 특정 기관에서 만들어 다른 국가의 핵심 시설이나 인프라를 감시, 파괴하기 위해 제작되는 무기이다.
사이버 무기 웜
웜의 흔한 시나리오는 감염된 컴퓨터에서 USB가 연결되면 이를 통해 다른 컴퓨터에 침투하는 것이다. 암호화된 상태로 감염시킬 컴퓨터에 도착하면 암호를 해제하고 웜을 만든 본부에 해당 컴퓨터 정보를 넘긴다. 무엇보다 루트에 설치되기 때문에 백신 프로그램보다 우위에 있어 조종 가능하다는 점이 큰 문제이다.
어떻게 조종이 가능한 걸까. 바로 제로 데이(zero day)라는 취약점 때문인데, 제로 데이란 아무도 발견하지 못한 프로그램의 취약점을 말한다. 아래 소개하는 제로 데이를 4개나 가진 스턱스넷이란 웜은 어떤 백신 프로그램도 이를 발견할 수 없어 매우 위험한 존재이다.
스턱스넷 웜
스턱스넷은 무려 컴퓨터 드라이버까지 설치하기도 했다. 컴퓨터 드라이버는 인터넷에 절대로 연결하지 않는 컴퓨터인 에어갭(Air gap)에 저장하는데 여기에 보관된 자료까지 훔쳤다는 것만 보더라도 엄청나다는 것을 알 수 있다. 하지만 스턱스넷의 공격은 여기서 끝나지 않았다.
스턱스넷은 컴퓨터를 10만 대나 감염시킨 후 공격해야 할 목표물인지 체크하며 목표를 향해 달렸다. 최종 목표는 농축 우라늄을 만드는 기계인 핵 원심 분리기로 이를 공격해 핵 시설을 마비시키는 것이었다. 결과는? 성공이었다. 감염된 컴퓨터가 WinCC라는 프로그램을 실행하면 공격을 시작하도록 설계되어 있었는데, WinCC는 산업 현장에 있는 기계들을 감시, 제어하는 장치를 관리하는 프로그램으로 이를 실행할 컴퓨터를 스턱스넷이 결국 감염시켰기 때문에 최종 목표를 이룰 수 있었던 것이다.
사이버 공격은 여전히 계속되고 있고 더 발전할 것이다. 이를 대비하기 위해 모두의 노력이 필요하다.
느낀 점
이번 챕터에서는 새롭게 알게 된 내용이 많았다. 도커를 사용해서 개발 환경을 더 쉽게 관리할 수 있다는 것과 NFT의 가치, 웜의 작동 방식 등등
도커는 나중에 꼭 한번쯤 써보고 싶단 생각이 들었다. 개발 환경 설정에 걸리는 시간을 쉽게 단축시켜준다는 건 역시 혁신.. NFT도 요즘 그렇게 핫한데 정말 머지않아 NFT 산업이나 일자리가 많이 생겨날 것 같다. 미리 공부 좀 해놔야 하는건가.
스턱스넷이라는 웜도 처음 알게 됐는데 정말 어마무시한 녀석이었다. 미래에는 국가 전쟁도 사이버로 하지 않으려나.
References
book - IT 5분 잡학사전