Java9 에서 List, Set, Map 인터페이스에 불변 인스턴스를 생성할 수 있는 새로운 팩토리 메소드가 추가되었습니다.(별로 환영하고 싶지 않은) 이 팩토리 메소드는 복잡하지 않고 간결한 방법으로 collection 을 생성하기 위한 편리한 팩토리 메소드 입니다.과거Set set = new HashSet(); set.add("A"); set.add("B"); set.add("C"); set = Collections.unmodifiableSet(set); List list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); list = Collections.unmodifiableList(list); Map map = new HashMap..
출처 - https://www.tutorialspoint.com/java9/java9_module_system.htmJava 9 에서는 모듈이라고 불리는 새로운 프로그래밍 요소가 소개되었습니다. 모듈은 코드와 데이터와 구분 짓기 위한 자체 이름을 갖고 있는 self-describing 집합입니다.Feature모듈 요소들과 함께 다음 사항들이 강화되었습니다.- 링크 시간이라는 새로운 선택적 단계가 도입되었습니다. 이 단계는 컴파일 시간과 실행 시간 사이에 있으며 이 단계동안 jlink 도구를 사용하여 일련의 모듈을 어셈블 및 최적화하여 사용자 정의 런타임 이미지를 만들 수 있습니다.- javac, jlink, java 는 추가적인 옵션으로 특정 모듈의 경로를 설정하고 경로를 통해 모듈의 정의를 찾습니다.-..
PostgreSQL 의 timezone 을 보다가 jvm의 timezone 까지 확인할 일이 생겼다. 서버를 처음 구축할 당시 아무 생각없이 timezone 을 .profile 에TZ='Asia/Seoul'; export TZ설정을 추가하여 사용하고 있었는데 java 의 로그시간이 이상한 것을 보고 어느 부분을 수정해 주어야 하는지 찾아 보았다. 우선 date 명령어를 통해서 현재 시간이 맞지 않는 것을 확인했고 이것을 고치면 jvm 도 같이 고쳐질 것이라고 생각했다.1. /etc/localtime 은 어떤 시간대를 사용할 지 정해주는 파일로 사용해야 하는 파일은 /usr/share/zoneinfo/ 밑에 있는 폴더 안의 파일들을 사용하면 되는데 서울은 /usr/share/zoneinfo/Asia/Seo..
이 글은 tutorials point(https://www.tutorialspoint.com/java8)를 번역한 글입니다.JAVA 8 은 Java 프로그래밍 언어 개발의 주요한 릴리즈 버전으로 2014년 3월 18일에 초기 버전이 나왔습니다. Java 8 출시와 함께 Java 는 함수형 프로그래밍 지원, 새로운 Javascript engine, date time 을 정교하게 다루기 위한 APIs, 새로운 스트림 API 등을 제공하게 되었습니다.새로운 특징Lambda expression - 함수 처리 능력 Method references - 함수를 직접 호출하지 않고 이름으로 함수를 참조. 파라미터로 함수를 사용 Default method - interface 는 기본적인 method 의 구현체를 가질 ..
스타트업 개발 초기에는 로컬 개발환경을 도커를 사용하지 않고 간단한 임시 환경에서 개발을 시작 했다. 시간이 지나서 하나의 서비스를 오픈한 후 부터는 DB 사용부터 (개발DB 도 모두 같이 사용하기 때문에 맘데로 사용할 수 없기 때문에) 서비스를 올리고 테스트 하는 환경이 필요한 순간이 온다. 그래서 도커를 사용하여 간단한 로컬개발환경을 구축해 보려고 한다. 로컬개발환경을 도커로 만드는 것은 만들어야 하는 이유가 더 중요하기 때문에 아주 간단하고 빠르게 설치하고 지나갈 것이다. 1. Dockermac에서 docker 설치는 docker 사이트를 참고해서 다운받고 설치하면 된다. https://docs.docker.com/docker-for-mac/install/ docker 를 실행 시키고 우분투 이미지..
이번 프로젝트에서 Transactional 을 사용하면서 우연히 알게 된 사실이 있다. 환경은 Spring + MyBatis + PostgreSQL 이고 MyBatis 설정은 아래와 같다.@Configuration @MapperScan(basePackages = "com.westudy.api.*", sqlSessionFactoryRef = "Mybatis_PostgreSQL_SqlSessionFactory", sqlSessionTemplateRef = "Mybatis_PostgreSQL_SqlSessionTemplate") @ConfigurationProperties("spring.datasource") @EnableTransactionManagement public class MyBatisConfig ..
앱을 만들면서 데이터를 가져오는 서버를 만들게 되었다. 처음에는 스프링의 세션을 사용하여 사용자 정보를 저장했지만 간단한 사용자 정보만 필요했기 때문에 JWT(http://bcho.tistory.com/999)를 사용하기로 했다. 스프링에서 적용방법을 찾다 보니 대부분이 OAuth와 같이 사용하는 방법이 대부분 xml 을 사용한 설명만 있었다. 그래서 annotation 을 사용한 JWT 설정하는 방법을 남긴다. (참고 사이트 : https://www.toptal.com/java/rest-security-with-jwt-spring-security-and-java)1. 요청을 가로챌 수 있는 filter 를 만든다.@Slf4j public class JwtAuthenticationFilter extend..
객체지향은 개발을 하기 위한 강력한 개념이다. 하지만 객체지향을 익히고 사용하기 까지는 많은 노력과 시간이 필요하다. 나도 그랬지만 적당히 중복을 제거하고 공통을 묶어서 개발하는 것은 객체지향를 조금 흉내내려고 하는 것에 불과하다고 생각한다. 객체지향을 구현하기 위해서는 지식과 생각의 전환이 필요하고 이 글이 조금이나마 도움이 됐으면 한다.객체지향의 중요한 개념객체란 실세계를 반영한다. 어디서나 나오는 말이지만 객체지향의 핵심이 실세계의 사물을 사용하는 방법을 개발에도 똑같이 적용하여 사람에게 더 친숙하게 하기 위함이라고 생각한다면 정말 중요한 말이다. 사실 이것만으로도 대부분의 객체지향 이론들이 설명된다. 실세계에서는 사물간의 decoupling 이 당연하게 이루어지고 있고 encapsulation 또..