목록IT (126)
번개애비의 라이프스톼일

PHP8 이 새롭게 나오면서 JIT이라는 개념으로 기존 PHP 7 대비 성능이 크게 향상되었다고 주장했었으나, 사실, 큰 성능 향상을 기대하기 힘들었다. (슬그머니 올려두었던 나머지 발 마저도 떼야되나...) 프레임워크에 동일한 성능의 클라우드에 PHP 8.1 과 PHP 8 을 올려두고 여러번 테스트했지만, 사실 상 유의미한 성능변화폭이 없는것도 사실이다. (기대말라... 💩) 그리고, JIT을 Opcache와 활성화해두면 컴파일 캐싱을 위해 가끔 엄청나게 속도가 느려지는 현상이 발생되는 문제점도 존재함. (참고로 서버셋팅이 잘못될리 없음 ㅋㅋ) (PHP JIT이 드디어 나왔다고 환호했던 예전의 나를 반성하게 만들어버림....) 작년에 PHP 8.1 이 새롭게 나오면서 새로운 기능을 이것 저것 맛보고 있..

이번에 회사에서 신입개발자(1년미만)를 채용하게 되었다. 내가 경험한 것처럼 다른 회사의 파트장이나 팀을 이끄는 리더에게 조금이나마 도움이 됬으면 하는 바램에 경험내용과 코딩테스트 문제를 공유하게 되었다. 이전까지는 면접과 배경지식과 관련된 간단한 문제만으로 개발자를 뽑았었는데, 그 결과 조금만 로직이 복잡해지면 굉장히 힘들게 일을 하는 경우가 많았고 그 빈도가 점차 증가하면서 주니어개발자 그 자신에 대한 자존감이 크게 하락하는 경우를 경험하게 되었다. 그 친구만의 문제라고 단정짓지 않고 Recruit 프로세스부터 OJT, Todo 관리, Capa 측정등 회사 내 개발조직의 모든 프로세스를 점검하면서 되돌아본 계기가 되었다. 최근 개발자 몸 값이 크게 뛰면서 많은 사람들이 직업학교등을 통해 개발에 입문하..

SPA란? Single Page Application의 약자로써 쉽게 이야기하자면 페이지이동이 이뤄지지 않는 웹서비스를 말한다. 단순히 1페이지로 구성되는 서비스가 아니라 실제 메뉴/페이지 이동도 가능하도록 구현시킬 수 있다. SPA 서비스들은 최초 브라우저에서 페이지 로드이후 새로고침이 이뤄지지 않기 때문에 사용자로 하여금 페이지 전환이 빠른것처럼(?) 느끼게 해줄 수 있다. 위 사진에서는 Ajax로 구현되어 있지만 최근에는 React로 손쉽게 구현할 수 있으며, 조금더 낮은 단계로 내려가면 Fetch, axios로 구현할 수도 있다. (심지어 Websocket으로 구현한 경우도 있음) 최근에는 Android, iOS등 멀티플랫폼에 대응하기 어려운 환경에서 SPA기반으로 웹뷰로 서비스하는 목적으로도 ..

요즘 차량관제와 관련된 백오피스를 개발하면서 지도와 열심히 씨름중임. 매일 수십개의 스팟과 함께 지도에는 언제나 수백개의 차량을 표현하는 마커가 떠 있어야 하는 미션이 주어짐. 이렇게 대용량 마커를 Static map 에 출력하는 방법은 위 이미지처럼 무식하게(?) marker를 때려박거나 클러스터러를 활용하는 방법이 있다. 개발하는 관점에서는 당연히 클러스터러가 편하고 쉽고 섹시한 방법처럼 생각할지 모르겠지만, 지도에서 어떤 객체를 바로 검색하거나 찾아야되는 요구사항에서는 마커를 때려박는 경우도 있다. 네이버맵이든, 티맵, 카카오맵등 대부분의 맵의 JS작동방식이 비슷해서인지 몰라도 동일하게 300개이상의 대량 마커가 지도에 한꺼번에 출력되면 엄청난 렉이 동반된다. 웃긴건 업체들마다 API로 제공하는 N..

