본문 바로가기

java

(102)
웹 프로그래밍 설계 모델 # Model 1 하나의 문서에 모든 것을 다 넣기 때문에 개발 속도가 빠르지만 유지보수가 좋지 않다 # Model 2 ( 현재 가장 많이 사용하는 모델 ) Model 1을 보완하기 위해서 객체지향적으로 각각의 기능을 모듈화 시킨 모델 # 스프링 MVC플레임 워크 설계 구조 클라이언트로부터 요청이 들어오면 DispatcherServlet이 받는다 DispatcherServlet은 첫 번째로 HandlerMapping으로 보내 가장 적합한 Controller를 찾아준다 DispatcherServlet은 두번째로 HandlerAdapter로 보내 찾아본 Controller에서 가장 적합한 method를 찾아준다 DispatcherServlet은 세번째로 ViewResolver로 보내 가장 적합한 JSP를 찾..
어노테이션을 이용한 스프링 설정 # XML 파일을 Java파일로 변경하기 @Configuration 클래스에 적용하기 생성자들에 @Bean 어노테이션 적용하기 public + 클래스명 + id return new + 클래스명 (참조해야 할 건 파라미터 안에 넣기) # property 있는 부분들은 set을 이용해서 적용시키기 # property가 list인 부분들 적용시키기 # property가 map인 부분들 적용시키기 # 어노테이션 방식으로 컨테이너 변경하기 # 자바 파일로 만든 스프링 컨테이너 분리하기 # 분리하는 이유 : 소스가 길어지면 유지보수가 어려워지고 개발자 편의상의 이유도 존재한다 (기능적으로 분리) # 파일이 달라도 컨테이너는 하나이기 때문에, 다른 클래스에서 만든 빈 객체들을 @Autowired로 끌어다가 쓸 수 있..
생명주기(Life Cycle) # 스프링 컨테이너와 그 안의 Bean 객체들의 생성 시점은 동일하다 # 스프링 컨테이너를 close 하면 자동으로 Bean 객체들도 소멸된다 # Bean 객체의 생명주기는 스프링 컨테이너의 생명주기와 같다 1. 인터페이스를 이용한 생명주기(InitializingBean, DisposableBean) 2. init-method, destory-method 속성
의존객체 선택 # 타입이 같은 Bean들이 다수 존재할 때, 어떤 것을 선택할지 정해주어야 한다 @Qualifier 어노테이션을 이용해 우선순위를 정해줄 수 있다 [ @Inject ] @Autowired와 거의 비슷하게 @Inject 어노테이션을 이용해서 의존 객체를 자동으로 주입을 할 수 있다 @Autowired와 차이점은 @Autowired의 경우 required 속성을 이용해서 의존 대상 객체가 없어도 익셉션을 피할 수 있지만(대부분 required 속성 사용하지 않음) @Inject의 경우 required 속성을 지원하지 않는다 위에서 언급했듯이, required 속성을 사용하는 경우는 거의 없어서 @Autowired와 동일하다고 봐도 무방하다 @Autowired가 더 대중적으로 사용된다 @Autowired -..
의존객체 자동 주입 # 의존 객체 자동 주입이란? 스프링 설정 파일에서 의존 객체를 주입할 때 || 태그로 의존 대상 객체를 명시하지 않아도 스프링 컨테이너가 자동으로 필요한 의존 대상 객체를 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능이다 구현 방법은 @Autowired와 @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다 @Autowired : 주입하려고 하는 객체의 타입이 일치하는 객체를 자동으로 주입한다 @Resource : 주입하려고 하는 객체의 이름이 일치하는 객체를 자동으로 주입한다 # @Autowired는 constructor, property, method에 다 사용 가능하지만, @Resource는 counstructor에는 사용할 수 없다
스프링 설정 파일 분리 # 하나의 xml 파일에 모든 모듈을 넣으면 가독성이 떨어지고 비효율적이다 일반적으로는 기능별로 구분해서 xml파일을 분리한다 기능별로 구분했기 때문에 xml 파일 이름을 기능의 이름으로 지정해서 가독성을 높이는 것이 좋다 문자열이기 때문에 3개로 나눈 xml 파일들을 배열로 구성해서 수정해준다 (필요로 하는 모듈들이 들어 있는 Ctx 파일들만 배열에 넣어서 사용하는 방식) [ 빈(Bean)의 범위 ] 싱글톤(Singleton) : 스프링 컨테이너에서 생성된 빈(Bean) 객체의 경우 동일한 타입에 대해서는 기본적으로 한 개만 생성이 되며, getBean() 메서드로 호출될 때 동일한 객체가 반환된다. new ClassName();으로 생성자를 호출하면 중복해서 생성하지만 컨테이너는 만들어질 때, 오브젝..
DI (Dependency injection) [ DI 란?(의존 주입) ] 객체지향 프로그램의 유연성(ex: 장난감 배터리가 일체형이 아닌 분리형으로 배터리가 떨어지면 배터리만 교체하면 된다) 배터리에 의존해서 배터리를 주입한다 컨테이너 안에 객체(bean)들이 있는데, 이때 커다란 객체 안에 또 다른 객체가 주입을 하는 것이 DI 형태 학사관리 프로그램에서 데이터베이스를 가져오는 클래스를 dao라고 했을 때, dao에 의존하여 학생들의 정보를 수정하거나 삭제하는 등 기능들을 구현할 때 각각의 기능들은 dao에 의존하기 때문에 DI 프로그램 방법이다
스프링 프로젝트 테스트 사진과 같이 테스트해보는 프로젝트를 메이븐 프로젝트로 생성하였다 기초적이면서 가장 중요한 것은 java/resources를 구분해야 한다 src/main/java : 자바 파일 관리 src/main/resources : 자원 관리 자바 파일은 말 그대로 코딩을 하는 파일들을 모아놓고, 자원 파일은 코딩할 때 필요한 자원들을 모아놓는다 그리고 pom.xml에 필요한 모듈들을 넣어놓는다 파일에 필요한 모듈들만 넣어놓은 모습 메인화면에서 스프링을 사용하기 전에는 생성자로 (new Transpotation) 만들어야 다른 클래스에서 사용할 수 있었는데 스프링에서 제공하는 context 모듈을 통해 접근하는 방식에서 원래 방식과 큰 차이가 있다 지금은 테스트용으로 bean이 한 개지만, 후에 프로젝트를 진행할 때..