2022 01 01 ~ 06(우분투 서버설정 부분 따로 페이지를 파서 제대로 정리해야할꺼 같음) - oneso123456789/2022 GitHub Wiki

1~5일 저녁까지

ec2에 free tier를 사용해서 서버 구축을함 putty를 다운로드 받아서 putty젠을 이용해서 ec2 .pem(프라이빗키)를 .ppk(퍼블릿키)로 해독해서 putty를 이용해서 접속 호스트명은 dns4 퍼블릭주소를 사용했음
톰캣도 설치 하고 환경변수를 설정해줌 https://gaemi606.tistory.com/entry/AWS-EC2%EC%97%90-%ED%86%B0%EC%BA%A3Tomcat-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
그리고 oracle 11g r2 xe 버전도 설치해줌 여기가 문제가 많았음 최종적으론 https://a292run.tistory.com/entry/Oracle-11gR2-on-Ubuntu-2004
참고해서 환경변수 설정같이 해주면서 설치함 그리고 ubuntu에서 root 계정으로만 sqlplus가 켜지는 이슈가 있었음
분명 ubuntu(사용자 계정이름임) 사용자 계정에 usermod -G dba 계정이름로 sysdba 권한을 부여했지만 sqlplus 커맨드를 사용하지 못해서
링크와 지인에게 도움을 받아서 방법을 찾음

우분투 oracle db사용할 계정 설정

사용할 계정에서 su 명령어 사용해서 root로 변경후
vi .bash_profile


