전체 글 477

Android Q 부터 비 SDK 인터페이스 제한 하는 이유와 비 SDK 인터페이스 제한 확인하는 방법

android Q targetSdkVerison부터 공개된 SDK API만 사용가능하다. 이에 따라 android Q를 targetSdkVersion으로 하는 application은 공식 SDK인터페이스가 아닌 기능에는 접근하지 못하도록 제한한다.(공식홈페이지 참고) 왜 비 SDK를 제한하게 되었나? 안드로이드에서 @hide annotation으로 선언한 여러 sdk(android.xxx.xxx 같은 package)의 method들이 존재한다. @hide 구문을 사용하면 android내부에서만 접근 가능하고, 외부(application)은 접근하지 못하며 공식 패키지 색인에도 노출되지 않는다. 즉, 공식적으로 application단에서 사용이 불가하도록 선언해 놓은것이다. 그러나, 많은 전세계의 개발자들..

Pixel에 Android 이미지 설치할때 오류 fastboot too old; please download the latest version 해결하기

안드로이드 application개발에 대응하다 보면 android version upgrade에 민감하게 된다. 여러 api들이 생기고 사라지기 때문에 미리 android os를 접하고 무슨 에러가 나는지, 어떤 기능을 새로 사용가능한지 확인해야 한다. 이를 위해서 대부분의 android application 개발자들은 구글 공식 테스트용 단말로 사용가능한 pixel을 가지고 테스트하는데 미리 android 공홈에서 preview os image를 다운받아서 os를 단말기에 올릴 수 있다. Pixel용 Android Q 베타 시스템 이미지 다운로드 공식 홈페이지 Pixel용 다운로드 | Android Developers Instructions for downloading and installing pre..

Android studio에서 gradle upgrade시 deprecated feature 확인 옵션 켜는 방법

Android를 개발하면서 gradle plugin과 gradle wrapper의 version을 지속해서 업그레이드해야한다. Gradle version upgrade를 하면 여러 feature들이 추가되고 Deprecated되는데 gradle build를 할때 아래와 같이 경고를 할 때가 있다. Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0. Use '--warning-mode all' to show the individual deprecation warnings. See https://docs.gradle.org/5.1.1/userguide/command_line_interface.ht..

Java gc log 분석, 시각화하는 무료 사이트 추천 gceasy.io

Java 개발과 운영을 하다보면 gc log에 대한 분석이 반드시 필요할 때가 있다. application운영을 통해 남겨진 gc log를 막상 볼려고 하면 어디서 부터 봐야할지 막막하다. 이때 gceasy.io 사이트를 사용한다면 그 걱정이 말끔히 사라진다. https://gceasy.io/ gceasy.io Training Our easy to understand, fun filled training programs is a preferred choice for several enterprises to transform their engineers in to performance experts gceasy.io gceasy.io 사이트는 gc log를 무료로! 간단하게 업로드만으로 분석해준다. 다양한..

Java에서 method작성시 파라미터 개수를 5개미만으로 해야하는 이유??

17년 Google 개발자들이 참여한 논문인 Detecting Argument Selection Defects에 따르면, 5개 이상 인자(argument)을 받을때 개발시 생기는 오류가 급속도로 늘어남을 확인했다고 한다. By analyzing the defects found, we are able to quantify best practice advice for API design and show that the probability of an argument selection defect increases markedly when methods have more than five arguments. 5개 이상 인자가 아닐때도 개발 중 오류를 낼 수 있음을 google내부 프로젝트들에 대해 분석하면서 ..

개발이야기 2019.05.03
맥북, 인터넷 웹에서 hwp파일 무료로 업로드, 수정, 저장하기.

