728x90
반응형

1. Spring Framework

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크로, 일반적으로 스프링(Spring)이라고도 불린다. 동적인 웹 사티으 개발에 필요한 다양한 서비스를 제공하고, 대한민국 공공기관 웹 서비스 개발 시 권장되는 전자정부 표준프레임워크의 기반 기술로도 쓰인다.

2. 특징

  1. 오픈소스
    • 활발한 커뮤니티와 다양한 피드백을 통해 지속적으로 발전하고 있다.
  2. Java 엔터프라이즈 애플리케이션 개발이 쉽다
    • 다양한 아키텍처를 유연하게 구성할 수 있고, 엔터프라이즈 환경에 필요한 기능을 모두 제공한다.
  3. 프레임워크의 기본 원칙을 지킨다
    • 강력한 이전 버전과의 호환성 유지
    • 유연하고 비독선적 : 특정 방식을 강요하지 않고, 다양한 애플리케이션 요구사항을 지원한다.
    • 선택의 자유 : 디자인 결정을 유연하게 내릴 수 있으며, 예를 들어 구성만 변경해서도 지속성 공급자를 전환할 수 있다.
    • 깨끗한 코드 구조와 명확한 문서화 : 순환 종속성이 없는 구조와 의미 있는 최신 javadoc을 제공한다.
728x90
반응형

'이것 저것 개발 공부 > JAVA' 카테고리의 다른 글

[Java] 변수  (0) 2025.02.26
[JAVA] Math 클래스  (1) 2025.02.13
[JAVA] StringBuilder / StringBuffer 클래스  (1) 2025.02.13
[JAVA] Wrapper 클래스  (0) 2025.02.13
[JAVA] Object 클래스  (0) 2025.02.13
728x90
반응형

MyBatis

1. MyBatis

 - 데이터의 입력, 조회, 수정, 삭제(CRUD)를 보다편하게 할 수 있도록 xml로 구조화한 Mapper설정 파일을 통해 JDBC를 구현한 영속성 프레임워크.

 - 기존에 JDBC를 통해 구현했던 상당 부분의 코드, 파라미터 설정 및 결과 mapping을 xml 설정으로 쉽게 구현할 수 있게 함.

 - MyBatis는 기존 iBatis의 한계점인 Dynamic query(동적 쿼리)와 Annotation 처리를 보강하여 더 나을 기능을 제공함.

 - iBatis는 현재 비활성화 상태이며, 기존에 iBatis로 만들어진 애플리케이션의 지원을 위한 라이브러리만 제공하고 있음.

 

2. MyBatis Configuration by JAVA

 - Environment : 데이터베이스 접속에 관한 환경 설정 정보를 가진 객체로, MyBatis 환경 설정 객체를 생성하는 데 사용함.

 - Configuration : 환경 설정 정보 Environment 객체를 가지고 생성한 MyBatis 설정 객체로, DB 접속 관련 정보, mapper 등록, 별칭 등록 등 MyBatis 전역 설정 정보를 담고 있음.

 - SqlSessionFactory

  - SqlSession 객체를 생성하기 위한 팩토리 역할을 수행하는 인터페이스.

  - 애플리케이션이 실행되는 동안 여러 차례 빌드하지 않도록, 싱글톤 패턴 등을 이용하여 어플리케이션 스코프로 사용하는 것이 좋음.

 - SqlSessionFactoryBuilder

  - SqlSessionFactory 인터페이스 타입의 하위 구현 객체를 생성하기 위한 빌드 역할을 수행함.

  - build() 메서드는 설정 정보를 담고 있는 Configuration 타입의 객체 혹은 외부 설정 파일과 연결된 스트림을 매개변수로 전달하면 SqlSessionFactory 인터페이스 타입의 객체를 반환함.

 - MyBatis 인스턴스들의 Scope와 Life-Cycle

  - SqlSessionFactoryBuilder : 로컬 스코프 -> 메서드 내부 또는 초기화 블럭 내부

   - 일반적으로 한 번 SqlSessionFactory를 빌드하고 나면 더 이상 필요하지 않음. (일회성)

   - 따라서 짧은 라이프 사이클을 가지게 되며 더 이상 필요하지 않게 되면 즉시 가비지 컬렉터의 대상이 될 수 있음.

   - 일반적으로 데이터베이스 작업(CRUD 외 DDL 등)을 수행하는 동안에만 유효하기 때문에 짧은 라이프 사이클을 가지게 됨.

  - SqlSessionFactory : 애플리케이션 스코프 -> 싱글턴 패턴 사용

   - 애플리케이션 내에서 단 하나만 생성되도록 관리해야 함.

   - 애플리케이션이 실행되는 동안 SqlSessionFactory가 여러 번 빌드되지 않도록 하는 것이 가장 좋은 형태.

   - 애플리케이션이 실행되는 동안 여러 스래드(= SqlSession)에서 공유되기 때문에 긴 라이프 사이클을 가지게 됨.

  - SqlSession : 메서드 스코프 or 트랜잭션 -> 메서드 내부 또는 트랜잭션 범위 내부

   - 추후 웹 요소가 결합되면 HTTP 요청과 밀접한 생명 주기를 가져감. 즉, HTTP 요청이 발생했을 때 객체가 생성되고, 요청에 대한 HTTP 응답이 전송되면 객체를 폐기하면 되기 때문에 HTTP 요청과 유사한 스코프에 두는 것이 가장 올바른 방법.

   - 데이터베이스 작업이 끝난 후에는 반드시 close() 메서드를 호출하여 리소스를 반환해야 하며, 그렇지 않으면 연결 누수(Connection Leak)가 발생하게 되고 이는 메모리 누수(Memory Leak)로 이어질 수 있음.

 

