국가 기관이나 기업체에서는 외부사이트가 함부로 접근하지 못하도록 내부망이 구성되어 있는데, 내부망 내 PC에서 연구 프로그램을 돌릴 경우 로그를 확인하기 위해 매번 출근해서 확인해야한다고 한다. 그래서 제목과 같은 프로그램을 개발하게 되었고 현재 1차 개발이 마무리가 되어 이를 포스팅하게 되었다. 주니어 개발자인데다 2-3일 안에 만든 프로그램이라 그리 썩 잘만들진 않았지만, 애들 공놀이 하는 것 바라보는 양 이쁘게 봐주시길 바란다.

 

 

프로그램은 

1차 개발에서 하나의 폴더 내 로그파일들에 대해 이메일로 전송할 수 있게 끔 개발되었다.

2차 개발에서는 여러개의 폴더 내 로그파일들에 대해 이메일로 전송할 수 있게 끔 개발될 예정이다.

 

프로그램 구성

그림1. 프로그램 Package 구성

Package는 크게 controller, dto, listener, resource, service, view로 나누었다.

MVC모델을 적용하였고 변경이 일어날 수 있는 부분(이벤트, view등)들에 대해 싱글톤과 상속을 통해 의존성을 낮추었다.

(2차 개발이 시작되면 해당 부분만 변경해서 바꿔서 연결해주면 될테니까..)

listener는 이벤트 처리를 담당한다.

resource는 로고 파일과 개발단계에서 이전 데이터 저장을 했었다.

service는 파일의 입출력 처리와 스케줄러 기능(시간마다 정해진 기능 수행), 이메일 전송 등등 포함되어 있다.

 

그림2. Controller Package 구성

MainController는 프로그램 시작 시, view와 연결해주는 부분이다. 딱히 그 외에 용도로는 안쓰인다.

FileController는 파일 입, 출력 Service와 연결해주는 부분이다.

 

그림3. view Package 구성

MainFrame은 프레임을 구성하는 부분이다. 이 부분에 대해서 크게 변동이 없을 것으로 예상되서 하나만 만들어 주었다.

panel은 Frame 내 panel을 구성하는 부분이다. 현재 basicpanel을 구성하였고 2차 개발에 들어가게 되면 변동이 생기게 될 부분이다.

dialog는 서브 창을 의미하는데, 현재 파일 찾기 창이 이 안에 구성되어 있다.

 

 

소스코드는 Github에 올려두었으니, 참고하면 된다.

https://github.com/seojeonghyeon/SendLogFilesByEmail

1. Java Service

@PostConstruct
public void started(){
    TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
    log.info("현재 시각 : "+new Date());
}

Docker 내 실행될 서버(Jar파일 형 이미지) 시간 설정한다. EC2에서 시간 설정을 하더라도 Jar파일로 되어있는 Docker 이미지가 가동되면 Docker Container 내 서버가 자동으로 시간을 할당해줘서 따로 설정을 해주어야 한다.

Application.java 파일 내 코드를 추가한다.

2. MariaDB

# Container 안으로 접근하여 언어와 시간설정이 어떻게 되어있는지 확인한 후, 설정을 변경해준다.
# 언어설정 확인
locale

# 시간설정 확인
Date

# 언어 및 시간설정
localedef -f UTF-8 -i ko_KR ko_KR.utf8
export LANG=ko_KR.utf8
export LC_ALL=ko_KR.utf8
# 현재 시간 확인
SELECT now();
SELECT CURRENT_TIMESTAMP;

# Timezone 확인
select @@system_time_zone;
SHOW GLOBAL VARIABLES LIKE '%zone%';

# Timezone 변경
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

# Timezone 직접 명시
SET GLOBAL time_zone='Asia/Seoul';
set time_zone='Asia/Seoul';

 

 

해당 글은 Notion에 정리한 글을 옮긴 글입니다.

https://seojeonghyeon0630.notion.site/Docker-Document-2734a3999d674848b49fbfce3639a178

'Docker' 카테고리의 다른 글

Container의 Log를 통한 Service 작동상태 확인  (0) 2022.05.14
Service 실행(Container 생성)  (0) 2022.05.14
파일 이미지(Jar) 생성 및 이미지 등록 및 배포  (0) 2022.05.14
Service File 생성  (0) 2022.05.14
Docker의 역할  (0) 2022.05.14
Docker 이미지 확인 docker images -a -a 는 전체
Docker 컨테이너 확인 docker container ls -a  
Docker 컨테이너 내부로 접속 docker exec -it 컨테이너이름 /bin/bash 전부 입력할 필요 없다.
Docker 컨테이너를 멈추고 삭제 docker stop fa7 && docker rm fa7  
Docker 내 안쓰고 있는 데이터들 정리 docker system prune  
Docker Log 확인 docker logs fa7  
Docker Log 지속 확인 docker -f logs fa7  

 

 

해당 글은 Notion에 정리한 글을 옮긴 글입니다.

https://seojeonghyeon0630.notion.site/Docker-Document-2734a3999d674848b49fbfce3639a178

'Docker' 카테고리의 다른 글

Docker 내 UTF-8 설정 및 시간 설정  (0) 2022.05.14
Service 실행(Container 생성)  (0) 2022.05.14
파일 이미지(Jar) 생성 및 이미지 등록 및 배포  (0) 2022.05.14
Service File 생성  (0) 2022.05.14
Docker의 역할  (0) 2022.05.14

