Programming Language 57

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를 무료로! 간단하게 업로드만으로 분석해준다. 다양한..

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

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을 적으면 됨.

[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을 반..

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와 코틀린과 차이점을 정리해 보았다. 각 언어의 버젼별로, 상황별로 다른점이 많으나, ..

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

자바 가비지 컬렉션 설명 및 종류

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에서는 ..

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

Java 시큐어 코딩 - 공격 종류 및 해결방안

1. SQL injection 취약점 발생 원인외부입력값을 동적으로 SQL실행문을 만들어서 사용할때 주로 나타남. /* SQL injection에 취약한 코드*/ String userId=request.getParameter("userId"); String password=request.getParameter("password"); ... Statement stmt = conn.createStatement(); ResultSet result = stmt.executeQuery("select count(*) as count from student where userid='"+userId+"' and password='"+password+"'"); userid에 admin' OR '1'='1 을 입력하면 그..

Java 시큐어 코딩 - 개론 및 보안사례

개요 및 단어 설명시큐어 코딩에 앞서 단어설명을 한다. 보안약점(weakness) - 개발자가 개발을 하는 단계, 구현을 하는 단계에서 나타나는 bug - 코드 리뷰를 통해 보안약점을 찾겠다. - But, LOC(Line of code)가 너무 많으므로 정적분석도구를 사용한다. - ex) findBug, findSecurity plugin - Secure coding이 필요한 단계 보안취약점(vulnerability) - 서비스가 나가고 난 뒤 침해관련 사고 - 실제 침해사고로 일어난 사례 - 공격자(해커)가 의도하는 공격(해킹)이 일어나는 곳 Secure coding(보안 약점 구간)에서 이슈를 알아 낼 수 없는 경우도 있다. 예를 들어 논리적인 & 구조적인 이슈(ex. sms를 통한 인증)로 인해 보..

예제로 알아보는 스칼라에서 Option monad

