안드로이드&IOS 앱 개발자 양성

안드로이드&IOS 앱 개발자 양성(62일차)

HRuler 2020. 7. 3. 18:00
더보기

** Spring에서의 Transaction 사용
1. Spring에서의 Transaction 사용을 위한 설정
2. 적용
3. 트랜잭션 적용

** 트랜잭션 실습
1. Simple Spring Maven Project 생성
2. 필요한 의존성 라이브러리를 pom.xml 파일에 작성
3. SpringBeanConfiguration 파일을 생성하고 데이터베이스 접속정보를 저장하는 DataSource 클래스의 Bean을 추가하는 코드를 작성
4. main 메소드를 소유한 클래스를 src(src/main/java) 디렉토리에 생성하고 데이터베이스 접속을 테스트
5. 트랜잭션 처리를 테스트할 DAO 클래스를 생성하고 작성
6. applicationContext.xml 파일에 SimpleJdbcInsert 클래스의 bean을 생성해주는 코드와 DAO 클래스의 bean을 자동 생성해주는 코드를 작성
7. main 메소드를 소유한 클래스에서 DAO 클래스의 bean을 가져와서 메소드를 호출하는 코드를 작성하고 실행
8. 결과 확인

** 트랜잭션 적용
1. applicationContext.xml 파일에 tx 네임스페이스를 추가
2. applicationContext.xml 파일에 TransactionManager 클래스의 bean을 생성해서 등록하는 코드를 추가
3. DAO 메소드 상단에 @Transactional을 추가하고 실행
4. main 메소드를 실행하고 결과 확인
5. @Transactional이 적용된 메소드에서 예외가 발생하면 모든 데이터베이스 작업이 취소된다.

** ORM(Object Relationship Mapper)

** Hibernate
1. SQL Mapper인 Mybatis(iBatis)와의 비교
2. Hibernat 구성요소
3. 자료형 매핑
4. Hibernate 매핑 파일 작성 방법
5. SessionFactory를 생성하기 위한 bean 설정 - 우리 버전은 5
6. 질의
7. Session의 메소드
8. 필요한 의존성

** Hibernate 실습
1. 연동할 테이블 생성
2. 프로젝트에 의존성을 설정
3. Spring 설정 파일에 접속할 데이터베이스 정보를 저장할 DataSource Bean을 생성하고 테스트
4. 테이블과 매핑할 DTO 클래스를 생성
5. 하이버네이트 설정 파일을 생성
6. 스프링 설정 파일에 Hibernate 사용을 위한 bean을 설정
7. main 메소드에서 테스트
8. Hibernate를 사용하는 DAO 클래스를 생성해서 작업을 수행하는 메소드를 작성
9. main 메소드에서 메소드를 호출해서 확인

** Oracle로 작업한 것을 MySQL로 변환
1. MySQL에 테이블 생성
2. pom.xml에 MySQL 의존성 설정
3. DataSource 변경
4. Framework 별로 할 일

** DataBase의 언어 또는 기능
1. 언어
2. 기능

** 데이터베이스 연동
1. JDK가 제공하는 JDBC 만을 이용해서 연동
2. Java Wep Application을 만들면서 데이터베이스 접속정보를 context.xml 파일에 작성하고 web.xml에 이 정보를 읽어서 사용하는 방법
3. Spring-MyBatis를 이용
4. Spring-Hibernate를 이용

** 소프트웨어 개발 과정
1. 분석(요구사항 정의 - 무엇을 어떻게 언제까지 할 것인지 결정하는 과정)
2. 설계
3. 구현
4. 테스트
5. 인수나 이행, 배포
6. 유지보수

 ** Spring에서의 Transaction 사용

1. Spring에서의 Transaction 사용을 위한 설정

 - TransactionManager 클래스의 bean을 생성한다.

 - 연동하는 프레임워크에 따라 다르게 생성한다.

 - Spring JDBC와 MyBatis를 사용할 때는 동일한 방식으로 생성한다.

 - DataSourceTransactionManager 클래스의 bean을 생성하면 되는데 이 때 dataSource라는 프로퍼티에 DataSource bean을 주입해주면 된다.

 - Hibernate는 위와는 다른 방식으로 생성한다.

 - Hibernate는 필수적으로 트랜잭션 처리를 수행한다.

2. 적용

 - 데이터베이스 작업을 수행하는 메소드 위에 @Transactional을 추가하는 방식이다.

 - xml 파일에 tx:advice와 tx:method 태그를 이용해서 설정하는 방식이다.

3. 트랜잭션 적용

 - Service에 적용

 

 ** 트랜잭션 실습

1. Simple Spring Maven Project 생성

2. 필요한 의존성 라이브러리를 pom.xml 파일에 작성

 - MySQL, Spring-JDBC