hwp파일(한글파일)은 애증의 관계이다. 한국에서는 없어서도 안되고 없어지지도 않는 독특한 문서 포멧이자, 이만큼 다루기 편한 한글 포맷도 없다. 이런 hwp파일을 열고, 수정하고, 저장하려면 한글 sw를 반드시 구매해야하는데, HANCOM에서 운영하는 말랑말랑 Platform의 한컴스페이스를 사용하면 무료로 열고, 수정하고 저장할 수 있다. 말랑 Platform - 한컴스페이스 https://space.malangmalang.com/?_ga=2.190243947.1302056173.1556770590-1255745889.1556770590 한컴스페이스 어디서나 펼쳐지는 오피스 세상 space.malangmalang.com 일반사용자는 간단한 가입 이후에 무료로 사용이 가능하다. 사용관련 plan은 아래..

Java8이상에서 MaxMetaspaceSize 설정, 반드시 해야할까?

지난글(Java 8 에서 사라진 maxPermSize, PermSize을 대체하는 옵션?)에서 Class의 Meta정보, Method의 Meta정보, Static변수와 상수정보를 저장하는 공간인 Permanent Heap에 대해서 이야기해 보았다. Java8부터 해당 Heap은 Native Memory영역으로 넘어갔으며 Native Memory상한까지 영역을 차지할 수 있으며, 그렇기에 Metaspace에 대한 옵션은 크게 주의를 가지고 설정할 필요가 없다고 적었다. 하지만, MaxMetaspaceSize를 정의하지 않은 상태의 특수한 상황이라면 어떨까? 지속적으로 class의 meta정보, static변수와 상수정보값이 늘어나는 경우에는 아래와 같이 끔찍한 일이 벌어질 것이다. 상기 applicatio..

Pull request를 효과적으로 사용하는 방법

최근 github에서 Pull request(이하 pr)에 대해 작성하고 답변하던 도중(kubernetes git-sync pr 주고받은 내용 바로가기) 어떻게 pr을 적는것이 효과적일까에 대해 고민이 많아졌다. 고민과 동시에 구글링을 해봣는데 2015년 github blog에 올라온 좋은 글이 있어 해당 내용을 정리하고자 하여 posting을 하게 되었다. 원글 : How to write the perfect pull request 원글에서는 3가지의 상황에 따라 pr을 작성하는 방법에 대해 소개하였다. Pull request를 시작하는 방법 - pr을 날리는 목적에 대한 내용을 포함하라. ex. ...기능을 화면에 간편하게 표시하기 위함. ex. ...을 작동시키게 하기 위함. - 왜 이 pr을 생성..

Javascript의 json 객체에서 -(dash)가 포함된 name에 접근하는 방법?

json은 다양한 방식으로 표현될 수 있는데 상기와 같이 -(dash)기반으로 name을 정의할 수도 있고 혹은 java개발자에게 편한 camelCase로도 표현가능하다. -(dash)기반으로 표현할 경우 javascript에서 아래와 같이 error가 발생하면서 정상적으로 접근하지 못할 때가 있다. jsonObj.popup.menu-item //ReferenceError: "item" is not defined 상기와 같은 json표현식에서는 아래와 같이 name에 접근하면 된다. jsonObj.popup["menu-item"] //Good 대괄호안에 접근하고자 하는 name을 적으면 됨.

쿠버네티스, 물리장비에 올릴까? 가상장비에 올릴까? 머신별 장단점 알아보기.

Kubernetes Micro Service Architecture(이하 MSA) 개발방식이 유행을 타면서 이와 동시에 docker와 같은 container application들을 orchestration하는 도구인 Kuberntes(이하 k8s)의 관심도도 엄청나게 높아지고 있다. k8s에 대한 관심이 지속적으로 늘어남과 동시에 개발자들은 효율적인 machine(host)의 resource(cpu, ram등)의 사용을 위해 아래와 같은 질문이 자연스럽게 나눠지곤한다. k8s를 물리장비에 올릴까? 가상장비에 올릴까? 어디에 올렸을때 효과적일까? 상기와 같은 질문을 하기 전에 k8s의 목적에 대해 명확히 알아야 한다. k8s는 container orchestration도구일 뿐이다. container a..

[JavaScript]변수내용이 json인지 확인하는 method(check valid json)

