Spring Framework

ayleen·2022년 1월 9일
0

스프링수업일지






그 동안 내가 배웠던 것은 MVC Framework이다.
이 방법은 Model, View, Controller 세 가지 요소를 모두 개발해야해서 생산성이 떨어지고 시간을 많이 소비한다.

이번에 배우는 Spring Framework(Spring Web MVC)는 이미 만들어진 요소들을 가져와서 블럭을 조립하듯이 만들 수 있다. (우리나라에서 만들어놓은 공통컴포넌트 = 전자정부표준프레임워크(egovframe.go.kr)

▲ 전자정부표준프레임워크 사이트에서 다운받을 수 있다.




프로젝트 만들기


1. Spring Legacy Project

2. Spring MVC Project 선택

▲ MVC Project로 만들어야 골격이 만들어짐.

3. 패키지를 만들 때 3단계로 만든다.

▲ ex) kr.ayleen.myapp -> http://000.0.0.0:0000/myapp -> 마지막에 있는 이름이 웹페이지를 찾아가는 경로가 된다. context path라고 함. 서버에 myapp이라는 이름으로 등록된다.


▲ src 폴더는 Jaca Resources 폴더와 같다. src>main>webapp = webContent랑 똑같음. 안에 html, css, jsp, js파일을 넣는다.
▲ pom.xml파일에서 숫자만 수정하면 버전을 바로 바꿀 수 있다.(pom.xml이 가장 우선적으로 적용되기 때문에 xml에서 바꾸지 않으면 나중에 다시 초기화되어버린다.)
사용하고 싶은 api 역시 dependency로 넣어주면 된다.(https://mvnrepository.com/)




Maven


Spring에서는 Maven이라는 툴이 내부에 존재하고 그 툴이 API를 관리해준다.
(Maven : 자바용 프로젝트 관리도구, DOS 프로그램)
Maven을 사용하려면 프로그램을 다운받아서 명령문으로 프로젝트를 만들어야 한다.
Spring은 Maven 프로그램을 연결시켜놨음. Maven이 pom.xml파일을 이용해서 프로젝트를 관리한다. 그래서 pom.xml을 수정하면 내부에 연결된 maven이 즉각적으로 파일을 관리해준다.




Spring 동작 흐름


* Controller : 클라이언트가 서버에 요청을 할 때 가장 먼저 요청을 받는 곳
frontController가 무거워지면 delay되기 때문에 역할을 나눠서 수행할 POJO(Plain Old Java Object)를 만든다.
Spring에서는 frontController를 제공해주기 때문에 POJO만 만들면 된다.

  • POJO(Plain Old Java Object) : FrontController의 역할을 대신한다.
    (FrontController가 안내원이면 POJO는 알바생같은 느낌)

    POJO 만들기
    class파일 만들고 controller로 이름 붙여줌 > @con + ctrl + space 컨트롤러 임포트 > @requestMapping 임포트 (클라이언트의 요청을 메소드와 연결시켜주는 기능을 하는 어노테이션. 괄호안에 어떤 요청을 받았을 때 움직일지 써줌. 처리는 메소드 함수로 하니까 아래에 함수를 만들어줘야함.) => HandlerMapping

  • View(Java Server Page) : controller에서 받아온 데이터를 jsp에 다시 요청
    => [요청의뢰(RequestDispatcher)]
  • Client의 요청을 controller에서 받아서 view로 전진시킨다 => [forward]
  • 그 요청을 다시 받는 동작 => [forwarding](웹에서 가장 중요한 동작임)
  • 메모리를 이용하는 방법으로 받아옴 => [객체바인딩]
    controller가 DAO에서 받아온 list를 setAttribute(HttpServletRequest)
    -> jsp가 꺼내갈 수 있도록 만들어진 view를 다시 controller에 forwarding 시켜줌.
    controller가 받아서 client에게 response 해줌.

Spring에서 제공하는 것 : FrontController, ViewResolver, HttpServletRequest(객체 바인딩 공간)
만들어야 하는 것 : jsp, POJO

  • 자식타입을 부모타입으로 받는것 : 업캐스팅
class A extends C {

}

class B extends C {


}

class Main{
   public static void main(String[] args){

        C a = new A();
        display(a)
        C b = new B();
        display(b)
   }
   public void display(C a){
   //public void display(Object a){

   }
}

*Spring에서는 jsp가 바로 실행되지 않는다.
Client가 Controller를 거쳐갈 수 있ㄷ로고 인위적으로 WEB-INF경로(보안디렉토리)로 집어넣어서 막아놓음.

-20220107





DB와 연결하기


기존 MVC에서는 DAO를 이용해서 실제 SQL과 쿼리문으로 연결하는 방법을 사용하였다.(JDBC)


기존(JDBC)DAO에서는 자바 코드와 SQL문이 섞여진 형태로 사용했다.
이 방법은 생산성이 떨어지고 개발 속도가 느리며, SQL문이 자바소스코드 안에 들어있어서 유지보수가 어렵다.(예를 들어 테이블 이름이 바뀌었다면 관련된 SQL문을 찾아서 일일이 모두 바꿔줘야한다.)
=> DB Framework(MyBatis API) : framework안에 JDBC가 들어있어서 기존 방법처럼 모두 만들 필요가 없다.

MyBatis : Java SQL mapping Framework (http://mybatis.org)
** mapping : 자바와 SQL쿼리문 연결


1. SQL문을 담아줄 파일 만들기
-> XML File로 만들어준다. 이름은 Mapper나 SQLMapper를 뒤에 붙여준다.


2. MyBatis에서 가져온 Mapping 문장을 붙여넣어준다.
-> 정의되어 있는 태그만 사용할 수 있다.(html태그나 xml안에 사용할수 있는 태그들이 정의된 것을 DTD/Schema라고 한다.)

  • namespace에 자바 파일을 연결시켜준다.

  • 쿼리문을 찾아가기 위해 id이름에 메서드 이름을 넣어준다.

  • DB를 가져올 resultType을 태그 안에 입력해준다.
    (태그는 select문이기 때문에 같은 select로 입력해줌)


3. 메서드 만들기
-> 아래 메서드를 실행하면 쿼리를 실행하게 된다.
안에 다른 내용은 필요하지 않다. 왜냐하면 MyBatis API가 대신 해주니까.


4. 컨트롤러에서 메서드를 호출할 수 있도록 연동시켜주기

- mapper 객체가 필요함 : private BoardMapper mapper;
- 메서드를 호출해서 데이터 받기 : List<Board.> list = mapper.selectAll(); request.setAttribute("list", list);




MySQL


** MySQL 설정 (비밀번호)

명령프롬프트에서 cd + MySQL 경로 입력
-u user -p
Enter password : 아직 패스워드가 없으므로 그냥 엔터
Show databases; > 만들어져 있는 database 확인하기

use mysql; > user table의 root사용자 password를 바꿔주기 위해 접속
show tables;
update user set password = password('1111') where host = 'localhost' and user = 'root'; > password를 암호화시켜서 바꾸라는 명령어
Query OK. 가 표시되면 변경 완료.
flush privileges; > MySQL에서 사용자 추가, 삭제, 권한 변경 등을 수행했을 때 반영하기 위해 사용.

  • mysql - user테이블에 MySQL database에 접근가능한 사용자 정보들이 담겨있음.



실습 데이터 만들기


1. 새로운 테이블을 만들기 위해 database를 만들기.

-> MySQL은 오라클과 다르게 database를 만든다.


2. 이클립스에서 DB접속


▲ 드라이버가 이미 경로에 연결되어 있는 것을 확인할 수 있다.(오라클로 치면 ojdbc6.jar)



▲ properties 수정해주기


3. SQL파일 만들기
-> domain 패키지에 파일을 만든다




oracle과 MySQL 차이
oracle : varchar2, sysdate
MySQL : varchar, datetime


-20220110-



profile
asdf

0개의 댓글