박기창
수강평 작성수
-
평균평점
-
블로그
전체 12#태그
- LG

2021. 08. 02.
0
TIL(D+36). 데이터베이스 설계
1. 데이터베이스 설계의 개념 데이터베이스 설계란 사용자의 요구를 분석하여 그것들을 컴퓨터에 저장할 수 있는 데이터베이스 구조에 맞게 변형한 후 일반 사용자들이 사용하게 하는 것이다. 2. 데이터베이스 설계 시 고려사항 무결성 : 데이터베이스에 저장된 데이터가 정해진 제약 조건을 항상 만족해야 한다. 일관성 : 특정 질의에 대한 응답이 처음부터 끝까지 변함없이 일정해야 한다. 회복 : 장애 발생 직전의 상태로 복수할 수 있어야 한다. 보안 : 불법적인 데이터 노출 또는 변경이나 손실로부터보호할 수 있어야 한다. 효휼성 데이터베이스 확장 3. 데이터베이스 설계 순서 요구 조건 분석 - 개념적 설계 - 논리적 설계 - 물리적 설계 - 구현 개념적 설계 : 개념 스키마 모델링과 트랜잭셕 모델링을 병행 수행, DBMS에 독립적인 개념 스키마를 설계 논리적 설계 : DBMS에 따라 서로 다른 논지적 스키마를 설계하는 단계, 트랜잭션의 인테페이스 설계 물리적 설계 : 처리 성능을 위해 데이터베이스 파일의 저장 구조 및 액세스 경로를 결정

2021. 07. 27.
0
TIL(D+33). 디자인 패턴
1. 개요 디자인 패턴은 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방법 또는 예제를 의미한다. * 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드 등으로 구성되어 있다. * 문제가 발생하면 새로 해결책을 구상하는 것보다 문제에 해당하는 디자인 패턴을 참고하는게 효율적이다. 2. 장점과 단점 장점 * 구조 파악이 용이하다. * 객체지향 설계 및 구현의 생선을 높이는 데 적합하다. * 개발 시간과 비용이 감소하단. * 개발자 간의 원할한 의사소통이 가능하다. * 설계 변경 요청에 대한 유연한 대처가 가능하다. 단점 * 초기 투자 비용이 부담될 수 있다. * 객체지향을 기반으로 한 설계와 구현을 다루므로 다른 기반의 애플리케이션 개발에는 적합하지 않다. 3. 생성 패턴 객체의 생성과 참조 과정을 캡슐화 하여 객체가 생성, 변경되어도 프로그램의 구조에 영향을 받지 않도록 하여 프로그램에 유연성을 더해준다. 추상 팩토리 빌더 팩토리 메소스 프로토타입 싱글톤 4. 구조 패턴 복잡한 시스템을 개발하지 쉽게 도와준다. 어탭터 브리지 컴포지트 데코레이터 퍼싸드 플라이웨이트 프록시 5. 행위 패턴 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 해준다. 책임 연쇄 커맨드 인터프리터 반복자 중재자 메멘토 옵서버 상태 템블릿 메소드 방문자

2021. 07. 27.
0
TIL(D+30). 모듈
1. 모듈의 개요 모듈은 모듈화를 통해 분리된 시스템의 각 기능들로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다. 2. 결합도 모듈 간의 상호 의존도를 나타낸 것이다. 결합도가 약할수록 품질이 높고, 강할 수록 품질이 낮다. (빨간색이 결합도가 제일 약하다. 보라색이 결합도가 제일 강하다.) 자료 결합도 - 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도 스탬프 결합도 - 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도 제어 결합도 - 제어 요서(Function code, Switch, Tag, Flag)를 전달하는 결합도 외부 결합도 - 데이터를 오부의 다른 모듈에서 참조할 때의 결합도 공통 결합도 - 공통 데이터 영역을 여러 모듈의 사용할 때의 결합도 내용 결합도 - 다른 모듈의 내부 기능 및 내부 자료를 직접 참조하거나 수정할 때의 결합도 3. 응집도 정보 은닉 개념을 확장한 것이다. 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮다. (빨간색이 응집도가 제일 강하다. 보라색이 응집도가 제일 약하다.) 기능적 응집도, 순차적 응집도, 교환적 응집도, 절차적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도 4. 팬인(Fan-In) / 팬아웃(Fan-Out) 팬인은 어떤 모듈 제어하는 모듈의 수를 나타낸다. 팬아웃은 어떤 모듈에 의해 제어되는 무듈의 수를 나타낸다. 스템의 복잡도를 최적화하려면 팬인은 높게, 팬아웃은 낮게 설계해야 한다. 5. 공통 모듈 정확성(Correctness) - 정확히 작성한다. 명확성(Clarity) - 중의적으로 해석되지 않도록 명확하게 작성한다. 완전성(Completeness) - 필요한 모든 것을 기술한다. 일관성(Consistency) - 공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다. 추적성(Traceability) - 기능에 대한 요구사항의 출처, 관계를 파악할 수 있도록 작성한다.

