IoC

Inversion of Control : 제어의 역전

 

 

정의 및 역할

 

IoC 컨테이너는 DI (의존관계 주입) 기능을 제공한다.

 

- DI : Dependency Injection

객체간 의존관계를 생성자/Setter로 명시해 객체 생성시 의존관계를 주입하는 방식을 따르는 디자인패턴이다.

 

 

IoC란 기존에 Java에서 객체를 생성하고 의존관계를 직접 주입했다면, 

스프링에서는 컨테이너가 객체를 생성하고 의존관계를 주입하는 일을 담당하기 때문에

제어의 주체가 (어플리케이션 > 컨테이너)로 역전된 것을 의미한다.

 

이때 스프링 컨테이너가 생성하고 관리하는 객체들을 Bean 이라고 부른다.

(자바에서의 Bean도 자바로 작성된 객체이다.)

 

 

 

컨테이너 동작방식 

 

IoC 컨테이너는 어플리케이션의 설정 메타데이터를 읽고 자바 리플렉션 API를 사용해 객체들과 의존관계를 인스턴스화 한다.

(참고 : docs.oracle.com/javase/tutorial/reflect/index.html)

 

 

- 메타데이터의 주요 엘리먼트

  • <bean> : 스프링 컨테이너가 관리하는 객체를 정의한다.
  • <constructor-arg> : Service 인스턴스를 Controller 생성자 인수로 전달한다.

 

설정 메타데이터의 제공방식은  (1) xml / (2) 자바 어노테이션 (@) / (3) 자바코드  가 있다.

 

 

 


Reference

책 : 배워서 바로쓰는 스프링 프레임워크 (한빛미디어)

반응형

0. 환경설정

 

MySQL, DBeaver 설치 및 연동

1. MySQL 설치 MySQL :: Download MySQL Installer Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer..

rokroks.tistory.com

 

1. Spring initializr 에서 프로젝트 생성

본인의 Java 버전에 맞게 선택 후 Dependencies에 필요한 것들을 추가한다.

 

 

 

2. build.gradle에 bootstrap 추가

1번의 프로젝트를 다운받아 build.gradle 파일의 dependensies에 bootstrap을 추가한다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'mysql:mysql-connector-java'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	runtimeOnly 'org.webjars:bootstrap:4.5.0' //추가
}

 

3. src > main > resources > application.properties 추가

아래 내용을 위 파일에 추가한다.

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/test?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=1234

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
  • spring.jpa.hibernate.ddl-auto : JAVA의 Entity를 참고하여, Spring Boot 실행 시점에 자동으로 필요한 데이터베이스의 테이블을 설정
    • none : 아무것도 실행하지 않음
    • create : SessionFactory 시작 시점에 Drop을 실행하고 Create를 실행
    • create-drop : SessionFactory 시작 시점에 Drop 후 Create를 실행, SessionFactory 종료 시 Drop
    • update : 변경된 Schema를 적용 (데이터는 유지)
    • validate : update처럼 Object를 검사하지만, Schema는 변경하지 않음. 변경된 Schema가 존재하면 변경사항을 출력하고 서버 종료
  • spring.datasource.url : 데이터베이스 URL

 

  • spring.mvc.view... : 웹 실행 시 아래 에러 해결

 


Reference

 

[Spring Boot] 게시판 구현 하기 (1) - 글 작성 & 글 목록 출력

이번 시간에는 Spring Boot와 MySQL를 연동하고 게시판 기능의 글 작성과 글 목록 출력을 구현해보겠습니다.

kyuhyuk.kr

 

 

[Spring] "This application has no explicit mapping for /error, so you are seeing this as a fallback." 문제 해결