Java에서 항상 우리가 하던대로 코딩하면 아래와 같이 나온다. Customer customer = Customers.findById(1234); return customer.getAccount(SOME_ACCOUNT).getLastInterest.getAmount 하지만 그냥 위와 같이 쓰게 되면 nullPointException에서 자유로울수 없기 때문에 보통 아래와 같이 사용한다. Customer customer = Customers.findById(1234); if(customer !=null){ if(customer.getAccount(SOME_ACCOUNT)!=null){ if(customer.getAccount(SOME_ACCOUNT).getLastInterest!=null){ return ..

Intellij에서 scala와 sbt를 사용시 반드시 알아야할 3가지

아래 글은 Intellij IDEA 2018.2 이후 버젼에서 scala를 사용하기 위한 sbt plugin이 동작하는 방식에 대해 설명한 글 입니다. 만약 이 글을 보시는 분이 intellij에서 scala와 sbt plugin을 쓰신다면 반드시 이 포스팅을 읽어볼 것을 권장합니다. 제가 삽질을 너무 많이해서.. 다른 분은 삽질을 덜 했으면 좋겠습니다. ㅠㅠ SBTSBT란. SBT는 최신 빌드 도구 중 하나이다. 스칼라로 작성되었고, 스칼라에 사용하기 편한 기능을 많이 제공하기는 하지만, SBT 자체는 범용 빌드 도구이다. 1. sbt project를 import 하기이미 존재하는 sbt로 빌드된 project를 intellij에서 사용하기 위해 import할 때 아래와 같이 진행한다. (1) Inte..

R을 활용하여 구글 지도에 데이터 나타내기

R언어를 사용해서 구글지도에 데이터를 나타내보자 - 만들것 : freq column에 대해서 값이 200 이상이면 빨강색(크기 8), 이하이면 파랑색(크기 3) - 준비물 : Macbook, R studio 데이터 - 첨부파일 다운 : 123456789101112131415161718NAME , FREQ ,LAT,LON해운대해수욕장 , 580,35.158670, 129.160365국제시장 , 209,35.100728, 129.029123광안리해수욕장 , 229,35.153035, 129.118630광안대교 , 156,35.147633, 129.130206태종대 , 164,35.053070, 129.087213달맞이고개 , 130,35.16242 , 129.1783자갈치시장 , 182,35.096739, ..

Golang backend programming - Http get 호출 + timeout 처리

약간 멍청하게 생긴 golang 마스코트 Golang의 백엔드 프로그래밍을 하기 위해 아래 조건을 갖춘 프로그램을 개발하기로 했다.5초 마다 http get 호출1초 이상 http get이 지연되었을 경우 timeout 발생Golang의 timeout을 사용 - select와, channel 활용 (Golang의 특징, timeout 설명 페이지 바로가기) 코드 123456789101112131415161718192021222324252627282930313233343536373839package main import ( "fmt" "time" "net/http" "io/ioutil") func main(){ for { fmt.Println("Http request start") c1 := make(ch..

Golang의 독특한 특징 3가지 - A declared are not used, Multiple return values, Timeout

기존 java 개발에서는 볼 수 없었던 독특한 golang만의 특징 몇가지를 소개하고자 한다. - 아래 내용들은 Jetbrains사의 GoLand IDE를 사용하였습니다. - Jetbrains사의 GoLand IDE사용하여 Golang 실행하기 포스트 바로가기 A declared are not used - Golang은 variable을 선언해놓고 쓰지 않으면 compile이 불가하다. Multiple return values - Java에서는(적어도 java 8 이전) 1개의 method 혹은 function에 대해서 return은 1개의 값만 가능하다. private int sum(int a, int b){ return a + b; } private int multiple(int a, int b){ ..

Jetbrains사의 GoLand로 Go언어 시작하기

Go언어는 2009년에 만들어져서 현재까지 활발히 발전되고 사용되는 언어이다. 간단하게 golang을 개발하자면 terminal, sublimetext로 개발할 수 있지만 좀더 나은 편의성을 사용하기 위해 Intellij를 만든 제작사인 jetbrains사의 Golang전용 컴파일러인 GoLand(사이트 바로가기)를 사용하는 것도 좋은 방안이다. JetBrains사에서 소개하는 Go IDE(GoLand) 준비물3분맥북터미널인터넷환경homebrew 설치GoLand 공식사이트에서 환경에 맞는 버젼을 고른 후 설치한다. 수행GoLand를 실행한다.src 이하에 main package를 생성하고 적절한 경로에 프로젝트 경로를 정한다. 우클릭을 통해 new > Go file, main.go를 생성한다. (case..

[Groovy]배열 종류 및 사용법

Groovy의 array는 java 처럼 쓸수도 있고 혹은 groovy 자체의 방식으로도 사용가능하다. array 내부에 들어가는 변수는 groovy 변수와 같이 다양한 타입의 변수가 한번에 들어갈 수 있다. 준비물 macbook groovyConsole설치(설치하는 방법 보러가기) Array append(배열 추가하기) 1. terminal에서 groovyConsole 실행 $ groovyConsole 2. 아래와 같이 groovy script def andersonArray = [] andersonArray.add("tistory") andersonArray.add(-3.1) andersonArray

[Groovy]변수 선언하기 및 변수 종류

groovy의 variable의 type은 마지막에 집어넣은 data의 형을 따른다. 즉 javascript마냥 다양한 변수를 집어넣을 수 있는 것이다. 혹은 java처럼 쓰일 수도 있다. 준비물 macbook groovyConsole설치(설치하는 방법 보러가기) Groovy def 변수 선언하기 1. terminal에서 groovyConsole 실행 $ groovyConsole 2. 아래와 같이 groovy script def x = 1 x = new java.util.Date() println x x = -3.1499392 println x x = false println x x = "Groovy!" println x 3. 결과물 Java 변수 선언하기 1. terminal에서 groovyConsol..

[Groovy]설치하고 helloworld 출력하기

준비물 Macbook terminal sdkman(설치방법보러가기(링크)) 시작 1. terminal을 켜서 sdk install groovy 입력 $ sdk install groovy 127 ↵ ==== BROADCAST ================================================================= * 07/03/18: Grails 3.3.3 released on SDKMAN! #grailsfw * 06/03/18: Groovy 2.6.0-alpha-3 released on SDKMAN! #groovylang * 04/03/18: Jbake 2.6.0 released on SDKMAN! #JBake ====================================..

Java reflection 사용시 에러 java.lang.ClassNotFoundException

Java reflection은 강력하고 Java를 더욱 효과적으로 쓸 수 있게 하는 무기이지만 아래와 같은 에러를 볼 때도 있다. java.lang.ClassNotFoundException: XXXXXX 아래 예제를 통해 어떻게 해결하는지 알아보자. Daemon.java1234567891011121314151617181920package com.reflection.example; import java.lang.reflect.Method; public class Daemon { public static void main(String[] args) throws Exception { try { Class c = Class.forName(args[0]); Method m[] = c.getDeclaredMetho..

Java의 축복 Lombok 소개 - gradle 적용시키기

Lombok Project는 Java프로젝트를 할때 필수적으로 깔고 시작해야할 툴 중 하나이다. Lombok없이는 Java프로젝트는 수많은 삽질과 노가다로 떡칠 되어있을 것이다. 왜 Lombok을 사용해야 하는지 아래 코드 예제들을 통해 알아보자. 1. 반복적인 코드제거Java는 훌륭한 언어이지만 코드를 반복적으로 써야하는 경우가 많다. Lombok은 이러한 반복적인 작업을 줄여준다. 만약 프로젝트가 Maven으로 이루어질 경우 아래와 같이 설정한다. (가장 최신 버젼의 추가방법은 이 웹페이지에서 확인가능하다) pom.xml12345678 org.projectlombok lombok 1.16.16 provided cs build.gradle(2.12이상의 gradle)1compileOnly "org.pr..

jqeury 스크롤 내리다가 특정 영역(부분) 이벤트 발생시키기

웹을 개발하다가 보면 스크롤을 내리다가 특정부분이 되면 혹은 특정 div가 나오게 되면 이벤트를 발생시키고 싶어 할 때도 있다. 아닐때도 있고, 갑자기 하고싶을 때도 있다. 이때 아래와 같이 사용하게 되면 이벤트를 딱 한번만 발생을 시킬 수 있다. HTML scroll down to see the div CSS body, html { height: 100%; } #wrapper { height: 400%; background: none repeat scroll 0 0 #f99ccc ; text-align:center; padding-top:20px; font-size:22px; } #tester { padding-top:1200px; height: 600px; background: none repeat ..

Javascript 예외처리

JAVA와 거의 유사하게 Javascript에서도 예외처리가 가능하다. 그런데 예외처리가 잘쓰이는지 잘 모르겠다. AJAX를 사용하면 AJAX에 있는 done, success와 같은 문구로 사용을 더 많이할 것같다. 1234567891011121314151617181920 function registerEventListener(node, event, listener){ try{ //firefox, chrome etc.. node.addEventListener(event, listener, false); } catch(exception){ //internet explorer node.attachEvent('on'+event, listener); } } window.onload = function(){ va..

Javascript 객체 개요

자바스크립트는 자바처럼 객체 선언이 가능하다.아래와 같은 방식의 객체생성이 여러 생성방법 중 한가지이다. 1234567 var product = { name : 'mango', type : 'sweet', from : 'India' };cs 자바스크립트 배열과 상당히 유사한데 객체의 atttribute에 접근하는것도 비슷하게 접근가능하다. 혹은 java처럼 접근도 가능하다 1234567var name = product['name'];var type = product['type'];var name = product['from'];//orvar name = product.name;var type = product.type;var from = product.from;cs attrubute와 method가 포함..