1. config-service Container 생성

docker run -d -p 8888:8888 --network mood-network -e "spring.profiles.active=prod” --name config-service seojeonghyeon0630/config-service:0.0.1

생성한 Network에 Config서버 이미지를 실행한다.

  • -d : 백그라운드 실행
  • -p : 포트명 (in:out)
  • -e : 환경변수 설정

seojeonghyeon의 GitHub(Private) Repository : Mood-Config를 확인하면 3가지(default, dev, prod)로 업로드 하였다.

알맞는 설정에 맞춰 선택하여 해당 환경변수를 유동적으로 변경해주면 된다.

2. discovery-service Container 생성

docker run -d -p 8761:8761 --network mood-network \\
-e "spring.cloud.config.uri=http://config-service:8888" \\
--name mood-web seojeonghyeon0630/mood-web:0.0.1

3. API Gateway-service Container 생성

docker run -d -p 8000:8000 --network mood-network \\
-e "spring.cloud.config.uri=http://config-service:8888" \\
-e "eureka.client.serviceUrl.defaultZone=http://mood-web:8761/eureka/" \\
--name apigateway-service seojeonghyeon0630/apigateway-service:0.0.1

4. MariaDB Conatiner 실행 및 권한 설정

docker run -d -p 3306:3306 --network mood-network --name mariadb seojeonghyeon0630/my_mariadb:0.0.1

내려받은 MariaDB 이미지를 토대로 Bridge Network에 포함시켜서 컨테이너를 생성한다.

docker exec -it mariadb /bin/bash

컨테이너 외부에서 접근 가능하게 설정하기 위해

데이터들이 온전하게 잘 들어갔는지 확인하기 위해 컨테이너 내부로 접근한다.

mysql -hlocalhost -uroot -p

MariaDB 로그인을 시도한다.

127.0.0.1은 외부 접근 설정을 해줘야 사용 가능하기 때문에 현재는 사용할 수 없다.

grant all privileges on *.* to 'root'@'%' identified by '비밀번호';

Database 중에 mysql, 사용하려는 Database로 접근해서 권한을 부여한다.

부여가 완료되었다면, 데이터베이스 내용들이 잘 들어가 있는지 검토한다.

5. 이외의 service

docker run -d --network mood-network \\
--name user-service \\
-e "spring.cloud.config.uri=http://config-service:8888" \\
-e "eureka.client.serviceUrl.defaultZone=http://mood-web:8761/eureka/" \\
-e “spring.datasource.url=jdbc:mariadb://mariadb:3306/mooddb” \\
-e "logging.file=/api-logs/users-ws.log" \\
seojeonghyeon0630/user-service:0.0.1

 

 

해당 글은 Notion에 정리한 글을 옮긴 글입니다.

https://seojeonghyeon0630.notion.site/Docker-Document-2734a3999d674848b49fbfce3639a178

1. 배포를 위한 파일(Jar) 생성

mvn clean compile package -DskipTests=true

해당 프로젝트 내, tartget파일이 보이는 위치에서 명령어를 실행한다.

이때, -DskipTests=true는 Test단계를 통과해야하는 경우에 사용한다.

명령어를 통한 방법 이외에 개발도구에서 maven package단계까지 실행해도 동일하다. 이 명령어를 통해 Jar파일 생성한다.

2. Service File Build

docker build --tag seojeonghyeon0630/user-service:0.0.1 .

DockerFile을 토대로 대상을 이미지화 한다.(DockerFile이 위치한 곳에서 실행한다.

  • -t : 태그이름
  • Version : pom.xml에 명시한 버전 및 jar파일 생성시 사용한 버전
docker build --tag(or -t) (Docker계정)/(Service명):(Version) .(위치)

3. Service File Push

docker push seojeonghyeon0630/user-service:0.0.1

Local에 존재하는 이미지 파일을 Docker Repository로 전송한다.

4. Service File Pull

docker pull seojeonghyeon0630/user-service:0.0.1

Container를 생성하고자 하는 서버로 가서 Repository 내 이미지 파일을 내려받는다.

5. Docker Bridge Network 생성

docker network create --gateway 172.18.0.1 --subnet 172.18.0.0/16 mood-network

Docker Bridge Network를 172.18.0.1에서부터 subnet mask로 16으로 생성한다.

# Gateway : 172.18.0.1

# Subnet : 172.18.0.0/16

Docker network ls

생성된 Docker Network를 확인

기본적으로 제공하는 Network 3개와 추가로 설정한 1개의 Bridge Network를 확인 가능하다.

 

 

해당 글은 Notion에 정리한 글을 옮긴 글입니다.

https://seojeonghyeon0630.notion.site/Docker-Document-2734a3999d674848b49fbfce3639a178

'Docker' 카테고리의 다른 글

Docker 내 UTF-8 설정 및 시간 설정  (0) 2022.05.14
Container의 Log를 통한 Service 작동상태 확인  (0) 2022.05.14
Service 실행(Container 생성)  (0) 2022.05.14
Service File 생성  (0) 2022.05.14
Docker의 역할  (0) 2022.05.14

+ Recent posts