분류 전체보기

    Quotes, Variables, Functions 개념 및 사용

    Quotes Shell 에서 두 번째로 중요한 개념은 quotes 이라고 할 수 있습니다. shell 에서 quotes 은 숫자나 스트링 값을 구분하기 위한 용도로 사용하지 않습니다. 123, "123", '123' 은 모두 같고 abc, "abc", 'abc' 들은 차이가 없으며 모두 다 shell 에서는 스트링입니다. 공백으로 분리되는 여러 개의 스트링을 하나의 인수로 만들 때 ( sed, awk 스크립트를 quotes 을 이용해 작성하는 이유가 하나의 인수로 만들기 위해서입니다. ) 라인 개행이나 둘 이상의 공백을 유지하기 위해 단어분리, globbing 발생을 방지하기 위해 shell 키워드, 메타문자, alias 와 같이 shell 에서 특수기능을 하는 문자, 단어를 단순히 명령문의 스트링으로 ..

    Shell Script 간단 주의점

    파일명 : NUL, / 제외하고 모두 가능 command 에서 공백을 통해서 인수를 구분하게 됨 command arg1 arg2 arg3 ... /ex $ [10 -eq 10 ]; echo $? // 10: command not found $ [ 10 -eq 10]; echo $? // bash: [: missing ']' $ [ 10 -eq 10 ]; echo $? // # redirection 문자 * ? [ ] # glob 문자 " ' # quote 문자 \ $ = += # 대입연산 # '(' 와 명령 사이에 공백을 두지 않아도 되고 ')' 앞에 ; 를 붙이지 않아도 된다. $ (echo hello; echo world) hello world Escape - Shell 에서 사용되는 명령문에는 단지..

    15. jacoco를 통한 테스트 커버리지 체크

    코드 커버리지 코드 커버리지는 소프트웨어의 테스트 케이스가 얼마나 충족되었는지를 나타내는 지표 중 하나이다. 테스트를 진행하였을 때 ‘코드 자체가 얼마나 실행되었느냐’는 것이고, 이는 수치를 통해 확인할 수 있다. jacoco Java code coverage의 약자로 junit 테스트의 결과를 바탕으로 커버리지를 결과를 리포트 해주는 툴 입니다. 특히 코드정적분석도구인 sonarqube와 연계하여 사용하는 경우가 많습니다. 앞선 툴들에 대한 자세한 설명은 다른 포스팅에서 진행할 예정입니다. 이번 글은 제 프로젝트에 적용해볼려고 합니다. 1. build.gradle에 jacoco 추가 - plugins에 아래처럼 추가 plugins { ... id 'jacoco' } ... } 추가한 뒤 gradle r..

    Java의 직렬화(Serialize)

    직렬화(Serialize) 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 역직렬화(Deserialize) byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다. 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태. 직렬화방법에는 여러 Format이 존재합니다. 표형태의 다량의 데이터를 직렬화할때는 CSV형태 Member member = new Member("김배민", "deli..

    프로그래머스 - 서울에서 김서방 찾기 (자바)

    https://programmers.co.kr/learn/courses/30/lessons/12919 코딩테스트 연습 - 서울에서 김서방 찾기 String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니 programmers.co.kr 굉장히 쉬운 코드인데 글을 쓰게 된 이유는 문자열을 다루는데 기억해야하는게 있어서 입니다. 1. 문자열을 +로 붙히기 class Solution { public String solution(String[] seoul) { int kimIdx = getTargetNameIdx(seoul,"..

    Template Method Pattern

    어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 - 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용 - 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현 AbstractClass 템플릿 메서드를 정의하는 클래스 하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메서드 또는 hook 메서드로 정의하는 클래스 ConcreteClass 물려받은 primitive 메서드 또는 hook 메서드를 구현하는 클래스 상위 클래스에 구현된 템플릿 메서드의 일반적인 알고리즘에서 하위 클래스에 적합하게 pri..

    Spring WebFlux + redis 간단 실습

    앞선 포스팅에서 WebFlux의 코드, DB 등 동기, 블럭킹으로 작성되면 WebFlux의 장점을 잃고 MVC와 다를게 없는 성능을 보여준다고 말했었습니다. 그래서 이번에는 redis-reactive를 통해서 WebFlux에서 redis를 사용하는 간단한 실습을 진행할려고합니다. 실습 코드는 깃허브 주소에서 확인하실 수 있습니다. 1. redis-reactive, embedded redis 의존성 추가 dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive' implementation 'it.ozimov:embedded-redis:0.7.2' ... } 2. redis의 문자열의 key v..

    Spring Webflux 간단 개념 정리 및 실습

    Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈입니다. WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며 non-blocking에 reactive stream을 지원합니다. 장점 : 고성능, spring 과 완벽한 통합, netty 지원, 비동기 non-blocking 메세지 처리, Back Pressure netty : 프로토콜 서버 및 클라이언트와 같은 네트워크 응용 프로그램을 빠르고 쉽게 개발할 수있는 NIO(Non-Blocking Input Ouput) 클라이언트 서버 프레임 워크 더보기 기존의 소켓 프로그래밍은 클라이언트가 접속하게 되면 스레드를 할당해야 하는데(1:1관..