1) Oracle을 위한 Repository 생성 - Oracle 데이터베이스 사용 시

2) Spring에서 데이터베이스 사용을 위한 의존성 설정

3. SpringBeanConfiguration 파일을 생성하고 데이터베이스 접속정보를 저장하는 DataSource 클래스의 Bean을 추가하는 코드를 작성

- Spring MVC Project이면 파일을 생성할 필요없고 제공되는 파일에 코드를 작성

4. main 메소드를 소유한 클래스를 src(src/main/java) 디렉토리에 생성하고 데이터베이스 접속을 테스트

public class Main {

          public static void main(String[] args) {

                    try {GenericXmlApplicationContext context = new GenericXmlApplicationContext(

                                                                                                              "applicationContext.xml");

                         DataSource ds = context.getBean(DataSource.class);

                         Connection con = ds.getConnection();

                         System.out.println(con);

                    }catch(Exception e) {

                         System.out.println(e.getMessage());

                         e.printStackTrace();

                    }

          }

}

5. 트랜잭션을 처리를 테스트할 DAO 클래스를 생성하고 작성

 - hibernate.dao.TransactionDAO

6. applicationContext.xml 파일에 SimpleJdbcInsert 클래스의 bean을 생성해주는 코드와 DAO 클래스의 bean을 자동 생성해주는 코드를 작성

1) context 네임스페이스 추가

2) SimpleJdbcInsert 클래스의 bean 추가 코드

3) bean을 자동 생성하기 위한 패키지를 설정

7. main 메소드를 소유한 클래스에서 DAO 클래스의 bean을 가져와서 메소드를 호출하는 코드를 작성하고 실행

8. 결과 확인

- 트랜잭션을 적용하지 않았기 대문에 첫 번째 삽입문장은 성공하고 두 번째 삽입문장은 실패했음에도 Auto Commit이 적용되어 첫 번째 삽입문장의 내용은 데이터베이스에 반영된다.

 

 ** 트랜잭션 적용

1. applicationContext.xml 파일에 tx 네임스페이스를 추가

2. applicationContext.xml 파일에 TransactionManager 클래스의 bean을 생성해서 등록하는 코드를 추가

- 데이터베이스 연동 프레임워크에 따라 달라진다.

Sprin JDBC 또는 MyBatis에서의 트랜잭션 처리를 위한 클래스의 bean

3. DAO 메소드 상단에 @Transactional을 추가하고 실행

4. main 메소드를 실행하고 결과 확인

5. @Transactional이 적용된 메소드에서 예외가 발생하면 모든 데이터베이스 작업이 취소된다.

 

 ** ORM(Object Relationship Mapper)

 - 관계형 데이터베이스의 테이블의 하나의 행을 하나의 객체와 매핑시켜 사용하는 데이터베이스 프레임워크

 - 이 때 사용되는 DTO 클래스나 Map 클래스로부터 만들어진 객체

 - 최근의 프로그래밍 언어에서는 데이터베이스 연동을 대부분 ORM 방식을 이용해서 하도록 권장한다.

 - Java에서는 JPA, Apple의 Core Data, MS의 LINQ 등이 ORM을 사용하는 대표적인 경우이다.

 - SQL을 사용해도 되고 자신들만의 문법으로 만들어진 쿼리 문을 사용하기도 한다.

 

 ** Hibernate

 - Java ORM Framework

 - Java 진영에서 나중에 JPA라고 하는 ORM 표준 Spec을 발표하고 실제 구현은 대부분 Hibernate로 한다.

1. SQL Mapper인 Mybatis(iBatis)와의 비교

 - Hibernate는 데이터베이스 구조를 알아야 하기 때문에 학습하는 것이 어렵지만 성능이 우수해서 Solution 개발에 주로 이용한다.

 - MyBatis는 학습하는 것이 쉽지만 성능은 Hibernate 보다 좋지 않을 가능성이 높아서 SI에 주로 이용한다.

 - 기존의 데이터베이스를 활용하는 경우에 종종 이용한다.

2. Hibernate 구성요소

1) Configuration : 데이터베이스 테이블과 클래스 매핑 설정

2) SessionFactory : Configuration 객체를 이용해서 생성하는 객체로 Session 객체를 생성해서 데이터베이스를 사용한다. - Connection의 개념

 - 무겁기 때문에 미리 생성해두고 유지한 상태로 사용한다.

3) Session : SessionFactory로 부터 만들어지는 객체로 실제 데이터베이스 작업을 수행하며 가벼운 객체 - PreparedStatement의 개념

 - 가볍기 때문에 필요할 때 생성하고 사용이 끝나면 소멸시킨다.

4) Transaction

