전체 글
RestTemplate 사용 시 ResponseType으로 generic 타입 받기 (ParameterizedTypeReference)
RestTemplate 사용 시 ResponseType으로 generic 타입 받기 (ParameterizedTypeReference)
2019.07.11Response를 받을 때 Generic 타입으로 매핑하여 받고 싶을 때가 있다. ```java DefaultResponseWrapper userInfoResponseWrapper = restTemplate.postForObject( userInfoUrl, new UserInfoRequest("MTA1", "HH_SERVICE", encryptedCi), DefaultResponseWrapper.class ); ``` 그러나 `` postForObject()`` 같은 함수는 generic이 들어간 타입을 응답으로 받을 수 없다. 위처럼 작성하면 오류가 발생한다. ParameterizedTypeReference를 사용하면 generic 타입을 응답으로 받을 수 있다. (generic 타입으로 매핑할 수 있..
[Spring] annotation : bean constraints, validation
[Spring] annotation : bean constraints, validation
2019.07.11beanvalidation.org/2.0/spec/#builtinconstraints https://www.baeldung.com/javax-validation @Size, @Past, @Min(1) @Pattern 등 애너테이션이 어떤 제약조건을 가지고 있는지 확인하려면 그냥 애너테이션 소스 확인해보면 된다. 참고로 `` @Email`` 애너테이션은 길이 제한도 겸하고 있다. `` {64}@{255}`` DB에 저장할 때도 VARCHAR2(320)으로 하면 깔끔하다. controller에서 data class 받으면서 한 번에 조건 체크 ```java @AssertTrue(message = "허용된 리스트 목록에 없는 코드") private boolean isInAllowList() { return !..
[Spring] annotation : lombok, builder
[Spring] annotation : lombok, builder
2019.07.10@Data https://projectlombok.org/features/Data ``kt @Data = RequiredArgsConstructor + ToString + EqualsAndHashCode + Getter + Setter`` ``kt lombok.noArgsConstructor.extraPrivate=true`` 이면 private NoArgsConstructor 까지 붙는다. (1.16.22에서는 기본으로 활성화) 단, 필드 final 아닐 때 여기서 `` RequiredArgsConstructor``는 다른 Constructor 애너테이션이나 명시적으로 선언된 Constructor가 없을 때만 붙는다. callSuper를 설정해야 하는 경우 해당 애너테이션과 Data를 함께 써도 된다...
[Java] LocalDateTime : 날짜 시간 처리 관련
[Java] LocalDateTime : 날짜 시간 처리 관련
2019.07.10Date ? Calendar? java.time? 뭘 써야 하나? : LocalDateTime http://tcpschool.com/java/java_time_javaTime https://d2.naver.com/helloworld/645609 LocalDateTime -> String ```java LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) ``` LocalDateTime Json, Spring mapping ```java // spring Controller에서 DATE_FORMAT형식->LocalDate로 받고 싶을 때 @DateTimeFormat(pattern = DATE_FORMAT) private..
RecyclerView의 Adapter와 ViewHolder
RecyclerView의 Adapter와 ViewHolder
2019.07.05MVVM에서는, View를 가지고 있는 ViewHolder나, ViewHolder에 데이터를 넣어주는 Adapter나 둘 다 (V)로 분류한다. ViewHolder데이터가 한 1만건 있다고 치면, 뷰를 1만개나 만드는건 화면에 다 보이지도 않고 비효율적이니까View는 화면에 보일 정도로 조금만 만든 다음에 화면이 이동하면 View에 들어가는 Data만 바꿔주는 식으로 View를 재활용하자는 컨셉. 즉, ViewHolder와 그가 갖고 있는 View 멤버변수는 만들었다 지웠다 하는게 아니라, 그 안에 들어가는 데이터만 바꿔주는 것임.(``kt val``)onBindViewHolder()에서 ViewHolder를 통해서 View에 해당 position의 data를 집어 넣어 주는 식으로 동작한다. Adapt..
MVVM과 Android DataBinding
MVVM과 Android DataBinding
2019.07.04MVVM에서의 가장 큰 특징은 옵저빙 이다. 리액티브 프로그래밍에서 말하는 옵저버 패턴과 같은 의미. View가 ViewModel이 가진 데이터를 옵저빙 하고 있다가 ViewModel의 데이터가 변경되면 자동으로 View도 갱신되는 방식 자동으로 View에 notify가 간다고 생각하면 된다. 그래서 ViewModel은 View에 대한 참조를 가지지 않는다. ViewModel입장에서는 내껏만 바꾸면 다른건 신경 안써도 되는거다. (그리고 이 옵저빙 과정에서 발생하는 View->ViewModel의 의존성을 줄이기 위해 안드로이드 데이터 바인딩을 사용한다. 즉, 데이터 바인딩과 MVVM은 별개의 개념이다.) 즉, MVVM으로 컴포넌트를 분리한다는건 기존처럼 Activity(View)에서 ViewModel의 ..
Node.js란?
Node.js란?
2019.07.02Node.js는 V8 엔진을 사용해 js -> binary로 바꿔주고, 이를 실행하는 "런타임 플랫폼" 이다. (자바의 JRE 처럼) node는 싱글스레드 기반의 이벤트루프를 사용한다. - O "하지만 libuv에서 worker thread 사용하는데?!" 이는 low-level에서 비동기 처리가 불가능한 것을 thread로 wrapping해서 고수준에서는 비동기처럼 보이게끔 하는 것에 가깝다. 다른 언어나 플랫폼에서도 nio 지원 안되는 blocking 함수들 thread로 wrapping하는 경우가 있는데, 이와 비슷하다. 그림에는 나와있지 않지만 해당 플랫폼에서 비동기 처리가 가능한 작업이라면, (e.g., windows의 IOCP를 쓸 수 있다면) 굳이 worker thread 사용할 필요 없으므..
[Android] Gradle 단에서 상수 넣어주기 (외부에서 상수 넣어주기)
[Android] Gradle 단에서 상수 넣어주기 (외부에서 상수 넣어주기)
2019.06.30gradle.properties 에서 build.gradle로 상수 넣어주기. https://github.com/novoda/gradle-build-properties-plugin build.gradle에서 BuildConfig.java로 상수 넣어주기. http://mornbr.blogspot.com/2015/11/androidgradleandroid-buildtypes.html 보안에는 도움이 안됨. 어차피 BuildConfig.java라는 코드를 생성해주고 거기다가 변수 만들어서 String 집어 넣어 주는 방식이라서. 단지 외부 상수를 한꺼번에 관리할 수 있어서 깔끔하다? 구성상의 편리함? 뭐 그런 장점임.
2019 네이버 인턴 면접 준비 & 후기
2019 네이버 인턴 면접 준비 & 후기
2019.06.09이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[Java] Enum
[Java] Enum
2019.06.06[Effective Java] 6장 열거 타입과 애너테이션 [Java] Enum to Json / Enum to Object https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html enum의 장점은? https://medium.com/@nikitashahu/enum-vs-hashmaps-for-storing-constants-204ef4a1a8d7 code navigator의 도움을 받을 수도 있고, 없는 enum value를 잘못 참조했을 경우 compile time에 잡아낼 수도 있다는 장점도 있음. enum의 단점은? code를 찾아내기 위해 복합키를 사용해야 하는 경우 vs DB) 코드테이블을 사용한다면 PK를 복합키로 지정하여 cons..
Spring boot security 로그인 처리
Spring boot security 로그인 처리
2019.06.04spring security에서 "사용자"를 나타내는 인터페이스는 `` UserDetails``가 있음. 기본적으로 이를 구현한 `` User``라는 클래스가 제공되고 별다른 설정 없이 inmemory에 계정을 등록하거나 하는 테스트 용도의 코드에서는 자동으로 스프링에서 `` User`` 클래스를 사용하는 듯. 아무튼 요구사항에 따라 email이라던지.. id라던지 추가적인 정보를 저장해야 할 것 이므로 `` UserDetails``를 implements한 모델 클래스(Account)로 정의하거나, `` User`` 클래스를 extends한 클래스를 정의해도 된다. `` User`` 클래스를 확장하는 경우 중복 세션 방지 등의 기능을 자동으로 처리해줘서 편리한 부분이 있다. ```java @ToStrin..
[Oracle] 오라클 개요 및 정리
[Oracle] 오라클 개요 및 정리
2019.05.31DBGuide.net 오라클 oracle 장점? 왜 기업에서 오라클을 선호하는가? 성능이 좋고 다양한 옵션이나 기능을 제공한다는 장점도 있긴 하지만, 가장 큰 이유 중 하나는 안정성. 어떤 관점에서 안정성이 좋은가? RAC를 통한 고가용성 => DB 이중화 / 클러스터링 간단히 정리하면, 스토리지와 오라클 인스턴스를 분리해서 인스턴스에 장애가 나더라도 유실 없이 다른 인스턴스에서 곧바로 Active로 서비스 할 수 있다는 것. 타입 관련 팁 숫자 타입은 `` NUMBER``를 쓰는 것이 좋다. `` NUMBER(, )``로, 가변길이 타입이다 문자열은 `` CHAR || VARCHAR2`` 날짜 저장은 `` DATE``를 사용하는 것이 좋다. 삽입할 때 TRUNC()함수로 시분초를 잘라 넣어라. CONS..