//////
Search
🗒️

황민우

날짜
2022/10/11
작성자
황민우
카테고리
회고

목차

알고리즘

자릿수 더하기

String으로 변환하여 처리 (처음 했던 방법)
public class Solution { public int solution(int n) { int answer = 0; String str = String.valueOf(n); for (int i = 0; i < str.length(); i++) { answer += Integer.parseInt(String.valueOf(str.charAt(i))); } return answer; } }
Java
복사
String으로 바꿔서 처리하는 방법은 좋지 않음. (리소스를 많이 먹음)
몫과 나머지 활용
public class Solution { public int solution(int n) { int answer = 0; while(n > 0) { // n이 0과 같거나 작아질때까지 반복함 // n을 10으로 나눈 나머지를 answer에 더함. // (1의 자릿수를 더하는 과정) answer += n % 10; // n에 n을 10으로 나눈 몫을 넣는다. // 자릿수를 하나씩 오른쪽 방향으로 옮긴다. (123 -> 12), (76 -> 7) n = n / 10; } return answer; } }
Java
복사
화폐 개수 구하기 문제와 비슷하다.
화폐 개수 구하는 문제는 나머지를 저장하여 반복적으로 처리했지만, 이 문제에서는 몫을 저장하여 반복적으로 처리한다.
화폐 개수 구하는 문제는 몫과 나머지를 활용하여 해결했는데, 이 문제에는 적용하지 못한 것이 아쉬웠다.
포인트
1.
어떻게 자릿수를 구할 것인가? : 몫과 나머지 활용
2.
어떻게 자릿수만큼 반복하게 할 것인가? : 반복문(while) 반복 조건
369 게임
3, 6, 9 가 포함되었을 때 마다 3, 6, 9의 개수만큼 Clap을 출력한다.
예시)
1 : 1
2 : 2
3 : Clap
4 : 4
33 : Clap Clap
코드

DB

AWS EC2에 Docker로 MySQL 띄우기

들어가기 앞서

Region(리전) 선택 : 서울
결제 대시보드 확인 (주기적으로 확인하여 요금폭탄 주의하기)
AWS EC2
AWS (Amazon Web Services)
미국의 아마존사에서 제공하는 클라우드 컴퓨팅 서비스이다.
EC2 (Elastic Compute Cloud)
EC2는 컴퓨터를 대여해 주는 서비스라고 볼 수 있다.
웹 서비스를 운영하기 위해서는 서버가 필요하다.
서버도 우리가 사용하는 데스크톱과 크게 다르지 않다. 과거에는 이러한 서버를 구축하기 위해 공간, 에너지, 하드웨어 비용 등이 필요했다.
그리고 서버 성능에 비해 트래픽이 적으면 비용적으로 낭비가 발생하고 서버 성능에 비해 트래픽이 많아지면 유연하게 대처하기 힘들었다.
하지만, AWS EC2같이 클릭 몇 번이면 컴퓨터를 대여받는 서비스가 등장하며 서버를 둘 공간도 필요 없고 서버를 운영할 에너지(전기)를 걱정할 필요도 없어졌다.
또한, 리소스가 더 필요하다면 클릭 몇 번이면 서버 성능 늘리고 줄일 수 있다.

실습

1. EC2 인스턴스 생성
2. EC2 접속
3. docker 설치
4. mysql 설치
5. MySQL WorkBench

DB란?

File과 DB의 비교

파일
저장하고 읽어옴.
DB
인덱싱 : 자료들을 빠르게 찾을 수 있게 정리해두는 것
구조를 설계하여 저장
검색
데이터와 데이터 사이에 저장
특정 부분만 업데이트
이중화 : 파일의 경우 데이터 유실 가능성이 있음. 똑같은 DB를 여러 개 만들어두어 데이터 유실과 DB 서버 하나가 죽어도 정상 동작하도록 대비하는 것 (클러스터링)
데이터를 넣기 전에 확인하는 기능

연습

기본 데이터
도서명
출판사
출판사 주소
Do It! 자바 프로그래밍 입문
이지스퍼블리싱
서울시 강남구
모두의 깃 & 깃허브
길벗
서울시 서초구
토비의 스프링3
에이콘
서울시 은평구
파이썬으로 익히는 말랑말랑 알고리즘
비제이퍼블릭
경기도 수원시
코딩 개념 잡는 자바 코딩 문제집
길벗
서울시 서초구
테이블 분리
위 기본 데이터에서 만약 길벗 출판사의 주소가 변경되어 수정이 필요해진다면?
출판사가 길벗인 데이터를 찾아 그 레코드의 출판사 주소를 바꿔줘야 한다.
데이터양이 수천만 개, 수억 개라면 모든 데이터를 바꾸는 것이 매우 비효율적일 것이다.
테이블을 분리하고 관계를 맺음으로써 이런 문제를 해결할 수 있다.
Publisher
id
name
address
0
이지스퍼블리싱
서울시 강남구
1
길벗
서울시 서초구
2
에이콘
서울시 은평구
3
비제이퍼블릭
경기도 수원시
4
정보문화사
서울시 성북구
Author
id
name
0
박은종
1
강민철
2
이일민
3
김경록
4
안겔 레오나르드
Book
id
title
publisher_id
author_id
0
Do It! 자바 프로그래밍 입문
0
0
1
모두의 깃 & 깃허브
1
1
2
토비의 스프링3
2
2
3
파이썬으로 익히는 말랑말랑 알고리즘
3
3
4
코딩 개념 잡는 자바 코딩 문제집
1
1
5
한입에 웹 크롤링
3
3
6
node js 200제
4
3

ERD (Entity Relationship Diagram)

ERD란? 엔티티(도메인, 테이블) 간의 관계를 나타내는 다이어그램이다.
PK (Prime Key) : 기본 키
레코드마다 식별 가능한 고윳값
FK (Foreign Key) : 외래 키
다른 테이블의 PK값을 참조한 값
데이터 무결성
PK와 FK를 사용하여 데이터 무결성을 보장한다.
고유한 값인 PK를 통해 식별이 가능하고 FK에 존재하지 않는 PK값이 입력되지 못하도록 하여 무결성을 보장한다.
예시
PK값이 없는 데이터는 식별할 수 없음.
id
name
X
신짱구
X
신짱구
어떤 “신짱구”를 특정하는 것인지 알 수 없음.
FK값에 존재하지 않는 데이터를 참조할 수 없음.
id
name
0
신짱구
id
member_id
address
0
0
서울시
1
1 (X)
인천시

MySQL 실습

스키마 (database) 생성

1.
좌측 네비게이터에서 Schemas 탭 클릭
2.
우 클릭 후 Create Schema 클릭.
3.
Apply 클릭.
DB (Schema) 생성 쿼리문
CREATE SCHEMA `likelion-db`
SQL
복사

스키마(db) 선택

1.
사용할 스키마 더블 클릭
DB (Schema) 사용(선택) 쿼리문
USE `likelion-db`
SQL
복사

book테이블 생성

1.
스키마 - 테이블 우 클릭 - create table 클릭
2.
컬럼 추가
NN(not null) : null 값이 들어올 수 없음.
VARCHAR(n) : 문자열, 괄호 안 숫자 이하로 길이 제한.
테이블 생성 쿼리문
CREATE TABLE `likelion-db`.`book` ( `bookid` INT NOT NULL, `book_title` VARCHAR(45) NOT NULL, `publisher_id` INT NOT NULL, PRIMARY KEY (`bookid`));
SQL
복사

레코드 추가

1.
테이블 우 클릭 - Send to SQL Editor - Insert Statement
레코드 추가 쿼리문
INSERT INTO `likelion-db`.`book` (`bookid`, `book_title`, `publisher_id`) VALUES (0, 'Do It! 자바 프로그래밍 입문', 0);
SQL
복사

FK 설정

1.
테이블 우 클릭 - Alter Table 클릭
2.
Foreign Keys 탭 클릭
3.
Referenced Table 선택
4.
FK로 사용할 컬럼들 선택
FK 설정 쿼리문
ALTER TABLE `likelion-db`.`book` ADD INDEX `publisher_id_idx` (`publisher_id` ASC) VISIBLE; ; ALTER TABLE `likelion-db`.`book` ADD CONSTRAINT `publisher_id` FOREIGN KEY (`publisher_id`) REFERENCES `likelion-db`.`publisher` (`publisher_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
SQL
복사
FK 주의사항
FK 설정된 컬럼에 등록되지 않은 값을 넣으면 오류가 발생한다.
따라서 FK값을 넣을 땐 참조할 레코드 먼저 추가할 것.
스키마? 레코드?
스키마
스키마 = 데이터베이스
테이블의 집합
레코드
레코드 = 행 = row
데이터 하나 하나를 말함.
테이블에서 가로 한 줄.

부록 : 컬럼 옵션

자동 증가

AI(Auto increment) : 자동 증가
SELECT * FROM sns.member;INSERT INTO `sns`.`member` (`email`, `password`) VALUES ('world@gmail.com', '12341234');
SQL
복사
자동 증가 옵션이 붙은 컬럼은 따로 기입해주지 않아도 알아서 증가시켜 값을 설정한다.

Default/Expression

기본값 설정.
값이 입력되지 않을 경우 입력될 기본값을 설정하는 옵션.