5) Query : SQL 또는 HQL(하이버네이트에서만 사용할 수 있는 Query)

 - SQL : 관계형 데이터베이스마다 문법이 다르다.

 - HQL : 모든 관계형 데이터베이스에 동일한 문법을 적용할 수 있다.

 - 최근에는 서비스의 변화가 심하기 때문에 확장성을 고려해서 프로그래밍을 하는 것을 권장한다.

6)Creteria : Query 문법과는 다른 형태의 질의 중 하나로 Query를 직접 사용하지 않고 메소드를 호출하는 형태로 생성

3. 자료형 매핑

1) number(숫자), int : int, java.lang.Integer

2) number(숫자1, 숫자2), float, double : double, jave.lang.Double

3) boolean, yes/no, true/false : boolean, java.lang.Boolean

4) Date : java.sql.Date, java.util.Date

5) Time : java.sql.Time, java.util.Date

6) Timestamp : java.sql.TimeStamp

7) char, varchar(varchar2), clob, text, String : java.lang.String

8) blob : java.sql.Blob

 - 모든 자료형은 java.lang.String과 매핑이 가능하다.

 - 실제로는 String으로 가져와서 형 변환하는 구조

4. Hibernate 매핑 파일 작성 방법

 - id를 primary key와 매핑, property를 이용해서 나머지 컬럼을 매핑

<hibernate-mapping package = "매핑할 DTO 클래스의 경로 - 패키지까지만 작성">

        <class name = "DTO 클래스 이름" table = "매핑할 테이블이름">

                  <id name = "primary key와 매핑될 프로퍼티(변수명)" column = "primary key 컬럼 이름"/>

                  <property name = "프로퍼티 이름" columns = "컬럼 이름"/>

                  ...

        </class>

</hibernate>

 - 컬럼이름을 작성할 때 Oracle은 대문자 MySQL은 소문자로 작성한다.

 - DTO 클래스가 아니라 Map과 연동할 때는 중요한 문제이다.

 - Sequence를 사용하는 경우

<id name = "프로퍼티 이름" column = "컬럼 이름">

         <generator class = "sequence">

                  <param name = "sequence">시퀀스 이름</param>

         </generator>

</id>

5. SessionFactory를 생성하기 위한 bean 설정 - 우리 버전은 5

<bean id = "식별자" class = "org.springframework.orm.hibernate버전.LocalSessionFactoryBean">

              <property name = "dataSource" ref = "DataSource의 id"/>

              <property name = "mappingResources">

                             <list>

                                        <value>설정파일의 경로</value>

                                        ...

                             </list>

              </property>

              <property name = "hibernate">

                             <list>

                                        <value>설정파일의 경로</value>

                                        ...

                             </list>

              </property>

</bean>

6. 질의

1) SQL

2) HQL

3) Criteria

7. Session의 메소드

1) save(Object object) : 데이터 삽입

2) update(Object object) : 기본키 컬럼을 가지고 where 절을 만들어서 나머지를 수정

3) delete(Object object) : 기본키 컬럼을 가지고 삭제

4) get(class 이름, 조건) : 조건에 맞는 데이터를 찾아오는 메소드

5) createSQLQuery(String sql) : SQL 실행 가능한 객체를 생성

8. 필요한 의존성

 - 데이터베이스, spring-jdbc, spring-jdbc, spring-orm, hibernate

 

 ** Hibernate 실습

1. 연동할 테이블 생성

2. 프로젝트에 의존성을 설정

 - 데이터베이스, spring-jdbc, spring-jdbc, spring-orm, hibernate

1) hibernate 버전 설정

2) 사용할 데이터베이스의 의존성을 추가

 - Oracle은 repositories와 dependency를 같이 추가

 - MySQL은 dependency를 추가

3) spring-jdbc 의존성 설정

4) spring-orm 의존성 설정

5) hibernate는 Spring Project에서는 기본적으로 의존성이 설정되어 있어서 앞에서처럼 버전만 변경하면 된다.

3. Spring 설정 파일에 접속할 데이터베이스 정보를 저장할 DataSource Bean을 생성하고 테스트

- applicationContext.xml 파일에 작성

4. 테이블과 매핑할 DTO 클래스를 생성

 - 이름은 하이버네이트 설정 파일에서 매핑을 하기 때문에 자료형에 유의하면서 생성

 - hibernate.domain.Drink

5. 하이버네이트 설정 파일을 생성

 - 테이블과 클래스를 매핑

 - dao.drink.hbm.xml

6. 스프링 설정 파일에 Hibernate 사용을 위한 bean을 설정

 - context와 tx 네임스페이스를 추가

7. main 메소드에서 테스트

- SessionFactory를 주입받아서 출력해보면 된다.

