spring/스프링 핵심 원리 강의 내용 정리
-
영속성 컨텍스트spring/스프링 핵심 원리 강의 내용 정리 2024. 1. 23. 23:02
영속성 (persistence) : 영속성, 지속성 객체의 관점으로 해석해 보자면 '객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할 수 있는 객체의 성질'을 의미한다. - 영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로쉽게 관리하기 위해 만들어진 공간이다. EntityManager - 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요하다. - EntityManager는 이름 그대로 Entity를 관리하는 관리자이다. - 개발자들은 EntityManager를 사용해서 Entity를 저장하고 조회하고 수정하고 삭제할 수 있다. - EntityManager는 EntityManagerFactory를 ..
-
총 정리spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 21:40
목차 1. 객체 지향 설계와 스프링 2. 스프링 핵심 원리 이해1 - 예제 만들기 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 4. 스프링 컨테이너와 스프링 빈 5. 싱글톤 컨테이너 6. 컴포넌트 스캔 7. 의존관계 자동 주입 8. 빈 생명주기 콜백 9. 빈 스코프 스프링 핵심 원리 - 객체 지향 설계 - 다형성, 역할과 구현의 분리 - SOLID [OCP, DIP] - DI 컨테이너 스프링 핵심 기능 - 스프링 컨테이너, 빈 - 싱글톤 - 컴포넌트 스캔 - 의존관계 자동 주입 - 빈 생명주기 콜백 - 빈 스코프 지금까지 우리는 스프링 핵심 원리와 핵심 기능에 대해서 깊이있게 학습했다 스프링이 왜 만들어졌고, 왜 필요한지, 그리고 객체 지향 설계와 스프링이 왜 땔 수 없는 관계인지 이해했다 스..
-
스코프와 프록시spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 21:11
이번에는 프록시 방식을 사용해보자 이전에 굳이 @Scope("request") 로 하지않고, value를 넣은 이유가 있다 이렇게 값이 두개 이상 들어가야 한다면 value를 넣어야 한다 이전에 클라이언트의 요청이 없어서 빈을 생성하지 못하여 에러가 났던 것을 기억할 것이다 현재 그 상태와 동일한 상태에서 위 처럼 프록시모드만을 추가한 상태이다 - 여기가 핵심이다. proxyMode = ScopedProxyMode.TARGET_CLASS 를 추가해주자 - 적용 대상이 인터페이스가 아닌 클래스면 TARGET_CLASS 를 선택 - 적용 대상이 인터페이스면 INTERFACES 를 선택 - 이렇게 하면 MyLogger의 가짜 프록시 클래스를 만들어두고 HTTP request와 상관 없이 가짜 프록시 클래스를 ..
-
스코프와 Providerspring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 20:44
첫번째 해결방안은 앞서 배운 Provider를 사용하는 것이다 간단히 ObjectProvider를 사용해보자 이렇게 Provider를 사용하여 빈을 찾아올 수 있는 객체를 만들고, .getObject를 사용하여 myLogger를 입력했다 하지만 여전히 동일한 오류가 나는 모습이다 LogDemoService 에서도 동일하게 Provider 를 사용하고 다시 실행하니 성공하는 모습이다 웹 애플리케이션에도 내가 반환한 문구가 출력되고 있다 다시 로그를 살펴보자 밑에 로그가 추가됐다 객체가 생성되고, 소멸하는 것 까지도 확인했다 중요한건 [ ] 안에 있는 uuid 이다 새로고침을 반복적으로 해보자 (클라이언트 요청) 이 처럼 요청별로 고유한 uuid를 받아 객체마다 따로 관리를 해주는 모습이다 스레드를 걸어서 ..
-
request 스코프 예제 만들기spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 20:00
웹 환경 추가 - 웹 스코프는 웹 환경에서만 동작하므로, web 환경이 동작하도록 라이브러리를 추가하자 build.gradle에 추가 implementation 'org.springframework.boot:spring-boot-starter-web' 이제 hello.core.CoreApplicaiton 의 main 메서드를 실행하면 웹 애플리케이션이 실행되는 것을 확인할 수 있다 참고 : spring-boot-starter-web 라이브러리를 추가하면 스프링부트는 내장 톰캣 서버를 활용해서 웹 서버와 스프링을 함께 실행시킨다 참고 : 스프링부트는 웹 라이브러리가 없으면 우리가 지금까지 학습한 AnnotationConfigApplicationContext 을 기반으로 애플리케이션을 구동한다 웹 라이브러리..
-
웹 스코프spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 19:18
지금까지 싱글톤과 프로토타입 스코프를 학습했다 싱글톤은 스프링 컨테이너의 시작과 끝까지 함께하는 매우 긴 스코프이고, 프로토타입은 생성과 의존관계 주입, 그리고 초기화까지만 진행하는 특별한 스코프이다 이번에는 웹 스코프에 대해 알아보자 웹 스코프의 특징 - 웹 스코프는 웹 환경에서만 동작한다 - 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다 따라서 종료 메서드가 호출된다 웹 스코프의 종류 - request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다 - session : HTTP Sesstion과 동일한 생명주기를 가지는 스코프 - application : 서블릿 컨텍스트(ServletC..
-
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 18:00
싱글톤 빈과 프로토타입 빈을 함께 사용할 때, 어떻게 하면 사용할 때 마다 항상 새로운 프로토타입 빈을 생성할 수 있을까? 스프링 컨테이너에 요청 - 가장 간단한 방법은 싱글톤 빈이 프로토타입을 사용할 때 마다 스프링 컨테이너에 새로 요청하는 것이다 - 실행해보면 ac.getBean() 을 통해서 항상 새로운 프로토타입의 빈이 생성되는 것을 확인할 수 있다 - 의존관계를 외부에서 주입(DI) 받는게 아니라 이렇게 직접 필요한 의존관계를 찾는 것을 Dependency Lookup (DL) 의존관계 조화(탐색) 이라고 한다 - 그런데 이렇게 스프링 애플리케이션 컨텍스트 전체를 주입받게 되면, 스프링 컨테이너에 종속적인 코드가 되고, 단위 테스트도 어려워진다 - 지금 필요한 기능은 프로토타입 빈을 컨테이너에서..
-
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 16:28
스프링 컨테이너에 프로토타입 스코프의 빈을 요청하면 항상 새로운 객체 인스턴스를 생성해서 반환한다 하지만 싱글톤 빈과 함께 사용할 때는 의도한 대로 잘 동작하지 않으므로 주의해야 한다 프로토타입 빈 직접 요청1 1. 클라이언트A는 스프링 컨테이너에 프로토타입 빈을 요청한다 2. 스프링 컨테이너는 프로토타입 빈을 새로 생성해서 반환(x01) 한다. 해당 빈의 count 필드 값은 0이다 3. 클라이언트는 조회한 프로토타입 빈에 addCount() 를 호출하면서 count필드를 +1 한다 - 결과적으로 프로토타입 빈(x01) 의 count는 1이 된다 프로토타입 빈 직접 요청2 1. 클라이언트B는 스프링 컨테이너에 프로토타입 빈을 요청한다 2. 스프링 컨테이너는 프로토타입 빈을 새로 생성해서 반환(x02) ..