본문 바로가기

포스트464

[Linux] jq 명령어 사용법 및 예제 - Bash 스크립트에서 json 파싱 Bash 스크립트에서 REST API 호출을 하는 경우 데이터가 JSON 포맷으로 얻어지는 경우가 많다. 문제는 XML이나 JSON 문서에서 데이터를 얻어오기 위해서는 파싱을 해야한다는 점이다. grep 명령이나 awk 스크립트를 이용해서 처리할 수도 있지만 jq 명령을 이용하면 쉽게 JSON 문서를 다룰 수 있다. jq 설치 $ sudo yum install jq -y $ jq --version jq-1.5 jq는 yum, apt-get, brew 등의 패키지 관리자로 쉽게 설치할 수 있다. yum install epel-release -y yum install에서 jq를 찾을 수 없다고 하는 경우라면 epel-release 를 설치해주면 된다. jq 사용법 jq 명령은 입력으로 받은 JSON 문서에 .. 2021. 7. 7.
[git] 깃허브 마크다운에서 접기/펼치기 (더보기) 사용법 깃허브에 이슈를 작성하다보면 '접기/펼치기' 기능을 사용해야할 경우가 있다. 이슈에 대한 설명을 위해 로그 정보들을 긁어오는데, 로그가 너무 많으면 이슈 자체에 집중을 할 수가 없다. 이런 정보들은 '접기/펼치기' 기능 혹은 더보기 버튼으로 가려놓으면 필요할 때만 펼쳐볼 수 있다. 깃허브 이슈를 작성할 때 더보기 자세한 내용은 더보기 버튼으로 가려둘 수 있음 더보기 자세한 내용은 더보기 버튼으로 가려둘 수 있음 '' 태그와 태그를 이용하면 된다. 2021. 7. 6.
[Python] 'NameError: name 'input' is not defined' 에러 (raw_input과 input 차이) 파이썬 코딩을 하다가 다음 에러를 만나게 될 경우가 있다. NameError: name 'input' is not defined input이 정의되지 않았다는 의미다. 간단한 파이썬 프로그램 하나를 실행해보자. input_value = input("Please input your value :") print(input_value) 사용자로부터 입력을 받아 화면에 그대로 출력해주는 프로그램이다. 이 코드를 실행했을 때, 다음화면처럼 'NameError' 메시지를 받는 경우가 있다. 아무런 문제가 없어보이는 코드인데 'NameError: name 'a' is not defined' 라는 에러메시지가 발생하면서 생각한대로 코드가 동작하지 않는다. 이런 에러의 원인은 Python 2.x 버전에서 발생한다. 같은.. 2021. 7. 6.
[보안] XML External Entity Injection Attack (XXE Injection 공격) 데이터를 XML에 담아서 저장할 때, 문자열 형태의 XML을 파싱하기 위해 XML 파서를 이용하는 경우 XXE Injection Attack(XML External Entity Injection 공격)'을 주의해야한다. XXE Injection 공격은 OWASP Top 10 - 2017에도 선정된 웹 애플리케이션의 대표적인 취약점이다. (OWASP는 The Open Web Application Security Project의 약자로 웹 애플리케이션에서 흔히 발생할 수 있는 대표적인 취약점을 모아서 4년마다 발표하는 프로젝트다.) XML Entity XXE Injection은 XML의 엔티티(Entity)를 이용한 공격방법이다. XML 엔티티는 반복적으로 나오는 문자열이나 특별처리가 필요한 특수 문자를 X.. 2021. 7. 5.
[Java] 자바빈(Java Bean)이란 무엇인가 자바빈즈(Java Beans)는 자바 언어로 작성된 소프트웨어 컴포넌트를 일컫는 말로 데이터 표현을 목적으로 하는 자바 클래스를 의미한다. 자바 빈즈 클래스는 '자바 빈즈 컨벤션(Java Beans Convention)'을 지켜야 한다. 자바 빈즈 컨벤션(Java Beans Convention) 클래스는 인자(Argument)가 없는 기본 생성자(Default constructor)를 갖는다 클래스의 멤버 변수는 프로퍼티(Properties)라고 하며 private 접근 제한자를 가져야 한다. 클래스의 프로퍼티들은 Getter/Setter를 통해 접근할 수 있어야 한다 Getter의 이름은 get{프로퍼티 이름} 이며, Setter의 이름은 set{프로퍼티 이름}이다 Getter/setter의 접근 제한.. 2021. 7. 4.
[Python] 구글 드라이브에서 파이썬 코딩하기 - 'Colaboratory' 파이썬 프로그래밍을 할 때, 별도의 IDE 없이 웹에서도 쉽게 코드를 작성하고 실행해볼 수 있는 환경이 갖춰져 있다. 특히 구글이 제공하는 클라우드 저장소인 '구글 드라이브'의 'Colaboratory' 앱을 이용하면 구글 드라이브에 파이썬 프로그램을 작성해 저장해 놓고, 실행까지 할 수 있다. Colaboratory Colaboratory는 구글 리서치 팀에서 개발한 제품으로 웹 브라우저를 통해 파이썬 코드를 작성하고 실행할 수 있는 파이썬 개발 환경이다. 머신러닝이나 데이터 분석에 대한 교육 및 실무 작업에서 다양한 사람들과 코드를 공유하고 실행할 수 있는 환경을 제공해준다. Colaboratory는 설정 없이도 사용 가능한 호스팅 주피터(Jupyter) 메모장 서비스로 GPU를 포함한 컴퓨팅 리소스.. 2021. 7. 3.
[Java] 예외처리 코드 잘 작성하는 9가지 방법 자바 프로그래밍에서 '예외처리(Exception Handling)'는 다소 까다로운 주제다. 개발 조직들은 자신들만의 예외처리 규칙을 만들고 사용하는 경우가 많다. 일반적으로 자바 프로젝트에서 따르면 좋은 예외처리를 정리해보자. 자바 예외(Exception) 자바 프로그램이 실행과정에서 만날 수 있는 의도하지 않은 상황에 대한 처리를 위해 '예외(Exception)'를 제공한다. 예를 들어 존재하지 않는 파일을 열어보려고 한다던가, 권한이 없는 파일에 데이터를 쓰려고 할 때 예외가 발생한다. 이런 예외상황에서 프로그램의 실행을 종료하지 않고, 예외 상황을 벗어나기 위해서 '예외처리(Exception Handling)'를 하게 된다. 예외처리를 통해 예외 상황에서 벗어나도록 코드를 작성하던가 시스템을 망가.. 2021. 7. 2.
[Java] 깔끔한 조건문(if) 작성법 - Bubble Style vs Gateway Style 자바 프로그래밍을 하다보면 코드가 더러워지는 경우들이 있다. 특히 조건문들이 붙으면서 코드가 지저분해지고 가독성이 떨어지게 되는 경우가 많다. 조건문을 조금만 다른 관점으로 접근하면 가독성이 훼손되지 않으면서 동일한 로직을 좀 더 깔금하게 구현할 수 있다. Bubble Style 우선 코드의 로직을 보강하면서 조건문을 붙여나갈 때 제일 많이 등장하는 패턴의 코드는 다음과 같을 것이다. if (condition1) { if (condition2) { if (condition3) { return "All condition is true"; } return "Condition3 is false"; } return "Condition2 is false"; } return "Condition1 is false";.. 2021. 7. 1.
[Java] 자바 난수(랜덤숫자) 생성하기 자바 프로그램에서 랜덤 숫자를 생성하기 위해서 Random 클래스를 사용하거나 Math 클래스를 사용할 수 있다. Random 클래스를 사용할 경우 boolean, int, long, float, double 타입의 랜덤 값을 얻을 수 있으며, Math 클래스를 사용할 경우 0.0에서 1.0 사이의 double 타입 난수를 얻을 수 있다. Math.random() Math 클래스에는 랜덤 숫자를 얻어올 수 있는 random() 메소드가 정의되어 있다. System.out.println("0.0 ~ 1.0 Random Value : " + Math.random()); Math 클래스는 Object 클래스에 정의되어 있으므로 따로 import 할 필요는 없다. Math.random() 메소드는 시드값으로 현.. 2021. 6. 30.