Java
-
Netty & Spring boot ( ft.Webflux)Java/No Blocking 2019. 7. 5. 10:34
Netty 를 겉핥기를 해놓고 이제와서 사용해 보는것 같다. 다행이 내 만든 API 서버중 하나를 고가용성의 서버로 만들 니즈가 생겼고 이참에 한번 해보자 ! 라는 생각으로 시작했다. 기존 프로젝트를 고치기로 했다. 기존 프로젝트는 아주 평범한 spring boot 2 기반의 spring mvc 프로젝트이다. 다행이란건 기록하면서 추가하겠지만 mysql 이나 기타 RDMS 와 연결하는 로직은 없고 , 카프카 나 couchbase 에게 데이터를 전송하는 부분만 존재한다. 프로젝트 자체를 maven 기반으로 만들었기 때문에 시작은 pom.xml 에 내용을 추가하는것부터 했다. org.springframework.boot spring-boot-starter-webflux org.springframework.b..
-
Logback 시간과 system 시간이 다를때...Java/Basic 2019. 6. 25. 15:13
당황 스럽다. os 시간을 확인했을땐 kst 기준으로 잘 나오지만 java 기반의 서비스를 돌리면 약 3시간의 시간 차이가 났다 . 그래서 3가지 방식으로 java에서 시간정보를 가져와 보았다. /** * 현재 시간 가져오기 * @return */ public String getNow(String format){ LocalDateTime curDate = LocalDateTime.now(); DateTimeFormatter df = DateTimeFormatter.ofPattern(format); return curDate.format(df).toString(); } /** * 현재 시간 가져오기 * @return */ public String getSystemNow(String format){ long..
-
Netty 훑어보기Java/No Blocking 2019. 5. 9. 12:23
Netty? Netty 는 서버 및 클라이언트이 필요한 네트워크 어플리케이션을 빠르고 쉽게 개발이 가능하게 해주는 NIO 기반의 서버 프레임워크 이다. 기본적으로 Netty는 비동기 이벤트 드리븐 방식의 프레임워크이다. TCP , UDP 을 모두 지원한다. Netty의 기본 구조 이다. 코어 부분을 보면 이벤트 모델을 가지고 있고 쉽게 사용이 가능하도록 해주는 API 를 제공 하고있으며 zero copy capable rich bytebuffer 라는것을 지원하는데 이 특징으로 인해서 GC 를 최소화 하여 고성능을 보장하게 된다. Netty는 비동기식으로 작동하기때문에 적은 스레드로도 많은 요청 처리 가능하여 서버 자원을 효율적으로 사용이 가능하다. Netty를 쓰는이유? 일단 각종 네트워크 코덱을 기본..
-
JVM( GC) 이해하기Java/Basic 2019. 4. 26. 17:00
GC 자바에서 가비지 콜렉터는 가장 중요한 기능중 하나다 자바 GC 만큼 역사와전통(?) 을 자랑하는 것도 없을거 같다. 기본적으로 C 언어계열들과 차이를 들때(예전... 2000년대 초반.. ) 메모리를 C 계열은 직접 프로그래머가 해줘야 하지만 자바는 JVM 이 알아서 해준다 였다. GC가 그 메모리를 알아서 관리 해주는 녀석이다. GC 란? 자바는 앞서 말했듯이 GC 라는 알고리즘을 통하여 자동 관리 하기 때문에 개발자 메모리를 처리하기 위한 로직이 없고 만들어서도 안된다. 가비지 컬렉터는 자바에서 버리는 객체들을 관리 한다. 하나의 객체를 생성할경우 그에 맞게 메모리가 할당되어 메모리를 점유하게 되고 필요하지 않는경우 메모리를 해제 해야만 메모리누수가 없게 된다. 그렇기 때문에 가비지 컬렉터는 객..
-
BigDecimal (feat. 소수점 계산)Java/Basic 2019. 3. 26. 11:45
자바에서 float,double 로 계산을 해본사람들이 있다면 종종 경험하는 것들이 있다. 두가지 타입이 가진 정밀도 문제로 인하여 내가 원하는 값이 아니라 근사치가 나오는경우를 볼수 있다. 소수점 두자리 끼리 더했는데 갑자기 0.4699999999999 이런식으로 뒤에 99999 가 붙는 경우가 생긴다. 소수점 정밀도에 한계가 있어서 값이 유실 되는경우 발생한다. 보통 integer 형태를 많이 사용하기 때문에 잘 느끼지 못하지만 소수점을 복잡하게 계산하다보면 값은 점점 산으로 간다. 그래서 자바에서 제공하는 변수타입(?) 중 정밀하게 표현할수 있는 유일한 방법인 BigDecimal 을 사용해야 한다. BigDecimal 의 단점은 딱 두가지다 . 느리다 , 사용법이 기본 변수타입보단 좀 불편하다. 일..
-
TDD ( Junit4 + Mokito + AssertJ ) 겉핥기 3Java/TDD 2019. 1. 29. 12:16
레거시 시스템에 적용 해보자!! 대충 필요한건 얼추 조사를 다한거 같고 , 원래 목적대로 적용을 해볼까 싶다. 적용전 아주 충격적인 사실을 알았다. Spring boot 를 사용할경우 기본적으로 Junit 4 + Mockito 가 내장 되어있다. Assertj 만 추가해주면 되는것이다. spring boot 에 기본 내장되있는거 보면 spring 진영에서도 tdd 에 대한 관심이 있어보인다. 어쨌든 덕분에 굉장이 더욱더 쉽게 TDD 환경구성이 쉬어졌다. spring boot 를 쓰자... 참좋다! @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc @AutoConfigureWebMvc public class SbmanagerApplica..
-
TDD ( Junit4 + Mokito + AssertJ ) 겉핥기 2Java/TDD 2019. 1. 29. 11:38
TDD 시작 ! 일단 Java( Spring framework) 프로젝트였기 때문에 Junit 을 먼저 찾아 봤다. Junit 은 java 에서만 사용하는건 아닌거 같다. C, C++ Php , Python 다른언어들도 사용가능한 기능을 제공 한다. 생각보다 기능 사용은 어렵지 않다 maven 을 사용한다면 pom.xml 에 dependency 만 추가 하면 된다. junit junit 4.8.2 test org.hamcrest hamcrest-all 1.1 test Spring 에서 사용할땐 어노테이션을 붙여주면 Junit 사용이 가능하다. @Test : 테스트 대상 @BeforeClass : 테스트가 시작전 딱 한번만 수행 @AfterClass : 테스트가 끝나고 딱 한번씩 수행 하도록 함.@Befo..
-
TDD ( Junit4 + Mokito + AssertJ ) 겉핥기 1Java/TDD 2019. 1. 29. 11:10
TDD ( Test Driven Development ) 내경험에 비춰보면 기본적으로 Water fall 방식의 소프트웨어 개발방식은 가장 오래되 가장 많이 사용하고 있는게 현실인것 같다. SI 일들은 하면서 스파이럴 방식이라든가 에자일이라든가 ( 같은 이야기 같기도 하지만... ) 전혀 찾아볼수 없었고 아무래도 SI 란 일의 특성 상 공공기관일들이 대부분이였다. 대기업들과 일한다고해도 별다를바 없었다. 요구사항이 나오고 요구사항을 정의하는 사람들이 정의서를 만들어오면 그 어마 어마한 양의 출력물을 다같이 보면서 기획자들은 밤새 기획문서와 화면 정의서를 만들고 밤새만든 기획서와 정의서를 보며 개발자들은 API 연동서, 테이블정의서 , ERD 등등... 작성 하고 다 작성되면 개발 시작!!! 디아블로2 헬..