docker 컨테이너를 생성 시 컨테이너에 들어가 date 명령어를 실행하면 컨테이너의 날짜가 TZ=Asia/Seoul 과 다른 것을 볼 수 있을것이다. 로그를 확인하기 위해서는 알맞은 시간을 확인을 해야하기 때문에 컨테이너의 TZ을 Seoul에 맞추도록 한다. 맨 처음에는 github action 쉘 스크립트 파일에서 run 명렁어와 함께 사용하여 volume 명령어로 시간을 맞추려고 하였는데 로그파일 volume 명령어와 함께 사용하다 보니 날짜 명령어가 실행되지가 않았다. 후에 찾아보니 dockerfile에서 설정을 하여 실행 할 수 있다. RUN apt-get update && \ apt-get install -yq tzdata && \ ln -fs /usr/share/zoneinfo/Asia/S..
도커 컨테이너에 저장된 로그는 컨테이너가 없어지면 로그도 함게 없어지기에 기록된 로그를 볼 수 없게된다. 따라서 이를 해결하기 위해서 도커 볼륨을 활용하여 WAS에 컨테이너의 로그들을 기록하도록 한다. 컨테이너 directory에 만들어지는 log 파일은 /log.config.path_IS_UNDEFINED/err_log.log 이다. 만들어지는 파일을 host 서버에 volume을 이용해 Directory Path를 mount 하여 host Directory에 해당 파일을 볼 수 있도록 한다. 설정 github action이 도는 gradle.yml 에서 sudo docker run -itd --rm --name server -p 80:8080 ${{ secrets.DOCKER_REPOSITORY }}..
영속 계층의 작업 순서 - 테이블의 column 구조를 반영하는 VO(VALUE OBJECT) 클래스의 생성 - MyBatis 의 Mapper 인터페이스의 작성/XML 처리 - 작성한 Mapper 인터페이스의 테스트 ## VO 클래스의 작성 VO 클래스는 테이블 설계를 기준으로 작성하면 된다. BoardVO @Data public class BoardVO { private Long bno; private String title, content, wirter; private Date regdate, updateDate; } BoardVO 클래스는 Lombok의 @Data 어노테이션을 사용하여 생성자, getter/setter, toString() 만들어낸다. ## Mapper 인터페이스, Mapper XM..
스레드를 생성하고 활용하는 방법은 2가지가 있다. - Thread 객체 상속받기 - Runnable 인터페이스 상속받기 ## Thread 객체를 상속받기 : 스레드로 사용할 클래스를 정의 한 후 Thread 클래스를 상속받는다. Thread 클래스 객체를 생성하여 실행하기 위해서는 run() 메소드를 오버라이딩 해주어야 한다. class NewT extends Thread{ @override public void run(){ 실행! } } public class Example { public static void main(String[] args) NewT t = new NewT(); t.start(); } } 스레드 객체인 t를 실행하기 위해서는 start() 메소드로 실행시켜주면 된다. start()..
thorws (예외전파) 그냥 throws라고 하고 예외를 호출한 곳으로 다시 던진다고 표현을 했는데 예외를 전파한다는 표현으로 학교에서는 수업을 진행한다. class ExceptoinAAA extends Exception{}; class ExceptoinBBB extends Exception{}; public class ExceptPropagation { public static void a() throws ExceptoinAAA,ExceptoinBBB { System.out.println("a메소드 시작"); b(); throw new ExceptoinAAA(); } public static void b() throws ExceptoinBBB{ System.out.println("b메소드 시작"); ..
- JDBC 테스트 코드 작성 : 데이터베이스가 제대로 연결이 되었는지 확인할 수 있는 테스트 코드를 작성한다. 테스트 코드는 Java와 JDBC 드라이버만으로 구현해서 먼저 테스트한다. 정상적으로 연결이 된다면 Connection 객체가 출력된다. @Log4j public class JDBCTests { static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { e.printStackTrace(); } } @Test public void testConnection() { try (Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@local..
롬복은 컴파일 시 자주 사용되는 코드를 작성하는 기능들을 완성해주는 라이브러리 - @setter : setter 메서드를 만들어주는 역할을 한다. 3가지 속성 value : 접근 제한 속성을 의미 onMethod : setter 메서드의 생성 시 메서드에 추가할 어노테이션을 지정 onParam : setter 메서드의 파리미터에 어노테이션을 사용하는 경우 적용한다. - @Data : @ToString, @EqualsAndHashCode, @Getter/Setter, @RequestArgsConstructor를 모두 결합한 형태로 한 번에 자주 사용되는 모든 메서드를 생성한다. -@Log4j : 로그 객체를 생성한다. -@Component : 어노테이션이 설정된 클래스가 스프링에서 객체로 만들어서 관리하는..
class Bank{ private int money = 10000; public void saveMoney(int save) { int m = this.getMoney(); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } setMoney(m+save); } public void minusMoney(int minus) { int m = this.getMoney(); try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.pri..