export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe 
export ORACLE_SID=XE 
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh` 
export ORACLE_BASE=/u01/app/oracle 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH 
export PATH=$ORACLE_HOME/bin:$PATH

설치할때 했던대로 똑같이 환경변수를 설정해줌 (아마 계정마다 .bash_profile에 다 적용해주는 방법을 사용해야 할것같음)
그리고 source ~/.bash_profile를 이용해서 변경사항을 반영해줬더니 사용 가능해짐.
이런 문제가 야기된 이유를 추측해보자면 처음엔 2022 01 03일 저녁부터 04일 새벽에 세팅을 해두고 잠을 잘때 인스턴스를 중지시켜서 그런거 같았지만
알고보니 그게 아닌 환경변수 문제였던걸로 생각됨.

05일 새벽

github에 main home notebook 브런치 3개를 사용중이었는대
notebook이 제일 최신이라서 그걸로 병합함
notebook과 home은 깃허브내 자동병합으로 한번에 끝났지만 home과 main브런치가 충돌이 일어나서 오래걸림https://codeinlife.tistory.com/37
충돌 이유는 pom.properties
이 파일이 문제인대 실제로 충돌이 일어나는 곳은 아무런 상관이 없는 날짜 표시기능에서 일어났음..
아무래도 내일 git이나 프로젝트 설정에서 공유를 제외하는 방법을 찾아야 할꺼 같음

05 저녁 ~ 06 새벽

sts와 ec2에 설치한 oracle db 연동을 위해서 oracle 포트를 9090으로 변경함
오라클 사용 port확인select dbms_xdb.gethttpport() from dual;
오라클 포트 변경 exec dbms_xdb.sethttpport(9090);

프로젝트 내에 javaBuild Pathojdbc8.jar 라이브러리를 추가해줌 또한 나중에 war 파일로 만들어질때도 ojdbc8이 포함될수 있도록
Deployment Assembly 항목에도 추가해줌 (Add Java Build Path)

커넥션풀 설정

일반적으로 여러 명의 사용자를 동시에 처리해야 하는 웹 어플 특성상 데이터베이스 연결을 이용할 때는 커넥션 풀(Connection Pool)을 이용하므로
아예 스프링에 커넥션 풀을 등록해서 사용함
Java에서 DataSource라는 인터페이스를 통해서 커넥션풀을 사용함
매번 데이터베이스와 연결하는 방식이 아닌 미리 연결을 맺어주고 반환하는 구조를 사용해 성능향상
spring-jdbc를 사용하는 방식이 아닌 HikariCPhttps://github.com/brettwooldridge/HikariCP를 이용함
pom.xmlHikariCP 2.7.4버전을 추가함 또한 root-context.xml<bean>태그를 이용해서 hikariConfigdataSource를 정의해줌
자세한 설정은 https://github.com/brettwooldridge/HikariCP#gear-configuration-knobs-baby참고

스프링에서 root-context.xml은 스프링이 로딩되면서 읽어 들이는 문서 따라서 주로 이미 만들어진 클래스들을 이용해서 Bean으로 등록할때 사용
일반적으로 프로젝트에 직접 작성하는 클래스들은 어노테이션 사용하는 경우가 많고
외부 jar 파일 등으로 사용하는 클래스들은 <bean>태그를 이용해서 작성하는 경우가 대부분

src/test/java경로에 com.crow.persiostence패키지 내에 DataSourceTests.java클래스를 만들어 실습을함 @Runwith어노테이션아래에
@ContextConfiguration어노테이션으로 file:src/main/webapp/WEB-INF/spring/root-context.xml를 읽어오지 않아서 오류가 발생함
테스트 코드는 정확히 알고있어야 함

MyBatis와 스프링 연동

장점

MyBatisSQL mapping프레임워크로 분류됨, 개발자들은 JDBC 코드의 복잡하고 지루한 작업을 피하는 용도로 많이 사용함.
자동으로 Connection close() 가능 ** MyBatis 내부적으로 PreparedStatement처리
#{prop}와 같이 속성을 지정하면 내부적으로 자동처리
리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet처리
기존 SQL을 그대로 활용할 수 있음
진입 장벽이 낮음
Mybatis 역시 mybatis-spring라이브러리로 쉽게 spring과 연동작업 가능

pom.xmlmybatis 3.4.6mybatis-spring 1.3.2를 추가해줌
또한 스프링에서 데이터베이스 처리와 트랜잭션 처리를 위해서 spring-jdbc/spring-tx
스프링과 같은 버전으로 추가해줌${org.springframework.version}

MyBatis에서 가장 핵심적인 객체는 SQLSession이라는 존재와 SQLSessionFactory이며
SQLSessionFactory라는 이름에서 보듯이 내부적으로 SQLSession을 만들어 내는 존재임
개발에서는 SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고 결과를 리턴 받는 구조로 작성됨

스프링에서 SqlSessionFactory를 등록하는 작업은 SqlSessionFactoryBean을 이용하여 처리함
패지지명을 보면 MyBatis패키지가 아니라 스프링과 연동 작업을 처리하는 mybatis-spring 라이브러리 클래스임을 알수있음

root-context.xml에 빈 등록중 sqlSessionFactory빈 작성중 class참조를 잘못함
class="org.mybatis.spring.SqlSessionFactoryBean"이라고 적어야하는대 "org.mybatis.springSqlSessionFactoryBean"이라고 참조를 함
bean등록중 class 참조 할때 컨트롤 왼쪽 클릭으로 참조가 가능한지 꼭 확인하고 넘어갈것

com.crow.persistence패키지내에 MyBatisTests.java클래스 실습중(JUnit테스트중) 아래와 같은 오류 발견됨

java.lang.IllegalAccessError: class com.crow.persistence.MyBatisTests (in unnamed module @0x282308c3) cannot access class jdk.internal.org.jline.utils.Log (in module jdk.internal.le) because module jdk.internal.le does not export jdk.internal.org.jline.utils to unnamed module
찾아보니 IDE에서 설정한 JDK와 로컬 환경변수에 등록된 Java 버전이 서로 달라서 그럼(https://www.inflearn.com/questions/196235)
나는 ec2 서버에 오라클db를 설치하고 사용중이라서 내 ide 환경변수와 ec2 자바 버전을 맞춰줘야 할꺼 같음
일단 사용중인 내 컴퓨터와 sts의 버전을 맞췄는대 똑같이 오류가 나옴 ..
근대 다행히 내가 1.8.0_312-8u312-b07이 버전의 open jdk windows용을 가지고 있었음
이유는 vs code에 필요해서 노트북으로 다운로드 받았는대 운이 좋았다고 할수있음
오늘 가장 중요한 내용은 왠만하면 모든 버전을 맞추자 ..

또한 pom.xml에
<java-version>1.8.0</java-version> 자바 버전을 <java-version>1.8.0_312</java-version>로 바꿈
sts의 jre ec2내의 ubutu jre 데톱의 jre 버전 모두 맞춤

그리고 방금 깨달은 건대 꼭 브런치를 main home 과 note book으로 나눌이유가 있나 싶음 그냥 메인과 날짜별로 브런치를 따는게 더 보기 좋을듯함
일단 날짜만 적어서 브런치를 올리고 시간도 적을지는 생각해보겠음

⚠️ **GitHub.com Fallback** ⚠️