[221011] 자릿수 더하기, java에 sql 연동하기

최수정·2022년 10월 11일
0

멋쟁이사자처럼

목록 보기
8/14
post-thumbnail

알고리즘 : 자릿수 더하기

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 띄우기

🖥️ 1. AWS EC2 Spot Instance로 띄우기

aws를 통해 EC2를 띄운다는 것은, 서버를 우리가 직접 만들지 않고 만들어진 서버를 클라우드 서비스를 통해 대여한다고 생각하면 된다.

순서

  1. 지역설정 : 서울, 소비자에 가까운 지역으로 고르는게 정석이다.

  2. 인스턴스 시작 : ubuntu 22.04, 인스턴스유형 t3.small ->
    인터넷에서 트래픽 허용 다 체크 해주기 -> 고급 : 스팟인스턴스 요청 -> 키 페어 생성 (원래는 키 페어는 관리자만 접근할 수 있게 설정하는 절차가 필요함) -> 인스턴스 시작

  • 보안그룹: 인스턴스 생성 후, 방화벽 설정을 꼭 해주어야 한다. 웹에서 쓰는 포트:80, ssh 통신을 위해 필요한 포트:22
  • 퍼블릭 IPv4 DNS 주소를 통해 host를 지정해 줄것이다.
  1. 인스턴스 제어를 aws내의 옵션인 '인스턴스 연결'을 통해 할 수도 있지만, 로컬에서 하고 싶다면 ssh 프로토콜을 이용한다. 우리는 ssh 프로토콜을 이용해서 Xshell에서 인스턴스 제어를 해보도록 한다.

    ssh 란?
    https://library.gabia.com/contents/infrahosting/9002

  2. Xshell에서, 아래 스크린샷과 같이 입력해주면, 서버에 접속이 된다.

아래 그림과 같이 ubuntu@ip 가 뜨면 성공이다.

  1. sudo : 리눅스(우분투) 배포판 이용하는 명령어.
    sudo su - 를 열려 있는 xshall의 $ 뒤에 뒤이어 적어준다. 이 명령어는 관리자권한으로 들어 가기 위해서 이며, docker 설치를 위해서 바꿔준다.

참고
git bash 복붙 : ctrl + insert / shift + insert


🖥️ 2. docker 설치

본 단계에서는 강의를 위해 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 띄어보기

nginx란?
https://icarus8050.tistory.com/57

docker run -p 80:80 nginx

DNS주소 : 80 라고 웹 주소창에 입력해 엔터를 눌러서 웹페이지가 뜬다면 성공이다.🔽


🖥️ 3. SQL과 연동하기

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란

file 과 DB의 비교

파일 : 저장하는 기능
DB : 인덱싱 / 검색 / 구조 저장 기능 / 데이터 삽입 기능 / 특정 부분 업데이트 기능 / 특정 조건에 해당하는 데이터 고치는 기능 / 이중화 하는 기능 / 데이터 넣기 전에 check 하는 기능

DB 쓰는이유

: 테이블을 나눠 key로 연결하고 데이터의 중복 문제를 해결한다. 테이블을 나누게 되면, 고칠 값이 생기게 되더라도 해당 값을 포함한 테이블만 고치면 되기 때문에 보수가 쉬운 장점이 있다.

위 사진과 같이, 하나의 테이블을 여러 테이블로 나눠 기본키를 정하고, 외래키를 통해 연결해 주면 중복되는 내용 없이 숫자코드를 통해 간편하게 표현할 수 있으며, 해당 객체별로 수정할 내용이 생기면 테이블을 건드릴 필요 없이, 객체의 내용만 수정하면 된다.

ERD

🔽 위에서 엑셀로 표현했던 데이터들을 ERD로 그린 예제이다.

여기서 사각형 위에 있는 이름들(book, publisher, author)은 테이블을 정의하는 이름으로 엔티티(객체)를 뜻한다. 그림으로 보면 객체끼리 속성을 가지고 연결되어 있음을 볼 수 있고, 이를 정의하고 다이어그램으로 그려내는것이 ERD과정이다.
DB는 객체들의 연결을 key를 통해 하는데, 그 중 기본키(PK)는 한 객체안의 튜플(값)을 식별할 수 있는 대표적 속성, 예를 들어 회원번호 같은 것을 의미하고 외래키(FK)는 다른 외부 객체의 값을 참조하는 값을 뜻한다. 그래서 PK는 절대적, FK는 상대적 개념으로 생각할 수 있다.

ERD 참고하여 MySql에 테이블 만들기

1. DB (Schema생성)

MySQL Workbench에 왼쪽 하단에 Schemas를 누르고, 띄어진 왼쪽 창의 빈칸에 오른쪽 클릭 > Create Schema 클릭 > Name을 'likelion-db'로 정해주었다. Apply를 눌러주고 이후 나오는 창들은 다 Apply를 눌러준다.

2. table 생성


만든 DB안에 있는 tables에 오른쪽 클릭을 해주면 생성 할 수 있게 편집화면이 위와 같이 뜬다. 그럼 아래와 같이 설정해준다.

참고링크

MySQL Workbench를 이용하여 테이블구조도 쉽게 만들기
https://animal-park.tistory.com/m/89

MySQL로 배우는 데이터베이스 개론과 실습 - YES24
http://www.yes24.com/Product/Goods/77724190

0개의 댓글