전체 글
[Java] Enum to Json / Enum to Object
2020.04.27 : Languages & Frameworks/JavaEnumConstant 하나를 `` {fieldName:fieldValue}`` 형식으로 매핑하고 싶은 경우가 있다 ( 주로 뷰로 전달해야 할 때. ) 기본적으로 jackson의 ObjectMapper는 serialize/deserialize 할 때 Enum 코드만 내려주도록 되어 있다. 즉, ``java PaymentCode.CARD``를 변환하면 ``java "CARD"``가 된다. ``java {code=1, koName="카드", enName="card"}`` 형태로 내려주려면, 뭔가 해줘야 한다 방법 1 ) Jackson / ObjectMapper를 사용하고 싶은 경우 방법 1-1 ) @JsonFormat.Shape.OBJECT key:value 쌍을 내려주고 싶은 경우를 대비해 jackson은..
React
2020.04.13 : Languages & Frameworks/JSgithub.com/umbum/react-basic-hooks/blob/master/docs/README.md FE react 패키지 목록 React component https://ko.reactjs.org/docs/hello-world.html props를 전달 받아 React Element를 반환하는 function 혹은 class state라는 내부 상태를 가질 수 있음 props는 react component의 파라미터, state는 react component의 필드라고 생각하면 됨. react state 관리 https://ko.reactjs.org/docs/react-component.html ``js this.state``를 직접 변경하면 안 됩니다. 왜냐하면 이후 호출되는 ``js se..
RestTemplate은 어떻게 response Object를 DataType <T>로 변환하는가
2020.03.27 : Languages & Frameworks/Spring원래 그 데이터 타입으로는 캐스팅 가능 ```kt @Test fun `테스트`() { val obj: Object = Coffee("id", "name") as Object val coffee: Coffee = obj as Coffee // 이건 원래 그 데이터가 Coffee라서 가능 val obj2: Object = Object() val coffee2: Coffee = obj2 as Coffee // 이건 불가능. id 속성이랑 name 속성이 없으니까 당연 불가능하다 } ``` RestTemplate의 response Object -> T type casting 과정 RestTemplate도 내부적으로는 `` (T)`` 캐스팅을 이용하게 되는데 ``kt extractData()``에서 비검사 형변환..
Promise / Future에 대한 개념 정리
2020.03.20 : Coding Note/CodingKnowledgePromise / Future란? `` Future``는 미래에 실행이 완료될 것으로 예상되는 객체를 의미한다. 따라서 아직 실행되지 않은 경우나, 실행 중이지만 아직 완료되지 않은 경우를 포함하는 개념임. Future 객체에 요청한 값이 들어오기를 기다리는 동안 다른 연산을 수행할 수 있다. `` Promise`` 기본적으로 Future와 비슷하지만, Future는 외부에서 완료된 결과가 들어오기만 하므로 read-only, Promise는 강제로 내가 complete 할 수 있는 메서드를 제공한다는 차이점이 있다. (그래서 completable) 자바에서 `` Promise == CompletableFuture`` `` .complete()`` 라는 메서드를 제공하고 있음. https://stacko..
[Spring] resources 경로 문제
2020.03.18 : Languages & Frameworks/Java*** Spring에 대한 내용과 Jar에 대한 내용이 섞여있어서... 적당히 분리해서 이해해야 함. resources 이하에 있는 파일들(.yml, .properties, 인증서 등)은 컴파일 타임에 CLASS_PATH로 이동하여 함께 포함되어 빌드된다. spring의 경우 target/classes에 위치. jar로 컴파일 하도록 했으면 .jar에 포함된다. 그래서 리소스를 ClassPath 사용해서 제대로 불러왔다면 `` build/resources``를 통째로 날려도 잘 실행 된다. yml 등은 알아서 jar 내에 있는 것을 사용한다. 다만 소스코드 내에서 ClassPath를 쓰지 않고 그냥 File에 접근하게 되면, 실제 파일시스템에 있는 해당 경로로 가서 해당 파일이 있는지를 찾는다. 이 때 ..
Netty
2020.03.12 : Languages & Frameworks/Java-asynchttps://github.com/netty/netty/wiki/User-guide-for-4.x https://netty.io/wiki/user-guide-for-4.x.html 공식 docs가 최고야! Netty가 무엇인가? Netty is an asynchronous event-driven network application framework. Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming s..
redis
2020.03.10 : Data Store기본 포트는 6379 Java Redis Client는 다음 두 가지 Jedis Lettuce SpringBoot 2.0부터 lettuce가 기본 Client Lettuce is a fully non-blocking Redis client built with netty providing Reactive, Asynchronous and Synchronous Data Access . Redis의 LRU eviction docs https://github.com/lettuce-io/lettuce-core/wiki/Connection-Pooling default expire time은 없다. 그래서 웬만하면 설정해 주는 것이 좋다. Redis command ( api ) java RedisTemplate api..
맥북 <> 안드로이드 간 무선 파일 전송
2020.03.10 : 후기/기타 후기Catalina 10.15.3 Mac -> Android 파일 전송 공유 폴더 열어놨으면 이거 써도 되고 그냥 맥에 파이썬 등으로 간단한 웹서버 열어서 다운로드 받아도 된다 이건 별로 문제가 안되는데, 반대 방향이 문제. Android -> Mac 으로 파일 전송 "디바이스로 보내기" (SmartThings) 파일이 임시로 삼성 클라우드에 업로드 된 후에 디바이스로 전송되기 때문에 비추. 한 번에 1GB, 하루에 2GB까지만 공유 가능 "블루투스" 느려서 별로 "Wi-Fi 다이렉트" MacOS는 지원 안한다 ㅡㅡ... "SideSync" -> "Samsung Flow"로 바뀌면서 Mac은 더 이상 지원하지 않는다. 그렇다고 서드파티 공유 어플을 폰에 설치하자니, 폰 저장소를 웹서버로 터트리는 방식이라서 ..
[tomcat] 톰캣, jvm 실행 인자
2020.03.05 : DevOps & Servertomcat이 하는 일? = Servlet Container Java Servlet 이란 자바에는 요청을 받아서 처리하는 일을 담당하는, servlet이라는 actor가 있음. 요청을 받으면 서블릿은 자기가 알아서 실행되는게 아니라 서블릿을 실행하는 주체가 따로 있다. 이게 바로 서블릿 컨테이너. 즉, 요청을 받으면 서블릿을 해당 요청을 파라미터로 실행해주는게 서블릿 컨테이너이고, tomcat이 바로 서블릿 컨테이너다. tomcat log tomcat 로그에 찍히는 log는 여러 스레드가 동시에 기록하기 때문에, 한 세션의 요청이 연속해서 바로 뒤이은 로그에 찍혀있지 않을 수 있다. 그래서 로그를 추적하기 위해 exec-* 번호를 같이 기록해 주는데, 이는 스레드 번호를 의미한다. 로그는 이 exec-*..
[Spring] DB 관련 : Mybatis
2020.03.04 : Languages & Frameworks/SpringMybatis가 쿼리를 처리하는 방식? 스프링에서는 DB 커넥션을 어떻게 처리하는가? 쿼리 하나 날릴 때 마다 Connection을 맺고 끊는건 비효율적이므로, Connection Pool을 구성하여 Connection을 생성해두고, DB를 사용해야 할 때 Pool에서 커넥션을 빌려 쓰고 반납하게 되어 있다. Spring에서 제공하는 Connection Pool 인터페이스가 바로 `` DataSource`` 각 driver vendor들은 자사 규격에 맞게 `` DataSource`` 인터페이스를 구현해서 제공하고 있음!(커넥션 풀 구현체) ojdbc의 `` OracleDataSource`` jdbc의 `` ~~DataSource`` 각 벤더가 만들어 제공하는게 맞는게, Connection object를..
[Spring] profile로 beta, real 빌드 구분하기
2020.03.03 : Languages & Frameworks/Spring[Spring] 외부 상수 넣어주기 Spring profile VS Gradle(Maven) profile Spring profile? :: @Profile() Spring profile은 빌드 결과물 내에서 스프링이 어떤 profile을 사용할지 선택하는 것 런타임 프로파일 설정 Gradle(Maven) profile? :: .properties, .yml 빌드 시 어떤 profile을 리소스에 포함 시킬지 선택하는 것 빌드타임 프로파일 설정 Maven profile ----- 즉, Gradle profile이 더 큰 파일 개념이고, 선택한 파일 이외는 jar에 포함하지 않을 수 있음. Spring profile의 장점은 아예 빈 자체를 특정 프로파일에만 활성화 하는 등 좀 더 유연하게 사용할 수 있다..
[Effective Java] 12장 직렬화
2020.02.28 : Languages & Frameworks/Java아이템 85. 자바 직렬화의 대안을 찾으라 : JSON, protobuf 신뢰할 수 없는 스트림을 역직렬화하면 원격 코드 실행(RCE) 취약점으로 이어질 수 있다. 샌프란시스코 교통국이 공격당했던게 gadget들 연결해서 gadget chain을 만드는 테크닉을 썼었다고 하는데, 아마 ROP였을 듯? 생각해보면 자바에서도 ROP가 안될거 없지. 실행흐름 돌리는 시작은 역직렬화로 한거고... 아무튼 그래서, JSON이나 protobuf를 사용하자! 아이템 86. Serializable을 구현할지는 신중히 결정하라 Serializable을 구현하여 릴리즈한 뒤에는 수정하기 어렵다. 수정할거면 버전 호환성을 고려해야 함. 모든 직렬화된 클래스는 `` serialVersionUID``을 부여받는다. ``kt s..