Java Stack
[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의 ..
[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 집어 넣어 주는 방식이라서. 단지 외부 상수를 한꺼번에 관리할 수 있어서 깔끔하다? 구성상의 편리함? 뭐 그런 장점임.
[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..
[Spring] DB 관련 : JdbcTemplate
[Spring] DB 관련 : JdbcTemplate
2019.05.28JdbcTemplate [Spring JDBC] Spring JDBC를 이용한 데이터 접근 방식 [Spring JDBC] JdbcTemplate의 기본 사용법 JdbcTemplate query~ 다양한 타입 예제 Spring 기준이라 살짝 더 manual한데, SpringBoot에서는 application.properties에 설정해둔 datasource 설정을 바탕으로 JdbcTemplate을 이미 만들어두기 때문에 그냥 JdbcTemplate을 바로 DI받아서 사용하면 된다. ```java // query 결과가 없는 경우 EmptyResultDataAccessException가 발생한다. DAO 내에서 try-catch해주자. Product product = jdbcTemplate.queryForO..
[Java] Jackson ObjectMapper Serialization
[Java] Jackson ObjectMapper Serialization
2019.05.15ObjectMapper Configuration SpringBoot가 생성 및 제공하는 ObjectMapper Bean / configuration Spring Boot가 default ObjectMapper Bean 생성 할 때 관여하는 클래스는 `` JacksonAutoConfiguration, Jackson2ObjectMapperBuilder``이므로, 이 두 클래스를 참고하면 기본 설정을 알아낼 수 있다. 역할 org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration -> application.yml의 spring.jackson... 설정 적용. org.springframework.http.converter.json.Jacks..
Spring Framework의 IoC 컨테이너 / 빈(Bean) / DI 방식 정리
Spring Framework의 IoC 컨테이너 / 빈(Bean) / DI 방식 정리
2019.05.13spring core의 공식 docs. 웬만큼 궁금한건 여기 다 나와 있다. https://docs.spring.io/spring/docs/5.1.x/spring-framework-reference/core.html Core Technologies Letting qualifier values select against target bean names, within the type-matching candidates, does not require a @Qualifier annotation at the injection point. If there is no other resolution indicator (such as a qualifier or a primary marker), for a non- do..
[Gradle] build, jar 배포, IntelliJ 설정
[Gradle] build, jar 배포, IntelliJ 설정
2019.04.10이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.