package lotto;
import java.util.Arrays;
import java.util.Random;
public class QuLottoArray {
public static void main(String[] args) {
// 배열생성
int[] lottoNum = new int[6];
Random ran = new Random();
// 난수생성 후 배열에 넣기
for(int i=0; i<6;) {
int num = ran.nextInt(45) + 1;
// 중복을 확인하는 메서드 호출
if(!isDuplicate(num, lottoNum)) {
lottoNum[i] = num;
i++;
}
}
// 배열 오름차순 정렬
Arrays.sort(lottoNum);
// 로또 번호 출력
System.out.print("로또 번호 : ");
for(int num : lottoNum) {
System.out.print(num + " ");
}
}//main
// 중복을 확인하는 메서드
private static boolean isDuplicate(int num, int[] lottoNum) {
for(int i : lottoNum) {
if(i == num) {
return true;
}
}
return false;
}// 듀플메서드
}//class
package lotto;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class QuLottoCollection {
public static void main(String[] args) {
Random ran = new Random();
Set<Integer> lottoNum = new TreeSet<>();
for(int i=0; lottoNum.size()<6; i++) {
//난수 생성
int num = ran.nextInt(45) + 1;
//set에 난수 추가
lottoNum.add(num);
}
// 로또 번호 출력
System.out.print("로또번호 : ");
System.out.print(lottoNum);
}
}
폴더를 생성하고 자바파일과 Dockerfile을 생성하여 도커에 이미지를 빌드해주었다.
이 과정도 시행착오가 많았는데 spring boot로 도커 이미지를 생성을 연습해보다 매번 자바파일만으로 아마존 서버에서 컴파일 해야한다고 생각하니 어떻게 jdk를 파일과 함께 이미지로 빌드하는가의 고민이 있었다.
처음에는 Dockerfile을 만들때 java파일을 복제하면서 jdk를 같이 빌드 해주었다.
FROM openjdk:17-jdk
COPY *.java /Lotto_docker/
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]
Docker Hub에서 내가 push한 이미지를 아마존 서버로 pull하면 되었다.
또다른 방법으로는 AWS 사이트에서 IAM을 생성하고 ECR에서 프라이빗 리포지토리를 생성해서 AWS ECR에 push 하고 아마존 인스턴스에서 우분투를 켜고 pull하면 자바파일이 아마존 서버 이미지에 복제되었다.
아마존 서버에서 pull한 도커이미지 폴더에서 java 컴파일을 시도 했지만 성공하지 못했고
결국 아마존 우분투 서버에 jdk 17을 설치하고 java파일을 서버로 복사하기로 했다.
jdk를 설치하는 명령어이다.
$ sudo apt update
$ sudo apt install openjdk-버전-jdk
$ sudo java -version
$ scp -i <~/경로/key-pair.pem> <경로/파일명> <운영체제사용자이름>@<퍼블릭 ip 주소>:<파일을 복사해서 넣을 폴더>
- <~/경로/key-pair.pem> : 키 파일의 절대 경로
- <경로/파일명> : 전송하려는 파일의 경로
- <운영체제사용자이름> : AWS에서 사용중인 운영체제에 따라 이름이 다름
Amazon Linux - ec2-user
Ubuntu - ubuntu
RHEL - ec2-user
CentOS - centos- <퍼블릭ip주소> : 해당 인스턴스에서 찾을 수 있음
- <파일을 복사해서 넣을 폴더> : EC2에서 파일을 저장할 디렉토리
만약 오류가 난다면 참고(EC2 서버에서 SSH로 접속)
디렉토리 권한 설정: EC2 사용자가 디렉토리에 쓰기 권한을 가지도록 설정
$ sudo chown ec2-user:ec2-user 디렉토리명*
$ javac 파일명.java
$ ls
목록을 불러오면 같은 파일명의 .class 파일이 생성된것을 확인할 수 있다.
$ java 파일명
앞 명령어는 javac가 아니고 java이다.
.class 확장자는 입력하지 않는다.
여기서 정말 힘들었다.. 파일이 실행되지 않고 계속 오류가 났다.
그러다 알게된사실은 java파일에 pakage 선언으로 인한 오류였다.
패키지 선언이 포함되어 있다면 파일을 디렉토리 경로에 따라 저장해야한다.
디렉토리명을 붙이고 다시 시도해봤다.
$ javac 패키지명(디렉토리명)/파일명.java
$ java 패키지명(디렉토리명)/파일명

이렇게 블로그에 올리고 나니 과정이 굉장히 짧아 보이지만 도커 이미지도 몇번을 만들었다 지우고 AWS EC2 서버의 인스턴스도 새로 다시 생성했어야 했다.. 결국 돌아돌아 파일을 전송해 해결했고 자바파일을 실행하는데도 고난이... 다음번엔 과거에 스프링 프레임워크로 진행했던 팀프로젝트를 스프링부트로 바꿔볼 예정이다.