다시 웹, 백엔드로 57

컨테이너 가상화 이해

컨테이너 가상화 이해 컨테이너 기술 컨테이너 기술은? 컨테이너는 애플리케이션을 언제든 실행 가능하도록 필요한 모든 요소를 하나의 런타임 환경으로 패키징한 논리적 공간임 운영 시스템을 가상화한 경량의 격리된 프로세스 온프레미스 서버에서 빠르고 효율적으로 배포 가능하며, 확장성 또한 가지고 있음 반복적이고 불편한 작업에 시간을 낭비하지 않고 애플리케이션 개발에 집중할 수 있게 됨 컨테이너 특징 Image를 통해 실행되므로 경량임 언제든 프로세스 수준의 속도로 빠르게 실행(run) 할 수 있고, 한번에 여러 개의 컨테이너를 동시 실행 가능 어떤 환경에서도 동작 가능한 이식성 보유 컨테이너 자체 애플리케이션 환경에 대한 관리만 요구됨, 지속적 서버관리 비용 절감 가능 컨테이너는 DevOps workflow 구성..

외부 설정 - 2

외부 설정 - 2 커맨드 라인 인수 커맨드 라인 인수 (Command line arguments) 는 애플리케이션 실행 시점에 외부 설정값을 main(args) 메서드의 args 파라미터로 전달하는 방법 사용 java -jar app.jar dataA dataB 필요한 데이터를 마지막 위치에 스페이스로 구분해서 전달 dataA, dataB 2개의 문자가 args 에 전달됨 커맨드 라인 인수는 공백 (space)로 구분 CommandLineV1 - arg dataA CommandLineV1 - arg dataB 보통 key=value 형식으로 데이터를 받는것이 편리함 커맨드 라인 인수를 다음과 같이 입력 url=devdb username=dev_user password=dev_pw 커맨드 라인 인수는 ke..

외부 설정 - 1

외부 설정 - 1 OS 환경 변수 OS 환경 변수 (OS environment variables) 는 해당 OS 를 사용하는 모든 프로그램에서 읽을 수 있는 설정 값 사용 범위가 가장 넓음 조회 방법 윈도우 : set mac, 리눅스 : printenv set 실행 결과 애플리케이션에서 OS 환경 변수 값 읽어오기 System.getenv() : OS 전체 환경 변수를 Map으로 조회 System.getenv(key) : 특정 환경변수 값을 String으로 조회 OS 환경 변수는 전역 변수 같은 효과가 있음 해당 애플리케이션을 사용하는 자바 프로그램 안에서만 사용되는 외부 설정값을 사용하고 싶을 때도 있음 자바 시스템 속성 자바 시스템 속성 (Java System properties) 은 실행한 JVM ..

자동 구성 라이브러리 만들기/사용

자동 구성 라이브러리 만들기 저번에 jar를 만들었던 프로젝트를 v2로 변경해서 파일을 추가함 @AutoConfiguration 스프링 부트가 제공하는 자동 구성 기능을 적용할 때 사용하는 어노테이션 @ConditionalOnProperty memory=on 이라는 환경정보가 있을 때 라이브러리를 적용 (스프링빈 등록) 라이브러리를 가지고 있더라도 상황에 따라서 해당 기능을 켜고 끌수 있게 유연한 기능을 제공 제일 중요한 부분! 자동 구성 대상으로 지정해주기 위해 파일을 생성해야함 파일명 주의! 위치 : src/main/resources/META-INF/spring/ (META-INF, spring 폴더 생성해야함) 생성 파일명 : org.springframework.boot.autoconfigure.A..

순수 라이브러리 사용

순수 라이브러리 사용 memory-v1.jar 라이브러리를 project-v1 에 적용 라이브러리 추가 project-v1/libs 폴더 생성 후 memory-v1.jar 복사&붙여넣기 project-v1/build.gradle 에 memory-v1.jar 추가 project-v1/libs 폴더 생성 후 memory-v1.jar 복사&붙여넣기 project-v1/build.gradle 에 memory-v1.jar 추가 후 Reload 라이브러리 설정 추가한 라이브러리를 스프링 빈으로 등록해 동작하도록 해야함 스프링 부트 자동 구성을 사용하지 않았기에 빈을 직접 등록함 실행 서버 실행 라이브러리 내부에 있는 어떤 빈을 등록해야하는지 알아야하고, 직접 등록해야함 복잡한 라이브러리였다면 상당히 힘들 것으로 예..

