개발지식 아카이브/JAVA
-
다중 Datasource 에 연결하는 Spring Batch 를 개발할 때 이슈개발지식 아카이브/JAVA 2022. 12. 27. 23:45
토이 프로젝트로 다중의 데이터 저장소에 연결하는 스프링 배치를 개발하다가, TransactionManager 관련해 트러블 슈팅 후 블로그에 기록으로 남긴다. 다중 DataSoruce에 연결하기 위해서, 코드에 @EnableJpaRepositories를 포함하는 Config 파일을 각각 작성했을 것이다. 각각의 DataSource 를 정의하는 Config 파일이다. @Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "db1EntityManagerFactory", transactionManagerRef = "db1TransactionManager", basePackages = {"com.s..
-
[Java Stream] GroupingBy 를 이용한 그룹화 예시 소개개발지식 아카이브/JAVA 2021. 2. 15. 08:55
Introduction Java 8에서 처음 도입된 스트림은 데이터 집합을 처리할 수 있는 반복자 역할을 수행한다. 스트림의 연산은 filter, map과 같이 중간 연산자와, collect와 같은 최종 연산자로 구분된다. 이 포스팅에서는 최종 연산자 collect 의 Collector 인터페이스를 구현하여 그룹화하는 다양한 방법에 대해 다룬다. 그룹화 Stream GroupingBy 를 이용하면 데이터 집합을 하나 이상의 특성으로 분류, 그룹화하는 연산을 쉽게 수행할 수 있다. 아래와 같은 데이터 셋을 가지고 그룹화를 연습해보자. 나라 도시 거주자 이름 한국 서울 홍길동 한국 서울 임영웅 한국 부산 김태희 중국 베이징 왕서방 미국 보스턴 미셸 미국 엘에이 마이클 미국 엘에이 케이트 이 데이터를 담을 클..
-
[Json] gson, Jackson 컨버터의 null 필드 처리 방법개발지식 아카이브/JAVA 2020. 10. 31. 13:42
RestTemplate 의 기본 컨버터인 Jackson 컨버터의 null 필드를 처리하는 방법이 요즘 많이 쓰이는 gson 컨버터의 처리 방법과 다르다는 것을 발견하고 포스팅으로 남긴다. dto: Stock(id=1, code=005560, name=JS전선, market=null) 가령 이런 데이터를 가진 dto 를 json 형식으로 변환하고 싶은 상황이다. 이 때 'market' 필드는 null 값을 가진다. log.info("dto: {}", stock); # converting log.info("json by Gson converter: {}", gson.toJson(stock)); log.info("json by Jackson converter: {}", objectMapper.writeValu..
-
[Spring Boot2] 스프링 부트2로 애플리케이션 개발: 환경설정개발지식 아카이브/JAVA 2020. 7. 11. 12:29
목차 인프라 셋업 JDK 14 설치 (By Homebrew) $ brew update $ brew tap adoptopenjdk/openjdk $ brew cask install adoptopenjdk14 $ java -version home brew 사용자는 위와 같이 JDK14 를 설치한다. oracleJdk는 오라클에서 직접 다운로드로 설치만 가능하다. https://www.oracle.com/java/technologies/javase-downloads.html IDE 설치 (IntelliJ) JetBrain 사의 IntelliJ를 추천한다. Spirng Boot와 IntelliJ는 궁합이 좋다. 나는 이 포스팅을 작성하며 ULTIMATE 2020.1.3 버전으로 업그레이드 했다. MySql 설치..
-
[JAVA Collections API] 자료구조 요약: 구조/성능/용도개발지식 아카이브/JAVA 2019. 10. 28. 01:39
개요 이 포스팅에서는 자바 Collections API로 표현되는 자료구조들의 성능에 대해서 이야기하고자 한다. 성능은 시간 복잡도(Time Complexity)를 기준으로 하며, 발생할 수 있는 최대 복잡도를 가리키는 Big-O 노테이션으로 정의한다. 1. 자료 구조 성능 요약 2. 리스트 3. 셋 4. 맵 자료 구조 성능 요약 평균값인 빅-세타-노테이션과 최악의 경우인 빅-오-노테이션을 혼용해 표현하고 있으나 보통은 빅-오-노테이션이 보편적으로 사용된다. 리스트 List 인터페이스는 Collection 인터페이스를 상속한다. 리스트자료 구조는 삽입 순서(Insertion order)가 유지되며, 동기화 미지원(Non synchronized) 이라는 공통점을 가진다. 또한 리스트는 중복 값을 포함할 수..
-
[디자인패턴] 자바 싱글톤 Vs 스프링 싱글톤 패턴의 차이점개발지식 아카이브/JAVA 2019. 9. 28. 14:27
싱글톤 패턴이란 정의 클래스의 오브젝트 개수를 제한시키는 방법론으로, 하나의 클래스당 한 개의 특정 오브젝트만 존재하도록 하는 것이다. 싱글톤 패턴을 구현하여 얻을 수 있는 이점으로는, 불필요한 메모리 누수를 방지한다. 공통된 오브젝트를 사용해야 하는 상황에서 특정한 하나의 오브젝트만 사용하게 해 준다. (예: DBConnectionPool) 자바 싱글톤 패턴 구현방법 1) 생성자를 private으로으로 선언: 외부에서 클래스의 오브젝트를 생성할 수 없게 된다. 2) 참조는 static으로 정의: 어느 영역에서든 접근이 가능하도록 된다 이렇게 하면 클래스가 classloader에 의해 단 한번만 인스턴스화 되는 것을 이용하여 구현한다. Thread Safety를 보장하는 구현법 1. getter 메소드의..
-
[JAVA 메모리 트러블 슈팅] 콘솔에서 JVM Heap 메모리 추적하기 : jstat, jmap개발지식 아카이브/JAVA 2019. 9. 10. 20:59
자바와 힙 메모리 관리 자바는 기본적으로 자바가상머신, JVM위에서 구동한다. 많은 프로그래밍 언어중에서 자바가 특히 편리한 이유중 하나로 JVM의 GC (Garbage collecter) 를 들 수 있다. 할당되었던 Heap 메모리가 코드에서 더 이상 사용하지 않게 되면, GC는 이 힙 메모리를 자동으로 개간하여 다시 재사용이 가능한 메모리로 돌려보내준다. GC가 힙 메모리를 개간하는 속도보다 사용되는 속도가 더 빠르면, 그 때는 에러가 발생한다. 메모리 에러가 발생할 때 대처법 OutOfMemoryError // 힙 메모리가 부족할 때 발생하는 메모리 에러 StackOverflowError // 스택 메모리가 부족할 때 발생하는 메모리 에러 1) 일단 코드가 비효율적으로 불필요한 메모리를 소모하고 있..
-
[개발자 면접 질문] JAVA 기초 질문 모음 Q11~20 (2편)개발지식 아카이브/JAVA 2019. 7. 5. 23:39
개요 개발 면접에서 단골로 나오는 자바 질문 2편입니다. 1편은 이전 포스팅을 확인하세요. 2019/06/19 - [[IT] 공부하는 개발자/JAVA] - [개발자 면접 질문] JAVA 기초 질문 모음 10개 [개발자 면접 질문] JAVA 기초 질문 모음 10개 개요 개발 면접에서 단골로 나오는 자바 질문들 10가지를 뽑아 정리했습니다. 질문 원본은 링크를 참조하세요. 답변은 실제 면접처럼 서술형으로 작성하였습니다. Q1. 자바의 특징 Q2. 객체지향 언어의 특.. gem1n1.tistory.com 목차 Q11. 배열과 리스트 (Array and List) Q12. 스트링, 스트링버퍼, 스트링 빌더 (String, StringBuffer and StringBuilder) Q13. 기본 접근제어자(Defa..