js에서 사용하고 있는 variable이 json인지 여부를 확인하고 싶을때가 있다. npm을 사용한 여러 library를 사용하는 방법도 있지만 아래와 같이 간단한 method를 활용하는 방법도 있다. function IsJsonString(str) { try { var json = JSON.parse(str); return (typeof json === 'object'); } catch (e) { return false; } } JSON.parse(str) 메서드 ECMAScript 2015의 standard method이다. JSON.parse(str)는 json의 문자열 구문을 분석하고 들어온 파라미터를 js값이나 객체로 생성한다. 이때 정상적인 json type이 아닌경우 exception을 반..

[ES5]여러개의 promise를 Synchronous하게 받는 promise 구현하기

promise문법은 기본적으로 비동기로 구현되고 실행된다. 여러개의 promise가 끝나는 것을 확인하여 synchronise하게 처리하고 싶다면 어떻게 해야할까? 1) promise를 중첩되게 구현한다. -> Callback Hell 2) 여러 promise를 동시에 진행하고 완료됨을 확인하는 promise로 감싼다. -> 선택! 2번구현이 동작하는 방식은 아래와 같은 도식으로 표현할 수 있다. 최종 구현 code는 아래와 같다. var items = new Map; var showProgressCircle = true;// job을 가져오고 있을 때는 progress circle이 보이도록 function getJobInformation(host, resolve) { $axios.get(host+'/..

특정 문자가 들어간 line만 뽑아내는 정규식

