본문 바로가기

분류 전체보기510

데이터베이스(DB) 기본 정규형과 정규화 과정 정규화가 왜 필요한지에 대해서는 아래 포스팅에서 확인할 수 있다. https://josteady.tistory.com/747 데이터베이스(DB) 정규화는 왜 필요할까? 정규화를 이용해 데이터베이스르 설계하는 방법을 알아보자. 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생해서 테이블에 대한 데이터의 CRUD 연산을 수행할 때 부작용이 발생할 josteady.tistory.com 기본 정규형은 제1,제2,제3 정규형과 보이스/코드 정규형이 있으며 (순서대로) 고급 정규형은 제4,제5 가 있다. 기본적으로는 기본정규형만 만족하더라도 충분히 사용가능한 테이블을 만들 수 있다. 물론 숫자가 높을 수록 바람직한 정규화가 될 가능성이 있지만, 상황에 따라 적절히 선택할 수 있어야하며, 오히려 제 5정규형을.. 2022. 10. 26.
데이터베이스(DB) 정규화는 왜 필요할까? 정규화를 이용해 데이터베이스르 설계하는 방법을 알아보자. 데이터베이스를 잘못 설계하면 불필요한 데이터 중복이 발생해서 테이블에 대한 데이터의 CRUD 연산을 수행할 때 부작용이 발생할 수 있는데 이것을 이상현상 이라고 한다. 이상현상을 제거해가면서 올바르게 데이터베이스를 설계하는 것을 정규화라고 한다. 아래의 예를 보면 정규화의 필요성에 대해 확인할 수 있다. 아래와 같은 현상이 일어나는 이유는 관련 없는 속성들이 하나의 테이블에 전부 들어가 있기 때문이다. 이를 발생하지 않게 하기위해 관련있는 속성들끼리만 테이블을 만들어 관리하는 것이 필요하다 이러한 과정이 정규화 이다. 이상현상의 종류로는 삽입 이상, 갱신 이상, 삭제 이상이 있다. 하나하나 알아보자 고객아이디(PK) 이벤트번호(PK) 당첨여부 고객.. 2022. 10. 26.
AOP 란 무엇인가? + 예제 AOP(관점지향 프로그래밍) 를 간단히 설명하면 공통 처리 등의 '횡단적 관심사(부가기능)'를 추출하고 프로그램의 여러 곳에서 호출할 수 있게 설정함으로써 개발자는 실현해야할 기능인 '중심적 관심사'에만 집중하도록 해주는 것이다. AOP 는 내부적으로 아래와 같이 동작한다. 1. 다이나믹 프록시 객체의 생성 요청 2. 포인트컷을 통해 부가 기능 대상 여부 확인 -> 어디다가 적용할 건지 3. 어드바이스로 부가 기능 적용 4. 실제 기능 처리 AspectJ 라는 AOP 외의 기술이 있다. AspectJ 는 프록시를 이용하지 않았으며 CGLib 이라는 바이트 조작 라이브러리를 사용한다. 타깃 객체의 바이트를 고쳐서 부가기능을 직접 넣어주는 방법이다. 따라서 코드를 분리하지 않는다. 프록시를 사용하지 않고 복.. 2022. 10. 26.
DI 의존성 주입 방법에 대해 알아보자 먼저 의존성이란 무엇인지 알아보자. 사용하는 객체 A 와 사용되는 객체 B 가 있다고 예를 들어본다. 아래는 new 키워드를 사용하는 예시이다. 더보기 A는 B 를 사용하기 위해 new 키워드를 이용해 생성하고 B 의 메서드를 사용한다. ( DI 컨테이너에서는 new 키워드를 사용하지 않고, 스프링 프레임워크가 대신한다 ) 아래와 같은 형태를 A 는 B 에 의존한다 라고 한다. class A { B b = new B(); b.methodX(); } 위의 상황에서 설계가 변경되어서 B 클래스에서 C 클래스로 변경하고, methodY 를 호출해야한다고 하면 아래와 같이 코드를 변경해야 한다. class A { C c = new C(); c.methodY(); } 이러한 방식으로 설계가 변경된다면 10군데든 .. 2022. 10. 26.
Ioc(Inversion of Control) 제어의 역전이란? IoC ( Inversion of Control ) 제어의 역전 의 의미 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다라는 의미이다. 이전에는 개발자가 직접 객체를 생성하고 관리해 프로그램의 제어의 흐름을 스스로 관리했다. IoC 는 왜 필요할까? 결합도를 낮춰서, 변경에 유연한 코드를 작성할 수 있는 구조를 만들 수 있다. 스프링에서도 IoC 기능을 할 수 있는 IoC 컨테이너(=스프링컨테이너, DI컨테이너, ApplicationContext)를 제공한다. IoC 컨테이너에서 관리되는 객체를 Bean 이라고 부른다. 객체의 생성을 책임지며, 의존성을 관리한다. 개발자들이 객체를 직접 생성할 수 있지만, 컨테이너에게 역할을 위임한다. 스프링에서의 객체 생성 및 실행되는 순서는 아래.. 2022. 10. 26.
데이터베이스(DB) 설계 데이터베이스의 설계는 5단계로 나눈다 1. 요구 사항 분석 2. 개념적 설계 3. 논리적 설계 4. 물리석 설계 5. 구현 요구사항 분석은 구성원들이 데이터베이스를 사용하는 용도를 파악한다. 즉, 실제 업무를 처리하는 사용자에게 필요한 데이터의 종류와 다양한 요구사항을 수집한다. 분석의 결과물로는 요구 사항 명세서가 나온다. 개념적 설계 단계는 이전 요구사항 분석의 명세서를 기준으로 시작된다. 일반적인 데이터모델은 E-R 다이어그램을 사용한다. 논리적 설계 단계에서는 개념적 설계 단계에서 생성한 개념적 구조를 기반으로 설계한다. 생성된 E-R 다이어그램을 스키마로 변환해서 DBMS가 처리할 수 있도록 한다. 논리적 설계에서는 스키마로 변환하는 과정이다. 모든 개체는 릴레이션으로 변환한다 E-R 다이어그램.. 2022. 10. 26.
java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap') 에러내용 java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.Long (java.lang.Integer and java.lang.Long are in module java.base of loader 'bootstrap') 에러원인 에러 내용에 뒤쪽을 보고 bootstrap 이라길래, 아니 나는 부트스랩을 쓴적이없는데 하면서 구글링을 해봤더니 형변환이 잘못된 오류였다. 무슨 관계가 있는 거 같은데.. 일단 에러 내용으로는 Integer 타입이 형변환이 잘못되었다고 한다. Long memberId = (Long) tokenClaims.get("memberId"); 에러조치 Long memberId = L.. 2022. 10. 24.
@Bean 과 @Component 비교 스프링 MVC 에서 사용하는 @Controller , @Service , @Repository 등 빈으로 등록하는 방법을 계속 써왔으나, 스프링시큐리티를 공부하면서 @Configuration 과 @Bean , @Component를 사용하면서 어떤 상황에 구분해 사용해야 하나 궁금했다. 미리 알아보면 아래와 같다. Bean Component 메소드에 적용 클래스에 적용 개발자가 컨트롤이 불가능한 외부 라이브러리 사용시 개발자가 직접 컨트롤이 가능한 내부 클래스에 사용 클래스 자체를 빈으로 등록하고 싶을 때 @Configuration 안에서 @Bean으로 등록한 메서드만 유연하게 등록하고 싶을 때 스프링은 개발의 제어권이 스프링 컨테이너(Ioc 컨테이너)에 있다. 제어권이 개발자가 아닌 스프링에 있는것을 I.. 2022. 10. 24.
데이터베이스(DB) 관계 데이터 모델 개념 용어정리 ( 책에서 사용하는 용어 ) 릴레이션 = 테이블 투플 = 행 속성 = 열 일반적으로 관계 데이터 모델에서는 하나의 개체에 관한 데이터를 데이터베이스에 저장한다. 고객아이디 고객이름 나이 등급 직업 VARCHAR(20) VARCHAR(20) INT VARCHAR(20) VARCHAR(20) 1 가길동 20 bronze 학생 2 나길동 21 silver 학생 3 다길동 22 gold 학생 고객아이디, 고객이름 과 같은 열을 속성 이라고 부른다. 고객아이디의 1,2,3 고객이름의 가길동 나길동 다길동과 같은 행을 투플 이라고 부른다. 속성 하나가 가질 수 있는 모든 값의 집합을 도메인 이라고 한다. 예로, 등급에서 bronze , silver , gold 를 모아둔 것이 등급 속성의 도메인이 된다. .. 2022. 10. 24.