ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 30 - Spring + MVC패턴 + 전자정부 페이징 + Spring jar 세팅 + MyBatis
    개발/국비교육 2023. 7. 12. 17:54

    ■ workspaceSpring 

     

    스프링 툴을 사용하기 위해서 이클립스 대신 다음을 사용한다. 

    우리는 sts(Spring Tool Suite) 3버전 쓰고 있다. 

     

    스프링 부트 시작할 때 알아야 하는 것 | 요즘IT (wishket.com)

     

    스프링 부트 시작할 때 알아야 하는 것 | 요즘IT

    스프링은 장점이 많은 개발 도구이지만 설정이 매우 복잡하다는 단점이 있습니다. 그래서 스프링을 개발팀에서도 이런 단점을 인식하고 단점을 보완하고자 스프링 부트를 출시했습니다. 스프

    yozm.wishket.com

     

    ■ 폴더 x 오류 고치기

     

     

    버전이 안맞아서 x 표시 뜬다.

    아래 Problems 애서 Quick Fix 클릭해준다. 

     

     

    버전을 11버전으로 선택 후 클릭하면 고쳐진 것 확인 가능!

     

     

    spring starter project : spring boot (좀 더 간단히)

    우리는 먼저 spring legacy project 를 배워본다. 

     

     

    이름 설정해주면 생성된 것을 확인할 수 있다. 

     컨트롤러는 반드시 내가 처음 생성한 com.hadine.web 아래에 있어야 한다. 

     

    자바 파일들이 위치해 있는 디렉터리이다. 

    자바로 작성된 Controller, Service, DAO 즉 자바 코드는 다 이곳에 있어야 한다. 

     

    JRE : 자바 내부

    Maven : 자바 외부

     

    자바 내부, 외부 실행환경 세팅으로 편하게 구현이 가능하다. 

     

     

    views 안에는 view 로 사용될 JSP파일이 위치해있다.

     

    * MVC 패턴

     

    model : 데이터 저장하고 데이터 보내고 즉 data 관련

    view : 사용자에게 보여지는 화면 jsp

    controller : 데이터 비즈니스 로직 사이의 상호 동작 관리 (흐름제어)

     

    web.xml

     

    명확하게 설명하자면 흐름은 다음과 같다. 

     

    servlet-context.xml

     

    " / " 로 시작하면 최상위 폴더를 의미한다. 

    mapping = "/resourcese/**"  리소스에 요청이 들어오면 location = "/ resourcese/"  으로 보내겠다는 뜻이다. 

     

     

    컨트롤러가 들어있는 위치이다. 

    하위에 있는 모든 것을 읽어서 가져온다는 뜻이다. 

     

    component-scan 과 해당 이름이 반드시 동일해야 한다.

    만약 그렇지 않으면 불러들이지 못하는 오류가 생긴다. 

     

     

    오류를 확인하기 위해서 

    이름이 다른 하나를 만들어준다. 

     

    ※ 초기 IndexController 로 만들어줬지만 이름을 잘못 설정해 추후 BoardController 로 변경하니 참고하자

     

     

    컨트롤러는 흐름을 제어한다.

    @를 통해 부르고 여기서는 사용자의 요청이 오면 일을 한다.

     

    즉 사용자가 /main 요청을 하면 main.jsp 파일을 열어달라는 뜻이다. 

     

     

    즉 해당 파일로 연결되기 위해서는 WEB-INF/views/main.jsp 처리를 해야 웹페이지에서 이를 볼 수 있다. 

     

    prefix => 앞에 붙는다.

    suffix => 맨 뒤에 붙는다. 

     

     

    파일 경로도 다음과 같이 확인할 수 있다. 

     

     

    프로젝트 선택 후 서버 실행해준다. 

     

     

    사용하지 않는 서버는 대기열에 넣어주고 finish 클릭

     

     

    패키지명이 아까 다르게 처리해서 로딩되지 않아서 뜨지 않는다. 

     

     

    인덱스 컨트롤러를 드래그해서 옮겨주고 다시 실행해본다. 

     

     

    아까와 다르게 정상동작하여 빈페이지가 출력된다. 

     

     

    .* : . 하위에 모든것을 읽는다. 

    그래서 읽히지 않는다. 

     

     

    반대로 com.hadine 만 입력하면 열린다.

    왜냐하면 com.hadine 와 관련된 모든 것을 불러오기 때문이다. 

    따라서 com.hadine 와 com.hadine.web 모두 불러와서 오류가 뜨지 않는다. 

     

     

    해당 파일은 각각 폴더 하위 폴더 방식으로 들어가 있다. 

     

     

    나중에 본인 웹페이지 만들고 싶으면 해당 방법으로 jar 파일 압축해서 사용할 수 있다. 

     

    https://ifuwanna.tistory.com/224

     

    [Java] JAR WAR 차이점 및 특징 ( + EAR )

    JAR (Java Archive) WAR (Web Application Archive) 모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일이며 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들

    ifuwanna.tistory.com

     

    카페24 (cafe24.com)

     

    카페24

    무료 쇼핑몰, 유튜브 쇼핑, 마켓/SNS 판매, 엔터프라이즈 서비스, 해외 쇼핑몰, 광고마케팅, 호스팅 등 제공

    www.cafe24.com

     

    ■ pom.xml 확인 및 기본 설정에 필요한 jar 들 세팅해주기

     

    pom.xml

     

    <version> 가장 큰 버전-개발단계 버전(테스트:홀수, 안정화:짝수)-패치횟수

    EX) 1버전 안정화된 단계 0번의 패치횟수이다. 

    <java-version> 11 우리는 11버전으로

    <springframework-version>

    4.3.25.RELEASE 로 해준다. 

     

    * dependencies 속에 dependency 로 jar 추가하기

     

    jar 파일 추가 한 덩어리가 다음과 같다. 

     

    * 저장소 추가하기 

     

    해당 부분에 저장소 설정해주고자 한다. 

     

     

    기본 형태는 다음과 같다. 

     

     

    다음과 같이 기본 설정하고 아래와 같이 써준다. 

     

     

    mvn1 은 기본으로 우리가 이전에 봤던 홈페이지이다. 

     

     

    mvn2 아패치에서 개발자들의 편의를 위해 임의로 만든 공간이다.  

     

     

    egovframe : 전자정부프레임

     

    전자정부프레임 페이징을 가져오려고 한다. 

    전자정부프레임 페이징을 가져오는 이유는 한국에서 가장 기본적으로

    잘 세팅되어 있기 때문에 해당 페이지에 있는 기능을 가져오기 위해서이다. 

     

    ※ 페이징

    페이징이란 게시판을 page 단위로 나누는 행위를 의미한다. 

     

     

    전자정부 페이징을 위해서는 저장소 추가 설정이 필요하고,

    저장소 추가 설정 후 전자정부 페이징 내용을 추가하면 사진과 같이 해당 폴더가 생성된 것을 확인할 수 있다.

     

    버전 계속 변경하지 않고 일치시키는 편리한 기능 추가

     

     

    파일업로드 기능 추가

     

    마리아 디비 버전 최근으로 변경해준다. 

     

     

     

    그러나 사진에서 JRE System Library 가 1.6 버전으로 확인된다. 

    아직 버전 바뀌지 않은 버전을 프로젝트 선택 -> Properties -> Project Facets -> 11버전 변경

    그러면 사진처럼 JavaSE-11 로 변경된다. 

     

    ■ 웹에 보여지는 화면 설정하기

     

    * 프로젝트 실행시 보여질 첫 페이지 설정

    web.xml

     

    우리는 바로 부르지 못하므로 /main 로 불러준다. 

     

    * 에러페이지 설정

    우리는 에러 봐야하니까 넣지 말고 참고만 하자

     

    ■ 데이터베이스랑 연결하기

     

     

     

    <beans:import resource=""/> : 다른곳에서 가져오는 xml 을 이곳으로 연결할 거예요

    *-context.xml : 뒤 -context.xml 로 끝나는 모든 파일 불러올거야

     

     

    우리는 classpath:/spring/ 으로 했기 때문에 spring 폴더를 만들어준다. 

     

     

    새로운 Spring Bean Configuration File 을 만들어준다. 

     

     

    db-context.xml 눌러주고 넥스트

     

     

    beans 클릭하고 finish

     

     

    다음과 같이 생성된다. 

     

    dbcon 만드는 것이랑 똑같다. 

     

     

    데이터소스를 자기 변수에 그대로 담는다. 

     

     

    이전에는 dao 에 sql 문 넣었지만 이제는 분리해서  사용할 것이다.

    그럼 id를 이용해서 계속 재활용 가능하다.

     

     

    sql 문장들을 모아놓은걸 mapper라고 부른다. 

    mapperLocations _ mapper들이 모여있는 장소(Locations)

    configLocation _ config는 하나밖에 없어서 Location에 s없음

     

    <property name="mapperLocations" value="classpath:/mybatis/mappers/*-mapper.xml"/>

    앞의 위치에서 -mapper.xml로 끝나는 파일들을 가져오겠다는 의미이다. 

     

     

    그에 해당하는 각각 폴더 생성해준다. 

     

    ※ 각각 들어가는 모습 확인

     

     

     

     

    각 폴더안에 xml 파일도 생성해준다.

     

    ■ MyBatis 활용해보기

     

     

    MyBatis -> Configuration XML

     

    https://mybatis.org/mybatis-3/

     

    mybatis – MyBatis 3 | Introduction

    What is MyBatis? MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use

    mybatis.org

     

     

    해당 3줄 복사

     

    board-mapper

     

    복사한 줄 board-mapper 에 복사해서 붙여넣는다. 

     

     

    Getting Staarted 해당 3줄 복사 

     

    mybatisConfig.xml

     

    붙여넣기

     

     

     

    이제 이 맵퍼의 이름은 "boardtest" 이다. 

    boardtest.boardList 로 부를 예정이다. 

     

    namespace 가 클래스 역할 할 것이다. 

     

    mybatisConfig.xml

     

    Alias : 별칭

    즉 java.lang.Integer 을 integer 로 별칭으로 쓰는 것이다. 

     

    board-mapper.xml

     

    이를 실행해준다. 그러면 다음과 같이 화면이 나온다. 

     

     

    우리는 노란색 표시처럼 길게 사용했지만

    이제 @GetMapping(" ") 으로 위에 내용을 짧게 표현할 수 있다. 

     

     

    /board 로 요청받으면 board 화면 보여줘 

    즉 이에 해당하는 jsp 파일 필요하다.

     

    board jsp 파일을 만들어준다.

     

     

    나오고 출력하면 다음과 같이 나온다.

     

    BoardController

     

    board jsp 열때 name 이라는 값으로 홍길동 가져갈거야

     

     

     

     

    이제 다음과 같이 값 출력 가능하다.

     

     

     * Controller = 흐름제어 
     * DTO/VO = 
     * DAO = 
     * Service = 프로그램 로직

     

    Controller 는 흐름만 가져가고 주요작업은 Service 에서 한다. 

    로직 담당하는 서비스 만들어준다. 

     

     

    이름 오류 변경 IndexController -> BoardController

     

     

    이제 BoardController 랑 service 랑 연결해준다. 

     

     

    Autowired 는 서비스와 연결하기 위해 쓴다. (자동연결)

    내부에서만 쓰기 위해서 private 로 걸어준다. 

     

     * Controller = 흐름제어 
    = 컨트롤 기능을 하는 인스턴스
    = 사용자의 요청이 들어오면 해당 URL 에 맞는 페이지와 데이터를 보내줍니다. 

     

     * Service = 프로그램 로직

     * DTO/VO = 
     * DAO = 데이터베이스와 연결되어서 작업합니다. => mybatis

     * JSP = 보여주는 화면 (VIEW)

    * 사용자 -> 컨트롤러 -> 서비스 -> DAO -> mybatis -> DB
    * 사용자 <- JSP + DB <= 컨트롤러 <- 서비스 <- DAO <- mybatis <- DB

     

    => 컨트롤러가 서비스를 호출하고 데이터가 필요하면 DAO에 요청 DAO는 mybatis에게 쿼리문 실행결과 요청

    다시 결과 가지고 DAO에 전달 -> 서비스에 전달 -> 컨트롤러에 전달


     * 연결 = DI 의존 주
    1. @Autowired = 스프링에서 제공, 타입이 일치하는 녀석을 연결
    2. @Inject  = 자바에서 제공, 타입이 일치하는 녀석을 연결
    3. @Resource  = 자바에서 제공, 이름이 일치하는 녀석을 연결

     


      스프링 기술

      POJO (Plain Old Java Object)
      어렵게 코딩하는 것이 아니라 간단하게 코딩하기
     
      1. DI(Dependency Injection) 의존 주입
      프레임워크가 객체의 의존성 주입을 담당합니다. == IoC
     
      2. IoC(Inversion of Control) 제어역전
      프레임워크가 권한을 가져갑니다.
      자바가 객체를 생성하고 서로 연결하고 사용하는데
      이러한 기술을 IoC컨테이너가 관리 서비스 해줍니다.
      IoC컨테이너는 객체의 생성/초기화/서비스/소멸 --> (라이프사이클)
      라이프 사이클을 관리합니다.
     
      3. AOP(Aspect Oriented Programming) 관점지향 프로그래밍
      객체지향과 다른 개념. 각 객체마다 중복되는 작업들이 있다면
      해당 중복 작업을 기준으로 동일 행동을 하게 만드는 것.
      메서드가 실행되기전, 실행된 직후, 실행시점에 따라 따로 기능을 적용 시키는 것

     

     

    1, 2, 3에서 가지고 있는 특정 작업이 중복된다면

    따로 AOP(파랑)으로 빼줘서

    각 번호의 특정작업을 시키려고 한다면 AOP에게 시킴

    => 관점지향 프로그래밍

     

    2. IoC(Inversion of Control) 제어역전

    => 자바가 해야하는 역할을 spring 프레임워크가 다 가져가버림 (객체생성, 연결하는 역할)

     

    권한을 가져갔으니 주입도 내가 하겠다

    1. DI(Dependency Injection) 의존 주입

     


     

     

    데이터와 관련된 model 은 다음과 같다. 

    DTO/VO, DAO 등이다. 

     

    ■ BoardDAO 생성하기

     

     

     

    @Controller == Controller
    @Service    == Service
    @Repository == DAO

     

    DAO 는 Repository 로 표시한다. 

    노란색 sqlSession 을 가져온 것이다. 

     

     

    서비스와 DAO 연결한다. 

     

     

    DAO 는 서비스와 연결되고, 연결된 서비스는 아래의 컨트롤러와 연결되는 것이다.  

     

Designed by Tistory.