번개애비의 라이프스톼일
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SRNKr/btrgABrdazL/SnlqcrKSK3wjnEKw8nKtj1/img.png)
2021100118171685 와 같이 16자리 현재시간을 출력하는 공통소스이다. yyyymmddhhiissmm 의 형태를 지니고 있음으로 초단위 이하의 MicroSecond까지 출력된다. Go Lang package main import ( "log" "time" "strconv" ) func main(){ log.Println(millisecond()) } func millisecond()(string) { ymdhis := time.Now().Format("20060102150405") microtimeInt64 := time.Now().UnixNano() / int64(time.Millisecond) microtimeUnix := strconv.FormatInt(microtimeInt64, 10)..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M54u7/btrgBlUD0ut/fQoKriiQaxOMcKW13jYUJ0/img.png)
프로젝트에서 HTML을 PDF로 변환하여 고객에게 제공하는 기능구현을 하기 위해 서칭을 했고, 여러가지 솔루션을 찾게 되었다. 수 많은 시행착오들... 커멘트에서 동작하는 wkhtmltopdf 는 커멘트라인에서 실행됨으로 웹서비스에서는 보안상이유로 사용하지 않았다. (exec등) Javascript에서 Canvas를 이용하여 PDF를 생성해주는 html2pdf 는 속도문제와 아이폰에서 Canvas 생성사이즈의 제한 (4K이하)의 문제가 있었다. PHP에서는 TCPPDF라는것이 존재하지면 HTML문서를 정확하게 파싱이 불가능했다. 결국 구글신이 해결해주심 결국 chromedp 를 사용하기에 이르렀고 그나마 안정적이면서 정확하게 PDF생성이 가능해서 서비스에 적용했다. PDF를 출력하는 기능자체가 메인서비스..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/w08ts/btrgpLfeExq/GKe7gKr5NZCMuZuTeSsMl0/img.png)
보통 MySQL 트리거의 경우, SQL문으로 어떤 쿼리를 실행할 수 있지만, 실제 애플리케이션단에서 최신화 데이터를 감지하여 따로 조치하는 경우에서는 MySQL에서 제공하는 트리거를 활용하기 난감하다. 결국 Javascript Websocket을 통해 Go 프로그램과 통신을 하고, Go 가 실시간으로 데이터베이스의 변화를 감지하여 반환하는 형태로 구현하였다. (참고로 가이드코드임으로 실서비스 적용시 코드튜닝이 필요함.) 간혹, SetTimeOut을 이용하여 Ajax로 구현된 경우가 있는데 서버 부하나 속도측면에서 상당히 불리함으로 이러한 실시간 대응에서는 가급적 WebSocket을 사용하는것을 권장한다. 아래는 실행화면 := 통신은 다음과 같이 이뤄진다. 1. 클라이언트가 소켓을 연결함과 동시에 테이블명..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bFknXA/btrfbmoi4Bg/RX5a3v2Vp6CDzEYopPViWK/img.png)
Function(Function()) 과 같은 아주 괴랄한 형태의 함수를 만들어보았다. Swift에서는 싱글톤이나 자주 사용하는 클래스나 함수를 만들때 유용하게 사용할 수 있다. Escaping을 통해 부모함수에 자식함수를 입력할 수 있도록 조치하고, DispatchGroup을 통해 부모함수를 실행하되, Semaphore를 통해 쓰레드 제어를 한다. 부모함수가 실행이 완료되면, Dispatch된 함수의 Notify를 이용하여 자식함수를 실행한다. 자식함수는 Void형태의 변수로 담아두고 부모함수를 선언할때 해당 변수를 매개변수로써 실행해주면 된다. 아래는 소스코드 //자식함수(나중에 실행될 함수) let input_func = { print("WooooooooooOW") } //부모함수(먼저 실행되는 함..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/r8vXz/btre6CyRuOf/MnQ7LVtHM5gOVBVwKcBo60/img.png)
Swift 로 iOS 개발을 하다보면, 알림권한을 받아와 푸시메시지를 보내거나 내부적인 처리를 위해서 사용하는 경우가 많다. 알림 권한을 피치못한 사정으로 인해 반드시 사용해야하는 경우 UIAlert을 통해 앱 설정화면으로 이동시켜 사용자에게 보다 친화적인 서비스개발이 가능하다. 아래 스크린샷은 앱 초기 실행 혹은 포그라운드로 되돌아올때 나타나는 화면예시다. 알림권한 뿐만 아니라 블루투스, 위치권한등도 응용이 충분히 가능하다. 아래는 알림설정을 할 수 있도록 유도하는 UIAlert 소스코드이다. 참고로 싱글톤으로 사용되거나, 부득이하게 ViewController가 아닌 Delegate에 넣어서 사용할 수 있도록, Alert 메시지의 present 처리를 조금 다르게 작성되어 있다. (원래는 present..