본문 바로가기

WebApplication

[Spring] 스프링 MVC 기본구성 및 Sqldeveloper 데이터베이스 연동

스프링MVC프로젝트의 기본구성

Presentation tier 화면계층 > Business 비즈니스로직(서비스) > Persistence tier 영속계층(데이터계층)

**각 영역은 설계 당시부터 영역을 구분하고 인터페이스를 이용해서 연결하도록 구성

DAO의 역할 => MybatisMapper 인터페이스

VO : read only 목적의 데이터 객체 / DTO : 데이터 수집 목적의 데이터 전송 객체

 

Sqldeveloper 계정 생성 DBA 권한 부여

create user book_ex identified by 1234;

grant connect, dba to book_ex;

**포트번호 확인 후 8080 > 9090변경

select dbms_xdb.gethttpport() from dual;

exec dbms_xdb.sethttpport(9090);

 

** jdbc jar 파일 추가 :: oracle 11g 까지는 maven으로 jdbc 라이브러리 지원이 안되기 때문에 직접 해당 프로젝트에 jar(sqldeveloper 설치 폴더 내부에 jdbc/lib폴더 안에 있음) 파일을 추가 해주어야 함 >> pom.xmldependency 로 추가

>> 추가 후 buildpath에 다운로드한 ojdbc파일을 경로에 추가함

** war 파일로 변환시 jar 파일이 포함될 수 있도록 web deployment Assembly 항목에도 jar파일을 추가해주어야 함

>> jdbc 드라이버 추가 후 디비 연결이 정상 동작하는지 테스트 코드를 작성하여 확인

커넥션풀 사용 이유 :: 여러명의 사용자를 동시 처리하는 웹 어플리케이션의 경우 디비 연결시 커넥션풀을 이용해야 함 >> 스프링에 커넥션 풀 등록 >> datasource 를 통해 매번 데이터베이스와 연결하는 방식이 아닌 미리 연결을 맺어주고 반환하는 구조를 이용하여 성능 향상하기 위함

*Java 에서는 datasource 인터페이스를 통해 커넥션풀을 사용함

Mybatis의 핵심 객체 :: sqlSession / sqlSession Factory

**sqlsessionFactory :: sqlSession을 만들어내는 존재

**sqlSession :: connection을 생성하고 원하는 sql을 전달하여 결과를 리턴 받는 구조

Mapper :: sql 과 그에 대한 처리를 지정하는 역할 >> Mapperxml과 인터페이스 + 어노테이션의 형태로 작성 가능

ex)

public interface TimeMapper {

        @Select("SELECT SYSDATE FROM DUAL")

        public String getTime();

}

 

Mapper 작성 후 MyBatis가 동작할 때 Mapper 를 인식할 수 있도록 root-context.xml<mybatis:scan>태그를 이용해 추가 설정을 해줘야 함

MyBatis-Spring mapper 인터페이스를 이용해 실제 sql 처리가 되는 클래스를 자동으로 생성함

>> 인터페이스와 sql만을 작성하는 방식으로도 모든 jdbc처리를 끝낼 수 있음

 

** static block >> static{}

클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용된다. 클래스가 처음 로딩될 때 한번만 수행된다.