2022 01 01 ~ 06(우분투 서버설정 부분 따로 페이지를 파서 제대로 정리해야할꺼 같음) - oneso123456789/2022 GitHub Wiki
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 커맨드를 사용하지 못해서
링크와 지인에게 도움을 받아서 방법을 찾음
사용할 계정에서 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일 새벽에 세팅을 해두고 잠을 잘때 인스턴스를 중지시켜서 그런거 같았지만
알고보니 그게 아닌 환경변수 문제였던걸로 생각됨.
github에 main home notebook
브런치 3개를 사용중이었는대
notebook이 제일 최신이라서 그걸로 병합함
notebook과 home은 깃허브내 자동병합으로 한번에 끝났지만
home과 main브런치가 충돌이 일어나서 오래걸림https://codeinlife.tistory.com/37
충돌 이유는 pom.properties
이 파일이 문제인대 실제로 충돌이 일어나는 곳은 아무런 상관이 없는 날짜 표시기능에서 일어났음..
아무래도 내일 git이나 프로젝트 설정에서 공유를 제외하는 방법을 찾아야 할꺼 같음
sts와 ec2에 설치한 oracle db 연동을 위해서 oracle 포트를 9090으로 변경함
오라클 사용 port확인select dbms_xdb.gethttpport() from dual;
오라클 포트 변경 exec dbms_xdb.sethttpport(9090);
프로젝트 내에 javaBuild Path
에 ojdbc8.jar
라이브러리를 추가해줌 또한 나중에 war
파일로 만들어질때도 ojdbc8이 포함될수 있도록
Deployment Assembly 항목에도 추가해줌 (Add Java Build Path)
일반적으로 여러 명의 사용자를 동시에 처리해야 하는 웹 어플 특성상 데이터베이스 연결을 이용할 때는 커넥션 풀(Connection Pool)을 이용하므로
아예 스프링에 커넥션 풀을 등록해서 사용함
Java에서 DataSource라는 인터페이스를 통해서 커넥션풀을 사용함
매번 데이터베이스와 연결하는 방식이 아닌 미리 연결을 맺어주고 반환하는 구조를 사용해 성능향상
spring-jdbc를 사용하는 방식이 아닌 HikariCPhttps://github.com/brettwooldridge/HikariCP
를 이용함
pom.xml
에 HikariCP 2.7.4버전
을 추가함 또한 root-context.xml
에 <bean>
태그를 이용해서 hikariConfig
와 dataSource
를 정의해줌
자세한 설정은 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
란 SQL mapping
프레임워크로 분류됨, 개발자들은 JDBC
코드의 복잡하고 지루한 작업을 피하는 용도로 많이 사용함.
자동으로 Connection close()
가능 **
MyBatis
내부적으로 PreparedStatement
처리
#{prop}
와 같이 속성을 지정하면 내부적으로 자동처리
리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet
처리
기존 SQL
을 그대로 활용할 수 있음
진입 장벽이 낮음
Mybatis
역시 mybatis-spring
라이브러리로 쉽게 spring
과 연동작업 가능
pom.xml
에 mybatis 3.4.6
과mybatis-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으로 나눌이유가 있나 싶음 그냥 메인과 날짜별로 브런치를 따는게 더 보기 좋을듯함
일단 날짜만 적어서 브런치를 올리고 시간도 적을지는 생각해보겠음