'분류 전체보기' 카테고리의 글 목록 (7 Page)
본문 바로가기
728x90

분류 전체보기354

데이터 모델의 구성요소 데이터 모델의 구성요소 개체 데이터 모델에서는 연산(Operation)을 이용하여 실제 데이터를 처리하는 작업에 대한 명세를 나타낸다. 논리 데이터 모델에서는 구조(Structure)를 어떻게 나타낼 것인지 표현한다. 제약 조건(Constraint)은 데이터 무결성 유지를 위한 DB의 보편적 방법으로 릴레이션의 특정 칼럼에 설정하는 제약을 의미하며, 개체 무결겅과 참조 무결성 등이 있다. 연산 (Operation) 데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세 릴레이션을 조작하기 위한 관계 연산을 나타낸다.(Select, Project, Join, Division) 구조 (Structure) 데이터베이스에 논리적으로 표현될 대상으로서의 개체 타입과 개체 타입들 간의 관계 데이터 구조 및 .. 2022. 6. 14.
비 정규화 / 반 정규화(De-Normalization) 비 정규화 / 반 정규화(De-Normalization)개념 비 정규화는 정규화된 엔티티, 속성, 관계에 대해 성늘 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법 비 정규화, 역 정규화라고도 불린다. 특징 장점 비 정규화된 데이터 구조는 성능 향상과 괄리의 효울성이 증가 단점 데이터의 일관성 및 정합석 저하 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있음 기법 테이블 테이블 병합 1:1 관계, 1:N 관계를 통합하여 조인 횟수를 줄여 성능을 향상 슈퍼타입/서브타입 테이블 통합을 통해 성능 향상 테이블 분할 테이블을 수직 또는 수평으로 분할하는 것으로 파티셔닝이라고 한다. 종류 설명 수평분할 테이블 분할에 레코드 기준으로 활용 수직 분할 하나.. 2022. 6. 10.
[Java] 람다식 람다식 Java8 이후부터 람다식이 가능하게 되었다. 람다함수란 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 칭하는 용어이다. 람다 대수는 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법을 뜻한다. 람다의 근원은 수학과 기초 컴퓨터과학 분야에서의 람다 대수이다. 람다식 예제 Runnable runnable = new Runnable() { //익명 구현 객체 public void run() { ~~~ } }; Runnable runnable = 90 -> { ~~~ }; //람다식 람다식 제한 람다식을 사용하기 위해서는 아래 조건을 모두 만족해야 한다. 인터페이스이어야 한다. 인터페이스에는 하나의 추상 메서드만 선언되어야 한다. 오버라이드 해야 할 추상 메서드가 2개 이상인 경우 람다 표현식을.. 2022. 6. 3.
[Java] 메모리 구조 자바 메모리 구조는 크게 3가지로 나뉜다. Stack - 메서드 단위로 생성된다고 보면 쉽다. 메서드의 매개변수도 별도의 메모리 공간을 가진 변수이다. 메서드 내부의 로컬 변수의 수명주기는 Stack Frame 단위이다. Stack 메모리가 꽉차면 Stack Over Flow 이다. Stack Stack Frame Local Variables Array - 로컬 변수 저장 ( 컴파일시 길이 지정 ) Oprend Stack - 명령어의 중간 연상 결과를 일시적으로 저장하는 스택 Frema data - 메서드외 관련된 그 외 정보 저장 Heap 인스턴스나 문자열 상수를 Heap Memory 공간에 저장한다. 참조되지 않은 인스턴스나 문자열 상수는 Garbage Collector 에 의해 메모리 공간에서 해제.. 2022. 5. 31.
[Java] "== vs equals" java에서 문자열을 생성에 여러 방법으로 생성할 수 있다. 그중 크게 2가지로 나누면 문자열 상수, 객체를 이용하여 생성(인스턴스로 저장된 문자열)으로 나뉜다. 두 방법의 차이는 문자열 상수는 String constant pool 공간에 저장이되고, 다른 방법으로 만들어진 객체는 Heap 공간에 저장이 된다. 즉, 두 문자열의 메모리 주소값이 다르다는 의미를 가지고 있다. 메모리 주소값이 다르면 == 연산자를 사용해 문자열 비교연산을 할 수 없다. 왜냐면 java8 에서 == 연산자는 기본 자료형에 저장된 값은 상수이므로 값을 기준으로 비교하나, 참조 자료형에 저장된 값은 메모리 주소값이기 때문에 메모리 주소값을 비교한다. 그럼 다른 방식으로 생성된 문자열을 비교하는 방법은 String class의 e.. 2022. 5. 27.
[Java] 스코프(scope) : { } 스코프 범위내에서는 범위 외부에 선언된 변수에 접근 가능하나 스코프 범위 외부에서 범위 내부에 선언된 변수에는 접근 할 수 없다. public class Main { public static void main(String[] args) { int out = 1; while(...) { //스코프 시작 int inner = 0; int result = out + inner; // 변수 out은 스코프 범위 밖에 있는 변수라 접근 가능 } //스코프 끝 inner = 3; // 변수 inner은 스코프 범위 밖에 있는 변수라 접근 불가능 } } 2022. 5. 20.
[Java] 암시적 형변환 암시적 형변환의 규칙은 아래와 같다. *reference - https://opentutorials.org/course/1223/5330 float->double 로 가는 경우 4 byte -> 8 byte 인데 암시적 형 변환이 가능한지에 대해서 의문이 생길 수 있다. 역으로 형변환을 할 시 byte 패딩을 제거하며 변환되기 때문에 값이 변질될 수 있습니다. 자료형의 메모리 공간 크기를 기준으로 변환하는 것이 아닌, 값의 표현 범위를 기준으로 변환하기 때문에 가능하다. byte a = 15; short b = a; //암시적 형 변환 명시적 형변환 구문 [자료형] [변수명] = (자료형)[변수명 또는 리터럴]; int a = (int) 300000000000L; ​ long b = 12345; int .. 2022. 5. 17.
Spring-Core Container 1. Beans Spring 프레임 워크의 근간이 되는 IOC/DI기능을 지원하는 담당 BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원 스프링 DI기능의 핵심인 bean Factory와 DI기능을 제공하는 모듈이며 bean의 meta data, bean리더, beanFactory의 구현과 Properti aditor가 포함 2. Core Core는 스프링에서 사용하는 핵심모듈이며 주요 어노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공 3. Context Core and Beans를 견고히(solid)한 모듈(Beans의 확장 버전) JNDI처럼, 프레임 워크 방식이고 객체에 접근하기 위한 방법 제공 Beans모듈에 더하여 국제화, 이벤트 전판, 리소스 로딩, 투명한 .. 2022. 5. 13.
[Java] 상수, 리터럴 상수(Constant) = 변하지 않는 변수 리터럴(Literal) = 데이터 그 자체 int a = 123; a는 변수, 리터럴은 123 final int a = 123; int 앞에 final를 붙일 시 a는 상수 java 에서 변수 long 자료형으로 변숫값을 대입할 때 리터럴 값에 접미사 L 을 명시해야 8 byte 할당 한다 변수 float 자료형으로 변숫값을 대입할 때 리터럴 값에 접미사 F 을 명시해야 4 byte 한다. java에서 리터럴은 약21억이 넘어가는 상수가 아닌 이상 그 이하의 수는 기본적으로 4 byte 크기로 스택 메모리 공간(operand stack)에 적재된다. 그럼 java 자료형 중 byte(1 byte), short(2 byte) 같은 경우 4 byte를 가지고 있는.. 2022. 5. 10.
join vs Subquery MySQL 5.5 까지는 서브쿼리 최적화가 최악이라 웬만하면 Join으로 전환하자 메인테이블의 row 수 만큼 서브 쿼리를 수행한다 MySQL 5.6 에서 서브 쿼리가 대폭 최적화 되었다. 다만 최적화가 적용 안되는 조건들이 다수 존재한다 버전/조건 관계 없이 좋은 성능을 내려면 최대한 Join을 이용하자 Join을 사용하기가 너무 어렵다면 Subquery는 사용하되, MySQL 5.5 이하라면 절대 사용하지 않는다. 차라리 쿼리를 나눠서 2번 실행 (메인쿼리/서브쿼리)하고 애플리케이션에서 조립하는게 낫다. Reference : https://jojoldu.tistory.com/520 2022. 5. 6.
ERP란 전사적 자원 관리(ERP)는 조직이 회계, 구매 프로젝트 관리, 리스크 관리와 규정 준 및 공급망 운영 같은 일상적인 비즈니스 활동을 관리하는 데 사용하는 소프트웨어 유형을 의미 2022. 5. 4.
프로시저란 저장 프로시저 또는 스토어드 프로시저는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한것으로, 영구저장모듈 이라고 불린다. 2022. 5. 3.
Java Bean? Spring Bean? Bean 이란 반복적으로 코드를 따로 작성하여 재사용하기 위해 만들어진 클래스 빈은 속성과 메서드로 이루어져 있으며, 데이터의 처리를 담당 Java Bean의 정의 데이터를 표현하는 것을 목적으로 하는 자바 클래스( JavaBean 규격서에 따라 작성 ) 컴포넌트와 비슷한 의미로도 사용 DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. Java Bean 필드는 private로 구성되어 getter와 setter를 통해서만 접근할 수 있고, 전달 인자가 없는 생성자를 가지는 형태의 클래스이다. 모든 필드는 private로 getter/setter를 통해서만 접근 가능 public class Bean_ClassName [ implements java.io.Serializable ] { pri.. 2022. 4. 29.
레거시란 과거로부터 물려 내려온 낡은 기술이나 방법론, 컴퓨터 시스템, 소프트웨어 등으로 새로이 대체가 가능한 기존의 기술 2022. 4. 26.
Spring DI 종류 1. 생성자 주입 생성자에 파라미터를 만들어두고 이를 통해 DI 컨테이너가 의존할 오브젝트 레퍼런스를 넘겨주는 방식 // PicoContainer class MovieLister... public MovieLister(MovieFinder finder) { this.finder = finder; } ​ class ColonMovieFinder... public ColonMovieFinder(String filename) { this.filename = filename; } 무의식 중에 가장 많이 쓰는 주입 방식 객체 생성시 필수로 생성자가 실행되기 때문에, 필드 주입과 달리 참조 관계를 눈으로 쉽게 확인할 수 있다. 2. Setter 주입 의존성을 입력받는 세터 메소드를 만들고 이를 통해 의존성을 주입 .. 2022. 4. 22.
Spring IoC, DI 가 무엇인지 IoC(Inversion of Control) : 제어가 반대로 간다는 개념 IoC는 Spring 에서만 사용되는 개념이 아니며, 프로그래밍 패턴이기 때문에 범용적으로 쓰이며 작게는 객체간에 디자인 패턴으로 크게는 컨테이너, 프레임워크 역활에 적합한 구조이기 때문에 상황에 맞게 사용되는 프로그래밍 모델이다. "IoC : 제어의 역전" 이라는 의미는 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다. 즉, IoC는 객체 생명 관리, 흐름 제어를 제 3자에게 위임하는 프로그래밍 모델이다. 일반적으로 자바 프로그램은 main() 메소드에서 시작해서 개발자가 미리 정한 순서를 따라 객체가 생성되곡 실행된다. 그런데 서블릿은 배포하고 나서 개발자가 직접 제어할 .. 2022. 4. 19.
JWT-사전지식-RSA-암호화 RSA암호화를 알기전에 RSA란 비대칭키 알고리즘의 대표적인 알고리즘이다.즉, RSA 암호화는 RSA 알고리즘을 이용한 암호화이다 대칭키 암호화 위 이미지와 같이 같은 key로 암호화 복호하 하는 것을 뜻한다. 비대칭키 암호화 비대칭키 암호화는 암호화하는 key와 복호하하는 key의 값이 다르다. 값이 다른데 어떻게 암호화,복호화가 가능한지는 RSA 알고리즘을 이해하면 된다. RSA 알고리즘을 통해 Public Key (공개키), Private Key (개인키)를 사용해 암호화를 한다. Reference : Twilio RSA 암호화를 사용하는 이유 기밀성 (인가된 사용자 인가) Bob's 공개키로 문서를 암호화 하면 Bob's 개인키로만 그 문서를 복호하 할 수 있다. 무결성 (누가 보냈는가) Bob'.. 2022. 4. 15.
미들웨어란? 미들웨어는 운영 체제와 해당 운영 체제에서 실행되는 응용 프로그램 사이에 존재하는 소프트웨어 (OS와 SW Application 사이) 즉, 분산 컴퓨팅 환경에서 응용 프로그램과 프로그램이 운영되는 환경 간에 원만한 통신이 이루어질 수 있도록 제어해주는 소프트웨어이다. 대표적인 미들웨어는 WAS가 있다. 기본적으로 숨겨진 변환 계층으로 기능하는 미들웨어는 분산 응용 프로그램의 통신 및 데이터 관리를 가능하게 합니다. 데이터와 데이터베이스가 "파이프" 사이를 쉽게 통과할 수 있도록 두 가지 응용 프로그램을 함께 연결하기 때문에 배관이라고도 합니다. 미들웨어를 사용하면 사용자가 웹 브라우저에서 양식을 제출하거나 웹 서버가 사용자의 프로필을 기반으로 동적 웹 페이지를 반환하도록 요청할 수 있습니다. 일반적인 .. 2022. 4. 12.
JWT-사전지식-CIA CIA란 기밀성(Confidentiality), 무결성(Integrity), 가용성(Availability) 기밀성 인가된 사용자만 정보에 접근할 수 있는 것 대처 방안 - 암호화 기밀성을 보장하기 위해 각종 접근통제를 실시하고 전산 자료에 대한 암호화 대책을 강구해야 한다. 공격 예시 스니핑, 스푸핑 무결성 정보에 대해서 허가된 사용자 또는 대상에 대해서만 수정 및 삭제등 가능해야 한다. 만약 수정 및 삭제가 허가되지 않은 사용자에 의해 이뤄진다면 해당 정보에 대해서는 무결성이 깨졌다고 한다. 대처 방안 - 누가 보냈는지(변조, 파괴 예방) 무결성을 확보하기 위해서는 접근 통제가 필요하며, 정보의 변경, 변경 위험이 있을 때 즉시 감시 및 복구 가 가능 매커니즘이 필요하다. 무결성을 확인하는 가장 대표.. 2022. 4. 8.
JWT-사전지식-TCP/IP TCP 는 통신 OSI 7계층 전송 계층(트랜스 포트) 계층에서 나오는 개념으로 데이터(요청)를 전송하는 방식 중 하나이다. OSI 7계층 응용 계층 : 무엇을 표현 계층 : 암호화 세션 계층 : 인증 체크 전송 계층(트랜스 포트) : TCP / UDP 네트워크 계층 : IP 데이터 링크 계층 : Port 물리 계층 : LAN, WIFI TCP / UDP TCP A가 B에게 요청 1을 보내면 B는 잘 받았다고 ACK를 보낸다. B가 ACK를 보낼 때 ACK가 유실 또는 통신의 불안정으로 ACK가 A에게 가지 않을 수 있다. ACK를 받지 못한 A는 한번 더 요청을 보냅니다. ACK를 받은 경우에만 다음 요청을 보내게 됩니다. 그래서 신뢰성을 가지고 있는 통신 기법중 하나이다. UDP A가 B에게 요청(데.. 2022. 4. 5.
JWT-Token-구조 JWT란 JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 개방형 표준( RFC 7519 )입니다. 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰할 수 있습니다. JWT는 비밀( HMAC 알고리즘 사용)을 사용하거나 RSA 또는 ECDSA 를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있습니다 . 서명* 된 토큰 에 중점을 둘 것!! https://jwt.io/introduction JWT 구조 위와 같이 ( . ) 을 기준으로 3가지로 나눠지는데 이 3가지 부분을 각각 JOSE 헤더(JSON Object Signing and Encryption), JWT Claim Set, Signature라고 부른다. Ref.. 2022. 4. 1.
JWT-Token-왜-사용하는가 왜 사용하는가 사용자 인증을 위해 사용된다. Session vs JWT 일단 세션과 JWT토큰(이하 토큰)을 비교했을 때 토큰을 사용했을 때 오는 이점은 서버가 stateless 상태가 된다. stateless 의 장점은 서버와 클라이언트의 연결된 부분이 없어서 서버의 확장이 수월해진다. stateful 같은 경우 세션을 따로 저장해야 하기 때문이다. 장점 유효한 사용자라는 자체 인증 권한을 가진다. 액세스키 사용 시 DB조회 없이 인증 정보 사용할 수 있다. 유효한 권한을 가진다는 부분은 payload 에 넣을 수 있다.(단, 헤더 크기가 증가한다.) 단점 인증은 쉽지만, 인가 부분을 자체 인증을 구현하기엔 어려워 보인다. 인증정보만으로 서비스가 어려운 경우(작업에서 어떤 권한을 가지고 있나가 중요한 .. 2022. 3. 29.
[Java] 전역(glpbal)변수, 정적(static)변수 *전역 (global) 변수 * class 안의 전체영역에서 사용하는 변수 전역변수 값은 new 를 만나면 초기화 되는데, 최기화 되지 않는 값을 유지하려면 static 변수를 사용하면 된다. 라이프 타임 : 프로그램이 끝날때까지 scope가 없는 곳에서 "int g_test" 선언 다른 파일에서 사용하기 위해서는(다른 파일에서 해당 변수 접근 가능) (C/C++ 에서 가능, JAVA는 불가능) "extern int g_test" 이런식으로 선언하고 사용한다.( 다른 파일의 전역변수를 가져다 사용하는 것은 좋은 방법이 아니다. ) 정적 (static) 변수 : 여러 인스턴스가 공유해서 사용할 수 있는 변수 각 인스턴스는 같은 클래스 기반으로 생성되지만 각각 차지하는 메모리의 공간이 다른 개별 객체로 여기.. 2022. 3. 25.
Spring-JPA-hibernate.naming JPA를 적용하고 나서 Entity 생성 시 변수 명을 그대로 매핑 안하고 언더바 형식 카멜을(UserName => user_name) 으로 자동 매핑해준다. 이 부분을 변수 명과 DB칼럼명을 그대로 매핑 하려면 application.properties 에 추가해주면 된다. spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl application.yml 경우 jpa: hibernate: ddl-auto: none naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategy.. 2022. 3. 22.
Filtet vs Interceptor 모든 컨트롤러에 로그인 여부를 확인하는 코드를 짜야하는 상황이라 코드의 중복이 많아지고 로그인 로직이 바뀌면 복잡해진다. 이러한 여러 로직에서의 공통 관심이 있는 것을 cross-cutting concern(공통 관심사) 라고 한다. 서블릿 필터 life cycle HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터체인: HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 서블릿 -> 컨트롤러 필터 -> 서블릿 //인증된 사용자 필터 ->(서블릿 호출 x) //비 인증 사용자 스프링 인터셉터 life cycle HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 필터체인: HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 인터셉터1 -> 인터.. 2022. 3. 18.
728x90