Language`(93)
-
[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 -
[JSP] 자바빈(JavaBeans) & <jsp:useBean> 액션 태그
자바빈(JavaBeans) - 객체를 JSP페이지에서 사용하기 위해서 사용 - 자바빈을 사용하면 JSP에서 객체를 사용해서 데이터를 저장하고 불러올 수 있다 - 규격을 갖추지 않고 사용하면 에러가 발생 java.io.Serializable 인터페이스를 구현해야 한다 인수가 없는 기본 생성자가 있어야 한다 반드시 패키지화 멤버변수를 "Property"라고 부른다 프로퍼티의 접근 지정자는 반드시 private 프로퍼티마다 getter/setter가 존재해야 한다 읽기 전용의 경우 getter만 있어야 한다 getter 메소드에는 파라미터가 존재하면 안된다 setter 메소드에는 파라미터가 1개 이상 존재해야 한다 프로퍼티를 제외한 기본 생성자 & 메소드들은 "public"으로 작성해야 한다 - java.io..
2022.03.19 -
[JSP] <jsp:foward> 액션 태그
- 하나의 JSP 페이지에서 다른 JSP 페이지로 request 처리를 전달할 때 사용 - Client로부터 request를 받는거는 from.jsp이지만, 최종적으로 response를 전달하는거는 to.jsp이다 1. Client가 from.jsp로 request 전달 2. from.jsp는 코드내에 존재하는 액션 태그를 실행 3. 액션 태그로 인해서 요청 흐름이 to.jsp로 넘어간다 이 때, from.jsp에서 사용한 request/response 객체가 to.jsp로 전달된다 4. to.jsp가 response 생성 5. to.jsp가 생성한 결과를 Client에게 전달 ## 방법 1) ## ## 방법 2) ## Example 1) ## from.jsp ## 현재 페이지는 "from.jsp"입니다..
2022.03.19 -
[JSP] <jsp:include> 액션 태그
- 다른 JSP의 실행 결과 & 코드를 포함할 때 사용하는 액션 태그 - 중복된 코드를 하나의 .jsp를 통해서 구현할 수 있다 화면 구성 요소의 코드 중복을 없앨 수 있다 page : 포함할 다른 JSP 페이지의 경로 지정 flush : "page"에서 지정한 JSP 페이지를 실행하기 전에 출력 버퍼를 flush할지 여부 지정 & default = "false" ## main.jsp ## main.jsp 실행 include 이후 ## sub.jsp ## sub.jsp 실행 ※ flush : "true"? "false"? flush를 "true"로 지정하게 되면 를 실행하는 시점에 출력 버퍼에 저장된 내용들을 flush한다는 의미이다. 출력 버퍼를 flush하게 되면 client에게 response를 보..
2022.03.19 -
[JSP] 에러 처리
에러 페이지 - 실행 도중 Exception이 발생하면, 에러 화면 대신 지정한 에러 페이지를 보여줄 수 있다 ## 에러 발생시 보여줄 페이지 ## ## 에러 처리 페이지 ## 처리 우선순위 1) page 디렉티브의 errorPage 속성 2) web.xml 파일의 : 범용 에러 처리 3) web.xml 파일의 : 별도 에러 처리 4) WAS가 제공하는 기본 에러 페이지 에러 코드 200 : 요청을 정상적으로 처리 307 : 임시로 페이지를 리다이렉트 400 : Client 요청이 잘못됨 401 : 접근 허용 X 404 : 요청한 URL 경로 X 500 : 요청 메소드(GET, POST, ..)를 허용 X 503 : JSP Exception 발생 504 : 서버가 서비스 제공을 못함 (서버측 문제) [N..
2022.03.19 -
[JSP] JSP 기본 객체 & 영역
Web-Application의 4가지 영역 1) page 영역 - 하나의 JSP 페이지를 처리할 때 사용되는 영역 - Client로부터 request가 들어오면 해당 JSP 페이지를 실행하는데, 그 때 각각의 JSP 페이지의 범위가 "page 영역"이다 pageContext 기본 객체 2) request 영역 - 하나의 HTTP 요청을 처리할 때 사용되는 영역 - Client가 request를 보낼 때마다 새로운 request 영역이 생성된다 - 하나의 JSP 페이지에 대해서 request와 관련된 모든 JSP 페이지가 "request 영역"이다 request 기본 객체 3) session 영역 - 하나의 웹 브라우저와 관련된 영역 - 세션이 생성되면 해당 웹 브라우저와 관련된 모든 request가 하나..
2022.03.19 -
[JSP] out 객체 & pageContext 객체 & application 객체
Out 객체 - JSP 페이지 내의 비-스크립트 요소들(HTML & 텍스트)은 out 기본 객체에 그대로 전달된다 - 값을 출력하는 표현식의 결과값도 out 기본 객체에 전달된다 - 출력 메소드는 기본적으로 print() / println() / newLine()이 제공된다 ※ out.println()을 통한 개행 out.println()을 사용하면 웹 페이지에서 개행이 될까? Hello World ?? 실제로 웹 페이지에서는 개행이 되지 않았다 Why? HTML 코드 내에서만 개행이 이루어졌다 실제로 JSP 페이지는 일단 자바 소스코드로 변환이되고, 해당 자바 소스코드는 서블릿 클래스로 컴파일이 되는데 이 과정에서 "Hello " / "World " / "??" 를 HTML 코드 관점에서 보면 그냥 1..
2022.03.18 -
[JSP] JSP 처리 과정 & 버퍼
JSP 처리 과정 1) 요청한 JSP 페이지와 관련된 "서블릿 클래스"가 없는 경우 1. JSP 페이지를 자바 소스코드로 "변환" 2. 자바 소스코드를 서블릿 클래스로 "컴파일" 3. WAS가 서블릿에 Request 전달 4. 서블릿은 Request에 대한 Response 생성해서 WAS에 전달 5. WAS는 Client(웹 브라우저)에게 Response 전달 2) 요청한 JSP 페이지와 관련된 "서블릿 클래스"가 있는 경우 1. WAS가 서블릿에 Request 전달 2. 서블릿은 Request에 대한 Response 생성해서 WAS에 전달 3. WAS는 Client(웹 브라우저)에게 Response 전달 출력 버퍼 - JSP 페이지가 생성하는 출력 내용을 모았다가 한번에 웹 브라우저에 전송할 수 있다 ..
2022.03.18