Study/Java&Spring 21

XML, BeanDefinition

Spring의 BeanFactory는 다양한 형식의 설정 정보를 받아드릴 수 있게 설계 되어있다. XML 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들이 XML로 되어있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다. GenericXmlApplicationContext를 사용하면서 xml 설정 파일을 넘기면 된다. xml 기반의 AppConfig.xml 스프링 설정 정보와 자바 코드로 된 AppConfig.java 설정 정보를 비교하면 거의 비슷한 결과를 얻을 수 있다. package hello.core.xml; import hello.core.member.MemberService; import..

Study/Java&Spring 2021.07.20

Spring Container/Bean

스프링 컨테이너 ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 기존에 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DI를 했지만, 이제부터는 스플링 컨테이너를 통해서 사용한다. 스프링 컨테이너는 @Configuration 이 붙은 AppConfig를 설정(구성)정보로 사용한다. 여기서 @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 스프링 빈 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다. 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. 이전에는 개발..

Study/Java&Spring 2021.07.19

Spring, IoC/DI 컨테이너

Spring Framework 란? 엔터프라이즈급 어플리케이션을 구축할 수 있는 가벼운 솔루션이자, 원스-스탑-숍(One-Stop-Shop) 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어 있다. IoC 컨테이너다. 선언적으로 트랜잭션을 관리할 수 있따. 완전한 기능을 갖춘 MVC Framwork를 제공한다. AOP 지원한다. 도메인 논리 코드와 쉽게 분리될 수 있는 구조로 되어있다. IoC/DI 컨테이너 컨테이너(Container)란? 인스턴스의 생명주기를 관리한다. 생성된 인스턴스들에게 추가적인 기능을 제공한다. AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것 ex) Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말한다. IoC(Inv..

Study/Java&Spring 2021.07.17

AppConfig

관심사의 분리 애플리케이션을 하나의 공연이라 생각해보자. 각각의 인터페이스를 배역이라 생각하자. 그런데 실제 배역 맞는 배우를 선택하는 것은 누가 하는가? 로미오와 줄리엣 공연을 하면 로미오 역할을 누가 할지 줄리엣 역할을 누가 할지는 배우들이 정하는게 아니다. 이전 코드는 마치 로미오 역할(인터페이스)을 하는 레오나르도 디카프리오(구현체, 배우)가 줄리엣 역할(인터페이스)을 하는 여자 주인공(구현체 배우)을 직접 초빙하는 것과 같다. 디카프리오는 공연도 해야하고 동시에 여자 주인공도 공연에 직접 초빙해야 하는 다양한 책임을 가지고 있다. 관심사를 분리하여 위의 문제를 해결한다. 배우는 본인의 역할인 배역을 수행하는 것에만 집중한다. 디카프리오(구현체)는 어떤 여자 주인공(구현체)이 선택되더라도 똑같이 ..

Study/Java&Spring 2021.07.17

객체 지향 프로그래밍

객체지향의 특징 추상화 캡슐화 상속 다형성 - 클라이언트(역할)를 바꾸지 않아도 기능(구현)을 바꿀 수 있는 것. 유연하고 변경이 용이하게 하는 것 객체지향 프로그래밍을 잘하려면? 역할과 구현을 잘 분리해야한다. 인터페이스를 안정적으로 잘 설계하는 것이 중요하다. 스프링에서의 객체지향 다형성이 가장 중요 다형성을 극대화해서 이용할 수 있게 도와준다. 스프링에서 이야기하는 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 스프링을 사용하면 마치 레고 블럭 조립하듯이, 공연 무대의 배우를 선택하듯이, 구현을 편리하게 변경할 수 있다. 다형성 자바언어의 다형서 오버라이딩 오버라이딩 된 메서드가 실행된다. 다형성으로 인터페이스를 구현한 객체를 실행..

Study/Java&Spring 2021.07.15

어노테이션(Annotation)

어노테이션(Annotation)이란? 사전적 의미로는 주석이라는 뜻이다. 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 컴파일, 런타임 시에 해석이 될 수 있다. 어노테이션을 적용할 때는 어노테이션이 어디에 적용되며 언제까지 어노테이션 소스가 유지될 것인지를 설정하여야 하는데 소스코드에는 다음과 같이 어노테이션을 정의해 주면 된다. @Target({ElementType.[적용대상]}) @Retention(RetentionPolicy.[정보유지되는 대상]) public @interface [어노테이션명]{ public 타입 elementName() [default 값] ... } @Target에는 어떠한 값(ex : 클래스, 필드, 메서드 ...)에 어노테이션을 적용할 것이지..

Study/Java&Spring 2021.06.28

Maven plug in error

Spring Maven 프로젝트 생성시 Could not get the value for parameter encoding for plugin execution default-resources 위와 같은 오류가 발생할 경우 아래와 같은 방법 대로 순차적으로 실행해 보길 바란다. 이클립스를 닫아 줍니다. User 폴더의 .m2 폴더를 찾습니다. (예를들어, "C:\Users\사용자이름\.m2") repository 폴더를 지웁니다. 이클립스를 다시 열어 줍니다. 실행 할 Maven 프로젝트의 "Project" --> "Clean" 을 시켜줍니다.(Project 메뉴는 이클립스 상단 메뉴에 있습니다.) 프로젝트를 오른쪽 클릭을 한뒤 "Maven" --> "Update Project" 를 눌러줍니다. 이클립스..

Study/Java&Spring 2021.06.24

Scope

4가지 종류의 Scope 존재 Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용 Session : 웹 브라우저 별로 변수가 관리되는 경우 사용 Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용 Page : 페이지 내에서 지역변수처럼 사용 Page Scope PageContext 추상 클래스를 사용한다. JSP 페이지에서 pageContext라는 내장 객체로 사용 가능 하다. forward가 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없다. 사용방법은 Application scope나 Session scope, request scope와 같다. 마치 지역변수처럼 사용된다는 것이 다른 Scop..

Study/Java&Spring 2021.06.17

JSP

JSP 는 Servlet으로 바뀌어 작동한다. 다음과 같은 JSP 코드가 있다고 했을 때, 지시문 page language="java"를 통해 java로 작성된 다는 것을 알 수 있다. contentType="text/html; charset=UTF-8" 를 통해 UTF-8 형식을 가진 html 로 반환된다 라는 것을 알 수 있다. Scriptlet(스크립트릿) 자바 프로그래밍 코드를 사용할 수 있는 부분이다. 가장 일반적으로 많이 쓰이는 스크립트 요소 표현식(Expression) Java의 변수의 값을 화면에 출력하기 위해 사용합니다. out.parin(변수명) 이렇게 사용하던 것과 같은 결과를 나타낸다. 선언식(Declaration) 전역변수 선언 및 메소드 선언에 사용 주석 JSP 주석인 경우 Se..

Study/Java&Spring 2021.06.17

Request, Response

HttpServletRequest http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다. 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다. Body의 Stream을 읽어 들이는 메소드를 가지고 잇습니다. 아래와 같은 방법으로 파라미터 이름을 이용하여 request를 할 수 있다. http://loclhost:8080/uri?파라미터이름=value 요청을 하면 아래 코드로 읽을 수 있다. request.getParameter("파라미터 이름"); 이 외에도 아래와 같은 것들이 있다. //URI 요청 request.getRequestURI(); //URL 요청 request.getRequestURL(); //Content 요청 req..

Study/Java&Spring 2021.06.17