본문 바로가기

Spring

스프링 MVC - 기본 기능 로깅 간단히 알아보기 - 운영 시스템에서 System.out.println() 같은 시스템 콘솔을 사용하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력 로깅 라이브러리 - 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 포함됨 - 스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용 - SLF4J : http://www.slf4j.org - LobBack : http://logback.qos.ch 로그 라이브러리는 Lobback, Log4J, Log4J2 등등 수 많은 라이브러리가 존재하지만, 그것을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리 SLF4J는 인터페이스이고, 그 구현체로는 Lobback .. 더보기
웹 애플리케이션 이해 웹 서버, 웹 애플리케이션 서버 모든 것이 HTTP HTTP 메시지에 모든 것을 전송 - HTML, TEXT - IMAGE, 음성, 영상, 파일 - JSON, XML (API) - 거의 모든 형태의 데이터 전송 가능 - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 - 지금은 HTTP 시대 웹 서버(Web Server) - HTTP 기반으로 동작 - 정적 리소스 제공, 기타 부가기능 - 정적(파일) HTML, CSS, JS, 이미지, 영상 ex) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) - HTTP 기반으로 동작 - 웹 서버 기능 포함 + (정적 리소스 제공) - 프로그램 코드를 실행해서 애플리케이션 로직 수행 - 동적 HTML, HTT.. 더보기
빈 스코프 빈 스코프란? - 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 알고 있음 - 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문 - 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 의미 스프링은 다음과 같은 다양한 스코프를 지원 1. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 2. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 (초기화 까지만 하므로, 생성 메서드 호출 O, 종료 메서드 호출 X) 3. 웹 관련 스코프 - request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 - sessioin: 웹 세션이.. 더보기
빈 생명주기 콜백 빈 생명주기 콜백 시작 - 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요 - 스프링 빈은 객체 생성 -> 의존관계 주입 과 같은 라이프사이클을 갖음 (생성자 주입은 예외, 생성자는 객체를 만들 때, 이미 스프링 빈이 파라미터에 같이 들어와야 하기 때문) - 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됨 - 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 함 - 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알까? 스프링 의존관계 주입이 완료되면 스프링 빈에서 콜.. 더보기
의존관계 자동 주입 다양한 의존관계 주입 방법 - 생성자 주입 - 수정자 주입(setter 주입) - 필드 주입 - 일반 메서드 주입 생성자 주입 - 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 - 스프링 빈을 등록하면서 의존 관계가 자동으로 주입됨 - 특징 - 생성자 호출시점에 딱 1번만 호출되는 것이 보장됨 - 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberR.. 더보기
컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 - 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열 - 스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 - 의존관게도 자동으로 주입하는 @Autowired 기능 제공 @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } - 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 됨 - 기존의 AppC.. 더보기
싱글톤 컨테이너 웹 애플리케이션과 싱글톤 - 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분의 스프링 애플리케이션은 웹 애플리케이션 - 웹 애플리케이션은 보통 여러 고객이 동시 요청 - 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성 - 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸 -> 메모리 낭비 - 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계 -> 싱글톤 패턴 싱글톤 패턴 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 그래서 객체 인스턴스를2개 이상 생성하지 못하도록 막아야 함 - private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 함 publi.. 더보기
스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 - ApplicationContext 를 스프링 컨테이너라고 함 - ApplicationContext 는 인터페이스 (다형성) - 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음 ex) 애노테이션 기반의 자바 설정 클래스의 스프링 컨테이너 생성 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl( memberRep.. 더보기
객체 지향 설계와 스프링 스프링이란? 필수 스프링 프레임워크 : 스프링의 핵심 스프링 부트 : 스프링의 여러 기술을 편하게 사용할 수 있도록 도와줌 선택 스프링 데이터 : CRUD를 편하게 사용 ex) spring jpa 스프링 세션 : 세션 기능을 편리하게 사용 스프링 시큐리티 : 보안 관련 기능 스프링 Rest Docs : api 문서화 기능 스프링 배치 : 애플리케이션 데이터 배치 처리 기능 스프링 클라우드 : 클라우드 서비스 기능 스프링 프레임워크 - 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타 - 웹 기술 : 스프링 MVC, 스프링 WebFlux - 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 - 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링 - 테스트 : 스프링 기반 테스트.. 더보기
포스팅 시작하기 현재 김영한님의 스프링 강의를 들으면서 spring을 공부하고 있다. https://www.inflearn.com/roadmaps/373 강의를 현재 1회독 하였지만, 개인 프로젝트를 진행하면서 헷갈리거나 잘 기억이 나지 않는 경우가 종종 발생한다. 그래서 다시 강의, 강의자료를 찾아보거나 구글링을 하기도하는데, 지금까지 배운 내용들을 복습을 하는 차원에서 블로그에 배운 내용과 배우면서 느낀 생각들을 담아보기로 하였다. 더보기