-- Index --
MVC2 패턴 | JDBCTemplate | Propertise | Propertise파일로 관리하는 이유 |
Model / View / Controller | getConnection() , commit(), rollback(), close() |
prop.load() | 비용감소,협업,환경설정관리 |
1. MVC2 패턴
MVC란?
- - jsp파일 하나에서 요청과 화면처리 다 했던 것(java코드와 화면 코드를 한 곳에서 작업 )
1-1 MVC2 패턴이란?
- model / view / controller 나눠서 작업하는 것!
- java코드와 화면코드를 나눠서 작업하는 것
- model == data뭉쳐 놓은 것
- id,pwd,nick 등 칼럼(data)이 많아지면 하나하나 관리하기 힘들다.
- userDto 객체로 묶어서 data 관리 –
- 이전에는 req.setAttribute()로 req객체에 하나하나 입력해서 전달해주었었다.
1-2 MVC2 패턴에 기반하여 Controller / Service / DAO 레이어로 나누어서 작업
# controller : 화면선택 , 서비스 호출 , 객체에 데이터 담기 , 뷰에서 넘어온 값 꺼내기
- 1. 뷰에서 전달받은 데이터 꺼내기 // req.getParam(key)
- 2. 꺼낸 데이터 뭉치기 (model == vo == dto)
- 3. 데이터 가지고 할 일 하기 (서비스 호출하고, 실행 결과 받기)
- 4. 결과에 따라 화면 선택
# service : 비즈니스 로직(자바로 처리 || dao 호출) , 실행 결과 리턴
- 1. 비지니스 로직 처리
- - 자바 코드로 처리
- - SQL로 처리
- 2. 비즈니스 로직 처리 결과에 따라 트랜잭션 처리
- 3. 실행결과 리턴
# dao : DB에서 데이터를 가져오고 주고 리턴
- 1. 전달받은 데이터를 이용하여, SQL 실행
- 2. select 쿼리인 경우 ::: ResultSet -> 자바 객체로 변환 ( == 실행결과)
- 3. 실행결과 리턴
컨트롤러 레이어
1. 데이터 꺼내고, 뭉침
2. 서비스 호출
3. 결과에 따라, 화면 선택
서비스 레이어
1. 비즈니스 로직 수행
2. SQL 실행 결과 리턴
DAO 레이어
1. SQL 실행
2. 결과 리턴
2. 공통으로 사용할 JDBCTemplate.java 파일 만들기
# 템플릿 만들기 - ( 커넥션 / 커밋 / 롤백 / 클로즈 메서드 만들어놓고 사용 )
2-1 공통으로 사용할 커넥션 얻어오기 메서드 만들기
- public static Connection getConnection()
# 예외처리 던져 주는 이유
- 커넥션 얻어오는 과정에서 혼자 예외처리 완료해버림 -> 상위 단계에서 알지 못하는 경우 방지
- 예외 발생했는지 상위 단계에서 알기 위해서
2-2 commit / rollback / close 메서드 만들기
- commit/ rollback / close 메서드들에서는 null체크하는 부분 check
- close 메서드는 메서드 오버 로딩을 통한 부분 check
3. Propertise - 프로퍼티즈 파일로 변경
- getConnection() 메서드에서 수정 필요
- driver 경로 / url 경로 / dbId / dbPwd 이런 것들은
- 원래 다른 곳에 파일로 작성해놓고 하나하나 읽어와서 사용해야 한다.
- 그럼 너무 번거롭고 힘들다. 이를 편리하게 사용하게 해 주는 것이 Propertise 파일.
- 이 작업해보자.
3-1 driver / url / dbId / dbPwd 각각 따로 하나의 text 파일에 입력한 후 저장
- 저장해놓은 파일을 읽어오면 되는 것이다.
- dirver 경로 읽어오려면 driver.txt 파일 찾아가서 한 줄 읽어오면 되는 것이다.
- 나머지 애들도 마찬가지로 작업.
- text 파일을 가지고 하기에는 불편하다.
- 파일 4개를 교체하기 힘들다.. 수가 많다면 불가능하고 번거롭다.
- 파일 하나에서 내용만 바꿔주면 환경 설정 변경하고 싶다.
3-2 propertise 활용해보자.
- file 추가 - . properties
확장자명 .propertise 로 !
3-3 형식 맞춰서 파일내용 저장
- String 빼고
- 공백 + 띄어쓰기 빼고
- 따옴표 “ ” 빼고
- 세미클론 ; 빼고
- 저장
- 이렇게 해놓으면 = 등호를 기준으로 key:value 형태로 읽어오기 가능
4. Properties 파일 읽어와서 사용하기
- java에서 직접 입력해주는 방식이 아닌
- text 파일 하나하나 읽어와서 사용하는 방식이 아닌
- properties 파일 읽어와서 사용하는 것으로 수정
4-1 실제 경로 써주는 파일 위치 확인하기
- 우리는 src하위에 com/db/setup/data.properties 만들었는데
- 이 내용 똑같이 WEB-INF / clasees 하위에 com/db/setup/data.properties 가 생긴다!
- 내용은 똑같은데
- 우리는 서버에 올라간 내용의(파일의) 경로를 써주어야 한다.
4-2 .class.getResource( " / " )
- 근데 문제가 있다. WebContent의 실제 경로는 D:~~~ 뭐시기 안에 깊숙이 들어있다.
- 이 경로를 다 직접 써주기는 무리가 있다.
- 우리는 data.propertise 파일을 담고 있는 폴더의 경로를 얻어와야 하는데 ( = classes의 경로를 얻어와야하는데 )
- .class.getResource(“”) 메서드로 알아내기
- 방법 : classes 폴더 아래에 있는 또 다른 형제 이용해서 알아내기
1. JDBCTemplate.class.getResource(“/”).getPath() - 해주면
JDBCTemplate를 담고 있는 폴더의 경로를 얻어올 수 있다.
2. 얻어온 경로에 내가 파라미터 입력해줘서 propertise 파일 경로 얻어낼 수 있다.
빨간색으로 얻어온 경로가 dev/repo/
여기에 내가 파라미터로 파란색 경로 추가해주면
내가 얻어 올 수 있는 경로는 – dev/repo/abc
경로 입력까지 완료했으면 – 이제 key:value형태로 읽어올 수 있다.
4-3 코드 수정
- properties 파일 경로 얻어온 다음 - 변수 filePath 에 저장
- Properties 객체 생성해주고 - prop = new Properties()
- 얻은 경로를 활용해서 prop 객체 load 해주기
- load 완료하면 key값으로 data 얻어 오기
5. Propertise 파일로 관리하는 이유
뭐가 편함?
key ,value 형태로 데이터 사용 가능
# 자바 코드에 driver , url , id, pwd 이런 거 쓰면 안 됨
- 왜 안됨??
- 정보 노출 , 보안 , 운영 불편함
- 자바 코드에 직접 String 입력하면?
- 문자열 바뀔 때마다 ,
- 빌드 -> 컴파일 -> 배포
- 다시 해야 됨
# 파일로 관리해야 함
- 파일에서 읽어오게 코드 작성
- 그러면? 파일의 내용만 바꾸면, url, id, pwd 다 바꿀 수 있음
- 파일로 관리할 건데 좀 더 편하게 관리하고 싶음
- 그래서 쓰는 게 프로퍼티즈
- 왜 편함? 키 밸류로 가져올 수 있으니까
# propertise 파일 사용하는 이유 - ( 파일로 관리하는 장점 )
- 내가 작업한 java코드 그대로 올리는 것은 시간이 좀 걸린다.
- 어떤 프로젝트 자체는 큰 덩어리이다.
- 프로젝트 올리는 것이 아니라 문서 하나만 올리는 것은 간단한 일이다.
- 프로젝트 자체를 tomcat에 올리는 것은 큰 비용이 든다.
- 프로젝트를 팔았다 – 그 회사에 맞춰 ip/port/db 등 바꿔주어야 하는데
- 이런 문자열 바꾸는 것을 java코드 건드려서 하는 것이 아니라
- 이 파일만 건드려서 할 수 있도록 해주어야 한다.
+@ propertise 경로 찾아가는 부분
+@ propertise 파일 수정 후에 적용 안될 때 하는 법
- tommcat 정지하고
- Profect - Clean.. 에서 해당 프로젝트 선택하고 Clean
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 7월' 카테고리의 다른 글
22.07.28 - [ WAS ] 내 파일 경로 숨기기 , 하나의 컨트롤러로 2가지 요청 처리 (0) | 2022.08.04 |
---|---|
22.07.27 - [ WAS ] 로그아웃 구현 , 알람 메시지 띄우기 (0) | 2022.08.04 |
22.07.25 - [ WAS ] session, jsp내장객체 (0) | 2022.08.01 |
22.07.22 - [ WAS ] redirect(), 실습문제 (0) | 2022.08.01 |
22.07.21 - [ WAS ] doPost(), doGet(), forward(), setAttribute() (0) | 2022.07.29 |