기억보다 기록을

[Spring] 웹 프로젝트 구현(1) 환경설정/의존성 주입(DI)이란?/오라클 설치 본문

Development/Spring

[Spring] 웹 프로젝트 구현(1) 환경설정/의존성 주입(DI)이란?/오라클 설치

juyeong 2022. 2. 21. 22:59
반응형

안녕하세요. 기본적인 스프링 웹 프로젝트를 구현하려 합니다.

처음부터 구현하려니 설렙니다ㅎㅎ

요즘 자료구조나 파이썬 위주로 공부하면서

웹구현은 기본서 위주로 개념을 보고있었습니다. 생각해보니 프로젝트를 한지 좀 됐더라고요. 

백견불여일타라는 말처럼 구현이 필요한 것 같아 포스팅을 씁니다. 

(디비는 오라클 사용할건데 이 프로젝트 다음엔 스프링부트와 몽고db 사용해 보려고요.

것도 무척무척 기대됩니다. 새로운 디비 사용 짜릿해..)

첫날 환경설정은 다음과 같습니다. 함께 만들어봐요! 

 

JAVA 11 (8도 상관없습니다) 

스프링 3.9.14

(legacy Spring Project 사용을 위해 구버전으로 설치했습니다. 구글에 sts3 검색 후 spring wiki에서 다운받아주세요)

maven 5.2.7

lombok 1.18.16

jUnit 4.12

log4j 1.2.7

오라클 11g EE

 

 

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>orzg.zerock</groupId>
	<artifactId>controller</artifactId>
	<name>ex00</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>5.2.7.RELEASE</org.springframework-version>
		<org.aspectj-version>1.6.10</org.aspectj-version>
		<org.slf4j-version>1.6.6</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.7</version>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>

		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.16</version>
			<scope>provided</scope>
		</dependency>


	</dependencies>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-eclipse-plugin</artifactId>
				<version>2.9</version>
				<configuration>
					<additionalProjectnatures>
						<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
					</additionalProjectnatures>
					<additionalBuildcommands>
						<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
					</additionalBuildcommands>
					<downloadSources>true</downloadSources>
					<downloadJavadocs>true</downloadJavadocs>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<configuration>
					<source>11</source>
					<target>11</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>exec-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<mainClass>org.test.int1.Main</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

 

 

 

스프링의 Dependency Injection

스프링 웹 프로젝트를 시작하기전에 의존성주입(dependency Injection)에 대해 잠깐 얘기하려 합니다. 

개발자는 스프링의 DI를 통해 내가 만들 코드에 좀 더 집중할 수 있습니다.

어떤 객체를 사용하려 할 때 스프링이 가지고 있는 객체들을 자동으로 주입해주기 때문입니다.

어떻게보면 스프링은 웹을 위한 프레임워크가 아니라 객체지향 프로그래밍을 위한 프레임워크라는 말이 맞는 것 같습니다.

필요한 것을 선언하면 스프링이 알아서 객체를 넣어주니까요. 

 

더 자세하게는, 객체의 생성과 의존관계를 스프링 컨테이너가 자동으로 관리해주는 것입니다. (Inversion of Control, IoC)

스프링 컨테이너는 객체를 look up/Injection 합니다. Injection에서

setter 주입,  생성자 주입, 필드 주입의 방법을 쓰고요. 

간단히 말씀드리면

setter 주입

(@Setter(onMethond = {@Autowired} ))

생성자 주입

(@AllArgrsConstructor)

필드 주입

(@Autowired)

그리고 final 하게 선언해주는 방법이 있습니다. 

@Component
@ToString
@RequiredArgsConstructor
public class Computer {

	private final Keyboard kb;

}

 

이 다음은 오라클을 설치해주시고요.

오랜만에 오라클 켰는데 비밀번호 만료됐다해서 헤맸습니다.ㅎㅎ

로그인 후 sys 계정으로 들어가서 사용자 생성해주세요.

 

create user web_ex identified by web_ex;
grant connect, dba to web_ex;

오라클은 포트넘버(8080)을 변경해주겠습니다. 톰캣 포트와 겹치지 않게 9090으로 변경합니다. 

exec dbms_xdb.sethttpport(9090);

 

 

스프링 배우는 분들의 클래식, 코드로 배우는 웹프로젝트(구멍가게코딩단) 참고해서 만들었습니다.

그 외 서적이나 구글링 내용이 포함되어 있습니다. 

반응형