스프링
-
로깅스프링 2022. 12. 23. 16:31
운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging )가 함께 포함된다. 스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용한다. (System.out.println()을 사용하면 안되는 이유는 https://winwin-k9.tistory.com/18 를 참고) SLF4J Logback 로그 라이브러리는 Logback, Log4J, Log4J2 등등 수 많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리다. 쉽게 이야..
-
빈스코프스프링 2022. 12. 22. 23:57
지금까지 스프링 빈이 스프링 컨테이너 의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 배웠다. 이는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프: 빈이 존재할 수 있는 범위 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다 프로토타입 스코프 싱글톤 스코..
-
의존관계 자동주입스프링 2022. 12. 22. 22:11
의존관계 주입은 크게 4가지가 있다. 생성자 주입 수정자 주입(setter) 필드주입 일반 메소드 주입 생성자 주입 이때까지 해왔던 방법 @Component public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } } MemberServiceImpl를 컴포넌트 스캔을 하고 스프링 빈에 등록이 될때 생성자의 AutoWired를 보고 스프링 컨테이너에서 MemberRepo..
-
스프링 컨테이너와 빈스프링 2022. 12. 22. 19:31
스프링 컨테이너의 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class) ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 인터페이스이다. AppConfig를 사용해던 방식이 어노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 스프링이 @Bean으로 등록을 해놓았던 것들에대해서 스프링 컨테이너에 저장을 해둔다. 기본 이름으로 Bean이 메소드 이름으로 등록이 되게 된다. applicationContext.getBean("memberService", MemberService.class) 이렇게 이름을 지정해서 빈을 가져올..
-
싱글톤 컨테이너스프링 2022. 12. 22. 18:57
웹 어플리케이션은 보통 여러 고객들이 동시에 요청을 한다. 생각을 해보자. 클라이언트 A,B,C가 동시에 memberService를 요청하게되면 memberService를 3번이나 반환해야 된다. 즉, 객체가 바로 3개가 생성이 된다. 다시말해 고객이 요청할때마다 객체를 생성하는 부분이 문제이다. service요청1,2번이 각기 다른 객체이다. 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다 메모리 낭비가 심하다. 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. 싱글톤 패턴 싱글톤 : 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. DIP..
-
IOC,DI,컨테이너스프링 2022. 12. 19. 18:39
제어의 역전 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 반면 AppConfig가 등장한 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 프로그램의 제어의 흐름은 AppConfig가 가져간다. 프로그램에 대한 제어의 흐름은 모두 AppConfig가 가지고 있다. 심지어 OrderServiceImpl 도 AppConfig가 생성한다. 그리고 AppConfig는 OrderServiceImpl 이 아닌 OrderService 인터페이스의 다른 구현 객체를 생성하고 실행할 수 도 있다. 그런 사실도 모른체 OrderServiceImpl 은 묵묵히 자신의 로직을 실행할 뿐이다 이렇게 프로그램..
-
빈 등록스프링 2022. 12. 19. 18:05
스프링 bean을 등록하는데는 2가지 방법이 있다. 1. 컴포넌트 스캔과 자동 의존관계 설정 @Componenet가 있으면 스프링 빈으로 자동 등록이 된다. @Componenet를 포함하는 @Controller, @Service, @Repository와 같은 어노테이션도 스프링으로 자동 등록이 된다. 2. 자바 코드로 직접 스프링 빈 등록하기 @Configuration public class SpringConfig { @Bean public MemberService memberService(){ return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository(){ return new MemoryMem..
-
의존관계에 대한 이해스프링 2022. 12. 19. 17:59
의존관계?? 회원가입을 하고, 회원가입된 결과를 보려면 그에따른 controller가 필요하다. 따라서 Member Controller를 만들어야하는데, 이것이 MemberService를 통해서 회원 가입을 해야하고, MemberService를 통해서 데이터를 조회할 수 있어야 한다. 이를 서로 의존관계가 있다고 한다. @controller @controller를 하는 순간, 스프링 컨테이너에서 해당하는 객체를생성해서 스프링에 넣어둔다. 이를 스프링이 관리하게 되며, 이를 스프링 bean이 관리 된다고 한다. private final MemberService memberService = new MemberService(); new로 생성을 해도 좋다. 하지만, 스프링 컨트롤러에 등록을 하고 받아 쓰는 형..