3. MyBtis Configuration by XML

 - properties

  - 설정 파일에서 공통적인 속성을 정의하거나 외부 파일에서 값을 가져오는 태그.

  - 외부 프로퍼티 파일은 resource 하위의 경로를 기술하면 기술하면 됨.

 - settings

  - SqlSessionFactory 객체가 SqlSession 객체를 만들 때, 생성할 객체의 특성을 설정함.

  - settings 엘리먼트의 하위 엘리먼트들은 대부분 디폴트값을 가지며, 특별한 경우가 아니면 디폴트값을 사용해도 무방함.

 - typeAliases

  - MyBatis에서 사용할 자료형의 별칭을 선언함.

  - mapper의 쿼리를 작성할 때 ResultType이나 parameter 속성에 풀클래스명으로 사용해야 하는 클래스의 별칭을 등록하여 간략하게 사용할 수 있음.

 - environments

  - MyBatis에서 연동할 Database 정보를 등록함.

  - transactionManager : 트랜잭션 메니저를 JDBC 혹은 MANAGED로 설정할 수 있음.

   - JDBC : MyBatis API에서 제공하는 commit, rollback 메서드 등을 사용해서 트랜잭션을 관리하는 방식 (수동 commit)

   - MANAGED : MyBatis API 보다는 컨테이너가 직접 트랜잭션을 관리하는 방식 (자동 commit)

  - dataSource : 속성으로 커넥션풀 사용 여부를 POOLED와 UNPOOLED로 설정할 수 있음.

   - 설정 가능한 type 중 JNDI도 있는데, 이는 MyBatis에서 Connection 객체를 생성하여 관리하지 않고 Web Application의 설정을 따르겠다는 의미.

  - mappers

   - 사용하고자 하는 쿼리가 정의된 mapper 파일을 등록함.

   - <mapper resource=""> : (상대경로) 클래스패스에 위치한 xml 매퍼 파일 지정
   - <mapper url=""> : (절대경로) URL을 사용한 xml 매퍼 파일 지정
   - <mapper class=""> : 매퍼 인터페이스를 사용하는 인터페이스 위치 지정
   - <mapper name="">  : 패키지 지정으로 패키지 내 자동으로 매퍼 검색

Dynamic Query

1. MyBatis Dynamic Query

 - 일반적으로 검색 기능이나 다중 입력 처리 등을 수행할 경우, SQL을 실행하는 DAO를 여러 번 호출하거나 batch 기능을 이용하여 버퍼에 담아서 한번에 실행시키는 방식으로 쿼리를 구현함.

 - MyBatis에서는 이를 동적으로 제어할 수 있는 구문을 제공하여 쿼리를 좀 더 쉽게 구현할 수 있는 기능을 지원함.

 

2. if

 - 동적 쿼리를 구현할 때 가장 기본적으로 사용되는 구문.

 - 특정 조건을 만족하는 경우 내부의 구문을 쿼리에 포함함.

 

3. choose (when, otherwise)

 - Java의 if-else, switch 구문과 JSTL의 choose 구문과 유사하며 주어진 구문 중 한 가지만 수행할 때 사용함.

 

4. trim (where, set)

 - <trim> : 쿼리의 구문의 특정 부분을 없앨 때 쓰임.

 - <where> : 기존 쿼리의 WHERE 절을 동적으로 구현할 때 쓰임.

 - <set> : 기존 쿼리의 UPDATE SET 절을 동적으로 구현할 때 쓰임.

 

5. foreach

 - Java의 for문과 같은 역할을 하는 것으로, 동적 쿼리를 구현할 때 collection에 대한 반복 처리를 제공함.

 

6. bind

 - 특정 문장을 미리 생성하여 쿼리에 적용해야 할 경우 사용함.

 - '_parameter'를 통해 전달 받은 값에 접근하여 구문을 생성함.

MyBatis Dynamic Query (Java Provider) 구문

