본문 바로가기

분류 전체보기146

스프링 빈 이벤트 라이프 사이클 스프링 빈 이벤트 라이프 사이클 스프링 IoC 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 전 콜백 메소드 호출 → 스프링 종료 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해 초기화 시점을 알려주며, 스프링 컨테이너가 종료되기 직전에도 소멸 콜백 메소드를 통해 소멸 시점을 알려준다. 스프링 빈 라이프 사이클을 압축시키기 위해 생성자 주입을 통해 빈 생성과 초기화를 동시에 진행하면 되지 않을까? -> 객체의 생성과 초기화를 분 생성자는 파라미터를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다. 반면에 초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행한다. 따라서 생성자 안에서 무거운 초기.. 2024. 2. 4.
IoC 컨테이너 IoC 컨테이너 객체를 생성하고 관리하고 책임지고 의존성을 관리해주는 컨테이너 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다. 객체관리 주체가 개발자가 아닌 프레임워크이기 때문에 개발자는 로직에 집중 할 수 있다. POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다. POJO : 주로 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object를 지칭한다.Java Bean 객체가 대표적이다.간단하게 getter / setter를 생각하면 될 것 같다. 스프링 컨테이너 (= IoC 컨테이너)의 종류 스프링 컨테이너가 관리하는 객체를 빈(Bean)이라고 하고, 이 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory) 라고 부.. 2024. 2. 4.
IoC(Inversion Of Controll) IoC(Inversion Of Controll) 제어의 역전 -> 제어의 흐름을 바꾼다. 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다. 객체 실행 순서 객체 생성 의존성 객체 주입 - 스스로가 만드는 것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어 놓은 객체를 주입 의존성 객체 메소드 호출 스프링이 모든 의존성 객체를 스프링이 실행될 때 만들어주고 필요한 곳에 주입 시켜주면서 Bean들은 싱글턴 패턴의 특징을 가진다. 제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다. IoC의.. 2024. 2. 4.
DI(Dependency Injection) DI(Dependency Injection) 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입기능 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입 시켜주는 방식 모듈 간의 결합도가 낮아지고 유연성이 높아진다. A 객체에서 B,C객체를 사용(의존) 할 때, A 객체에서 직접 생성하는 것이 아니라 외부(IOC 컨테이너)에서 생성된 B,C 객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용하는 방식 스프링에서는 Bean이라는 객체를 사용하는데, 프로젝트가 실행될 때, Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해 주는데, 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 한다. SOLID 원칙에서 O 에 해당하는 Open Closed Princi.. 2024. 2. 4.
Bean Bean이란? Spring IoC 컨테이너가 관리하는 자바 객체 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를 사용 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 한다. Spring Framework 에서는 Spring Bean 을 얻기 위하여 ApplicationContext.getBean() 와 같은 메소드를 사용하여 Spring 에서 직접 자바 객체를 얻어서 사용 Spring Bean을 Spring IoC Container에 등록하는 방법 자바 어노테이션(Java Annotation)을 사용하는 방법 Bean을 등록하기 위해서는 @Component Annotation을 사용 @Component Annotation이 등.. 2024. 2. 3.
TodoController 테스트 코드 create() 테스트 코드 @Test void create() throws Exception{ // Mock 객체를 사용하여 todoService.add 호출 시 예상된 TodoEntity를 반환하도록 설정 when(this.todoService.add(any(TodoRequest.class))).then((i) -> { TodoRequest request = i.getArgument(0, TodoRequest.class); return new TodoEntity(this.expected.getId(), request.getTitle(), this.expected.getOrder(), this.expected.getCompleted()); }); // 테스트를 위한 TodoRequest 객체 생성 및 .. 2024. 2. 3.
TodoService 테스트 코드 ADD() 테스트 @Test void add() { // Mock 객체를 사용하여 todoRepository.save(any(TodoEntity.class)) 호출 시 첫 번째 인자를 반환하도록 설정 when(this.todoRepository.save(any(TodoEntity.class))).then(AdditionalAnswers.returnsFirstArg()); // 테스트를 위한 TodoRequest 객체 생성 TodoRequest expected = new TodoRequest(); expected.setTitle("Test Title"); // TodoService의 add 메서드 호출 TodoEntity actual = this.todoService.add(expected); // 반환된.. 2024. 2. 3.
데이터의 그룹별 선택 (GROUP BY) 데이터의 그룹별 선택 (GROUP BY) 특정 belong 별로 인원수가 몇명인지 확인 GROUP BY 컬럼명 : 컬럼명의 행 별로 구분 지을 때 사용 SELECT belong, COUNT(*) FROM student GROUP BY belong; 주의 할 점 SELECT name, belong, COUNT(*) FROM student GROUP BY belong; Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.student.name' which is not functionally dependent on columns in GROUP BY clause.. 2024. 2. 3.