Development
[JAVA/Spring] BeanUtils 관련
Spring을 사용하다가, 은근히 종종 Class간 property를 복사해야 할 경우가 있다. 예를 들어, 위와 같은 클래스가 2개가 있다고 치자. 이 때 DB에서 조회한 Person1과 Person2가 있는데, 종종 어떠한 이유로 인하여 이 property를 서로 복사하거나 하는 작업을 해야할 때가 있다. 그럴때마다 원시적인 방법은 이를 그냥 set... set... 하면서 복사하는 방법이 있겠다(매우 비효율적이고 쓸데없이 코드 길이만 길어짐 & 가독성 최악) @Data @AllArgsConstructor @NoArgsConstructor class Person { private String name; private Integer id; private String address; private Str..
[Mac] Jettison, micro sd, spotlight 관련된 주저리
최근에 Mac용 SD카드 어댑터를 구매해서 micro sd카드를 장착해서 사용을 하고 있다 원래 저장공간을 그렇게 크게 잡지 않아서(256GB) 좀 부족한 감이 없지 않아 있었는데 128GB짜리를 달아놓고 만족스럽게 사용을 하고 있었다 근데, 문제는 Mac이 잠자기 모드로 들어갈때의 동작이다. sleep 모드로 들어가게 되면 이 micro sd카드의 동작이 멈추고 다시 인식을 못하는 현상이 발생한다. 그래서 재부팅을 하거나 해서 사용을 해야 하는데, 여간 불편한게 아니다. 이럴때 사용할 수 있는게 여러가지 방법이 있는데, JetDrive의 관리 프로그램을 받아서 설치를 하던지 Jettison(https://www.stclairsoft.com/Jettison/) 을 사용하던지, 아니면 직접 sleep 모드..
[DB] JTDS Mybatis NVarchar 관련 이슈
DB와의 커넥션을 맺기 위해 주로 사용하는 풀링 라이브러리가 여러개 있다. dbcp, jtds, hikari, c3p0 등... 그런데, 한글이나 유니코드 문자열을 저장하려면 MS-SQL의 경우 NVARCHAR() 형으로 저장을 해줘야 하는데 JTDS를 사용한다면 곤욕을 치룰 수 있는 부분이 존재한다. NVARCHAR를 사용할 수 없다는 것인데, mybatis의 xml 매퍼에서 다음과 같이 insert or update를 진행했다고 하면 insert into SOME_TABLE ( [GROUP_NAME] , [REG_ID] ) values ( #{groupName}, #{regId} ) groupName을 nvarchar로 지정했다고 하자. jtds의 커넥션 정보를 아래와 같이 설정한 상태이다. jdbc..
[JAVA/OS] /dev/random 관련 PRNG 오류
현재 Odroid HC2(XU4) 에다가 개인 서버를 구축하고 사용중인데, plex랑.. 뭐 이것저것 올려서 사용중이다 근데, JAVA를 설치하고 개인 프로젝트를 올려서 사용하려고 하니, 처음에는 동작을 잘 하다가 어느 순간이 되면 JVM 자체가 종료되면서 덤프파일이 생겨버린다 ㅡ,ㅡ.. 오류 내용은 다음과 같다 # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x7285dcb8, pid=20327, tid=0x6bf5f460 # # JRE version: OpenJDK Runtime Environment (8.0_171-b11) (build 1.8.0_171-8u171-b11-0ubun..
[JAVA] 랜덤 퍼센트 계산하는 클래스(?)
게임이나 뭐 확률 관련된 개발을 하다보면 뭔가 퍼센트로 어떤 동작이 실행됐냐 안됐냐를 확인하고 싶을때가 있다 input : percentoutput : true / false ex)input : 0.8foutput : true 이런식으로 말이다. 이럴때!! 쓰는 간단한 클래스 public class ChanceSupport { public static boolean percent(double percent) { return percent > ThreadLocalRandom.current().nextDouble(0, 1); } } } double로 받은 percent 변수가 랜덤으로 뽑은 double 변수와 비교해서 그보다 작은지를 확인한다 ex)랜덤으로 뽑은 값 : 0~1퍼센트로 지정한 값 : 0.8 i..
[Spring boot] Websocket connect / disconnect 관련
spring boot로 websocket을 개발하다보면 Session의 Connect / Disconnect 되는 시점을 알고 싶을 때가 있는데(사용자 동시 접속 리스트 관리 차원) 그때는 ChannelInterceptorAdapter를 사용하면 된다. @Component public class StompHandler extends ChannelInterceptorAdapter { private final Logger logger = getLogger(this.getClass()); @Override public void postSend(Message message, MessageChannel channel, boolean sent) { StompHeaderAccessor accessor = StompH..
[Spring Boot] Resource load 관련
spring boot로 개발을 하다보면, ObjectMapper(MessageConverter)를 커스터마이징을 하기 위해 Config를 설정하는 경우가 있다. @Configuration public class CommonConfig extends WebMvcConfigurationSupport { @Override public void configureMessageConverters(List converters) { final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessag..
[Spring Boot] Spring Security maximumSessions 관련
spring boot security(라고 쓰고, spring security 라고 읽을 수도 있다) 에서 동시접속 세션수를 제한하는 기능이 있다. @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .maximumSessions(1) .maxSessionsPreventsLogin(true) } } 위와 같이 @Configuration에 @EnableWebSecurity 어노테이션을 붙인 뒤, WebSec..
FlatBuffers 빌드 자동 구성
Flatbuffer 빌드 자동화 https://github.com/davidmoten/flatbuffers 를 사용하자빌드할 때 자동으로 flatbuffer executable 파일을 생성해줌과 동시에 해당 executable을 실행시켜서 메세지를 클래스로 변환을 자동화profile에 따라 OS별 다른 executable을 실행하도록 구성OS는 크게 세가지(Unix, Linux, Windows)로 구분되며 각 실행시킬 수 있는 파일이 다르다.Unix(Mac)의 경우 unix의 CMake로 빌드를 해야 하며Linux의 경우는 Make로 빌드Windows는 release 되는 exe 로 빌드해야 함maven plugins를 이용해서 플랫버퍼 컴파일러를 컴파일지정한 path에 해당 executable 파일을 ..
Netty 통신 서버 개발 관련 주저리
Netty? Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. netty는 JAVA 진영의 Transport Layer에서 가장 유명한(?) 프레임워크이다. TCP 뿐만 아니라 HTTP, UDP 등 사실상 byte를 송/수신하는데에 두루두루 쓰이고 있는 상황이다. 수 많은 프레임워크들이 클러스터링 구성을 하거나 할 때 내부 통신(inner-communication)을 하는 프레임워크로 netty를 주로 사용하고 있다. 내부 구현은 JAVA NIO로 되어 있으며, 플랫폼에 따라 Epoll(..