설정 파일의 경로가 틀리거나 하면 예외 발생

8. Hibernate를 사용하는 DAO 클래스를 생성해서 작업을 수행하는 메소드를 작성

 - SessionFactory를 주입받아서 사용한다.

 - Hibernate를 사용할 때는 반드시 트랜잭션을 사용해야 한다.

 - Service에 트랜잭션을 적용

9. main 메소드에서 메소드를 호출해서 확인

 

 ** Oracle로 작업한 것을 MySQL로 변환

1. MySQL에 테이블 생성

2. pom.xml에 MySQL 의존성 설정

3. DataSource 변경

4. Framework 별로 할 일

 - MyBatis : mapper 파일에서 쿼리를 수정한다.

 - Hibernate : Spring 설정 파일에서 데이터베이스 종류만 변경하면 된다.

 

 ** DataBase의 언어 또는 기능

1. 언어

 - DDL : Create, Alter, Drop, Truncate

 - DML

    - DQL : Select

    - DML : Insert, Delete, Update - Transaction 처리 대상

 - DCL

    - DCL : Grant, Revoke

    - TCL : Commit, Rollback, SavePoint

2. 기능

 - 정의 기능 : DBA(분석 및 설계)의 작업

 - 조작 기능 : Programming Developer 또는 User

 - 제어 기능 : DBA(운영 - SystemManagement)의 작업

 

** 데이터베이스 연동

1. JDK가 제공하는 JDBC 만을 이용해서 연동

2. Java Web Application을 만들면서 데이터베이스 접속정보를 context.xml 파일에 작성하고 web.xml에 이 정보를 읽어서 사용하는 방법

 - Connection Pool을 이용하는 방법

 - 연결과 해제를 직접하지 않고 미리 만들어진 Connection을 빌려쓰는 개념

3.  Spring-MyBatis를 이용

 - SQL을 xml이나 인터페이스에 작성하고 자바 코드에서 SQL을 호출해서 사용

 - SQL과 Java 코드가 분리된다.

 - 작업이 쉽고 데이터베이스 연결이나 파라미터 매핑 또는 결과 매핑 등의 작업을 수행할 필요가 없어서 개발 시간이 단축된다.

 - SI에서 주로 이용

4. Spring-Hibernate를 이용

 - SQL 없이 테이블과 클래스(인스턴스)를 매핑시켜서 사용하는 방식

 - 데이터베이스가 변경되더라도 수정할 부분이 거의 없고 성능도 MyBatis 보다 좋은 경우가 많다.

 - 데이터베이스에 대한 이해가 필요하기 때문에 앞의 방법들보다 어려울 수 있다.

 

** 소프트웨어 개발 과정

1. 분석(요구사항 정의 - 무엇을 어떻게 언제까지 할 것인지 결정하는 과정)

2. 설계

1) 개념적 설계 : 도식화

2) 논리적 설계 : 컴퓨터가 이해할 수 있도록 변환

3) 물리적 설계 : 실제 구현할 내용을 설계

3. 구현

1) 저장소 구현

2) 저장소와 서버 애플리케이션이 연동

3) 서버 애플리케이션과 클라이언트 애플리케이션이 연동

 - 1번이나 2번 작업 중에 View는 동시에 제작하는 것이 가능

 - 서버 애플리케이션을 구현하는 방법은 Socket Server를 만드는 방법과 Web Server를 만드는 방법 2가지

 - 성능은 Socket Server가 좋은데 구현하기가 어렵고 Web Server는 구현하기가 쉬운데 Socket Server 보다 성능은 떨어진다.

 - 서버를 만들 때 클라이언트가 여러 종류이면 여러 개의 서버를 구현하지 않고 서비스를 할 수 있도록 하기 위해서 서버는 뷰가 아니라 데이터를 만들어서 넘겨주어야 한다.

 - 이러한 방식은 Restful 또는 REST API라고 한다.

 - 이 때 가장 많이 사용되는 데이터 포맷이 json 이다.

 - 서버 애플리케이션을 구현할 때 가장 중요한 것은 사용자의 요청이 왔을 때 저장소에 요청을 수행하고 결과를 가져와서 넘겨주는 것이다.

 - 클라이언트 애플리케이션에서 가장 중요한 것은 서버의 데이터를 가져와서 원하는 형태로 가공(Parsing)해서 어떻게 보여줄 것인가 하는 것이고, 이 때 오프라인 상태에서 보여줄 수 있도록 할 것인지 그리고 트래픽을 얼마나 줄일 것인지 여부이다.

4. 테스트

1) 디버깅 : white box나 black box 테스트

2) 검증 : 요구 사항과 일치하는지 테스트, 알파 테스트, 베타 테스트

5. 인수나 이행, 배포

6. 유지보수