ubuntu 18.04 & swift 4.2.1 & mongoDB

오류가 나지 않도록 설정하는 방법 $ sudo  apt update $ sudo  apt upgrade $ sudo  apt remove openssl $ sudo  apt remove libssl-dev $ sudo  apt install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev systemtap-sdt-dev tzdata rsync libmongoc-1.0.0 libmongoc-dev libbson-1.0-0 libbson-dev libcurl-dev libcurl4-gnutls-dev openssl1.0 libssl1.0-dev vim wget 기존에 오류나는 모듈은 지우고 필요한 모듈 한꺼번에 설치한 명령어 임

Ubuntu 18.04 swift 4.2.1 Perfect 설치하기

Ubuntu 18.04 환경에서 서버용 swift를 사용하여 webserver를 제작하고자 한다. swift 4.2.1 까지 잘 설치 되었다. Perfect 받고 Compile을 하는데 오류가 난다. 대충 찾아보니 openssl 관련 Module이 Update가 되었는데 이게 Perfect 에서 지원이 되지 않는거 같다. 해결방법은 기존 설치된 Module을 지우고 이전 Module을 설치하면 된다. $ sudo apt remove openssl lissl-dev $ sudo apt install openssl1.0 libssl1.0-dev 이전 버전으로 모듈을 교체하면 오류는 나지 않으나 PerfectMongoDB 를 추가하면 오류가 난다. 다행히 MongoKitten 은 오류가 나지 않으니 MongoDB를 사용하려면 대체방안이 있다. 주말내내 알아낸 사실이 여기까지이다.

swift 용 timer 만들기

순수 스위프트용 타이머 만들기 먼저 타이머 선언을 한다 let total = 0 let timer = DispatchSource.makeTimerSource(queue: DispatchQueue(label: "swiftTimer", attributes: .concurrent)) 이제 타이머를 ViewDidLoad 같은 곳에 설정한다. timer.schedule(deadline: .now(), repeating: .milliseconds(100)) timer.setEventHandler {   self.total += 1   if self.total >= 30 { self.timer.cancel() }   DispatchQueue.main.async {     self.label.text = "\(self.total)"   } } 이제 타이머를 실행 시킬 곳에서 아래와 같이 해야 한다. self.timer.resume()

맥 모하비 업데이트 후 invalid active developer path 오류 날 때

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 위와 같은 오류가 난다. 모하비 업데이트 후 git 을 사용할 때 나는 오류이다. 이와 같은 오류는 Xcode command line tool 을 재설치하면 된다. $ xcode-select --install 그러면 설치 화면이 뜬다.

우분투 서버에서 패킷 캡쳐와 몽고디비 사용하기

서버에 우분투를 설치하고 나머지 모듈은 deb 또는 소스로 받아서 설치했다. 왜 그러냐고.... 우리 서버는 외부와 단절되어 있다. ㅠㅠ 안정성을 위해서 Ubuntu 16.04.5 LTS 설치하였다. 아무래도 최신 판은 휼륭한 사람들이 테스트하기 때문이다. 패킷캡쳐를 하기 위해서는 다음과 같은 라이브러리가 필요하다. libpcap, libpcap-dev 이 두개를 deb 파일을 받아서 설치하면 된다. $ sudo apt-get install ./libpcap.deb <- 이런식으로 설치한다 그러면 /usr/include/pcap.h 파일과 pcap 폴더가 생긴다. 이제 스위프트를 사용하려면 clang, libicu-dev 가 필요하다. 위와 같은 방법으로 설치한다. 스위프트 파일을 받아서 홈페이지에 나온 안내대로 압축을 풀고 링크를 건다. 이제 몽고디비를 설치한다. 이것도 소스를 받아서 설치한다. 이제 몽고키튼이라고 스위프트용 프레임을 설치한다. $ mkdir OpenKitten $ cd OpenKitten $ mkdir MongoKitten $ cd MongoKitten $ git clone https://github.com/OpenKitten/MongoKitten.git $ git tag $ cd .. 이제 pcap 라이브러리 설정을 한다 $ mkdir pcap $ cd pcap $ swift package init --type system-module $ vim module.modulemap module pcap [system] {   header "/usr/include/pcap.h"   link "pcap"   export * } $ vim Package.swift import PackageDescription let package = Package(   name: "pcap",   pkgConfig: "pca...

Server Side Swift 에서 Memory 해제가 안되어 무한 증가할 때 조치 법

몽고디비에 자료를 가져와서 가공을 한 뒤에 다시 몽고디비에 자료를 저장하는 프로그램을 서버용 스위프트로 작성하였다. 하지만 아래와 같이 작성했을 때는 실행을 하면 메모리 해제가 안되어 무한증식하는 상태가 발생되었다. import Foundation import MongoKitten do {     let mongo = try Server("mongodb://localhost:27017")     let db = mongo["db"]     if mongo.isConnected { print("connected successfully to server") }     let collection = db["collection"]     let docu: Document = []     let query = Query(docu)     var textLog = TextLog()     do {         for entity in try collection.find(query) {             trainLocations.forEach {                 textLog.write("\($0.date.Format(into: "yyyy-MM-dd HH:mm:ss Z")) \n")             }         }  //end_for entity in try collection.find(query)     } catch { print("error -> \(error.localizedDescr...

Server 용 Swift 로 MongoDB 연동하기

먼저 서버에서 해당 폴더를 생성한다. $ mkdir mongoSwift $ cd mongoSwift 이제 스위프트 패키지을 이용해서 기본 파일들을 생성한다. $ swift package init --type=executable 패키지 내용에 몽고키튼을 추가한다. Package.swift 파일 수정 import PackageDescription let package = Package(     name: "mongoSwift",     dependencies: [.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "4.0.0"),],     targets: [.target(name: "mongoSwift", dependencies: ["MongoKitten"])] ) 패키지를 업데이트하면 설정된 몽고키튼의 파일들을 다운로드 받는다. $ swift package update 이제 엑스코드용 파일을 생성한다. $ swift package generate-xcodeproj xcode 에서 파일을 열어서 수정하면 된다. import MongoKitten let server = try Server("mongodb://localhost:27017") let database = server["packet_db"] if server.isConnected {     print("Connected successfully to server") } let collection = database["tcp_collection"] for document in try collection.find() {     print(document) } 몽고디비 검색 방법 db.tcp_collectio...