Language`/Spring(21)
-
[Spring] Servlet
Servlet 자바 Servlet이란 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램이다 서블릿은 "Tomcat"같은 WAS를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린다음에 톰캣 서버를 실행해야 한다 이 과정은 매우 복잡하기 때문에 Spring Boot를 활용하면 내장 톰캣 서버가 존재하기 때문에 별도로 톰캣 서버를 설치할 필요없이 서블릿 코드를 실행할 수 있다 start.spring.io에서 스프링 프로젝트를 생성하면 다음과 같은 2개의 자바 파일이 생성이 된다 Packaging : WAR 여기서 main메소드가 포함된 ServletTestApplication에 @ServletComponentScan을 붙여주면 서블릿이 자동으로 등록된다 @ServletCompon..
2022.06.11 -
[Spring] 웹 애플리케이션 이해
웹 & HTTP 웹 상에서 일어나는 모든 동작은 HTTP에 의해서 제어가 된다 Client (웹 브라우저) : HTTP Request Server : HTTP Response Client가 HTTP Reqeust Message를 통해서 "어떤 자료(html, text, image, ...)좀 주세요"라고 요청하면 Server는 logic을 수행하고 그에 따른 HTTP Response Message를 생성해서 Client에게 보내준다 [Network] HTTP 메시지 HTTP 통신 방식 1. 요청 - 응답 (Request - Response) 구조로 되어 있다 - Client가 HTTP Request를 보내면 Server가 HTTP Response를 보내준다 2. Stateless하다 - HTTP는 상태(..
2022.05.22 -
[Spring - 기본] 빈 스코프
빈 스코프 말 그대로 "빈이 존재할 수 있는 범위"를 뜻한다 지금까지는 스프링 빈이 "스프링 컨테이너 시작 ~ 종료까지 유지"된다고 하였다 이것은 스프링 빈이 "싱글톤"일 경우에만 해당된다 Singleton 스프링 컨테이너에서는 기본적으로 스프링 빈 객체들을 "싱글톤"으로 관리한다 싱글톤 빈은 스프링 컨테이너 시작 ~ 종료까지 유지되는 가장 넓은 범위의 스코프이다 따라서 싱글톤 빈의 생명주기는 스프링 컨테이너의 생명주기와 동일하다고 볼 수 있다 Prototype 프로토타입 빈은 스프링 빈과 전혀 다른 타입이다 스프링 컨테이너는 "프로토타입 빈의 {생성, DI, 초기화}"까지만 관리해주고 그 이후부터는 전혀 관여하지 않는다 따라서 스프링 컨테이너가 종료된다고 해도 "종료 메소드"가 호출되지 않는다 Prot..
2022.05.19 -
[Spring - 기본] 빈 생명주기
빈 객체 생명주기 (초기화 & 소멸) DB 커넥션 풀이나 네트워크 Socket의 경우 "시작 시점에 미리 Connection을 설정해주거나 & 종료 시점에 연결을 안전하게 끊는 것"이 굉장히 중요하다 객체의 초기화 & 종료 작업이 필요/중요 기본적으로 스프링 컨테이너가 스프링 설정 클래스로부터 여러 스프링 빈을 찾으면 다음 작업을 수행해준다 스프링 빈 생성 DI 생성자 주입의 경우 스프링 빈이 생성될 때 DI도 같이 수행된다 setter나 field 주입의 경우 2단계가 나누어져서 진행된다 Spring은 DI까지 완료되면 스프링 빈에게 "너한테 DI까지 해줬으니까 초기화 과정 수행해라"라고 알려준다 >> 이 때 "초기화 콜백 메소드"를 통해서 알려준다 그리고 스프링 컨테이너를 종료하게 되면 여러 스프링 ..
2022.05.18 -
[Spring - 기본] 의존관계 자동 주입
@Component & @ComponentScan에 의해서 자동으로 빈을 등록해준다면 스프링 빈들의 DI를 굳이 수동으로 해줄 필요도 없고 수동으로 하면 복잡해진다. 따라서 자동 빈 등록에 대한 "의존관계 자동 주입"도 더불어서 가져가주는게 낫다 DI 방식 1. 생성자 주입 우리가 지금까지 사용하고 있던 방식이 "생성자 주입"이고 이 방식을 대부분 사용한다 생성자 주입의 특징은 다음과 같다 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다 불변/필수 의존관계에 사용된다 생성자는 객체가 생성될 때 딱 1번만 호출되기 때문에 만약 그때 DI가 된다면 이후에 변경될 일이 아예 없다 그리고 대부분 주입 대상을 필드 상에서 final로 지정하는데 final로 지정하면 초기화를 해주든 생성자에 넣어주든 해줘야 하..
2022.05.15 -
[Spring - 기본] 컴포넌트 스캔
컴포넌트 스캔 @Configuration public class AppConfig { @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return n..
2022.05.15 -
[Spring - 기본] 싱글톤 컨테이너
웹 애플리케이션 & 싱글톤 웹 애플리케이션 거의 대부분 여러 user가 동시에 접속한다 여러명의 고객이 서비스에 join을 하기 위해 서로 memberService를 호출하게 된다면?? 만약 고객 트래픽이 초당 100이 나온다면 초당 100개의 memberService 객체가 생성되고 소멸된다 >> 이것은 굉장한 메모리 낭비이다 이러한 문제점을 해결하는 간단한 방법은 "해당 객체를 1개만 생성하고 여러 user가 공유하도록 설계"하면 된다. 이러한 방식을 "싱글톤 패턴"이라고 한다 싱글톤 패턴 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다 따라서 객체의 인스턴스가 2개 이상 생성되지 못하도록 막아줘야 한다 생성자를 private로 선언해서 외부에서 임의로 new를 통..
2022.05.14 -
[Spring - 기본] 스프링 컨테이너와 스프링
스프링 컨테이너 스프링 컨테이너는 스프링 빈 객체들의 생명 주기를 관리하고, 생성된 Bean 객체들에 대해서 부가적인 기능을 제공하는 역할을 한다. 빈 객체가 Singleton일 경우 해당되는 정의 Prototype일 경우 생명주기 전체를 관리하지 않고, 빈 객체의 초기화까지만 관여하고 이후에는 전혀 관여 X 일반적으로 코딩을하면 객체를 생성하는 것은 개발자가 해주는 일이다. 하지만 스프링 컨테이너는 IoC라는 제어의 역전 개념을 통해서 이러한 객체 관련 일들을 대신 해준다 그리고 의존 관계 주입(DI)도 스프링 컨테이너에서 빈 객체를 생성 후 자동으로 맺어준다 @Configuration으로 지정한 스프링 설정 클래스인 AppConfig를 "스프링 컨테이너"를 생성할 때 파라미터로 전달해준다 위 코드에서..
2022.05.13 -
[Spring - 기본] 객체 지향 설계와 스프링
좋은 객체 지향 프로그래밍? 객체 지향의 특징은 매우 기본적인 다음 4가지이다 추상화 캡슐화 상속 다형성 "객체 지향" 프로그래밍의 의미는 "절차 지향" 프로그래밍에서 전체적인 명령어를 하나의 흐름으로 보고 처리하는 것과 달리 전체적인 명령어를 "여러개의 독립적인 객체"로 나누어서 프로그래밍 하자는 것이다 여기서 나누어진 "독립적인 객체들"은 서로 메시지를 주고받을 수도 있고 데이터를 처리할 수도 있다 :: "협력" 그리고 "다형성"이라는 강력한 특징을 활용해서 프로그램을 유연하고 변경이 용이하게 만들 수 있다 유연하고 변경이 용이하다는 의미는 집에 있는 콘센트?의 개념과 비슷하다 콘센트라는 것은 규격이 정해져있고 규격에 맞는 플러그들은 전부 꽂을 수 있다 다형성 다형성의 의미는 매우 모호하지만 결론적으..
2022.05.11