본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 69일차 (MySQL DB 연동, MyBatis 연동, 스프링 MVC 기본구조, )

어제까지만 해도 잘 됐는데, 갑자기 lombok 오류가 떠서 STL 을 지웠다가 다시 깔았습니다..

[스프링과 MySQL Database 연동]

1. JDBC 연결 및 테스트

1) MySQL JDBC driver 등록

(1) pom.xml 변경

pom.xml 에 해당 문구를 추가합니다.

2) JDBC 테스트코드

src/test/java 밑에 org.zerock.persistence 패키지에 JDBCTests.java를 만들고 해당 코드를 작성 후 테스트합니다.

콘솔을 보면 성공적으로 테스트가 된 것을 확인할 수 있습니다..

2. 커넥션 풀 설정

1) DB와 Connection을 맺고 끊는 작업은 리소스가 많이 소모되는 작업

2) Pooling 이라는 기법을 통해서 객체를 미리 생성해놓고 빌려쓴느 방식을 이용해서 연결시간을 단축

3) Common DBCP 나 HikariCP 등을 활용

4) 라이브러리 추가와 DataSource 설정

5) pom.xml과 root-context 에 해당 문구 추가

pom.xml과 root-context 에 해당 문구를 추가

6) 커넥션 풀 동작 확인 DataSourceTests.java

위와 동일한 패키지에 DataSourceTests 를 작성하고 확인한다. 콘솔창에 보면 커넥션 객체가 생성된 것을 확인할 수 있다.

[MyBatis와 스프링 연동]

1. SQL Mapping 프레임워크 : SQL 과 Object 간의 관계를 매핑해주는 역할

2. JDBC 와 MyBatis 비교

JDBC MyBatis
직접 Connection 을 맺고 마지막에 close() 자동으로 Connection, close() 가능
PrepareStatement 직접 생성 및 처리 MyBatis 내부적으로
PreparedStatement 처리
PrepareStatement setXXX() 등에 대한
모든 작업을 개발자가 처리
#{prop}와 같이 속성을 지정하면
내부적으로 지원 처리
SELECT의 경우 직접 ResultSet 처리 리턴 타입을 지정하는 경우
자동으로 객체 생성 및 ResultSet 처리

3. MyBatis 관련 라이브러리 추가

1) pom.xml 수정

pom.xml 에 해당문구 추가(학원에서 캡쳐해놨단거 올립니당)

2) root-context namespace 에 mybatis 추가 / root-context source 에 해당문구 추가

root-context mybatis

root-context source

3) 위의 동일한 클래스 DataSourceTests.java 해당 메소드를 추가하여 테스트 (돼야하나, 안되네요 import 가 ibatis로 자꾸 되서 그런거같은데 학원에서 확인해보겠습니다.

DataSourceTests.java 추가

[스프링과의 연동 처리]

1. Mapper 인터페이스

1) MyBatis 를 사용하는 방식으로는 Mapper 인터페이스를 작성하고 자동으로 생성되는

클래스를 사용하는 방식을 이용

2) org.zerock.mapper.TimeMapper.java 인터페이스 추가

(1) MyBatis의 어노테이션을 이용해서 SQL을 메소드에 추가

TimeMapper 인터페이스

(2) root-context.xml 수정

3) 테스트를 위해 org.zerock.peresistence.TimeMapperTest.java 추가

TimeMappterTest.java 성공.

2. XML 매퍼와 같이 쓰기

1) Mapper 인터페이스와 XML을 동시에 지원

2) XML 을 이용할 때

(1) XML 파일의 위치와 XML 파일에 지정하는 namespace 속성이 중요

(2) XML 파일의 위치

ㄱ) Mapper 인터페이스가 있는 곳에 같이 있거나

ㄴ) src/main/resource에 XML을 저장할 폴더를 생성

(3) XML 파일 이름 : Mapper 인터페이스와 같은 이름 이용 (가독성)

(4) 예시 : src/main/resource/org/zerock/mapper/TimeMapper.xml

ㄱ) 폴더형식이므로 경로준수

(5) MyBatis의 XML 매퍼에서 이용하는 태그에 대한 설정 필요

3) Mapper 인터페이스에 추가 메소드 선언하기

메소드 추가

4) src/main/resources/org/zerock/mapper/TimeMapper.xml 만들기

TimeMapper.xml 후 해당내용 추가

5) TimeMapperTest.java 수정하여 테스트 하기

TimeMapperTest 성공

[SQL의 로그(log4jdbc-log4j2) 설정

1. MyBatis의 SQL 로그를 보기 위한 설정

2. pom.xml 수정하기

pom.xml 수정

3. src/main/resources/log4jdbc.log4j2.properties 추가

3. src/main/resources/log4jdbc.log4j2.properties 추가

4. JDBC 드라이버의 url 수정 : root-context.xml

root-context 수정

[스프링 MVC의 기본구조]

1. 대부분의 서블릿 기반 프레임워크들이 사용하는 방식

2. 데이터와 처리, 화면을 분리하는 방식

3. 웹에서는 Model2 방식으로 표현

[스프링과 스프링 MVC]

1. 스프링 프레임워크 Core + 여러 Sub 프로젝트들

https://spring.io/projects

 

Spring | Projects

Spring Boot Takes an opinionated view of building Spring applications and gets you up and running as quickly as possible. Spring Data Provides a consistent approach to data access – relational, non-relational, map-reduce, and beyond. Spring Cloud Data Flow Provides an orchestration service for compo...

spring.io

2. 별도로 결합해서 사용하기 때문에 설정 역시 별도로 처리 가능

[일반적인 스프링 + 스프링 MVC]

[웹 프로젝트의 구조]

1. 스프링을 실행하는 존재

1) ApplicationContext -> WebApplicationContext (객체 생성, 주입)

2) 같이 연동되는 방식으로 동작하기 때문에 설정을 분리해도 통합해서 사용가능

2. 프로젝트 설정 후 변경

1) 서블릿은 3.0이상으로 변경

pom.xml

[스프링 MVC의 기본사상]

1. 서블릿 기반이긴 하지만 한 단계 더 추상화된 수준의 개발 지향

2. 서블릿 API 없이도 개발이 가능한 수준

[스프링 MVC의 Controller]

1. Controller의 특징

1) HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현

2) 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능

3) Get 방식, Post 방식 등 전송방식에 대한 처리를 어노테이션으로 처리 가능

4) 상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능

2. @Controller, @RequestMapping

1) @Controller

(1) 해당 클래스의 인스턴스를 스프링의 빈으로 등록하고 컨트롤러로 사용

(2) <component-scan>과 같이 활용

2) @RequestMapping

(1) 특정한 URI에 대한 처리를 해당 컨트롤러나 메서드에서 처리

[Controller의 파마리터 수집]

1. 스프링 MVC의 컨트롤러는 메서드의 파라미터를 자동으로 수집, 변환하는 편리한 기능을 제공

2. Java Beans 에 규칙에 맞게 작성이 되어야 한다.

1) 생성자가 없거나 빈 생성자

2) 올바른 규칙으로 만들어진 Getter / Setter

3) SampleDTO.java 만들기

4) SampleController.java에 메소드 추가 후 주소에 파라미터 입력해서 출력

이렇게 하면 콘솔에 파라미터에 맞는 값이 나와야 하는데 안나오네요..

나머지 부분은 조금 남았는데, 학원가서 확인해보고 주말에 올리겠습니다.