[Framework] TIL 051 - 23.09.25

유진·2023년 9월 25일
0

07_Framework

00_Framework

  • Frame = 틀
  • work = 일하다
  • Framework = 틀에 맞춰 일하다

  • Framework = 집
    (Framework가 없으면 개발을 할 수 없음, 필수사항)
  • Library = 가구
    (개발자가 필요할 때 가져다 쓰는 것, 선택사항)

  • 영속성 = 영원히 지속 가능한 성질 (Database)

Framework 사용하면 코드가 간단해짐!


01_Spring 개요

  • 자바 언어로 만드는 프레임워크

  • 전자정부 표준 프레임워크 = 표준화된 개발 프레임워크
  • Spring == ' 동적 웹사이트 '를 개발하기 위한 서비스

cf)
https://spring.io/

  • 제어 반전 == 제어 역전

원래는 new 객체() -> 개발자인 내가 작성
이제는 new 객체() -> ' 프레임워크 '가 작성 -> Bean

  • Plain Old Java Object -> 외부 상속 받지 않는 것
    이제는 extends HttpServlet 사용하지 않음 == 코드길이 감소

  • 객체지향적 설계 ==
    클래스 Service <----> 클래스 DAO
    Service 필드에
    private MemberDAO dao; MemberDAO 객체를 생성
    -> 하나가 삭제되면 다른 클래스도 삭제됨 (결합력 높음)
    -> 객체지향적 설계에 벗어남

CF) 인터페이스는 결합력 낮음
부모타입 = 자식객체(자식1, 자식2, 자식3)

앞으로 Spring에서는
Service / Servicelmpl 이렇게 나누어 진행할 예정!

  • Spring AOP ==
    원래는 Controller <--> Service <--> DAO
    <--> 사이에 AOP 기술 사용할 예정 (ex. commit, rollback)

  • Model = DB
  • View = 화면(front)
  • Controller = 백(back)
  • PSA = '추상화' -> JDBC, oracle, mybatis 원하는 것 사용

가장 중요한 그림! = 전체적인 흐름 알 수 있음

  • dispatcher Servlet: 요청을 받아 알맞은 controller 전달 (모든 요청 / 응답이 거치는 단계)

Spring Framework 설치

1_ 개발 환경 구축

https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3

  • 3 버전 다운로드

tools 파일에 모아두기

여기에 압축풀기

sts-3.9.18.RELEASE만 tools 파일에 옮기기

sts-bundle은 삭제해도 됨


jdk 11 버전 다운로드 받기


tools에 sts-3.9.18 / jdk 11만 있으면 됨


톱니바퀴 STS 더블클릭해서 메모장으로 열기


저장 후 닫기


우리가 쓸 것 -> 바탕화면에 바로가기 만들기


STS 실행하기

기본설정 > Google Drive > 2_프로젝트 세팅 참고 ..


기본 설정하기

  • Progress 중요하므로 꼭 켜놓기!




  • HTML, JSP FILES도 동일한 방법으로 진행


  • Build 부분 다 uncheck(성능저하 막기 위해서 언체크)




  • 다 YES 누르기

CF ) 웬만해서는 progress가 로딩이 끝나면 작업하기!



Restart 하기


꼭 Spring MVC Project가 있어야 함

  • Project name 작성 -> Next
  • 패키지명 작성 = 3레벨로 작성해야 함

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> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
	<groupId>edu.kh</groupId> <!-- 최상위 패키지 1, 2레벨 -->
	<artifactId>project</artifactId> <!-- 최상위 패키지 3레벨 == context-path -->
	<name>boardProject</name> <!-- 프로젝트 명 -->
	<packaging>war</packaging>  <!-- 배포 형식 -->
	<version>1.0.0--BUILD-SNAPSHOT</version>
	
	<!-- properties : 메이븐이 적용된 프로젝트에서 공통적으로 사용할 값을 작성하는 태그(전연 변수) -->
	<properties>
		<java-version>11</java-version>
		<org.springframework-version>5.3.14</org.springframework-version>
		<org.aspectj-version>1.9.9.1</org.aspectj-version>
		<org.slf4j-version>1.7.25</org.slf4j-version>
	</properties>

	<!-- dependencies : Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어 프로젝트에 필요한 파일을(라이브러리) 
		사용자가 직접 받을 필요 없이 해당 태그 내에 지정된 형식으로 작성하면 네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함. -->
	<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>
				
		<!-- AspectJ : AOP 기능을 사용하기 위한 언어 문법 -->
		<!-- aspectjrt : AspectJ 런타임 프로그램 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- AspectJ Weaver : aspect의 정보를 바탕으로 aspect를 구성한 코드를 생성하는데 필요한 유틸리티 프로그램 -->
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>
		
		<!-- Log4j (Logging) -->
		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
		<dependency>
		    <groupId>org.apache.logging.log4j</groupId>
		    <artifactId>log4j-core</artifactId>
		    <version>2.17.1</version>
		</dependency>
		<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>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<!-- Servlet 버전을 4.0으로 변경 -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>javax.servlet-api</artifactId>
		    <version>4.0.1</version>
		    <scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		
		
		<!-- 단위 테스트 도구 (JUnit) -->
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
		    <groupId>junit</groupId>
		    <artifactId>junit</artifactId>
		    <version>4.13.2</version>
		    <scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-test</artifactId>
		    <version>${org.springframework-version}</version>
		    <scope>test</scope>
		</dependency>    
	</dependencies>
	
	<!-- build : 프로젝트 빌드 시 사용되는 플러그인 추가 및 버전 정보 설정 -->
    <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>
            
            <!-- 컴파일러 플러그인은 프로젝트의 소스(자바코드)를 컴파일하는 데 사용
			jdk 1.6 이상 사용 시 3.0 이상 버전을 사용, source, taget에는 사용하는 jdk 버전을 작성 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.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>
            
            <!-- Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer -->
			<!-- 메이븐 구성 문제로 인한 pom.xml 오류 발생 시 해결 -->
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.2</version>
			</plugin>
        </plugins>
    </build>
</project>
  • lombok, lib 같은 것들만 추가하기!

0개의 댓글