캐시(Cache)란? 캐시는 데이터 혹은 값의 복사본을 저장해놓는 장소를 말한다. 캐싱(Caching)은 캐시에 계산된 값이나 처리된 결과를 저장해놓는 행위를 말한다. 미리 처리 된 값을 캐시에 저장되어 있는 값을 가져오면 재처리에서의 리소스를 절약할 수 있기 때문에 처리속도에서 큰 이점을 가질 수 있다. 보통 어플리케이션에서는 처리할 때 리소스가 높은 DBMS의 결과값 혹은 외부 API 호출의 응답값 등 을 캐싱해두고 사용한다. 이를 적용해서 반응속도가 중요한 웹어플리케이션에서의 레이턴시(latency) 이점을 얻을 수 있다. 캐시 적용이 적합한 데이터 - 호출 빈도가 잦은 데이터 - 응답 결과가 동일하거나 자주 변경되지 않는 데이터 - 호출 혹은 계산 시 많은 비용이 드는 데이터 로컬 캐시란? 어플리..
Overview Private Method를 테스트 하다보니 Reflection을 사용하여 작성을 하여 번거로움이 있었습니다. 라이브러리의 힘을 빌려 PowerMock 으로 Private Method 를 Mocking하여 유닛테스트를 작성해봅니다. Gradle Dependencies 아래의 의존성을 추가해줍니다. powermock-module-junit4 powermock-api-mockito2 testImplementation( "org.powermock:powermock-module-junit4:2.0.9", "org.powermock:powermock-api-mockito2:2.0.9" ) Service Layer 아래의 public 메소드가 있습니다. isNewOrder 는 private 메소드이..
Overview 업무 중에 대외 금융기관과 Encoding을 맞출 일이 있어서 이렇게 방법을 남긴다. EUC-KR 은 한글 2byte 이고, UTF-8 은 한글 3byte 인데 문자열 길이가 달라서 아래와 같이 확인했다. 사용법 MySQL 기준 CONVERT 함수를 아래와 같이 사용한다. SELECT CONVERT('메세지' USING 'CharacterSet'); 테스트 set @target = '안녕하세요 123 ABC' ; SELECT LENGTH(CONVERT(@target USING 'euckr')) AS LENGTH -- euckr UNION ALL SELECT LENGTH(CONVERT(@target USING 'utf8mb4')) AS LENGTH; -- utf8 사용해보기 SELECT u..
Java Stream API 란? Java8 API에 새로 추가된 기능입니다. 컬렉션, 배열 등을 함수형 프로그래밍을 활용하여 반복 처리하도록 도와주는 API입니다. 그럼 Stream API를 왜 쓸까? 1. 컬렉션 데이터를 선언형으로 코드를 구현할 수 있습니다. With For-Loop List lowCaloricDishes = new ArrayList(); for(Dish dish : menu) { if(dish.getCalories d.getCalories() < 400) .sorted(Compara..
Goals 1. Jenkins의 Pull Request Builder 플러그인과 Github Webhook을 이용하여 해당 Repository에 Pull Request를 하면, 자동으로 빌드가 되는 환경을 구축함 2. 빌드 실패 시 Merge 버튼이 활성화 안되도록 함 3. 설정은 아래와 같이 4단계에서 나눠서 세팅함 Step1. [Jenkins] Github Pull Request Builder 플러그인 설정 Step2. [Jenkins] Build Job 설정 Step3. [Github] Repository Webhook 설정 Step4. [Github] Branch protection rules 설정 Step1. [Jenkins] Github Pull Request Builder 플러그인 설정 Gi..
Overview REST API에 대해서 알아보고, 조금더 탄탄한 설계를 해봅시다 REST API 란? REST(REpresentational State Transfer)란, 웹에 존재하는 모든 자원(이미지, 동영상, DB 자원)에 고유한 URI를 부여해 활용하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미한다고 한다. 따라서 RESTful API는 REST 특징을 지키면서 API를 제공하는 것을 의미한다. HTTP 프로토콜에서 HTTP METHOD 와 URI를 통해 리소스를 주고받는 것 Restful 하게 하는 6가지 조건 Uniform Interface HTTP 표준만 따르면, 특정언어나 플랫폼에 종속받지 않고 사용 가능함(파이썬, Java, Javascript,웹, iOS, ..
Overview Java에서 제공하는 ByteBuffer에 대해 알아보고, 생성해봅니다. ByteBuffer란? ByteBuffer 는 바이트 데이터를 저장하고 읽는 저장소입니다. 배열을 멤버변수로 가지고 있고, 배열에 대한 읽기/쓰기를 지원합니다. CharBuffer, IntBuffer, LongBuffer.. 등 데이터 타입에 따라 다양한 추상 메소드를 제공합니다. 배열상태 관리 capacity 버퍼에 저장할 수 있는 데이터의 최대 크기입니다. 한 번 정하면 변경할 수 없고, 생성자의 파라미터로 입력받아 버퍼를 생성합니다. position 읽기/쓰기가 작업 중인 위치를 나타내는 필드입니다. 버퍼가 생성될 때 0으로 초기화되고, put 메소드나 get 메소드가 호출되면 자동으로 증가합니다. limit과..
Overview Immutable Object에 대해 알아보고, 학습해 봅니다. Immutable Object란? 객체 생성 후 객체 내부 상태가 변경 불가능한 객체를 말합니다. 다시 말해, 객체가 생성 된 후 모든 lifecycle에서 동일한 값을 보장받을 수 있습니다. Java에서는 대표적으로 String, Boolean, Integer, Float, Long 등 이 있습니다. String message = "hello"; message = "bye"; String 의 경우 위와 같이 변수값이 변경하여 불변객체가 아니야? 라고 생각할 수 있는데, message 가 참조하고 있는 주소의 "hello" 값이 "bye"로 변경되는것이 아니라, 새로운 객체를 만들고 그 참조하는 주소에 "bye"라는 값을 할..