ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 31 - Spring 프로젝트 처음부터 데이터 베이스 연결까지
    개발/국비교육 2023. 7. 13. 19:51

    ■ Spring 프로젝트 시작해보기

     

     

    Spring Legacy Project 생성해보기

     

     

    오늘 날짜로 생성

    Spring MVC Project 클릭 후 Next

     

     

    이름 설정 후 Finish

     

     

    pom.xml

     

    버전 맞춰주기 

     

     

    Properties -> Project Facets -> 11 버전으로 바꾸기

     

     

    java 11 변경 완료 확인 가능하다. 

     

     

    Preferences 에서 전체 폰트 전체 변경해주기 

     

     

    .java 와 관련된 파일들은 모두 이곳으로 온다. 

     

     

     

    Maven 은 먼저 하드디스크 검색 -> 없으면 인터넷 검색해서 가져온다. 

     

    jsp 는 view 밑에 존재

     

     

    왜냐면 기본 초기 설정이 다음과 같이 되어 있기 때문이다. 

     

     

    " / " 요청 받으면 아래 내용 실행하고 home 을 리턴한다. 

     

    servlet-context.xml

    리소스 경로

     

    servlet-context.xml

     

    view 는 여기 들어있어요. MVC 패턴

     

    요즘은 SPA 쪽으로 넘어가는 추세이다. 

    MPA : 여러기의 페이지로 구성된 애플리케이션이다. 

     

    우리는 MPA 로 해서 여러개의 JSP 를 띄어서 하려고 한다. 

     

    https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

     

    모델-뷰-컨트롤러 - 위키백과, 우리 모두의 백과사전

    위키백과, 우리 모두의 백과사전. 모델, 뷰, 컨트롤러의 관계를 묘사하는 간단한 다이어그램. 웹 애플리케이션에서 일반적인 MVC 구성요소 다이어그램 모델-뷰-컨트롤러(model–view–controller, MVc)

    ko.wikipedia.org

     

    servlet-context.xml

    해당 문구 매우 중요하다. 

    component

    : 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위를 말한다.

     

    해당 폴더 밑에 들어와있지 않고 오타가 나면 실행 안되니 반드시 주의하도록 하자

     

     

    따라서 해당 파일 밑에 넣어야지 파일 불러올 수 있다.

    클래스를 BoardController 로 생성한다. 

     

     

    @Controller 불러오기

    아래에는 맵핑을 통해 할 기능등을 써준다.

     

    @RequestMapping : 어떤 기능이 오면 연결시킨다. 

    /board 로 요청 들어오고 get 방식일 때만 동작한다. 

     

     

    다음과 같이 줄여서 사용도 가능하다. 

     

     

    보드를 열어주는 메소드를 만든다. 

     

    다만 처음 열면 에러 뜬다. 

    왜냐하면 board.jsp 파일이 없기 때문이다. 

    따라서 해당 파일을 만들어주자. 

     

     

    jsp 파일은 views 에 jsp 파일로 만들어준다. 

     

     

    입력한 문구가 출력된다.

    참고로 서버 열때는 .jsp 로 열면 안되고 /board 로 열어야 한다.

     

    왜냐하면 Controller 를 지나와서 열어야 하기 때문이다. 

     

    ※ 코드 저장소

    깃허브, 깃랩

     

     

    홈 컨트롤러를 봤을때 다음과 같이 model 에 값을 쌓아서 이를 보낸다. 

    값 쌓아서 보내는 것이다.

     

      

    Model 데이터 값하고 view 보여줄 데이터가 어디로 가야할지에 대한 값을 담아준다. 

     

    BoardController

     

    값을 담아줄 때는 .addObject 를 사용하면 된다. 

     

     

    값을 list 에 담기 위해 BoardDTO 를 생성해준다. 

     

     

    해당하는 변수 선언해주고 getter, setter 세팅해준다. 

     

     

    BoardDTO 객체 생성해주고 그 안에 값 세팅해준다.

    그리고 리스트에 그 값을 넣어준다. 

     

    각 값을 세팅해주고 for 구문 통해서 반복해준다. 

     

     

    list 라는 이름으로 list 데이터 값 담아준다. 

     

     

    출력하면 다음과 같이 값이 담긴것을 확인 가능하다. 

     

     

    jstl 태그 중에서 core 태그를 사용할 것이다.

    core 은 기본적인 형식이다. for, if 등등 기본이다. 

     

    prefix="c" 로 설정한 이유는 core 의 앞글자를 따왔다. 

     

    pom.xml

     

    해당 기능 사용할 수 있는 이유는 pom.xml 에 해당 dependency 가 적혀있기 때문이다. 

     

     

    1에서부터 10까지 변수 i 반복할거예요.

     

     

    i 로 반복할 수 있다. 

     

     

    forEach 구문을 통해 우리가 list 에 넣었던 값을 불러낼 수 있다. 

    일반적으로 items는 배열이나 컬렉션과 같은 데이터 구조를 가리키는 변수로 사용된다. 

     

     

    이제 우리가 저장한 값들을 모두 불러와준다. 

     

     

     

     

    이제 효과는 css 에서 주고자 한다. 

    resource 는 jsp 이외 파일 담아줄 것이다.

    따라서 css 라고 폴더를 따로 만들어준다. 

     

    board.css 파일 만들어준다. 

     

     

    이제 해당 링크를 적어준다. 

     

     

    해당 효과 적용되었는지 확인 가능하다. 

     

     

    효과를 주면 다음과 같다. 

     

     

     

    맞게 바꿔주기 

     

    servlet-context.xml
    board.jsp
    board.jsp

     

    mapping =" /css/** 은 **인 모든 파일들을 location 을 통해 resources/css 처리해주는 것이다. 

    따라서 /resources 를 생략할 수 있는 것이다. 

     

     

    생성자 안에 값을 넣어 간단히 표현 가능하다. 

     

     

    마찬가지로 동일하게 위에 넣어주기 

     

     

    function 기능 사용을 위해 다음과 같이 넣어준다. 

    https://cofs.tistory.com/262

     

    jstl fn 정리 / jstl functions 정리

    jstl functions (jstl fn) 정리 최상단에 다음과 같이 jstl functions 를 사용하겠다고 선언해야 함 1 cs 단독으로 사용할 수 없고 EL 표현식과 함께 사용해야 한다. ex. ${fn:contains(str, str)} ${fn:split(str, '|')} fn:co

    cofs.tistory.com

     

     

    해당 functions 를 사용할 예정이다.

     

     

    만약 다음과 같이 넣어주면 0 이 나온다. 

     

    갯수를 잡아낼 수 있다. 

    길이 10개 로 나온다. 

     

     

    choose : 선택하는 것이다. 

    <c:when

     

    만약 참이면 출력 그렇지 않으면 

    if 는 참일때만 출력, choose는 if else 와 같다.

     

     

    0 보다 크면 출력, 그렇지 않으면 출력하지 않는다.

    gt(>) 의 의미이다.  

     

     

     

    따라서 list 에 담아지는게 0일 경우 다음과 같은 안내문이 나온다. 

     

    ■ jar 파일 추가하기 + 전자정부 페이징

     

     

    해당 사이에 코드 넣어줄 예정이다. 

     

    egovframework:rte:ptl:view:paginationtag [eGovFrame]

     

    egovframework:rte:ptl:view:paginationtag [eGovFrame]

    전자정부프레임워크에서는 페이징 처리의 편의를 위해 <ui:pagination/> 태그를 제공한다. 페이징 기능을 사용할때 기능은 유사하지만 이미지나 라벨등의 포맷만 다양하게 사용하게 되는 경우가 있

    www.egovframe.go.kr

     

    * 저장소 추가하기

     

     

    * 기본 설정에 필요한 jar들 넣어주기

     

     

    쭉 넣어주기 마리아 디비는 버전 변경

     

     

    board.jsp 이기 때문에 컨트롤러 통과 안해서 리스트에 담아올 것이 없기 때문에

    다음과 같이 공란으로 보인다. 

     

    마찬가지로 board2 로 열면 다음과 같이 뜬다. 

    왜냐하면 우리가 list 가 없다면 다음 멘트가 나오게끔 했다. 

     

     

    그러나 사실 해당 문제는 컨트롤러를 통과하지 않아서 생긴 것이지

    컨트롤러를 통해서 출력하면 우리가 담아준 값이 나온다. 

     

     

    다음과 같이 저장해준다. 

     

     

    이렇게 변경해준다. 

     

     

    다음과 같이 각각 폴더 생성해주고 안에 폴더 넣어준다. 

     

    mybatisConfig.xml
    0.00MB

     

    board-mapper.xml
    0.00MB

     

     

    컨트롤러는 흐름만 제어하고

    로직은 서비스를 통해 진행한다.

     

    따라서 다음과 같이 서비스를 생성해줘야 한다. 

     

     

    컨트롤러는 흐름만 제어하고

    로직은 서비스를 통해 진행한다.

     

    따라서 서비스와 컨트롤러를 연결해야한다.

    @Autowired 를 통해 연결한다. 

    타입만 맞으면 자동으로 연결된다. 

     

     

    그리고 우리는 이에 맞는 서비스를 생성해줘야 한다. 

    서비스에는 데이터를 주고 받는 DAO와 연결해준다. 

     

     

    서비스와 주고받는 데이터베이스를 연결하는 BoardDAO 를 생성해준다.

    BoardDAO 를 통해 데이터베이스(mybatis) 와 연결할 것이다.

    따라서 DAO 는 sqlSession 과 연결해준다. 

     

    root-context.xml

    해당 코드가 있기 때문에 우리가 자료를 가져올 수 있는 것이다. 

     

    ★ 결론

    정리를 하자면 컨트롤러를 통해 받는데, 컨트롤러는 흐름제어만 맡기 때문에

    우리는 로직을 담당하는 서비스를 만들어줘야 한다. 그리고 이 서비스는 DAO 에게 값을 받아서 

    그 값을 다시 서비스로 주고 서비스는 다시 컨트롤러와 소통한다. 

     

    컨트롤 -> 서비스 -> DAO -> 서비스 -> 컨트롤

     

     

    서비스에게 일을 시키기 위해서 List<BoardDTO> 타입의 list 객체를 만들고,

    이 값을 boardService의 boardList() 메소드 값을 넣는다.

     

    list 라는 이름으로 list 값을 추가해준다. 

     

    boardList() 메소드가 없으니 Service 에 이 메소드를 만들어주자.

     

    해당 메소드가 DAO boardList() 메소드를 받을 예정이다.

    해당하는 메소드도 없기 때문에 생성해줘야 한다. 

     

    DAO 에도 boardList() 메소드를 만들어준다. 

    sql 문장을 뽑은것을 여기서 여러개 받아올 것이니까 selectList 로 받는다. 

     

    board-mapper.xml

     

    이 값은 board-mapper.xml 에서 namespace 가 boardtest에서 id 가 boardList 인 것을 불러올 것이다.

    resultType: 레코드 타입 한 줄 받아서 어디다 넣을 것인지 정해주는데

    원래는 이 값을 com.hadine.wea.BoardDTO 에 넣어야 한다. 

     

    mybatisConfig.xml

    하지만 이는 너무 길기 때문에 mybatisConfig.xml 에서 alias 를 통해 별칭을 지정해준다. 

     

    * selectList () : 여러개의 객체를 리턴하는 메소드

     

     

    실행하면 다음과 같이 나온다. 

     

    * 에러해결

Designed by Tistory.