on
자바 MVC 프로젝트 기초
자바 MVC 프로젝트 기초
반응형
**Mavan
=>Java Build Tool
2.Java Build Tool의 종류
1)ant : build 만 해주는 tool
=>최근에는 거의 사용되지 않고 문법만 다른 툴에서 사용할 수 있도록 해주고 있습니다.
2)*maven : build tool 이면서 외부 라이브러리 관리를 편리하게 해주는 tool
=>이전에 만들어진 java aplication 들은 거의 이방식!!
3)gradle: build tool 이면서 외부 라이브러리 관리를 편리하게 해주는 tool
=>android가 채택한 방식
=>build.gradle이라는 설정 파일에 json 방식으로 설정
3.maven
=>pom.xml 파일을 이용하여 프로젝트를 관리
=>pom.xml 파일에 설정을 하면 build를 할 때 작업들을 자동으로 수행해주는 tool
4.maven 설치
=>eclipse 계열의 IDE를 사용하면 내장되어 있습니다.
5.maven 프로젝트 생성
1)maven 프로젝트로 처음부터 생성
=>eclipse 에서 maven 프로젝트를 만들거나 spring 프로젝트를 만드는 경우
2)java application을 만들고 변환
6.po m.xml 파일의 설정 태그
1)repositories
=>라이브러리를 다운받을 저장소를 생성
=>설정하지 않으면 maven 중앙 저장소에서 다운로드
=>오라클의 경우 오픈 소스가 아니라서 중앙 저장소에 없기 때문에 repositories를 설정해야만 다운 가능
=>공공기관,대기업 같은경우 별도의 저장소를 갖는 경우가 많아서 그 저장소를 설정
2)dependencies
=>실제 다운받을 외부 라이브러리를 설정
7.라이브러리 사용 과정
1)pom.xml 파일의 dependencies 태그에 라이브러리 설정
2)project가 build 될 때 자신의 계정의 .p2 디렉토리에서 라이브러리를 찾아 사용
3)없으면 저장소에서 다운받아서 .p2에 저장하고 사용
8.인터넷이 느리거나 동시에 여러 컴퓨터가 접속해 다운받는 경우 제대로 다운이 안되는 경우가 있다.
이런 경우 다른 컴퓨터에서 repository를 복사해서 붙여넣기 한 후 사용해도 된다.
9.MYSQL 라이브러리의 클래스를 로드 - 실습
1)java application 프로젝트를 생성
2)Main 클래스를 만들어 실행
public class Main { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("MySQL 드라이버 로드 성공"); }catch(Exception e) { System.out.println("MySQL 드라이버 다운로드 실패"); } } }
->드라이버 파일이 없어서 예외가 발생
3)이전의 방식으로 이문제를 해결하는경우
- java application : MySQL 드라이버 다운받고 프로젝트에 복사하고 파일을 선택한 후 build path에 추가
- java web application : MySQL 드라이버 다운 후 프로젝트의 WebContent/WEB-INF/lib 디렉토리에 복사
4)maven project의 경우 - pom.xml 파일에 mysql 의존성만 설정하면 된다.
=>프로젝트를 maven 프로젝트로 변환
자바프로젝트 우클릭 후 [Configure] - [Convert to Maven Project]
=>생성된 pom.xml 파일에 의존성을 설정하는 코드 추가
mysql mysql-connector-java 8.0.16
5)실행
=>프로젝트 안에 Maven Dependencies 라는 디렉토리가 만들어지고 mysql 드라이버를 다운로드 후
build path에 추가
=>드라이버가 설치되어 예외가 발생하지 않음
**STS(Spring Tool Suite) 설치
=>스프링 전용 Eclipse
=>Spring 학습을 할 때는 이 Tool을 많이 사용하고 우리나라에서는 공공기관(전자정부 프레임워크)
이나 대기업 프로젝트(삼성 - AnyFramework)를 할때는 대부분 전용 프레임워크를 사용하는데
사용법이 STS와 유사
1.spring.io 사이트에서 다운로드
2.eclipse plug-in 으로 설치
=>[help] - [Eclipse Market Place]에서 sts를 검색
=>3.xx 버전을 install
최근에는 4.xx 버전이 출시되었는데 아직 현업에서는 3.xx 버전을 이용
**ioC(제어의 역전) inversion of control
=>클래스는 개발자가 만들고 클래스의 인스턴스는 프레임워크 WAS 가 만들어서 일반적인
프로그래밍의 흐름의 반대로 수행되는 것.
1.Factory Method Pattern 실습
1)Java Project 를 생성
2)Temp 클래스 생성
public class Temp { private int num; private String name; public Temp(int num, String name) { super(); this.num = num; this.name = name; } public Temp() { super(); } @Override public String toString() { return "Temp [num=" + num + ", name=" + name + "]"; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
3)main 메소드를 소유한 Main 클래스를 만들고 Temp 클래스를 사용
public class Main { public static void main(String[] args) { Temp temp = new Temp(); temp.setNum(1); temp.setName("Lee"); System.out.println(temp); } }
=>사용자가 만든 클래스를 가지고 직접 생성자를 호출해서 인스턴스를 만들고 사용
2.Factory Method Pattern
=>클래스의 인스턴스를 new를 직접 호출해서 생성하지 않고 다른 클래스의 메소드를 이용해서
생성하는 방식
=>만드는 과정이 복잡하거나 디자인 패턴이나 기타 코드를 클래스에 추가하고자 하는 경우 사용!
3.실습
1)Factory 클래스
//Temp 클래스의 Factory Class public class TempFactory { //Temp의 Factory 메소드 public static Temp create() { return new Temp(); } }
2)main 메소드 수정
public class Main { public static void main(String[] args) { //기존의 인스턴스생성 방식이 아닌 TempFactory의 생성으로 TempFactory.create()를 이용한다. Temp temp = TempFactory.create(); temp.setNum(1); temp.setName("Lee"); System.out.println(temp); } }
4.Singleton 패턴
하나만 만들어 공유 = static 접근자
한번만 만들려면 어떻게 써야하는지..? 알아아한다
=>클래스가 인스턴스를 1개만 만들수있도록 된 디자인 패턴
=>서버쪽의 클래스들은 대부분의 경우 여러 개의 인스턴스를 만들지 않고 하나의 인스턴스가
스레드를 이용해서 클라이언트 들의 요청을 처리하도록 해야 하는 경우가 대부분이고
**spring java application project 생성
1.[File] - [New] - [Other] - [Spring] - [Spring Lagacy Project]
2.디렉토리가 생성되지 않은 경우
1)maven 프로젝트로 변환
프젝 선택후 마우스 우클릭, [configure] - [convert to maven project]
2)pom.xml 파일에 블로그의 코드를 복사해서 붙여넣기
4.2.1.Final 1.0.13 1.7.5 4.12 org.springframework spring-context ${spring-framework.version} org.springframework spring-tx ${spring-framework.version} org.slf4j slf4j-api ${slf4j.version} compile ch.qos.logback logback-classic ${logback.version} runtime 1.6 UTF-8 UTF-8 5.0.7.RELEASE org.hibernate hibernate-entitymanager ${hibernate.version} org.springframework spring-test ${spring-framework.version} test junit junit ${junit.version} test
3)속성을 2개 갖는 클래스를 생성
=>디렉토리가 만들어진 경우에는 src/main/java 라는 디렉토리에 생성하고 그렇지 않은 경우는 root
디렉토리에 생성
public class Item { private int num; private String name; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Item [num=" + num + ", name=" + name + "]"; } }
**Spring 의 Bean Container
=>Spring에서는 Spring이 제어권을 가지고 생성하고 관계를 설정하는 객체를 Spring Bean 이라고 합니다.
이 Bean이 Spring이 객체를 생성하고 관리하는 제어의 역전이 적용된 객체
=>Bean Container를 만드는 방법
1.annotation을 이용
1)설정
=>클래스를 만들고 클래스 위에 @Configuration 어노테이션을 추가
=>인스턴스를 생성해서 리턴하는 메소드 위에 @Bean 어노테이션 추가
2)사용
AnnotationConfigApplicationContext 변수명 =
new AnnotaionConfigApplicationContext(앞에서 만든 클래스이름.class);
인스턴스이름 = 변수명.getBean("메소드 이름", 메소드가 리턴하는 클래스이름.class);
=>이렇게 만들면 싱글톤을 적용하지 않아도 자동으로 싱글톤 패턴의 객체가 리턴됩니다.
3)실습
=>Factory 클래스의 역할을 수행할 클래스를 생성
domain.Factory 클래스
//Spring의 Bean을 생성해주는 클래스라는 어노테이션 @Configuration public class factory { //Bean을 만들어주는 메소드라는 어노테이션 @Bean public static Item create() { return new Item(); } }
=>main 메소드를 소유한 클래스를 만들어서 인스턴스를 만든 후 테스트
public class SpringMain { public static void main(String[] args) { //SpringContainer 클래스 객체 만들기 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(factory.class); //Bean 생성 메소드를 호출해서 Bean을 생성 //Factory 클래스의 create 라는 메소드를 이용해서 인스턴스를 생성하고 리턴 Item item1 = context.getBean("create", Item.class); item1.setNum(1); item1.setName("사과"); System.out.println(item1); //해시코드 출력 System.out.println(item1.hashCode()); Item item2 = context.getBean("create", Item.class); item2.setNum(2); item2.setName("한라봉"); System.out.println(item2); //해시코드 출력 System.out.println(item2.hashCode()); //*이것이 바로 Singleton Pattern } }
다음시간에 이어서 뵙겠습니다!
반응형
from http://bucheoneduc.tistory.com/28 by ccl(A) rewrite - 2021-12-23 21:27:05