본문 바로가기

Spring27

스프링 IoC 와 DI 스프링을 공부하기 시작하면 가장 먼저 접하게 되는 개념인 IoC와 DI는 객체지향의 SOLID원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다. 좀 더 자세하게 구분해 보자면 IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당한다. IoC(Inversion of Control : 제어의 역전) 제어의 역전이란? 우선, 아래의 코드를 보면 Consumer가 직접 Food를 만들어 먹었기 때문에 새로 Food를 만들려면 추가적인 요리준비(코드변경)가 불가피했다. 따라서 이때는 제어의 흐름이 Consumer -> Food 로 흐르는데, (코드변경이 불가피하기때문에 이는 강한 결합도를 가진다고 할 수있다.) *강한 결합 객체간의 결합이 강하여 수정이 필요할 때 계속해서 내부의 코드를 .. 2023. 6. 14.
Gradle Gradle이란 무엇일까? build 자동화 시스템으로 우리가 작성한 Java코드를 설정에 맞게 자동으로 Build해주는 데 이 build라는 것은 우리가 작성한 소스 코드를 실행 가능한(배포) 결과물로 만드는 일련의 과정을 뜻한다. gradle을 사용하면 간편하게 Java의 소스코드를 실행가능한 JAR파일로 만들어준다. 눈으로 직접 확인을 해보자 우측의 빨간 동그라미 텝을 누르고 Tasks > build > build 클릭하면 빌드가 실행되고 위 결과물이 나온다. 그러면 프로젝트를 누르고 build > libs안의 실행가능한 jar파일이 생성된 것을 확인할 수 있다. build.gradle build.gradle이란 gradle기반의 build 스크립트로써 해당 스크립트를 작성하면 소스코드를 build.. 2023. 6. 12.
TIL-10 빈 스코프와 Provider 웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작한다. 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다. 웹 스코프의 종류 request : HTTP 요청 하나가 들어오고 나갈 때 가지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. session : HTTP Session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 갖는다. websocket : 웹 소켓과 동일한 생명주기를 갖는다. 웹 스코프는 웹 환경에서만 동작하므로 web 환경이 동작하도록 라이브러리를 추가하자. build.gradle에 추가하기 이제 hello.core.C.. 2023. 5. 23.
TIL-8 빈 스코프 프로토타입-2 이전편 https://dao-blog.tistory.com/14 TIL-7 빈 스코프 프로토타입-1 지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 배웠다 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문 dao-blog.tistory.com 하지만 너무 지저분하다..그리고 프로토타입 빈이 새로 생성되기는 하지만, 싱글톤 빈과 함께 계속 유지되는 것이 문제다. 아마 원하는 것 이 이런 건 아닐 것이다. 프로토타입 빈을 주입 시점에만 생성시키는 것이 아니라 사용할 때마다 새로 생성해서 사용하는 것을 원할 것이다. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제해결 싱글톤 빈과 프로토타입 빈을 함께 사용할 때, .. 2023. 5. 22.
TIL-7 빈 스코프 프로토타입-1 지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 배웠다 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과같은 다양한 스코프를 지원한다. '싱글톤' : 기본 스코프, 스프링 컨테이너의 시작과 좋료까지 유지되는 가장 넓은 범위의 스코프이다. '프로토타입' : 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입이지만 관여하고 있는 더는 관리하지 않는 매우 짧은 범위의 스코프이다. '웹 관련 스코프' Request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프이다. Session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프이다. Applic.. 2023. 5. 19.
TIL-6 빈 생명주기 콜백 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 데이터베이스 커넥션 풀 관계형 데이터베이스를 쓰는데 미리 서버가 올라올 때 데이터베이스랑 미리 연결 해 놓는다 TCP나 핸드 쉐이킹동안 오 래 걸리기 때문에 미리 서버-DB간 연결을 10개~100개정도의 연결을 해 놓는다 클라이언트 요청이 들어오면 즉각 응답 해 줄 수 있다. 스프링을 통해 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 여기선 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다.. 2023. 5. 18.