자동 구성 (Auto Configuration) - 2

@Contitional 특정 상황일 때만 특정 빈들을 등록해서 사용하도록 도와주는 기능 스프링 부트 자동 구성에서 자주 사용됨 matches() 메서드 : true ➡️ 동작 o / false ➡️ 동작 x ConditionContext : 스프링 컨테이너, 환경 정보 AnnotatedTypeMetadata : 어노테이션 메타 정보 Condition 인터페이스를 구현해 자바시스템 속성이 'memory=on' 이라고 되어 있을때 메모리기능이 동작 하도록 구현 MemoryCondition "on" 일 경우 true 반환 MemoryConfig @Conditional 어노테이션 추가 (MemoryCondition.class 부터 먼저 체크함) 인텔리제이 VM 속성 설정 -Dmemory=on / -D 꼭 붙여줘..

자동 구성 (Auto Configuration) - 1

자동 구성 (Auto Configuration) 자동 구성 예제 Member 를 만들고 Jdbc를 연결해 들어간 데이터가 맞는지 테스트 예정 Member 클래스 생성 DbConfig 클래스 생성 JdbcTemplate 을 사용해 회원 데이터를 DB에 보관하고 관리하는 기능 각 기능들을 스프링 빈으로 직접 등록 외부 DB 가 아닌 JVM 내부에서 동작하는 메모리 DB 사용 (H2) Repository 생성 Test 코드 @Transactional 어노테이션을 사용해 트랜잭션 기능 적용 TransactionManager 가 스프링 빈으로 등록되어 있어야 함 테이블 생성, 회원 저장, 조회 후 검증 JdbcTemplate , DataSource , TransactionManager 모두 사용했지만 스프링 빈으..

스프링 부트 스타터와 라이브러리 관리

스프링 부트 스타터와 라이브러리 관리 라이브러리 관리의 어려움 프로젝트를 시작하면 어떤 라이브러리를 사용할 지 고민하고 선택함 각 라이브러리들끼리 호환이 잘되는지 안되는지 알아야해 버전까지 고민해야 함 프로젝트 세팅 시간 ⬆️ 라이브러리 직접 관리 문제점 수 많은 라이브러리를 알아야하고, 버전까지 골라서 선택해야함 호환이 잘 안되는 버전도 있음 스프링 부트 라이브러리 버전 관리 스프링 부트가 라이브러리의 버전을 직접 관리해주고, 원하는 라이브러리만 고르고 버전은 생략해도 됨 스프링 부트가 최적화된 라이브러리 버전을 선택해줌 버전 관리 기능을 사용하려면 io.spring.dependency-management 플러그인을 사용해야 함 dependency-management 버전관리 io.spring.depe..

스프링 부트와 내장 톰캣 - 2

편리한 부트 클래스 만들기 부트 : 시작을 편하게 처리해주는 것 어노테이션 만들기 만든 어노테이션으로 컴포넌트를 스캔 하기 때문에 HelloConfig에 어노테이션은 주석 처리 프로젝트를 실행 시키는 main클래스 생성 (많이 본 형태임) 패키지 위치가 중요 (hello) 만든 어노테이션에 컴포넌트 스캔이 추가되어 해당 어노테이션이 붙은 클래스의 현재 패키지부터 하위 패키지까지 스캔 대상으로 사용 MySpringApplication.run(설정 정보, args) 실행하면 됨 @MySpringBootApplication 어노테이션과 MySpringApplication.run() 메서드만 기억하면 됨 내장 톰캣, 스프링 컨테이너 생성, 디스패처 서블릿, 컴포넌트 스캔까지 한번에 동작함 스프링 부트 프로젝트 ..