2021. 07. 20.
0
TIL(D+24). 객체지향 분석 및 설계
1. 객체지향 분석의 개념 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계등을 정의하여 모델링ㅇ하는 작업 2. 객체지향 분석의 방법론 Rumbaugh(럼바우) 방법 : 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법 Booch (부치) 방법 : 미시적(Micro), 거시적(Macro) 개발 프로세스를 모두 사용하는 분석 방법 Coad와 Yourdon 방법 : E-R 다이어그램을 사용하여 객체의 행위를 모델링 구성하는 기법 Jacobson 방법 : Use Case를 갖ㅇ조하여 사용하는 분석 방법 Wirfs-Brock 방법 :분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 수행하는 기법 3. 객체지향 설계 원칙 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙

2021. 07. 14.
0
TIL(D+14). Oracle PL/SQL에서 배열 인자값 사용하기
1. 먼저 오라클에서 사용자 변수타입을 배열로 생성합니다. create or replace type STRING_ARRAY as table of varchar2(100); 2. 이 타입을 사용해 저장 프로시져를 만듭니다. create or replace procedure pro_array_test( p_array in string_array ) as begin for i in 1 .. p_array.count loop insert into test values (p_array(i)); end loop; end; 3. Java 코드에서 저장프로시져를 호출합니다. String[] idList = new String[10000]; for(int cnt=0; cnt { idList[cnt] = new String("sokum"+cnt); } ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("STRING_ARRAY", conn); ARRAY array_to_pass = new ARRAY(descriptor, conn, idList); cstmt = conn.prepareCall("{call PRC_ARRAY_TEST(?)}"); cstmt.setArray(1, array_to_pass ); cstmt.executeQuery();

2021. 07. 11.
0
TIL(D+12). 자료 구조, 정렬
1. 자료 구조의 분류 선형 구조(Linear Structure) - 배열 - 선형 리스트(Linear List) - 연속 리스트(Contiguous List) - 연결 리스트(Linked List) - 스택 * 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어 진다. 후입선출(LIFO : Last In First Out) - 큐 * 한쪽에서는 삽입 작업, 다른 한쪽에서는 삭제 작업이 이루어 진다. 선입선출(FIFO : First In First Out) -데크 비선형 구조( Non-Linear Structure) - 트리 - Preorder 운행 : Root -> Left -> Right - Inorder 운행 : Left -> Root -> Right - Postorder 운행 : Left -> Right -> Root - 그래프 * n개의 정점으로 구성된 무방향 그래프 최대 간선 수는 n(n-1)/2, 방향 그래프 최대 간선 수는 n(n-1) 정렬 - 삽입 정렬 * 이미 순선화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입 정렬 - 쉘 정렬 - 선택 정렬 * 최소값을 찾아 첫 번째 레코드 위치에 놓고, 다시 최소값을 찾아 두 번째 레코드에 놓는 방식 - 버블 정렬 * 인접한 2 개의 레코드 키 값을 비교하여 서로 위치를 교환하는 방식 - 퀵 정렬 * 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브파일로 분해시키는 방식 - 힙 정렬 * 전이진 트리(Completed Binary Tree)를 이용한 정렬 방식 - 2-Way 합병 정렬(Merge Sort) * 정렬된 각 쌍의 키들을 합병하여 하나의 정렬된 서브리스트를 하나의 정렬된 파일로 반복 정렬 방식 - 기수 정렬 * 자릿수(Digit) 별로 정렬하는 방식
![TIL(D+10). [JPA] 1:1. N:1, 1:N, N:M](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2021. 07. 08.
0
TIL(D+10). [JPA] 1:1. N:1, 1:N, N:M
1. 1:1 (@OneToOne) - 외래 키를 원하는 곳에 두면 된다. 2. 1:N (@OneToMany), N:1 (@ManyToOne) 다대일 관계의 방향은 항상 일대다 관계고 일대다 관계의 반대 방향은 항상 다대일 관계이다. 데이터베이스 테이블의 일(1), 다(N) 관계에서 외래 키는 항상 다쪽에 있다. 따라서 객체 양방향 관계에서 연관관계의 주인은 항상 다쪽이다. 3. N:M (@ManyToMany) 관계형 데이터베이스는 정규화된 테이블 2개로 다대다를 표현할 수 없다. 그래서 보통 다대다 관계를 일대다, 다대일 관계로 풀어내는 연결 테이블을 사용한다.
![TIL(D+8). [JPA] 연관관계 매핑 기초](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2021. 07. 05.
0
TIL(D+8). [JPA] 연관관계 매핑 기초
1. 연관 관계 정의 - 방향 : 단방향, 양방향으로 객체를 참조 - 연관 관계의 주인 : 양방향일 때, 연관관계에서 관리 주체 - 다중성 : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 2. 단방향과 양방향 DB의 테이블은 '외래 키' 하나로 양 쪽 테이블 조인이 가능하다. 그래서 DB는 단방향, 양방향을 나눌 필요가 없다. 그러나 객체는 참조용 필드가 있는 객체만 다른 객체를 참조하는 것이 가능하다. - 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조하면 단방향 관계 - 두 객체 모두가 각각 참조용 필드를 갖고 있다면 양방향 관계이다. 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개이다. 3. 연관관계의 주인 외래키가 있는 곳을 연관 관계의 주인으로 정하면 된다. 연관 관계의 주인이 아닌 객체는 mappedBy 속성을 사용해서 주인을 지정해줘야 한다.
![TIL(D+6). [JPA] 필드와 컬럼 매핑 & 기본키 매핑](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2021. 06. 30.
0
TIL(D+6). [JPA] 필드와 컬럼 매핑 & 기본키 매핑
필드와 컬럼 매핑 1. @Column 객체의 이름과 테이블의 컬럼이름이 다를 경우에 쓴다. 속성은 다음과 같다. 1-1. name 필드와 매핑할 테이블의 컬럼 이름 1-2. insertable, updatable기본값은 true이, false인 경우에는 등록과 변경이 불가능하다. 1-3. nullablenull 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다. 1-4. unique@Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸 때 사용한다. 2. @Enumerated 자바 enum 타입을 매핑할 때 사용한다. 기본값은 EnumType.ORDINAL인데 운영서버에는 데이터가 꼬이는 장애가 발생할 수 있으니 EnumType.STRING 사용을 권장한다. 그냥 쓰지말자! 3. @LOB 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑을 한다. * CLOB : String, char[], java.sql.CLOB * BLOB : byte[], java.sql.BLOB 기본키 매핑 1. IDENTITY 데이터베이스에 위임, MySQL, PostgreSQL, SQL Server, DB2에서 주로 쓴다. JPA는 보통 트랜잭션 커밋 시점에 INSERT SQL 실행이 되는데, MYSQL의 AUTO_ INCREMENT는 데이터베이스에 INSERT SQL을 실행 한 이후에 ID 값을 알 수 있다. IDENTITY 전략은 em.persist() 시점에 즉시 INSERT SQL 실행 하고 DB에서 식별자를 조회한다. 2. SEQUENCE 데이터베이스 시퀀스 오브젝트 사용, 오라클, PostgreSQL, DB2, H2 데이터베이스에서 쓴다. 3. TABLE 키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉 내내는 전략이며, 모든 데이터베이스에 적용이 가능하다. 4. AUTO 방언에 따라 자동 지정, 기본값
![TIL(D+4). [JPA] 객체와 테이블 매핑 & 데이터베이스 스키마 자동 생성](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2021. 06. 30.
0
TIL(D+4). [JPA] 객체와 테이블 매핑 & 데이터베이스 스키마 자동 생성
엔티티 매핑에는 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColume 있다. 이번 TIL에는 객체와 테이블 매핑에 대해 쓰려고 한다. 객체와 테이블 매핑 1. @Entity 1-1. @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 1-2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 1-3. @Entity를 사용할 때는 주의사항이 있다. - 기본 생성자는 필수이다. - final 클래스, enum, interface, inner 클래스에서는 사용하면 안된다. 1-4. @Entity 속성에는 name이 있는데 name 속성은 JPA에서 사용할 엔티티 이름을 지정한다.기본값은 클래스의 이름을 사용하면 같은 클래스 이름이 없으면 기본값을 권장한다. 2. @Table 2-1. @Table은 엔티티와 매핑할 테이블 지정한다. 2-2. @Table의 name 속성을 이용해 원하는 테이블과 매핑한다.




