레이블이 mybatis인 게시물을 표시합니다. 모든 게시물 표시
레이블이 mybatis인 게시물을 표시합니다. 모든 게시물 표시

2021-06-25

0625 member통합 및 수정

 

반환값 수정

int로 반환하면 js에서는 <integer>1</integer>이런식으로 document string으로 받기때문에.. 반환값의 타입을 수정하고 관련 js메소드도 수정함



2021-06-20

0620 스터디

 1. jar 와 war?

war: 톰캣이 어플리케이션 바깥에 있다. 하나의 톰캣으로 여러개의 다른 어플리케이션을 돌릴 수 있다. 즉 별도의 웹서버와 웹 어플리케이션을 필요로 한다. 또한 war 방식의 패키지 구조를 사용한다.(WEB-INF 가 있는 jsp구조)

스프링부트의 경우 내장톰캣이 있어서 '실행가능한 jar(Executable jar)로 동작한다.

2. 어플리케이션마다 필요한 JDK버전, 톰캣버전이 상이한데.. jar로 배포하는 경우 그러면 운영체제 하나에서 돌아가는 모든 어플리케이션의 버전을 통일해주어야 함. -> 격리된 환경에서의 배포가 필요!!( 그래서 도커를 쓴다)

3. 도커를 사용하면- 같은 포트로 어플리케이션을 돌릴수있다!!

왜냐하면 운영체제 관점에서는 도커도 하나의 어플리케이션이기때문에

운영체제 { 12345포트 도커1: {8080 WAS}

               12346포트 도커2: {8080 WAS}

               12347포트 도커3: {8080  WAS} }

이런 식으로 되어있기 때문이다!! 그래서 같은 8080포트로 어플리케이션을 부를 수 있게 된다.

4. jar안에는 JDK가 포함되어있고, path를 유지하므로- 다른 환경일지라도 동일한 실행을 보장할 수 있다.??

5. PATH : java. 어플리케이션을 실행해주는 녀석 . 경로는 한개.

CLASSPATH: 프로그램이 실행될때 필요한 자원의 경로들. 여러개가 될 수 있다. 여기를 순회하면서 요구하는 파일이 있는지 찾아서 실행. (ex) application.properties )

6. 상대경로가 숨어있다

spring.datasource.url=jdbc: sqlite:[프로그램ROOT]sample.db

->절대경로로 바꾸어서 다시 실행해보기

7. 배포를 시도해보기!!!

2021-06-18

0618 restcontroller만들고 테스트하기

 

1. 검색어를 입력하면 결과를 반환해주는 restController작성



2. Postman으로 테스트. status 200과 함께 잘 반환되고 있다. 

getMapping이기 때문에 쿼리스트링으로 파라메터가 날아간다.

0618 FK관계의 데이터를 insert하기

 

1. 

마이바티스의 insertSelectkey 를 이용해서 FK를 transactional로 insert하는 처리를 할것이다.

일반적인 insert와 달리  insertSelectkey를 쓰면, 직후 getRNo를 했을때 해당 식별자 값이 null이 아니라 nextval로 불러온 값을 반환받을 수 있다.




2. DTO클래스에 FK관계의 list를 추가해둔다. 
new해야만 배열의 공간을 메모리에 확보할 수 있으니 주의하자. (call by reference)


3. null 체크와 size체크를 반드시 해서, 원하지 않는 결과를 방지한다. list가 있을 경우에만 insert할 것이다. 
list가 존재할경우 리스트에서 하나씩 뽑아서 맵퍼에게 넘기면, 맵퍼안의 insert구문이 실행된다.


4. 테스트 결과 잘 insert됨을 확인해볼 수 있다. 
list가 없을때는 recipe에만 새로운 데이터가 추가된다.


2021-06-14

0614 메서드 수정

 

1. 파일 이름 받을때 한번 더 거른다. 



2. 메서드에 throws Exception 걸어서 혹여나 Exception발생시 프레임워크가 처리해줄수있도록 수정. service관련 메서드에도 전부 추가함!!

2021-06-13

0613 배운 것들

 1. getOriginalFileName()메소드 문제 : 

        해당 파일명에 공백 이나 .(점) 혹은 /(슬래쉬)같은 문자가 포함되어있을경우 .. 저장했을때  원하지 않았던 결과가 초래될 수 있음!! 상위 디렉토리로 계속 올라가서 공격한다든지..!! 따라서 이 메소드를 그대로 사용하지 말고 파일이름을 한번 걸러내거나- 혹은 filename은 빼고 uuid로만 서버에 저장하고, filename은 db컬럼으로만 저장해서 사용자에게 보여줄 때는 filename만 표시한다. 

        ex) ././././aaa.jpg

2. 사용자 정의 Exception과 RunTimeException 

3. 불필요한 try - catch를 지우고 프레임워크가 Exception을 처리해주도록 throws하기(더욱 간결한 코드!)

프레임워크는 - 내가 만든 코드를 실행해준다. Exception날 수 있는부분만 try catch로 감싸서 해결할 생각 x ,( try catch이외의 부분에서 오류나면 어떡할거얏.) 그냥 throws하고- 프레임워크가 handle해주도록 맡긴다. 그것이 프레임워크의 역할이고 장점!


4. OS는 사용자가 올리는 파일이 그림파일인지 무언지.. 그런 종류를 인식할 수 있어서는 안된다. 그냥 하나의 String으로만 인식해야 한다. 그렇지 않으면 OS가 넘 똑똑해서 '앗 그림파일이다 읽어들여야지~~'하고 메모리에 올렸는데 그순간 악성코드 실행!! 같은 결과가 초래될 수 있다. (버퍼 오버플로우 공격) 따라서 그냥 File그 자체로 저장하고, 암호화하는 것이 좋다. 