특정 문자가 들어간 들어간 line만 뽑아내려면 아래와 같이 사용하면 된다. .*name.*\n Example 아래 json에서 이름만 뽑아내고 싶을때 상기 regex를 사용하면됨. { "squadName": "Super hero squad", "homeTown": "Metro City", "formed": 2016, "secretBase": "Super tower", "active": true, "members": [ { "name": "Molecule Man", "age": 29, "secretIdentity": "Dan Jukes", "powers": [ "Radiation resistance", "Turning tiny", "Radiation blast" ] }, { "name": "Madame ..

개발이야기 2019.04.01
(번역)Netflix에서 데이터를 통해 유연하고, 안전한 클라우드 인프라로 활용하는 방법

원 제목 : How Data Inspires Building a Scalable, Resilient and Secure Cloud Infrastructure At Netflix원 글 : https://medium.com/netflix-techblog/how-data-inspires-building-a-scalable-resilient-and-secure-cloud-infrastructure-at-netflix-c14ea9f2d00c Netflix의 개발자 문화는 Netflix의 모든 사람이 핵심 책임을 맡고 자유롭게 임무를 완수 할 수 있는 자유와 책임을 전제로 한다. 이러한 자유를 통해 팀과 개인은 혁신을 주도할 수 있으며 결과물에 대해 품질과 견고함(robustness)에 책임을 가지고 있다. Cen..

빅데이터 2019.03.22
[linux] netstat 명령어 설명 및 예제

netstat 소개netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. OS X, 리눅스, 솔라리스, BSD를 포함한 유닉스 계열 운영 체제와 윈도우 XP, 윈도우 비스타, 윈도우 7, 윈도우 8, 윈도우 10을 포함한 윈도우 NT 기반 운영 체제에서 이용이 가능하다. 네트워크의 문제를 찾아내고 성능 측정으로서 네트워크 상의 트래픽의 양을 결정하기 위해 사용된다.리눅스에서 net-tools의 일부인 netstat은 시대에 뒤쳐진 것으로 간주되며, iproute2의 일부인 ss를 대신 사용하여야 한..

젠킨스에서 plugin 설치때 jenkins Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version 에러가 날 경우

젠킨스에서 plugin을 사용시 업데이트할때 아래와 같은 오류가 날 경우가 있다. WARNING: org.jenkinsci.plugins.ghprb.GhprbTrigger.run() failed for hudson.model.FreeStyleProject@4853e929[android-phoenix-qa-emulator] java.lang.Error: org.kohsuke.github.HttpException: Server returned HTTP response code: -1, message: 'null' for URL: https://api.github.com/repos/nytm/android-phoenix/pulls?state=open at org.kohsuke.github.Requester$Pa..

DevOps/CI & CD 2019.03.07
사내 해커톤 참가 후기 - 챗봇 application 개발 경험기

작년 11월경 12월까지 일정으로 사내 해커톤이 열렸다.우리 회사에서는 국내외에서 활발히 이루어지고 있는 개발문화이자 축제인 해커톤을 2016년 부터 열었으며 3회째를 맞이했다. 1등 상금 500만원, 본선진출자 airpod증정, 리얼포스 키보드 증정 등 다양하고 멋진 상품이 기다리고 있었다. 나(개발자)와 동기형(비개발자)은 해커톤에 참가하기로 마음을 먹었고 ideation을 시작했다. Ideation시작은 순탄하지 않았다. 이번 대회는 독특하게도 일반적인 해커톤처럼 12시간/24시간의 제한을 두고 하는 것이 아니라 일반 공모전 처럼 예선/본선 이루어져 있었다. 이렇기에 회사일과 개발을 병행해야 하는 일정 상 최대한 기존에 알고있던 기술과 빠르게 개발할 수 있는 기술 위주로 진행하기로 결정하였다. 지난..

일상/Hackathon 2019.03.05
Kotlin 소개 및 Java와의 차이점 알아보기

What is Kotlin?# JetBrains에서 2011년 공개한 프로그래밍 언어# Java와 상호 호환 # JVM, Android, 브라우저에서 동작# coroutines 지원# Null 안정성 # 코틀린 공식 사이트 : https://kotlinlang.org/# 코틀린 온라인 공부 사이트 : https://play.kotlinlang.org Android와 Kotlin의 관계# Java와 100%호환을 통해 Android API그대로 사용가능# Ant, Maven, Gradle build 시스템 사용가능# Android studio를 통한 Java → Kotlin 변환도구 제공 Java vs Kotlinjava와 코틀린과 차이점을 정리해 보았다. 각 언어의 버젼별로, 상황별로 다른점이 많으나, ..

DELL P2417H FHD 모니터 개봉기 및 리뷰

지난 글 '원룸에서 사용할 DELL 모니터 선택 후기(글 바로가기)' 에서는 어떤 모니터를 고를지 고민해 보았다. 그 이후 11번가에서 주문한 Dell P2417H 모니터가 배송이 왔다. 역시 DELL포장답게 모두 재활용이 가능한 부품으로 이루어져 있다. 24인치라 기존에 회사에서 쓰던 27인치 모니터보다는 작을거라고 예상했지만, 생각보다 묵직하고 커서 놀랐다.가로 52cm, 세로 30cm의 모니터크기를 가지고 있고, 화면비는 16:9이다. 스위블, 틸트, 엘리베이션 기능이 있는 받침대이기 때문인지 총 무게는 7.63kg로 다소 무겁다. 구성품으로는 VGA선, hdmi선, usb-A선, power케이블이 포함되어있다. 기존 사용하고 있던 19인치 모니터 DELL P2417H 모니터로 바꾼 모습 기존 바탕..

일상/리뷰 2019.02.26
scala개발시 sbt build때 GZIPInputStream: java.util.zip.ZipException: Not in GZIP format 에러나는 경우 해결책

scala를 개발할때 java와 연동되던 gradle이나 maven과는 다른형태의 build툴인 sbt를 사용한다. sbt는 simple build tool 이라는 약자를 가지고 있다고는 하지만 개인적으로 엄청 불편한거같다. 최근 sbt upgrade를 하던도중 아래와 같은 에러를 만났다. sbt 0.13.X 에서 sbt 1.X로 올리거나 그 반대의 경우 아래와 같은 에러를 만날때가 있다. 에러로그 % sbt [info] Loading global plugins from /home/smarter/.sbt/0.13/plugins [info] Updating {file:/home/smarter/.sbt/0.13/plugins/}global-plugins... [info] Resolving org.fuseso..

원룸에서 사용할 DELL 모니터 선택 후기

Intro대부분의 사회초년생들은 자취를 원룸에서 시작할 것이다.(글쓴이도 그렇다)원룸(혹은 오피스텔)에서 빌트인되어 있는 옷장, 침대 등을 사용하지만 보통은 데스크탑, 모니터가 있는 경우는 드물다.데스크탑이 반드시 필요하다면 모니터와 데스크탑을 방안에 둬야한다. 이때, 어떤 모니터를 사면 좋을까? Requirement원룸에서 모니터를 사야할 때 고려해야할 사항은 아래와 같다. # 몇인치 모니터?# 브랜드?# 가격대?# 패널종류?# 해상도?# hdmi 등 각종 기능? 우선 상기 질문에 대해 나는 아래와 같이 판단했다. # 몇인치 모니터?Answer : 27인치이하면 좋을것 같다. 27치 초과제품은 비쌀뿐더러 원룸에서 티비만큼이나 자리를 차지할 것이다. 19인치는 너무작으므로 24 혹은 27인치로 결정. #..

일상/리뷰 2019.02.17
Kafka broker와 java client의 버젼 하위호환성 정리

하위 호환성은 기술 및 컴퓨터 분야에서 새 제품이 이전 제품을 염두에 두고 만들어진 제품에서 별도의 수정 없이 그대로 쓰일 수 있는 것을 뜻한다. Kafka는 1.XX version으로 올라가기 전까지는 "one-way" 하위 호환성을 가지고 있었다. 신규 버젼의 broker는 옛날 버젼의 client를 지원했으나, 신규 버젼의 client는 옛날 버젼의 broker을 지원하지 못한다는 뜻이다. Client버젼을 높이기 위해서는 반드시 broker의 버젼을 높여야 했으므로, kafka client 업그레이드에 허들로 작용했다. 카프카 커뮤니티는 KIP-97 ticket을 통해 "two-way" 하위 호환성을 가지도록 하는 방안을 논의하였고 이후에 호환성 protocol을 정의하여 broker 버젼과 cl..

빅데이터/Kafka 2019.02.14
Back-end 개발자라면 답변가능한 Questions

OS, Linux, Network# 프로세스와 쓰레드 차이프로세스 - 실행되고 있는 프로그램의 개체. CPU 시간이나 메모리 등 시스템 장원이 할당되는 독립적인 개체. 다른 프로세스와 상관 없이 독립적으로 자원을 할당 받음. 프로세스 간의 통신을 위해선 파이프, 파일, 소켓 등을 사용하여 통신하여야 함 쓰레드 - 프로세스 안에 존재하여, 프로세스의 자원을 공유하는 개체 흔히 경량 프로세스라고 부름 각 쓰레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유. # System call이란? # Shared memory? # 해쉬알고리즘의 종류 및 특징?MD5 SHA-1 # Swap memory는 무엇이고 언제발생하는가? # Java에서 Memory mapped file은 언제 사용하는가? # OSI 7 l..

개발이야기 2019.02.11
자바 가비지 컬렉션 설명 및 종류

Getting StartedJVM 기반 언어와 C, C++과 가장 큰 다른점은 free()와 같은 메모리접근을 통한 명시적 메모리 해제 여부이다. 자바는 OS메모리 영역에 직접 접근하지 않고 JVM이라는 Process이자 가상머신을 통해 접근한다. 자바 application은 System.gc()와 같은 명시적 명령어를 통해 garbage collection을 수행할 수 있으나, 권장되지 않는다. 대신 JVM의 옵션에 따라 Serial GC, Parallel GC, CMS(Concurrent Mark Sweep) GC, G1 GC(after java 7)이 사용되고, 각 GC들은 특정 알고리즘과 주어진 옵션에 따라 메모리 관리를 하게 된다.What is garbage?Java application에서는 ..

홍콩 해커톤 Smartone 참가 후기

Smartone Hackathon 2018홍콩에서 스마트한 삶을 꿈꾸다 페이스북의 '좋아요' 버튼이 사내 해커톤에서 개발되어 상용화된 사례라는 점은 이미 널리 알려진 사실이다. 페이스북이 해커톤을 통해 새로운 비즈니스 모델을 개발한 이후 IT기업들 사이에서 해커톤 개최는 일종의 트렌드로 자리잡았다. 국내에서도 우리 회사를 비롯하여 네이버, 삼성전자 등의 기업이 해마다 해커톤을 개최하고 있으며, 최근에는 그 의미가 확장되어 지자체, 대학교, 금융기관 등에서도 다양한 목적의 해커톤을 개최하고 있다. 현재 해외에서는 어떠한 해커톤이 열리고 있고, 국내 해커톤과의 차이는 무엇일까? 작년 가을 홍콩에서 열린 '스마톤 해커톤(Smartone Hackathon) 2018'에서의 경험을 소개한다. 글_SK플래닛 Dat..

일상/Hackathon 2019.01.22
[Stream Process as a Platform] Netflix의 실시간 스트림 처리 플랫폼 Keystone 소개

아래 포스트는 Keystone Real-time Streaming Processing Platform(medium)을 읽고 정리한 글입니다.원글 글쓴이 : Zhenzhong Xu in Real-time Data Infrastructure team Keystone Stream Processing Platform은 넷플릭스의 Data-driven culture을 가능케한 Data backbone 이자 infrastructure의 필수적인 부분을 뜻한다. Netflix Keystone은 2015년 기준, 8,000,000tps의 데이터를 처리하고 있으며 약 1PB 양의 데이터를 처리하고 있다. 오늘날 Keystone Platform은 두가지의 핵심 서비스를 제공한다.1) Data PipelineRouting ..

빅데이터 2019.01.10
매초마다 반복되는 shell script 한줄 구문

Getting started보통 tail을 통해 file 내부의 변화를 확인하고 log를 확인하곤 한다.가끔 linux file system을 통한 개발을 하다보면 반복적으로 command를 실행시키고 싶을때는 어떻게 하면 될까? $ while true; do 명령문 sleep 시간; done 상기와 같이 수행하면 된다. 시간(seconds)마다 명령문을 입력한다. Example5초 마다 ls 명령어 호출 $ while true; do ls /app/home/; sleep 5; done 1초 마다 echo $ while true; do echo hi; sleep 1; done 10초 마다 hdfs 를 통해 ls 명령어 호출 $ while true; do ./hdfs dfs -ls /2018/11/12/;..

효과적인 소프트웨어 문서를 적는 방법

『Documenting Software Architectures』를 읽고 정리, 추가 한 포스트입니다. 호랑이는 죽어서 가죽을 남기고, 개발자는 문서를 남긴다. Why? 왜 문서화 해야하나?개발자로서 협업을 하다 보면 항상 마주치는 현실이 있다. 이건 왜 이렇게 짜셨나요? 이렇게 설계한 이유는 무엇인가요? commit log를 보세요. 히스토리에 대해 알고 싶어요. 어디서 볼수 있나요? wiki를 보세요. wiki에 어디로 가야하나요? XXX page에 맨 아래쪽에 나와 있어요. 여기 wiki내용은 code에 반영된 것과 다른데요? wiki 작성할 시간이 없어요. 바빠서 작성을 못했네요. 인수인계를 할 때뿐만아니라 일상 실무에서도 많이 일어나는 개발자들 간의 커뮤니케이션 내용이다. 많은 개발자들이 히스토..

Java 8 에서 사라진 maxPermSize, PermSize을 대체하는 옵션?

아래 포스팅은 HotSpot JVM을 기준으로 설명합니다. JVM architecture(오라클 GC설명페이지) Java 7에서 있던 -XX:MaxPermSize=size, -XX:PermSize=size option들은 이제 Java 8에서는 Deprecated되었다. 더 정확히는 metaSpaceSize로 대체(superseded)되었다고 볼 수 있다. 그래서 많은 개발자들이 java7에서 8으로 업그레이드 한 이후에 아래와 같은 warning 메시지를 본적이 있을 것이다. Java HotSpot(TM) Server VM warning: ignoring option PermSize=32m; support was removed in 8.0 Java HotSpot(TM) Server VM warning:..