알고리즘 : 자릿수 더하기
public class SumOfDigit {
// 방법1) n을 String으로 변경, String을 loop 돌면서 parseInt 후 더한다.
// => 정답은 되지만 효율성이 좋지 않음, 변환이 너무 많음
public int solution(int n) {
String str = String.valueOf(n);
int result = 0;
for(int i =0; i <str.length(); i++) {
result += Integer.parseInt(String.valueOf((str.charAt(i))));
}
return result;
}
public class SumOfDigit {
// 방법 2) % 연산 이용 몫, 나머지
public int solution(int n) {String str = String.valueOf(n);
int result = 0;
while (n > 0) {
result += n % 10; // '/'연산보다 나머지 구하는 행을 먼저 써줘야 한다.
n = n / 10 ;
}
return result;
}
AWS EC2 띄우고 Docker로 Mysql 띄우기
aws를 통해 EC2를 띄운다는 것은, 서버를 우리가 직접 만들지 않고 만들어진 서버를 클라우드 서비스를 통해 대여한다고 생각하면 된다.
순서
지역설정 : 서울, 소비자에 가까운 지역으로 고르는게 정석이다.
인스턴스 시작 : ubuntu 22.04, 인스턴스유형 t3.small ->
인터넷에서 트래픽 허용 다 체크 해주기 -> 고급 : 스팟인스턴스 요청 -> 키 페어 생성 (원래는 키 페어는 관리자만 접근할 수 있게 설정하는 절차가 필요함) -> 인스턴스 시작
인스턴스 제어를 aws내의 옵션인 '인스턴스 연결'을 통해 할 수도 있지만, 로컬에서 하고 싶다면 ssh 프로토콜을 이용한다. 우리는 ssh 프로토콜을 이용해서 Xshell에서 인스턴스 제어를 해보도록 한다.
Xshell에서, 아래 스크린샷과 같이 입력해주면, 서버에 접속이 된다.
아래 그림과 같이 ubuntu@ip 가 뜨면 성공이다.
sudo su -
를 열려 있는 xshall의 $ 뒤에 뒤이어 적어준다. 이 명령어는 관리자권한으로 들어 가기 위해서 이며, docker 설치를 위해서 바꿔준다. 참고
git bash 복붙 : ctrl + insert / shift + insert
본 단계에서는 강의를 위해 docker 설치 과정에 git hub 클론 기능을 이용한다.
git clone http://github.com/Kyeongrok/docker_minikube_kubectl_install
🔽 ll
명령어를 입력하면 "docker_minikube_kubectl_install" 이란 폴더가 있는 것을 확인할 수 있고, cd
명령어를 통해 파일로 이동해준다.
그리고 해당 폴더 안의 'docker_install.sh' 를 실행시켜 준다.
설치가 로딩이 끝나면, docker를 입력해보고 docker 명령어가 쭉 출력된다면, docker를 띄우는데 성공한것이다.
🔽 docker nginx 띄어보기
docker run -p 80:80 nginx
DNS주소 : 80
라고 웹 주소창에 입력해 엔터를 눌러서 웹페이지가 뜬다면 성공이다.🔽
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql
// 위 코드를 root@ip # (관리자권한상태) 에서 입력하고 엔터
docker ps // 입력해서 아래 사진과 같이 나오면 연동 성공.
이어서 mysql 워크밴치를 설치해주고 (설치방법은 웹 페이지 참고) 워크밴치에서 connection을 추가한다.
이때 다양한 연결 오류가 뜰 수 있는데 이 오류들에 대해서 알아보겠다.
첫번째) 포트를 열지 않아 뜨는 오류
해결방법)
Security Group에서 3306 포트 열기
: AWS에 들어가 인스턴스 정보에서 보안 > 보안그룹을 누른다.
사진에서 보이는 포트범위 80, 3306, 22에 해당하는 것들이 모두 추가되어 있어야 프로그램이 돌아가는데 문제가 없다.
두번째) mysql 비밀번호를 잘못 입력하여 뜨는 오류
ERROR 1045 (28000): Access denied for user 'root@'localhost' (using password: YES)
해결방법) password변경
일단 mysql 서버를 중지해준다.
docker ps를 통해 내려갔는지 확인 후, ( container id가 없어지면 내려간 것)
sql 워크벤치를 통해 재설정해준다.
세번째) 비밀번호를 설정을 포함한 명령어를 사용해서, 2번째 오류를 동반할 때
이건 필자가 어이없는 실수를 한 경우인데, 혹시나 같은 실수를 할 경우를 대비해서 올린다. 패스워드 재설정 후에도 비밀번호 오류가 계속 떠서 이상하다 생각 하였는데, 위에 sql연동하는 코드중에
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql
에서, password 부분은 실제 사용할 password를 입력하는건데 그대로 복붙해서 일어난 대참사였다.
해결방법) 예를 들어 비밀번호를 1234로 사용할 것이라고 한다면,
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql
이렇게 사용해주어야 한다.
DB란
파일 : 저장하는 기능
DB : 인덱싱 / 검색 / 구조 저장 기능 / 데이터 삽입 기능 / 특정 부분 업데이트 기능 / 특정 조건에 해당하는 데이터 고치는 기능 / 이중화 하는 기능 / 데이터 넣기 전에 check 하는 기능
: 테이블을 나눠 key로 연결하고 데이터의 중복 문제를 해결한다. 테이블을 나누게 되면, 고칠 값이 생기게 되더라도 해당 값을 포함한 테이블만 고치면 되기 때문에 보수가 쉬운 장점이 있다.
위 사진과 같이, 하나의 테이블을 여러 테이블로 나눠 기본키를 정하고, 외래키를 통해 연결해 주면 중복되는 내용 없이 숫자코드를 통해 간편하게 표현할 수 있으며, 해당 객체별로 수정할 내용이 생기면 테이블을 건드릴 필요 없이, 객체의 내용만 수정하면 된다.
🔽 위에서 엑셀로 표현했던 데이터들을 ERD로 그린 예제이다.
여기서 사각형 위에 있는 이름들(book, publisher, author)은 테이블을 정의하는 이름으로 엔티티(객체)를 뜻한다. 그림으로 보면 객체끼리 속성을 가지고 연결되어 있음을 볼 수 있고, 이를 정의하고 다이어그램으로 그려내는것이 ERD과정이다.
DB는 객체들의 연결을 key
를 통해 하는데, 그 중 기본키(PK)는 한 객체안의 튜플(값)을 식별할 수 있는 대표적 속성, 예를 들어 회원번호 같은 것을 의미하고 외래키(FK)는 다른 외부 객체의 값을 참조하는 값을 뜻한다. 그래서 PK는 절대적, FK는 상대적 개념으로 생각할 수 있다.
MySQL Workbench에 왼쪽 하단에 Schemas
를 누르고, 띄어진 왼쪽 창의 빈칸에 오른쪽 클릭 > Create Schema
클릭 > Name
을 'likelion-db'로 정해주었다. Apply
를 눌러주고 이후 나오는 창들은 다 Apply
를 눌러준다.
만든 DB안에 있는 tables
에 오른쪽 클릭을 해주면 생성 할 수 있게 편집화면이 위와 같이 뜬다. 그럼 아래와 같이 설정해준다.
MySQL Workbench를 이용하여 테이블구조도 쉽게 만들기
https://animal-park.tistory.com/m/89
MySQL로 배우는 데이터베이스 개론과 실습 - YES24
http://www.yes24.com/Product/Goods/77724190