Language
DBMS - 정규화 vs 비정규화
| 정규화와 비정규화에 대한 개념이 정리된 포스팅이 있어 가져와 보았다. https://owlyr.tistory.com/20 [데이터베이스] 정규화 vs. 비정규화(반정규화) 💡 정규화 vs. 비정규화(반정규화) 데이터베이스 정규화 데이터베이스 비정규화 데이터베이스 비정규화(Denormalization, 반정규화)란 무엇인가? 장점, 단점 비정규화 대상 주의점 정규화(Normalized)란 owlyr.tistory.com | 간단 요약 정규화란, RDBMS에서의 데이터의 중복을 최소화하는 작업을 말한다. > 정규화를 많이 하게 되면 조인을 많이 해야하는 단점이 있다. 비정규화란, 반면 의도적으로 데이터를 중복시키거나, 데이터를 그룹핑함으로써, 성능을 최적화하는 작업이다.
DBMS 내부 처리 순서 - select / from / where / group by / having / order by
SQL 문법 실제 처리 순서 1 SELECT count(*) as c FROM member 테이블에서 직업이 개발자인 사람들을 추출 2 FROM member SELECT 3 WHERE job = '개발자' WHERE 4 GROUP BY nationality GROUP BY 국적에 따라 그룹핑 5 HAVING avg(salary) >= 3000 HAVING 평균 연봉이 3000 이상인 경우로 한정 6 ORDER BY c ORDER BY 순서 지정 ** WHERE와 HAVING의 차이점 WHERE HAVING 위치 FROM 뒤에 GROUP BY 뒤에 언제 SELECT한 레코드의 조건 정의 그룹화되어 만들어진 레코드 집합의 조건 정의 [ 참조 및 출처 ] 부트캠프 수업 참조 https://m.blog.nave..
JAVA 유용한 타입 - Enum
| Enum이란? - Enumeration Type : 열거체를 말한다. - 핵심 : 사용자 지정 타입이며 실제 값은 0,1,2,3... 순번으로 출력된다. - 부가 : 타입에 괄호()를 넣어 그 타입에 대해 설명할 수 있다. | Enum 문법 - 기본적으로 아래와 같이 열거하여 사용하는데 public enum AnimalType { CAT, DOG, HAMSTER, CHICKEN, SHEEP, LAMAR; } - 상수타입 옆에 괄호()를 넣어 상숫값을 명시할 수 있다. public enum AnimalType { CAT("포유류","고양이"), DOG("포유류","개"), HAMSTER("포유류","햄스터"), CHICKEN("조류","닭"), SHEEP("포유류","양"), LAMAR("포유류","라..
JAVA 라이브러리 - Optional<T> 클래스
| Optional 클래스란? - 자바에서 모든 객체는 Referece Type으로 nullable하다. * null이 발생할 수 있는 타입 > Referece Type의 객체는 null을 발생시킬 수 있다. -- NullPointerException - Optional은 객체를 nullable하게 쓸 수 있도록 하는 Wrapper class로, 객체 사용 시 null을 명시적으로 처리하게 한다. * 참고로 코틀린의 경우, nullable한 타입을 구분하는 코드가 별도로 존재한다. Optional은 주로 "결과 없음"을 명확하게 나타내야 하고, null을 사용하면 오류가 발생할 수 있는 메소드 반환 유형으로 사용된다. Optional 변수는 null일 수 없으며 항상 Optional 인스턴스를 가리켜야한..
SOLID 원칙
| OOP의 핵심 [ 지난 번 OOP 관련 포스팅 내용 요약 ] - OOP는 객체 간 상호 관계에 포커스를 맞춘 방법론으로, 추상화, 상속, 다형성, 캡슐화 4가지의 주요 특징이 있다. - 추상화는 모델링이고, 상속은 확장과 재사용성이며, 다형성은 사용 편의, 캡슐화는 정보 은닉에 해당된다. - 추상화 단계에서는 클래스 내 응집도를 높이는 게 필요하고, 상속 시에는 클래스 간 결합도에 주의해야 한다. - OOP는 풀면 참 복잡했는데, 오늘 배운 수업에서는 분류와 교체라는 단어로 그 핵심을 단순화해 설명했다. * 현업에 오래 종사했던 강사분은 스파게티 소스에 대해 언급하며, 소프트웨어를 유연하게 만들려면 객체지향 방식이 유용하다 얘기주셨다. 분류한다 코드를 적절히 잘 분류한다. -> 클래스 교체한다 필요에..
[데이터베이스 설계] Exerd를 통해 설계해보기
| Exerd를 사용해 설계해보기 - 부트캠프 실습 후 간단하게 배운 내용을 복습하고자 사용법만 간략히 정리하려고 한다. * 참고로 Exerd를 설치하는 방법은 이전 포스팅에서 다루었다. 1. 도구 설명 no 설명 비고 0 Logical / Physical 토글 버튼 1 테이블 생성 칼럼 추가 : [Alt] + [Enter] 2 - 점선 : 비식별 관계 >> pk를 추가하여 연결 - 실선 : 식별 관계 >> fk로 추가하여 연결 3 마우스 우측 클릭 후, [논리/물리 같이 보기] 버튼 터치하면 함께 보기 가능 4 도메인 및 데이터 타입 등에 대한 설명 보기 2. 데이터 타입 및 제약 조건 지정하기 (1) 하단의 데이터 타입 끌어오기 - 하단에 보면 샘플로 만들어진 데이터타입이 이미 있는데 이걸 끌어오는 ..
[데이터베이스 설계] 데이터 모델링
| 모델링이란? - 모델링이란? 비즈니스 목적에 맞게 현실세계의 데이터를 도식화하는 것 - 왜 모델링을 하는가? 비즈니스 목적에 부합하면서도, 효율적인 자원 관리를 하기 위해 - 모델링의 특징 추상화 현실 세계의 실재를 도식화 하는 과정 단순화 현실 세계의 현상을 약속된 규약에 의해 제한된 표기법 및 언어로 쉽게 표현하는 과정 명확화 모두가 이해할 수 있도록 모호함을 제거하고 정확하게 현상을 기술하는 과정 - 모델링을 바라보는 다른 시각 모델링 데이터 업무의 내용 (무엇을 - Data). - 요구사항 X는 어떤 데이터와 연관되는가? 프로세스 업무의 처리 (어떻게 - Process). - 요구사항 X와 연관된 기존 시스템은 뭔가? - 요구사항 X를 위한 전반적인 프로세스는 뭔가? 상관 관계 데이터와 프로세..
데이터 처리 - View, 함수/프로시져, 트리거
| VIEW - 가상의 읽기 전용 테이블 - 장점 : - 독립성 : 테이블 구조가 변경되어도 뷰를 쓰는 응용 프로그램은 변경하지 않음 - 편리성 : 복잡한 쿼리를 뷰로 생성하여 코드를 간결화 - 보안성 : 계정 권한 수준에 따라 노출되지 않아야 하는 데이터를 숨김 처리 할 수 있음 -- 기본 구문 CREATE VIEW 뷰명 AS SELECT * FROM 테이블명 -- 예시 create view v_member as select m.member_type, m.user_id,m.name, md.mobile_no, md.marketing_yn, md.register_date from member as m join member_detail md on m.member_type = md.member_type and..
데이터 처리 - ALIAS, JOIN, 내장함수, 페이징 처리
| ALIAS와 * (애스터리스크) - ALIAS : 별명, 별칭 - * : 전체 select m.id as 회원아이디, m.password as 비밀번호, m.name as 회원명 from member as m; | JOIN문 - JOIN만 적히는 경우 INNER JOIN이 사용된다. INNER JOIN 키 값 기준 데이터 결합 LEFT JOIN 키 값 기준 데이터 결합 + 좌측의 나머지 RIGHT JOIN 키 값 기준 데이터 결합 + 우측의 나머지 FULL JOIN LEFT데이터 X RIGHT데이터 - 수업에서 제공되었던 테이블은, MEMBER와 MEMBER_DETAIL 이었는데, 이와 같이 회원 정보를 간편 정보 / 상세 정보로 나누어서 필요에 따라 테이블을 조인하는 식으로 사용한다고 한다. -- ..
데이터 처리 - CRUD
| CRUD - 소프트웨어가 가지는 기본적인 데이터 처리 기능 - CRUD는 MariaDB/MySQL, ORACLE 모두 동일한 문법을 사용하는 것으로 확인됐다. (아래 코드 비교) 구분 의미 SQL REST API WHERE 필수 CREATE 삽입 INSERT PUT/POST X READ 조회 SELECT GET X UPDATE 갱신 UPDATE PUT/PATCH O DELETE 삭제 DELETE DELETE O -- CRUD -- INSERT INSERT INTO bootcamp_member2 (name, email, mobile_no, password, marketing_yn, register_date) VALUES ('테스트3', 'test3@gmail.com', '01022223212', '22..