[Spring] 스프링 기초

Gammi·2023년 1월 16일
0

Spring

목록 보기
1/6

프레임워크?

  • 프로그램을 구현하는데 필요한 라이브러리 및 개발 방식 모음
  • 다양한 애플리케이션 개발을 위해 필요한 코드들의 자동화



✔ 스프링 프레임워크


  • 자바 플랫폼 구현을 위한 오픈 소스 프레임 워크

  • 동적 웹사이트 개발을 위한 서비스 제공

    -> JSP가 없어도 동적 서비스 구현 가능(Spring Boot 필요)

  • 스프링 프레임워크에서도 동적 웹 구현 시 MVC 패턴(Spring MVC) 사용

  • 기존 동적 웹 애플리케이션을 스프링으로 구현 시 훨씬 압축된 코드 사용하여 간편하게 구현 가능

    -> 압축된 코드 사용을 위한 설정 작업이 많음

  • 대한민국 정부 관련 프로젝트를 진행하는 기업에서 주로 사용하는 '전자정부 표준 프레임워크'의 기반이 되는 프레임워크


  • 스프링 프레임워크 사용한 개발 방법

    • 이클립스 상에서 스프링 관련 애드온 설치

    • 이클립스 기반으로 제작한 Spring Tools Suite(STS) 설치





✔ 스프링 프로젝트 개발 과정


  1. 프로젝트 생성
  1. Spring Legacy Project 선택



  1. Spring MVC Project 꼭 선택!

  • 바로 finish 누르지 말고 Next 넘어가기



  1. 패키지명은 com.xxx.xxx 규칙 사용



  1. web.xml(=배포서술자)의 서블릿 관련 설정 내용
  • src -> main-> webapp -> WEB-INFweb.xml

  1. 오류 제거

  • 두 번째 줄 xmlns="http://java.sun.com/xml/ns/javaee" 부분에서 java 중 하나를 대문자로 바꿔주기

    -> Java, JAVA 둘 다 상관 없음!



  1. 설정 내용

<servlet>
	<servlet-name>appServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
		
<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

  • servlet-mapping 태그가 루트(/)를 요청 받아 appServlet 이름의 servlet 태그 항목을 찾아 연결

  • /WEB-INF/spring/appServlet/sevlet-context.xml 파일에 지정된 파라미터 사용

    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
     </beans:bean>
    • 컨트롤러에서 return문을 통해 Dispatch 방식으로 이동할 뷰페이지(파일명)을 이름만 지정하면 해당 이름 앞에 prefix에 해당하는 문자열을, 해당 이름 뒤에 suffix에 해당하는 문자열을 자동 결합하여 이동할 경로 문자열을 생성





✔ 스프링 기본 설정 파일


xml 파일별 용도

1. web.xml

  • 웹 서비스 요청 관련 기본 설정이 기록됨

  • 스프링 각 설정 파일(xml)들의 위치 설정

  • 클라이언트 요청이 가장 먼저 도달하는 설정 파일


2. root-context.xml

  • 웹(JSP)과 무관한 자바빈 설정(Service, Repository 등)

  • 비즈니스 로직 설정(서버 운영에 필요한 설정 내용 등을 포함)

    -> 주로 database-context.xml 등의 별도의 xml 파일을 생성하여 DB 내용을 분리하는 등 각 역할에 맞는 xml 파일을 생성하여 분리하여 관리

  • 외부 클래스(JDBC 라이브러리 등)에 접근 시 <bean> 태그 사용

    -> 공통으로 사용할 자바빈 객체 설정


3. servlet-context.xml

  • 웹(JSP)과 관련 있는 자바빈 설정(Controller, MultipartResolver 등) 내용 포함

  • 화면 표시를 위해 필요한 설정 내용들을 포함(인코딩 등)

  • URL 관련 설정





✔ 필수 기본 라이브러리


pom.xml에 추가(변경) 필요한 사항

1. properties 태그 버전 변경

<properties>
	<java-version>11</java-version>
	<org.springframework-version>5.3.24</org.springframework-version>
	<org.aspectj-version>1.6.10</org.aspectj-version>
	<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
  • <java-version> 현재 JDK 버전에 맞게 11버전으로 변경

  • <org.springframework-version> 스프링 버전에 맞게 5.3.24 버전으로 변경



2. 자바 버전 변경

  • <build> -> <plugins> -> <plugin> 태그 중

    <artifactId>maven-compiler-plugin</artifactId> 태그 찾기

<configuration>
	<source>11</source>
	<target>11</target>
	<compilerArgument>-Xlint:all</compilerArgument>
	<showWarnings>true</showWarnings>
	<showDeprecation>true</showDeprecation>
</configuration>
  • <source> 현재 JDK 버전에 맞게 11로 변경

  • <target> 현재 JDK 버전에 맞게 11로 변경



3. 라이브러리 추가 및 변경

  • mvnrepository.com에서 javax.servlet-api 4.0.0 버전 사용

⭐ 기존 라이브러리

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
	<scope>provided</scope>
</dependency>

⭐ 변경 후 라이브러리

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>4.0.0</version>
	<scope>provided</scope>
</dependency>

  • 변경 사항이 적용되면 Maven Dependencies 항목에 모든 라이브러리가 표시됨

  • 만약 적용되지 않은 사항이 있다면 프로젝트(우클릭) - Maven - Update Project 클릭하여 업데이트 수행



🔗 참고

소스코드 빌드(Build)

  • 소스코드를 컴퓨터에서 실행 가능한 가공물로 변환하는 과정 또는 결과물

  • 빌드를 수행하기 위해 빌드 도구(Build tool) 필요

    -> 프로젝트 생성, 테스트, 배포 등의 작업 위한 도구

    -> 대표적인 빌드 도구 : Ant, Maven, Gradle

Maven(메이븐)

  • 자바 프로젝트 관리 도구

  • 필요한 라이브러리를 pom.xml 파일에 기술하면 자동 다운로드 및 Build path 추가까지 수행

    • POM(Project Object Model)
  • 간단한 설정만으로 배포 관리 가능

profile
개발자가 되었어요⭐️

0개의 댓글