ABOUT ME

-

오늘
-
어제
-
-
  • KOSTA 교육 59일차(Spring, JUnit, DB, myBatis, log4jdbc-log4j2, MVC)
    Review 2020. 6. 24. 00:59

    19. 1. 29(화)

     

    배운 내용

     

    1. Spring 프로젝트 생성 및 세팅
    2. JUnit
    3. Oracle Database 연동
    4. myBatis 연동
    5. log4jdbc-log4j2
    6. MVC Controller
    7. 파일 업로드

    1. Spring 프로젝트 생성 및 세팅

    STS툴을 사용하여 Spring Project를 생성 및 세팅한다.

     

    1. 프로젝트 생성

     

    • Spring Legacy Project를 클릭한다.

     

    • 제목을 입력하고 MVC Project를 선택하고 Next를 클릭한다.

     

    • 생성 후 Finish를 눌러 생성한다.

     

    • Project를 생성하면 보기와 같이 기본적으로 생성된다.
    • src/main/java : 작성되는 코드의 경로
    • src/main/resource : 실행할 때 참고하는 기본 경로(주로 설정파일을 넣는다.)
    • src/test/java : 테스트 코드를 넣는 경로
    • src/test/resource : 테스트 관련 설정 파일 보관 경로
    • servlet-context : 웹과 관련된 스프링 설정 파일
    • root-context : 스프링 설정 파일
    • views : 템플릿 프로젝트의 jsp 파일 경로
    • web.xml : Tomcat의 web.xml 파일
    • pom.xml : Maven이 사용하는 pom.xml

     

    2. 라이브러리 세팅

     

    • java 버전과 Spring 버전, maven 버전을 위와 같이 바꾼다.

     

    • 해당 프로젝트를 우클릭하여 Maven → Update Project를 클릭한다.

     

    • 해당 프로젝트를 선택하고 Update 한다.

     

    3. Lombok 라이브러리 설치
    Lombok이란 Java에서 자주 사용하는 생성자, setter/getter, toString()을 자동으로 생성해 주는 라이브러리이다.

     

    • Lombok 홈페이지에서 Download한다.

     

    • 터미널을 이용하여 다운로드 한 폴더까지 위치한다.

     

    • java -jar lombok.jar 명령어를 통하여 실행한다.

     

    • IDE를 클릭하고 install 하면 완료된다.

     

    2. JUnit

    단위테스트 도구로서 테스트를 쉽게 할 수 있게 만들어주는 라이브러리이다.

    • 어노테이션으로 간결하게 지원한다.
    • 성공시 녹색, 실패시 빨간색으로 표시된다.

     

    예제

    • chef 클래스는 Component를 사용하여 빈 등록을 한다.
    • @Data를 통해 Lombok을 사용한다.
    • Restaurant 클래스에서 chef 객체를 선언하고 @Data를 통해 @Setter를 사용하여 의존성 주입이 가능하다.

     

    • root-context.xml을 사용하여 스프링 설정 파일을 담는다.
    • sample에 패키지에 있는 class를 scan 한다.

     

    • src/test/java 패키지에서 test 클래스를 생성
    • Junit Test Case 클래스를 선언하여 생성한다.
    • @RunWith는 현재 테스트 코드가 스프링을 실행하는 역할을 할 것이라는 것을 나타낸다.
    • @ContextConfiguration은 지정된 클래스나 문자열을 이용하여 객체를 스프링에 등록하게 한다. 
      xml에 있는 객체를 가져오기 위해 경로를 선언했다.
    • @Log4j는 log를 기록하는 Logger를 변수로 생성하여준다.
    • restaurant 객체를 생성하여 의존성 주입한다.
    • assertNotNull(변수명)은 변수가 null이 아니어야 테스트를 성공한다는 조건을 가지고 있다.
    • log함수를 사용하여 테스트할 변수를 선언한다.

     

    • log에 값이 양호하게 표시된다.
    • Restaurant에서 new 연산자를 통해 객체를 생성하지 않았는데도 객체가 만들어 졌다는 점 : @Component를 통해 빈 객체에 등록해놨기 때문
    • @Data를 사용용하여 onMethod 속성을 선언해 setter에 의존성 주입을 한 점 : Lombok 라이브러리를 사용했다.
    • Restaurant 객체의 chef 타입의 객체가 주입되어 있다는 점 : 의존성 주입을 통해 필요시마다 꺼내올 수 있도록 Spring에서 자체 관리를 해줌

    3. Oracle Database 연동

    Spring에 DB를 연동하는 것을 말한다.

     

    • 연동할 파일을 Libraris에 추가한다.

     

    • 연동 테스트를 하기 위하여 테스트 코드를 작성 후 JUnit을 통해 테스트를 한다.

     

    • Connection Pool을 위해 Hikari 라이브러리를 사용하기 위해 위와 같이 세팅한다.

    4. myBatis 연동

    Spring에 myBatis를 연동하여 쉽게 SQL을 처리할 수 있도록 한다.

     

    • pom.xml에서 라이브러리를 추가한다.
    • spring-jdbc / spring-tx : 스프링에서 DB처리와 트랜잭션 처리(없으면 안됨)
    • mybatis / mybatis-spring : 스프링과 연동할 라이브러리

     

    • SqlSessionFactory를 등록한다.
    • mybatis 세팅은 SQL을 별도로 설정을 분리하고 자동으로 처리될 수 있도록 Mapper를 선언하여 처리를 지정한다.

     

    • 등록한 interface에 어노테이션으로 쿼리문을 작성한 메소드, xml로 작성할 메소드를 선언했다.

     

    • getTime2메소드의 쿼리문을 작성한다.

     

    • timeMapper객체를 생성하고 의존성 주입을 한다.
    • log로 출력한다.

     

    • 현재시간이 출력되었다.

    5. log4jdbc-log4j2 설정

    SQL문의 값을 제대로 확인하기 위해 SQL로그를 편리하게 바꾸는 라이브러리이다.

     

    • 라이브러리를 추가한다.

     

    • src/main/resources에 xml, properties를 추가한다.

     

    • Hikari 세팅에 위와 같이 세팅을 변경한다.

     

    • 가독성이 증가된 결과값이 출력된다.

    6. MVC Controller

    MVC 패턴에서의 Controller의 역할을 알아본다.

    • HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 구현 가능
    • 다양한 타입의 파라미터 처리, 리턴 타입이 가능
    • GET, POST 방식에 대한 어노테이션 처리 가능
    • 상속/인터페이스 방식 대신 어노테이션 만으로도 설정 가능

     

    • Controller를 사용하기 위해 등록한다.

     

    @Controller, @RequestMapping

    • Controller 어노테이션을 작성하게 되면 해당 클래스는 자동적으로 스프링에 객체로 등록된다.(component-scan으로 선언 해 놓았기 때문)

     

    • RequestMapping을 메소드에 입력하여 log값을 출력한다.

     

    • 만약 정상적으로 등록 되었으면 s모양의 글자가 아이콘에 표시된다.
    • RequestMapping은 메소드의 경로를 표현한다. 클래스에 선언할 시 클래스의 하위 메소드의 상위 주소를 가지고 있게된다.
    • 위의 예제로는 /sample/*(하위메소드) 로 인지하면 되겠다.
    • RequestMapping은 method를 선언하여줄 수 있다. 
      예시 : @RequestMapping(value= “/basic”, method = RequestMethod.GET)
    • 4.3이상 버전은 @GetMapping도 사용할 수 있는데 이 어노테이션은 GET 방식으로만 사용되어 제한이 많다.

     

    Parameter 수집

    Controller를 작성할 때 파라미터로 자동으로 수집 할 수 있게 한다.

     

    • Lombok을 사용할 Data 어노테이션을 적용한다.

     

    • SampleDTO를 직접 파라미터에 선언하는 command 방식이다.
    • 객체 자체를 출력하면 내부 변수들이 출력된다.

     

    • RequestParam을 사용하여 객체의 변수명을 가져오고 변수를 다르게 줄 수도 있다.
    • 각각의 객체에 대한 변수를 선언하여 출력
    • ArrayList<>에 담아서 출력하는 방법
    • 배열에 담아서 출력하는 방법
    • List인 객체를 인덱스값을 주어 출력하는 방법이 있다.

     

    • Date로 선언한 날짜 객체이다.

     

    • Command 방식으로 생성하고 출력한다.

     

    • ModelAttribute 어노테이션을 통해 다시 view로 데이터를 보낸다.
    • 그래서 보낼 데이터를 가진 Page도 view까지 보낼 수 있다.

     

    • @ResponseBody를 통통해서 객체를 JSON 형식으로 출력할 수 있다.
    • 여기서는 new 생성자를 통해 객체를 생성하고 set을 통해 담은 후 return 한다.

     

    • 이 어노테이션을 사용하기 위해선 라이브러리가 필요하다.

     

    • ResponseEntity<>는 원하는 헤더 정보나 데이터를 전달할 수 있다.

     

    • JSON 타입이라는 메세지와 200 OK 상태 코드를 전송한다.

     

    7. 파일 업로드

    Spring MVC 패턴에서의 파일 업로드를 한다.

     

    • 파일 업로드 라이브러리를 추가한다.

     

    • multipartResolver를 생성한다.
    • Size는 최대크기, PerFile은 하나의 최대 크기, MemorySize는 메모리의 최대 크기, Dir은 저장 경로를 말한다.
    • 인코딩은 default로 utf-8로 지정한다.

     

    • submit시 exUploadPost로 이동한다.

     

    • exUpload로 이동하는 Controller를 만들고 Form 태그에서 파일을 입력한다.
    • 입력 후 exUploadPost로 와서 MultipartFile 객체를 선언한 리스트 files들을 forEach문으로 반복하여 name과 size를 출력한다.

     

    • 파일을 선택하고 submit한다.

     

    • forEach문으로 반복한 결과 log들이 출력된다.

    오늘 교육 간 느낀점

    오늘은 Spring Project를 직접 생성하는 법 부터 다양한 라이브러리를 사용하면서 어노테이션들을 익혔다.
    본격적인 MVC를 활용한 로직들은 나오지 않았지만 메인 요리를 위한 에피타이저로서 몸을 달구는 역할을 한 것 같다.

     

    내일은 본격적인 CRUD를 해보면서 게시판부터 만들게 된다.
    실무에서 사용하는 코드로 직접 순서에 맞게 코딩을 해볼 생각을 하니 조금 긴장되기도 하고 설레기도 한다.
    내일도 화이팅 해야겠다!!

    댓글