Windows 환경에서 MySQL 데이터베이스를 데이터베이스별로 자동으로 백업하기 필자의 회사의 개발서버는 Windows 기반이고 다수의 웹서비스를 개발하고 있는 상황이라 데이터베이스를 보다 효과적으로 백업하기 위해 별도의 배치파일을 만들어 스케줄러로 동작시키고 있다. www.burndogfather.com 이전에 windows 환경에서의 mysql 스케줄링 백업에 대해 소개했었는데, 이번에는 리눅스에서 데이터베이스 스케줄링 백업에 대해서 소개한다. (window 보다 훨~씬 쉬움!) 적당한 경로에 "블라블라.sh"와 같이 Bashshell 파일을 만들어준다. 아래 코드를 참고하여 사용하면 된다. //샘플코드 #!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR=/home/sql..

최근 RDBMS환경에서 일일 1,000만개 이상의 데이터가 지속적으로 insert, delete되며 데이터최신화를 위한 개발환경을 겪으면서 외래키에 대한 생각을 끄적여봄. 결론부터 이야기하자면 "아무리 작은 프로젝트라도 FK를 강제하는것이 좋다" 실무자들은 다 알겠지만, Foreign key는 간략하게 FK라고 칭하겠음... 솔직히 대부분의 프로젝트에서 SI든 자체플젝이든 FK를 사용하지 않는것이 현실임. 그리고 많은 개발자들이 분명 배울때는 FK를 걸어야된다는 걸 알고 있지만 개발의 용이성(?)과 원활한 DB설계변경을 위해 FK를 걸지 않는 것 또한 현실임. 개발자들이 FK를 설정하지 않는 이유는 대체적으로 다음과 같다. 1. DBA의 부재 프로젝트에서 실질적인 DBA가 없어서 개발자들이 사실상 DBA..

카카오, 네이버 인앱에서 외부 브라우저 띄우는 방법 정리 [Android/iOS] 더 쾌적하게? 웹 서비스를 개발하는 입장에서 클라이언트가 위와 같은 브라우저를 사용할때 정말 피곤합니다. 휴대폰 본인인증이나 PG결제등 여러가지 제약사항들이 생기기 마련입니다. 그렇다 www.burndogfather.com 2019년도에 인앱브라우저를 강제로 벗어나는 방법을 포스팅했었다. 이전부터 개발자 커뮤니티 등지에서 인앱브라우저를 강제하는 것과 인앱브라우저의 말도안되는 비호환성등... 많은 개발자들이 지쳐있었고, 과거 2016년도부터 내부적으로 사용하던 코드를 공개하기로 결정하고 공유하여 많은 개발자분들과 함께 솨리질러를 외치고 있던 중, 우리는 새로운 시련과 마주하게 되었다. 과거 공유했던 방법의 원리는 인앱브라우저..

회사 부설연구소에 도어락이 설치되어 있는데 매번 비밀번호를 입력하기 너무 귀찮아서 평소에는 도어락 배터리를 분리시켜 놓음. 근데... 시간이 흘러 흘러 출근후 배터리를 분리하는것 조차도 귀찮아지기 시작함. 해야지 해야지 하고 있다가 결국 2개월이 지나서야 건드리게 됨. (사실, 오늘 너무 일하기 싫어서 건든거임. ㅋㅋ) 출입구 문에 도어락을 분리한다. 다행히 피스 4개만 분리하면 손쉽게 탈착이 가능한 모델이라 손쉽게 작업이 가능했음. (바깥쪽 비밀번호 입력하는 쪽이 아니라 실내쪽 도어락만 분리하면 됨.) 배터리 홀더쪽 배터리스프링을 잘라서 납땜해서 와이어링한다. (납땜이 잘되어야함. 문 열고 닫다가 저 전선이 끊어지는 날엔 문을 부수는 경우가 생길 수 있음.) 배터리쪽에서 기판쪽으로 선을 빼준뒤, 도어락..

블루투스 관련 HW개발을 하다가 nRF52810 칩을 알게되었다. 이 칩은 Arduino nano 33 Ble or Sense에 탑재되기도 한 칩이다. 신속하게 개발하기 위한 Nordic SDK를 지원하고 정말 간단한 프로젝트라면 아두이노 Bootloader만 올리면 그만이니 라이트한 환경에서는 나름 괜춘한 칩인것 같다. 프로차일드의 PLE-52 국내 업체에서 공급하고 디바이스마트등 국내재고로써 유통되기 때문에 지금처럼 망할 코로나로 인한 반도체 수급에서 비교적(?) 자유롭다. 그리고 국내유통마진을 생각해도 상식선의 가격대를 형성하고 있는것이 장점이다. https://www.devicemart.co.kr/goods/search?search_text=ple-52 대한민국 전자부품 1등 쇼핑몰 디바이스마트 ..

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)..