1. Java Provider

 - MyBatis에서 제공하는 기술로 어노테이션과 Java configuration을 이용하여 동적 쿼리를 작성할 수 있음.

 - 인터페이스에서 Provider Annotation을 통해 Provider 클래스를 type으로 설정하고 method로 쿼리ID를 설정하여 매핑함.

 

2. @Provider

 - 매퍼 인터페이스의 메서드에 어노테이션을 작성해야 함.

 - 어노테이션은 수행할 쿼리문에 따라 @SelectProvider, @InsertProvider, @UpdateProvider, @DeleteProvider로 작성함.

 - 어노테이션의 type 속성에는 Provider의 클래스 타입을, method에는 수행할 쿼리ID를 적음.

728x90
반응형
728x90
반응형

[이것 저것 개발 공부/MySQL] - MySQL

 

MySQL

Database1. Database - 한 조직에 필요한 정보를 여러 응용 시스템에서 공유할 수 있도록 논리적으로 연관된 데이터를 모으고, 중복되는 데이터를 최소화하여 구조적으로 통합/저장해 놓은 것. - 구

crushed-taro.tistory.com

JDBC

1. JDBC

 - java에서 데이터베이스에 접근 가능하도록 하는 Programming API.

 

2. DriverManager

 - 데이터 원본(= DataBase)에 JDBC driver를 통하여 Connection을 만드는 역할을 함.

 - Driver란 중간에서 연결하는 역할을 의미함.

 

3. Connection

 - 데이터 원본(= Database)과 연결된 Connection을 나타냄.

 - 쿼리문을 실행할 수 있는 Statement 혹은 PreparedStatement 객체를 생성할 수 있는 기능을 제공함.

 

4. Statement

 - SQL문을 저장하고 실행한 뒤 결과를 받아 반화해주는 메서드들이 묶여 있는 타입의 클래스.

 

5. PreparedStatement

 - PreparedStatement도 Statement임. 따라서 Template 클래스를 작성하여 Statement를 close() 하는 메소드를 함께 사용할 수 있음.

 - 완성된 쿼리문과 미완성 쿼리문( = 위치홀더를 사용한 쿼리문)을 모두 사용할 수 있음.

 - SQL injection 공격에 대하여 안전함.

 

6. ResultSet

 - SELECT문 수행 성공 시 반환한 결과값을 받아오는 객체.

 - SQL문에 의해 생성된 결과 테이블을 담고 있음.

 - 커서로 특정 행에 대한 참조 조작을 할 수 있음.

MVC Architecture

1. Model-View-Controller

 - 웹 어플리케이션 개발 시 MVC 패턴을 적용하여 각각의 역할별 작업이 가능하도록 분담하는 설계 패턴을 의미함.

 - 대부분의 웹 어플리케이션 구조는 MVC 패턴을 적용하고 있음.

 

2. DAO(Data Access Object)

 - 데이터베이스에 접근하기 위한 용도의 객체 -> CRUD 연산을 담당하는 메소드의 집합으로 이루어진 클래스

 - 사용 목적은 쿼리문 단위로 기능을 분리해 재사용하기 위함.

 

3. DTO(Data Transfer Object)

 - 여러 계층간 데이터 전송을 위해 다양한 타입의 데이터를 하나로 묶어 전송할 용도의 클래스임. (VO, Bean, Entity 등은 모두 DTO를 의미함)

 - DTO 클래스의 필수 작성 조건

  - 모든 필드의 접근 제한자는 private(외부에서 직접 접근 불가해야 함)

  - 기본생성자와 모든 필드를 초기화하는 생성자

  - 모든 필드에 대한 setter/getter

  - toString() Overriding을 이용한 필드 값 반환용 메서드

  - 직렬화 처리 (DB와 byte 단위로 데이터 송수신하기 위함)

 - DTO 클래스 작성 시 참고 사항

  - 컬럼 하나에 DTO 필드(변수) 하나가 대응되도록 만드는 것이 일반적.

  - 필드 네이밍은 컬럼명을 낙타봉 표기법으로만 바꿔주면 됨.

 

4. 구성

 - Model

  - 웹 애플리케이션의 비즈니스 로직. 즉, 수행할 서비스를 담당함.

  - Service : 여러 DAO를 호출하여 데이터 접근 및 갱신을 하는 클래스

  - DAO(Data Access Object) : 데이터베이스에 직접 접근하여 요청 받은 결과를 반환하는 클래스.

  - VO(Value Object) : 계층 간 데이터 교환을 위한 객체 클래스를 말함.

 - View

  - 사용자가 요청을 하거나, 요청한 정보를 응답으로 받아서 볼 수 있는 화면을 담당.

 - Controller

  - 사용자의 요청을 전달받아 응답 처리를 위한 Service를 호출하고 결과를 View에 전송하는 클래스로, Servlet으로 작성함.

728x90
반응형

+ Recent posts