본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

스프링 부트에서 토비 3.1 따라하기 : 1장 - 1.1 초난감 DAO

by 청춘만화 2019. 2. 17.

스프링 부트에서 토비 3.1 따라하기 : 1장 오브젝트와 의존관계 - 1.1 초난감 DAO 


0. 개발환경 

- OS : mac

- STS : 4.0.1

- MySQL : Server version: 8.0.13 Homebrew

- Frame-Work : 일단 최대한 의존성 없이 운영될 수 있도록 jar로 만 진행


관련 링크 

- 스프링 사용자 모임_홈페이지     http://www.ksug.org/

- 스프링 사용자 모임 질의응답     https://groups.google.com/forum/#!topic/ksug/13vB4tCFqrI

- 2017 스프링캠프                       https://www.youtube.com/playlist?list=PLdHtZnJh1KdZ6NDO9zc9hF4tONDLTSEUV




1장 오브젝트와 의존관계 

1.1 초난감 DAO

첫 예제는 JDBC 연동한 DAO 테스트이다. 이름하여 초난감 DAO

간단한 예제이지만... 출간된지 시간이 지나서 그런지 그냥 따라가지지가 않았다. MySQL 버전이 바뀌면서 SSL 등의 조정을 해줘야 했고 구글링으로 찾았던 선배들의 포스팅 내용들 또한 최근 바뀐 버전이 아니라 무작정 따라가다가 줄곧 벽에 부딪친곤했다.. 

여기서 한가지 교훈, 내개 딱 맞는 것 처럼 보이는 블로그도 무작정 따라하지 말자. 여러 포스팅을 비교해보고 선행적 검증이 완료되고 이유가 명확해 지면 그때서 나만의 방식으로 실행해보아야 한다. 무작정 갔다가 나중에 설정이며 환경이며.. 수정하는 것이 여간 만만치 않다. 뭐 그러면서도 배우는 점들이 있겠지만... 대부분 그 과정에서 좌절하는 것 같다..




01-1. 대략의 과정

     1. MySQL 설치 : 다행히? 이전에 작성한 포스팅이 있으니 링크로 대신한다~ 

2. STS에 프로젝트 생성 : 걍 자바프로젝트로 했씁니다.

3. MySQL jar 등록 : 생성한 프로젝트를 선택하고 오른쪽 마우스를 클릭하면 나오는 Build Path

4. src 폴더 아래 각자 원하는 패키지명과 폴더명을 만들고 그 안에 Class들을 생성하여 책에 있는 내용을 따라서 코딩하면 된다. 참고로 이번 첫 예제는 두 개의 class 파일로 구성되어 있다. 

- JDBC 설정을 통해 DB와 연결해주는 DAO

- DAO를 통해 예제를 실행시켜주는 main()를 포함하고 있는 JAVA BEAN(* <-- 아래 요약에 설명되어 있음)


01-2. 아래 네가지 목록이 시작부터 부딪친 이슈 목록이다.


0. MySQL 과 ORACLE의 JDBC Connection 방법 비교 및 JDBC 관련 기본이론

-> Java Data Access Layer의 이해 및 Spring JDBC를 이용한 데이터 접근 방법 : 정리가 너무 잘되어 있는 훌륭한 포스팅이네요! 

-> BE - Java DataBase Connectivity : 여기도 못지 않습니다! 참 훌륭하신 분들 많네요 ;D


1. ESTABLISHING SSL CONNECTION WITHOUT SERVER'S IDENTITY VERIFICATION IS NOT RECOMMENDED.

->  JDBC useSSL=false 옵션


2.  mysql_native_password to caching_sha2_password.

-> ALTER USER 'student'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';


3. Unknown system variable querycachesize

->  STS build path로 추가로 설치한 jar 파일과 local version이 서로 맞지 않아서  

          : 과거에 작성된 블로그의 예제를 따라서 하다보니 이렇다... 


4. The server time zone value ‘KST’ is unrecognized or represents more than one time zone 

->  mysql-connector-java 버전 5.1.X 이후 버전부터 KST 타임존을 인식하지 못하는 이슈 



01-3. 첫 예제의 결과이다.

1) UserDao.class : 위에 이슈에 대한 반영이 고스란히 담겨있다.

2) User.class

3) 프로젝트 export 파일이다. 의존성이 없으니 개발환경만 맞으면 바로 실행 가능 할 것으로 예상된다.(물론... 개발환경 맞추기가 가장 어렵지만...)

(1) MySQL 에서 테이블 생성 

- create table users(  id varchar(10) primary key, name varchar(20) not null,  password varchar(10) not null ) ;

- ALTER 예제실행중인테이블이름 '예제를실행중인ID'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MySQL패스워드';


(2)  import > Existing Projects into Workspace

- 예제 프로젝트  :  study_spring190217.zip




01. 초난감 DAO 챕터의 주요 뇌용[각주:1]

1. 하학  

1) 스프링은 애플리케이션 프레임워크 이다 

(1) 애플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방식에 대한 틀 및 기준 제공 

(2) 자바라는 언어에 대해 가장 가치를 두고 있는 것은 객체지향 프로그래밍이 가능한 언어 라는 점이다.

(3) 스프링 런타임 엔진  = 스프링 컨테이너 = 애플리케이션 컨텍스트 는 서로 같은 의미이다.

(4) 웹 모듈에서 동작하는 서비스나 서블릿으로 등록하여 사용 

(5) 공용 프로그래밍 모델로는 IoC/DI, 서비스 추상화, AOP 가 대표적이다.


2) 스프링이 가장 관심을 두고 있는 대상은 오브젝트이다. 

오브젝트 생애주기(애플리케이션에서 오브젝트 설계(단위) > 오브젝트 생성 > 다른 오브젝트와 관계형성 > 오브젝트 사용 > 오브젝트 소멸 되는 과정)에 대한 이해가 필요하다


3) DAO(Data Acess Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

(1) DB 연결을 위한 Connection을 가져온다 

(2) SQL을 담은 Statement 또는 PreparedStatement를 만든다.

(3) 만들어진 Statement를 실행한다.

(4) 조회의 경우 SQL 쿼리의 실행결과를 ResultSet으로 받아서 정보를 저장할 오브젝트(여기서는 User.class)에 옮겨준다.

(5) 작업 중 생성한 Connection, Statement, ResultSet과 같은 리소스는 작업을 마친 후 반드시 close() 한다.

(6) JDBC API가 만들어낸 예외 exception 는 받아서 직접 처리하거나 메소드 밖으로 throws 던지도록 한다.  


4) 자바빈 또는 빈 JavaBean 아래 두가지 관례를 통해 만들어진 오브젝트 

(1) 디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 가지고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 

(2) 프로퍼티 : 자바빈이 노출하는 이름을 가진 속성으로 set으로 시작하는 수정자 메소드 setter와 get으로 시작하는 접근자 메소드 getter를 이용해 수정 또는 조회를 할 수 있다. 

2. 상학

기능이 정상적으로, 그것도 출실히 돌아가는 UserDao 클래스 코드의 문제점은 무엇일까? 스프링을 공부한다는 것은 바로 이런 문제 제기와 의문에 대한 답을 찾아가는 과정이다. 





다음은 1.2 DAO 분리  입니다 ;D


  1. 내가 생각하는 뇌피셜을 기반으로 이해한 주요 내용이 되겠다. [본문으로]

댓글