5. 

GET: 정적자원 호출 , HTML의 캐시기능을 활용하여 좀더 빠르게 응답

POST: 동적자원 호출 , 동적으로 변경되는 서비스를 제공하고 싶을 때 사용하는 메서드

6. 응집도란 ? 하나의 모듈이 가질 수 있는 기능들이 모아진 정도

7. 패키지 묶을 때: 도메인 별로 묶고 . 만약에 어떤 service가 다른 도메인과 연관되어 비지니스 로직을 수행한다면 - 해당 repository 혹은 mapper를 has a로 껴안는게 아니라. 해당 도메인 소속의 service를 가져와서 이용하자. service 끼리는 맘껏 불러두 된다 ㅎㅎ!! 사용자에게 제공하는(노출되는) 기능이므로.

8. SQLlite??알아보기. 개발환경과 운영환경에서의 다른 DB -> 이거 application - profile명 - properties 파일로 뭔가 조절할 수 있을 듯한?!!

2021-06-12

0612 mybatis mapper log settings 완료

1. pom.xml의 dependency에  

<dependency>

<groupId>org.bgee.log4jdbc-log4j2</groupId>

<artifactId>log4jdbc-log4j2-jdbc4</artifactId>

<version>1.16</version>

</dependency>  

추가

2. 

log4j.xml파일이 존재하는 경로에 log4jdbc.log4j2.properties를 아래와 같이 추가 (main과 test양쪽에 추가한다.)

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator


3. root-context.xml 수정.

value 부분과 jdbcUrl부분을 수정해야 한다!!




로그 잘찍힌다!!!

0612 프로젝트 셋팅 진행상황

 



저번에 hikariConfig 충돌났던게, 자바 버전 때문이었다는 걸 알았다. (1.6버전으로 하고있었다)

이번에 좌충우돌 여러 설정을 공부하면서, 셋팅환경을 조성하는 것이 얼마나 중요한 일인지 다시금 깨달았다. 
스프링의 경우 parent version로 해서 버전을 전부 맞출 수 있게 해주는데, 이러한 친절함이 프레임워크의 또다른 장점으로 느껴진다.

2021-06-09

0609 와......진짜 .........드디어 됐다........마이바티스 환경설정 ㅜㅜ

환경설정 못끝내고 자려고 하니까 도저히 발뻗고 잠이 안들어서
결국 한시 반에 다시 일어나서 작업

1. DB커넥션 확인
2. Datasource설정
3. test환경 구축까지 끝내고
4. 마이바티스-스프링연동 << 에서 계~~속 오류가 나는거다 ㅜㅜ
알고보니 mybaits-config.xml파일이 없어서 나는 오류였다....

계속 디버깅 하면서 '아아 스프링부트 쓰면 이런 환경설정...30분에 끝내고 개발 딱 들가는건데...'하는 맘이 계속 들었지만
그렇지만 어쩌랴~~~ 요구사항은 요구사항~~~ 나의 맘대루만 할수는 없는것야~~~


spring-mybatis 환경설정하기

1. mybatis / spring-mybatis 관련 레포지토리를 pom.xml에 추가

2. datasource설정을 root-context.xml에 추가

3. mybatis의 sessionFactory 설정을 root-context.xml에 추가

=> 주의사항) property속성을 잘 맞추어 주어야함
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource"      ref="dataSource"></property>
    <property name="configLocation"  value="classpath:/mybatis-config.xml">                    </property>
    <property name="mapperLocations" value="classpath:mappers/**/*.xml">                        </property>
</bean>

4. src/main/resources에 mybatis-config.xml 파일 추가

5. mybatis mapper base-package지정

ex) <mybatis-spring:scan base-package="com.mariworld.sample.mapper"/>



아....행복한 초록불.....이제 발뻗고 누울수있다...


----------------------------------------------------
mapper테스트까지 완료!!!

2021-06-08

0608 spring - mybatis -hikariCP 연동

 1. spring test 버전 맞추기


안그러면 spring과 junit이 충돌남!


2. hikariCP연동 성공.

0608 oracle JDBC Thin Connections and Wallets 를 spring프로젝트와 연동하기

 1. 오라클 datasource 설정

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />

<property name="url"          value="jdbc:oracle:thin:@1)DB이름?TNS_ADMIN=2)키가 존재하는 폴더" />

<property name="username"        value="3)유저이름" />

<property name="password"        value="4)패스워드" />

</bean>

이 값은 연결속성에서 확인 가능하다. 
주의할 것은, oracle sql developer에서 구성파일은 zip파일을 써야하고
spring 프로젝트 내에서는 zip파일을 unzip한 파일이 존재하는 위치를 써야한다. 

=> 반드시 tnsnames.ora 파일이 존재하는 폴더명을 써야한다!!

-Unzip the wallet_databasename.zip to a secure location. Make sure that only authorized users have access to these files.

-The connection string is found in the file tnsnames.ora which is part of the client credentials download. The tnsnames.ora file contains the predefined service names. Each service has its own TNS alias and connection string.
(오라클 홈페이지 설명)






2. 오라클 홈페이지에서 SSO인증을 위한 jar다운로드하기(아래 링크 클릭)

https://www.oracle.com/database/technologies/appdev/jdbc-ucp-183-downloads.html


해당 세개의 jar가 없을 경우 보안connection에러가 뜨기 때문에 다운로드하여 프로젝트의 build path에 추가해 주어야 한다. 


해당 프로젝트 우클릭 -> properties -> java build path -> add external jars -> apply


3. 커넥션 테스트 하기



성공!

그외 트러블슈팅은 아래 페이지를 참고하자.

https://www.oracle.com/database/technologies/application-development/jdbc-eecloud-troubleshooting-tips.html

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...