1.개발자가 가장 먼저 체크하는 순서
1)메이븐 - pom.xml부터 체크하고
메이븐 - 스프링에서 많이 씀
그래들 - 안드로이드에서 씀
pom.xml
application.properties
빌드 : 컴파일 - 실행 - 테스트 - 배포
메이븐 : 빌드툴
[maven repository]
eclipse pom.xml에 lib추가 방법
https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api/1.2
[pom.xml : </properties> 밑에 붙여넣기]
<repositories>
<repository>
<id>oracle</id>
<url>http://www.datanucleus.org/downloads/maven2/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-boot-devtools는 클래스 수정시 웹서버를 재시작하여 결과를 바로 반영 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 오라클 JDBC 드라이버 -->
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- MyBatis 라이브러리 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- MyBatis sql pretty -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<!-- JSP를 사용하기 위한 라이브러리 -->
<!-- 톰캣 파서 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- jstl 라이브러리 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://146.56.137.240:8282/manager/text</url>
<username>admin</username>
<password>1234</password>
</configuration>
</plugin>
<!-- cmd에 입력 ( 배포 ) : mvnw.cmd tomcat7:redeploy -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
[application.xml]
#server port number
server.port = 8282
#datasource (oracle)
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
#spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=scott
spring.datasource.password=tiger
#xml location
mybatis.mapper-locations=classpath:mappers/**/*.xml
#### jsp
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
롬복(projectlombok) 다운
https://projectlombok.org/download
프레임워크 : 특정한 목적에 맞게 프로그래밍을 쉽게 하기 위한 약속 | 설계도에 맞춤 ⇒ 일관성↑ 유지보수↑
스프링 : 자바 언어를 기반으로 다양한 어플리케이션을 제작하기 위한 약속된 프로그래밍 툴
<스프링 장점>
1.정형화 : 일정수준이상의 품질을 기대
2.유지보수가 쉽다
3.개발자에게 기본적인 패턴(DI,AOP,서비스 추상화)등을 강제 시킴
4.유연성 및 각 모듈을 조립(설정을 통한)하면 기능을 쉽게 구현
5.모듈 추가 제거 및 관리가 수월
스프링 단점
1.습득시간이 오래걸림
2.스프링 설정하는 것에만 익숙해지다보니 코딩 실력이 떨어지게 됨
3.무겁다
의존성
각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
1. Setter Injection
2. Constructor Injection
3. Method Injection
제어의 역전 : 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미
bean 객체 : (getter/setter를 갖고 있는 객체)스프링 IoC 컨테이너가 관리하는 자바 객체
스프링
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
- POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
- 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
[계산 Pencil.java] package com.javalec.ex; public interface Pencil { public void use(); } --------------------------------------------------------------------- [계산 Pencil4B.java] package com.javalec.ex; public class Pencil4B implements Pencil { @Override public void use() { System.out.println("4B 연필 입니다."); } } --------------------------------------------------------------------- [계산 Pencil6B.java] package com.javalec.ex; public class Pencil6B implements Pencil { @Override public void use() { System.out.println("6B 연필 입니다."); } } --------------------------------------------------------------------- [계산 Pencil6BWithEraser.java] package com.javalec.ex; public class Pencil6BWithEraser implements Pencil { @Override public void use() { System.out.println("6B에 지우개가 있습니다."); } } --------------------------------------------------------------------- [계산 applicationCTX2.xml] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 객체생성 --> <bean id="pencil" class="com.javalec.ex.Pencil4B"></bean> </beans> --------------------------------------------------------------------- [계산 MainClass.java] package com.javalec.ex; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; public class MainClass { public static void main(String[] args) { String configLocation = "classpath:applicationCTX2.xml"; AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation); Pencil pencil = ctx.getBean("pencil",Pencil.class); pencil.use(); } }
[결과값] 4B 연필 입니다.
[계산 HomeController.java] package edu.global.ex.controller; import org.springframework.web.bind.annotation.*; @RestController public class HomeController { @GetMapping("/") public String home() { return "안녕하세요"; } }
[결과값]