전체 글
[Java 8] Stream 정렬 예제 메모
import lombok.Getter; import lombok.ToString; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * MyMockTest class. * * Describe here. * * * * History: * damian.lee, 0.0.1, Created at 2022.08.22 * * * @author : damian * @version : 0.0.1 */ public clas..
Spring Boot Java 8에서 11로 업그레이드
1. 로컬 PC 자바 세팅 (윈도우는 환경변수 바꿔줘야 함) 2. 인텔리제이 Gradle JVM 변경 3. build.gradle 자바 버전 변경 sourceCompatibility = '11' targetCompatibility = '11' 4. Project Structure에서 SDK 설정 변경
[Git] 브랜치 Merge와 커밋 히스토리 관리 (squash, rebase)
개요 Git Flow 전략을 적용하여 여러 브랜치를 관리하려면 Merge의 옵션을 적절하게 사용하고, 커밋을 최대한 간단하게 하여 알아보기 쉽도록 하는 것이 중요하다. 커밋이 여러 개로 쪼개진다면 돌아갈 수 있는 분기가 많아지지만, 그 브랜치가 다른 브랜치에 Merge되고 관리되어야 한다면 쪼개진만큼 어느 시점으로 돌아가야 할지, 어떤 작업을 했는지 알아보기가 어렵다. Merge란? 어떤 브랜치를 다른 브랜치에 반영하는 것 커밋 히스토리 관리의 필요성 어떤 작업을 했는지 명확하게 함 일관된 규칙으로 메시지를 작성 Rollback 상황에서 대처하기 쉬움 Merge, Squash, Rebase 1. Merge 브랜치를 합치기 위한 명령어 2. Squash 브랜치를 Merge할 때 사용할 수 있는 옵션 3. ..
배포 방식(롤링, 블루-그린, 카나리아)
1. Rolling 서버를 한 대씩 구 버전에서 새 버전으로 교체해가는 전략 서비스 중인 서버 한 대를 제외시키고 그 자리에 새 버전의 서버를 추가 구 버전에서 새 버전으로 트래픽을 점진적으로 전환 서버 수의 제약이 있을 경우 유용하나 배포 중 인스턴스의 수가 감소 되므로 서버 처리 용량을 미리 고려해야 함 2. Blue/Green Blue/Green 배포는 구 버전에서 새 버전으로 일제히 전환하는 전략 구 버전의 서버와 새 버전의 서버들을 동시에 나란히 구성하고 배포 시점이 되면 트래픽을 일제히 전환 하나의 버전만 프로덕션 되므로 버전 관리 문제를 방지할 수 있고, 또한 빠른 롤백이 가능 또 다른 장점으로 운영 환경에 영향을 주지 않고 실제 서비스 환경으로 새 버전 테스트가 가능 예를 들어 구 버전과 ..
컨테이너 개발 환경의 등장 배경과 쿠버네티스
등장 배경 개발 & 배포 환경의 변화 1. 전통적인 배포 시대(Traditional Deployment) 물리 서버 위에서 애플리케이션을 운영 물리 서버에서는 애플리케이션들 사이에 리소스 경계를 정의할 방법이 없었고, 이로 인해 리소스 할당 문제가 발생 물리 서버 하나에서 여러 애플리케이션을 실행하면, 리소스 대부분을 차지하는 애플리케이션 때문에 다른 애플리케이션 성능이 저하 애플리케이션 마다 서로 다른 물리 서버를 사용하는 방법도 있지만 많은 비용이 발생함 2. 가상화된 배포 시대 가상화의 도입 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공 물리 서버에..
[完] 값 타입
값 타입 값 타입 값 타입의 종류 기본 값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 int, Integer, String 등 단순히 값으로 사용하는 자바 기본 타입 식별자가 없고 값만 있으므로 변경 시 추적 불가 값 타입 분류 1. 기본 값 타입 String name, int age ... 와 같은 것들 생명주기를 엔티티에 의존 값 타입은 공유하면 안된다. - 어떤 객체의 값을 바꿨는데 다른 객체의 값이 바뀌면 안된다. 값은 항상 복사된다(Call by value) - 예외로 Wrapper 클래스는 특수한 클래스로 공유 가능 2. 임베..
프록시와 연관관계 관리
프록시와 연관관계 관리 프록시 프록시를 사용하는 이유는? 엔티티를 조회할 때 연관된 엔티티가 항상 사용되는 것은 아니다. EX) Member의 name만 알고 싶은데 Member 엔티티와 연관된 Team 엔티티를 가져올 필요가 없음 JPA는 엔티티가 실제 사용될 때까지 DB 조회를 지연하는 방법을 제공한다. (지연로딩) 프록시 기초 EntityManager.getReference()를 호출하면, JPA는 DB를 조회하지 않고 실제 엔티티 객체를 생성하지 않는다. 대신, DB 접근을 위임한 프록시 객체를 반환한다. 프록시 객체는 실제 객체에 대한 참조를 보관하고, 프록시 객체의 메소드를 호출 했을 때 실제 객체의 메소드를 호출한다. 프록시 특징 프록시 객체는 처음 사용할 때 한 번만 초기화된다. 프록시 객..
[Spring] POI 라이브러리를 이용한 Excel 생성
POI 라이브러리를 이용한 Excel 생성 마케팅팀, 운영팀에서 요청하는 데이터를 제공하기 위해 MySql Workbench의 데이터 내보내기 기능을 사용하고 있었는데, 매번 쿼리를 입력하고 엑셀로 추출하는 번거로움이 있기 때문에 이를 직접 원하는 기간 등을 입력하고 다운받을 수 있도록 API로 만들게 되었다. 1. 의존성 compile('org.apache.poi:poi-ooxml:3.16') // .xlsx compile('org.apache.poi:poi:3.16') // .xls Excel 파일을 생성하기 위해 POI 라이브러리를 추가합니다. 2. Code 2.1 ReportService.java package com.kingpiggy.study.service; import com.kingpigg..
Multi module 프로젝트 구성
멀티 모듈 프로젝트란? 한 개의 프로젝트를 여러 모듈로 구성한 프로젝트 얻을 수 있는 장점 하나의 시스템에서 중심 도메인을 모듈로 분리 공통된 코드를 여러 곳에서 참조 가능 여러 프로젝트를 한 프로젝트 안에서 관리할 수 있음 구성 예제 Common 이라는 공통 모듈을 batch 모듈, external-api 모듈, internal-api 모듈 등에서 참조할 수 있다. 따라서 Entity 등 공통적으로 사용되는 부분을 한 곳에서 관리할 수 있게 된다. 주의할 점 공통 모듈은 다른 모든 모듈에게 영향을 끼치므로 리팩토링 하기 어려워지는 단점이 있다. 공통 모듈이 무거워지는 것을 조심해야 한다. 공통 모듈이 가져야 하는 의존성을 고려하자 특정 모듈에선 불필요한 의존성으로 인해 어플리케이션이 무거워 질 수 있다..
[Spring] 인텔리 J에 환경변수, VMware Option 설정
인텔리 J에 환경변수, VMware Option 설정 Develop, Live, Stage, Local 각각의 환경에서 Spring Application을 실행하다 보면, Static Resource Path나 Directory Path가 상이하여 실행 환경에 불편함을 느낄 수 있다. 스프링의 경우, Profile을 통해 각각의 설정을 통해 이에 대응할 수 있다. application.yml 등 스프링에 환경변수를 주입하여 실행하는 경우, Local에서도 적절하게 환경 변수를 주입하는 것이 필요하다. 이때 인텔리 J의 Build and run 설정을 적절히 바꿔 Local에서도 문제 없이 Application을 동일한 환경으로 실행시킬 수 있다. 1. 설정할 값들은? #/bin/bash # Sample ..