Eclipse에서 다음과 같이 index.html을 만들고 main code를 실행하니 "This application has no explicit mapping for /error, so you are seeing this as a fallback." 에러 출력됨 해결책: [src/main/resource..

hororolol.tistory.com

 

반응형

※ 본 게시글은 '배워서 바로 쓰는 스프링 프레임워크' 책으로 공부한 내용을 정리한 글입니다 ※


1. 스프링 프레임워크란

: 자바 엔터프라이즈 애플리케이션 개발을 단순하게 해주는 오픈소스 애플리케이션 프레임워크이다.

  

 

Spring Framework

 

spring.io

▲스프링 프로젝트 홈페이지 : 참조문서와 API를 볼 수 있음

 

 

스프링의 특징

  • 구조가 잘 잡히고 유지 보수가 쉬우며 테스트에 좋음
  • 독립 실행 자바 애플리케이션/ 웹 애플리케이션/ 애플릿 등 다양한 유형의 자바 애플리케이션 개발 가능
  • POJO로 개발하는 것을 권장 (Plain Old Java Object 기존자바객체)
  • 추상화 계층 제공 (준비코드 처리) -> 상호작용 쉬워짐

 


 

2. 스프링 모듈

스프링은 담당하는 애플리케이션 개발 요소에 따라 여러 모듈로 구성된다.

모듈 그룹 설명
핵심 컨테이너 스프링 기반을 이루는 모듈
◆ spring-core / spring-beans : 스프링 DI 기능과 IoC 컨테이너 구현 지원
◆ spring-expression : SpEL(스프링 표현언어, 애플리케이션 객체설정) 지원
AOP와 계측 ◆ spring-aop : AOP 기능 지원(AOP : Aspect Oriented Programming 관점기반 프로그래밍)
◆ spring-intrument : 클래스 계측지원
메시징 ◆ spring-meassaging : 메시지 기반 애플리케이션 개발에 유용
데이터 접근/통합 DB나 메시징 공급자와의 상호작용을 쉽게해주는 모듈
◆ spring-jdbc : JDBC를 사용한 DB사용 단순화 지원

spring-orm : ORM(객체-관계 매핑) 프레임워크 통합 지원 (하이버네이트, JPA)
spring-jms : JMS 공급자와의 상호작용 지원
 spring-tx : 프로그램을 통한 선언적 트랜잭션 관리 지원
 spring-web : 모든 웹 모듈이 공통으로 사용하는 클래스, 인터페이스 정의
 spring-webmvc : servlet, RESTful 웹 개발을 쉽게 해줌 (블로킹방식들)
 spring-webflux : 반응형(논블로킹), RESTful 웹 개발을 쉽게 해줌 
 spring-websocket : 웹소켓 프로토콜 지원
테스트  spring-test : 단위/통합테스트 지원

스프링의 여러 모듈은 애플리케이션에 꼭 필요한 부분만 포함하도록 설계한다.

 

 

 

스프링 배포판 명명규약

spring-<짧은 모듈 이름>-<스프링 버전>.jar

(짧은 모듈 이름 : aop, beans, context, expressions)

 

 

 

스프링 모듈 간 상호 의존 관계

 

의존관계 : 객체가 다른 객체와 상호작용하는 경우

출처 taejin0527.github.io

 

 


 

3. 스프링 기반 프레임워크

프레임워크 설명
스프링 시큐리티 엔터프라이즈 애플리케이션을 위한 인증, 권한부여 프레임워크
- XML에 빈 몇개를 설정하는 것 만으로 인증, 권한의 특징 부여 가능
스프링 데이터 여러 유형의 DB를 일관성있는 프로그래밍 모델로 사용가능하게 해줌
스프링 배치 애플리케이션이 뭉텅이로 작업을 처리하는 경우
스프링 통합 EA (기업 애플리케이션 통합) 제공
스프링 소셜 SNS와 상호 작용해야 하는 경우

사용중인 스프링 버전과 호환되는 버전인지 확인 후 사용하기

 

 

 


스프링의 특징과 모듈, 프레임워크에 대해 공부하고 정리해보았다. 다음은 IoC 컨테이너에 대해 알아보자.

반응형

'Web > Spring' 카테고리의 다른 글

스프링 프레임워크 (2) - IoC 컨테이너, Bean  (0) 2022.04.28
Spring Boot -프로젝트 생성  (0) 2021.05.14
스프링 공부 시작!  (0) 2021.05.04

그동안 웹과는 관련이 없는 프로젝트를 진행했다.

 

마지막으로 웹을 사용했던건 학부 졸업작품때 PHP로 주먹구구식 페이지를 구현했던 것..

(그마저 펌웨어가 주였던 작품.....)

 

그래서인지 항상 웹은 공부하기 싫으면서도 모르니까 해야만하는 존재였다. 

 

구구절절 어쩌구 어쨌든 재택근무를 하게 되어 이번 기회에 스프링공부도 시작해보려고 한다.

 

현미발 ㅎ2

부끄럽지만 작년에 법카로 구매했던 '배워서 바로 쓰는 스프링 프레임워크' 책으로 공부할 예정이다.

반응형

+ Recent posts