문제 상황study 엔티티에 studyStatus 속성에 디폴트 값으로 TODO 로 설정하려고 아래와 같이 설정해주었다 @ColumnDefault("TODO") @Enumerated(EnumType.STRING) private StudyStatus studyStatus = StudyStatus.TODO; //강의 상태 근데 아래와 같은 오류 발생Error executing DDL "create table study (likes integer default 0, progress integer default 0, study_id integer not null auto_increment, study_order integer, user_id integer, create_at datetime(6)..
분류 전체보기
@ComponetScan컴포넌트 스캔 실습 코드 AppConfig에서 `@Bean`으로 모두 등록해주었다. 빈으로 등록해야한게 수백만개가 된다면 일일이 등록하기 너무 귀찮고, 설정 정보도 커지게 된다.`@ComponetScan` 을 설정 정보에 붙여주면 된다.AutoAppConfig파일 구조는 다음과 같다프로젝트 최상단에 AutoappConfig.java가 있으므로 프로젝트에서 컴포넌트로 등록해준 것을 다 빈으로 등록한다.@Configuration//@ComponentScan: 스프링 빈을 다 끌어다가 자동으로 스프링 빈으로 끌어올리는..@ComponentScan( //스프링 빈 등록에서 제외할 것 excludeFilters = @ComponentScan.Filter(type =..
싱글톤 패턴애플리케이션을 개발하면 여러 고객이 동시에 요청을 보내게 된다.스프링 없이 AppConfig를 사용해서 컨테이너를 생성하게 되면 매 요청마다 객체를 생성하게 된다.고객 트래픽이 초당 100이 나오면 초당 100 개 객체가 생성되고 소멸된다. -> 메모리 낭비싱글톤 패턴을 적용한 코드는 아래와 같다.public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. private static final SingletonService instance = new SingletonService(); //2. public으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용한다. public static SingletonS..
스프링 컨테이너 생성자바 설정 클래스를 기반으로 스프링 컨테이너 생성할 수 있다.new AnnotationConfigApplicationContext(AppConfig.class);AnnotationConfigApplicationContext는 ApplicatinContext 인터페이스의 구현체이다.AppConfig.class 에 있는 구성 정보를 활용해서 컨테이너 생성 빈 이름빈 이름은 메서드 이름을 사용아래와 같이 빈 이름은 직접 부여할 수도 있다.@Bean(name="memberService2") 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다.자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다. 스프링 빈 조회 - 상속 관계부모 타입으로 조회하면..
제어의 역전 IoC (Inversion of Control)AppConfig에서 구현체를 생성하고 주입해주는 역할을 한다.-> 프로그램의 제어의 흐름은 AppConfig가 가져간다.OrderServiceIml 은 필요한 인터페이스들을 호출하지만 어떤 구현객체가 실행될지 모른다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다.해당 포스팅은 프레임워크와 라이브러리를 비교하며 제어의 역전을 설명하고 있다. 의존관계 주입 DI (Dependency Injection)의존관계는 정적 클래스 의존 관계와, 런타임에 결정되는 동적 객체(인스턴스) 의존관계 둘을 분리해서 생각해야한다.해당 포스팅에서 DI 에 대해 설명하고 있다.정적 클래스 의존 관계클래스..
AWS 구조 3계층: Region -> AZ -> IDCRegion전 세계에 존재 (국가단위) = 물리적으로, AZ (Availability Zone) 의 집합대부분의 AWS 서비스들은 특정 리전에서 제공된다. (Region-scoped, 리전 서비스 라고 부른다)AZ(Availabilty Zone)한 국가 내 지역별로 설치되어있는 IDC(Internet Data Center) 의 집합시드니 Region (ap-southeast-2) 의 3개의 AZ(Availability Zone)로 구성ap-southeast-2a/2b/2c: 이렇게 Region 뒤에 넘버링이 붙는다.Multi AZ 실무에서 왜 필요한가? 가용성한쪽의 AZ화재라던가 네트워크 이슈 등이 발생했을 시, 다른 한쪽의 AZ로 커버하기 위함카카..
클라우드 컴퓨팅 모델IaaS (Infrastructure as a Service)클라우드를 통해 컴퓨팅, 스토리지, 네트워킹, 가상화와 같은 주문형 인프라 리소스를 제공사용자가 자체 데이터 센터 인프라를 관리, 유지 관리 또는 업데이트할 필요가 없지만, OS, 미들웨어, 가상머신, 앱 또는 데이터를 책임진다.AWS EC2 서버를 생각하면 된다 -> AWS AMI(OS이미지) 선택을 해야 서버 구성 가능클라우스 서버시가 제공: 네트워크, 서버개발자가 직접 구축: OS 및 런터임 구성, 어플리케이션 구동AWS EC2 서버: AWS AMI(OS이미지) 선택을 해야 서버 구성 가능 PasS (Platform as a Service)클라우드를 통해 애플리케이션을 개발하는 데 필요한 모든 하드웨어 및 소프트웨어 리..
역할과 구현 분리역할과 구현을 분리해서 자유롭게 구현 객체를 조립할 수 있도록 설계한 클래스 다이어그램회원을 메모리에서 조회하고, 정액 할인 정책(고정 금액)을 지원해도 주문 서비스를 변경하지 않아도 된다. public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = newMemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int item..
왜 Github Action?CI/CD 툴로 유명한 건 Github Action 혹은 Jenkins 가 있는데, Github Action 사용이유는 Jenkins는 Jenkins 위한 서버를 우리가 따로 구축해야하는데 Github Action은 Github 가 공짜로 제공한다.또한 소스코드 중앙 관리를 위해 Github Repository 를 쓰는 데 Github Action 과 호환성이 좋다. GitHub Actions를 사용하면 자동으로 코드 저장소에서 어떤 이벤드(event) 가 발생했을 때, 특정 작업이 일어나게 하거나, 주기적으로 어떤 작업들을 반복해서 실행시킬 수도 있다.테스트: 누군가가 코드 저장소에 Pull Request 를 생성하게 되면, Github Action을 통해 해당 코드 변경..