본문 바로가기
공부

IT 정보

by yeaseul912 2021. 9. 23.
728x90

 * 크로스 사이트 요청 위조(Cross Site Request Forgery, CSRF)

   - 웹사이트 취약점 공격

    - 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격

    - 희생자의 권한을 도용하여 중요 기능을 실행하는 것이 가능

 

* 사이트 간 스크립팅(XSS)

* 인터프리터언어(스크립트언어) / 컴파일언어

    - 컴파일 언어 : C, C++, JAVA

                            컴파일러를 통해 기계어로 변환 후 실행

                            빌드단계에서 시간이 오래걸리지만 runtime환경에서 빠른 속도 발휘

    - 인터프리터 언어 : Python, Javascript, PHP

                                한줄 한줄 기계어로 변환 후 실행(기계어로 변환 X)

                                빌드단계가 없지만, runtime환경에서 한줄 한줄 읽어 실행하기에 컴파일 언어보다 속도가 느림

    - 컴파일 : 소스코드를 기계어(바이너리코드)로 변환하는 과정 (목적파일 생성)

                    ex) .java -> .class / JVM 에서 실행가능한 바이트코드 형태의 클래스파일 생성

    - 빌드 : 소스파일을 실행파일(독립 소프트웨어 가공물)로 생성하는 과정 (고급언어 -> 빌드(컴파일) -> 기계어)

    - 스크립트 언어 : 응용 소프트웨어를 제어하기 위해 사용하는 프로그래밍 언어

                               인터프리터 방식에 사용하기 위해 나온것으로 최종 사용자가 응용프로그램을 수정할 수 있도록 함.

                                ex) JavaScript를 통해 웹 브라우저(응용 프로그램)을 어떻게 실행할지 정한다.

 

* 객체지향 프로그래밍 언어 JAVA

* 객체(Object)

    - 구체적, 추상적 데이터의 단위  

* 객체지향 프로그래밍(Object-Oriented Programming, OOP)

    - 객체를 기반으로 하는 프로그래밍

    - 객체를 정의하고, 객체의 기능을 구현하며, 객체간의 협력을 구현

* 절차지향 프로그래밍(PRocedural Programming)

    - 시간이나 사건의 흐름에 따라 구현(C언어)

* 클래스(class)

    - 객체를 코드로 구현한 것

    - new키워드를 사용하여 생성자로 생성

    - public class는 파일 하나에 하나 존재, 자바 파일 이름과 클래스명 동일

* 멤버 변수(property, attribute)

    - 객체가 가지는 속성을 변수로 표현

* 메서드(method)

    - 멤버 변수를 이용하여 클래스내부에서 기능을 구현하는 함수

* 함수(function)

    - 하나의 기능을 수행하는 일련의 코드

    - 기능 분리-> 가독성 / 재사용성 용이

    - 반환값, 매개변수, 이름, body로 구성 ex) int add(num1,num2){ return num1+num2);

* Memory

    - stack(LIFO) : 지역변수, 함수(메서드) 등이 할당, 함수의 호출이 끝나면 자동으로 메모리가 반환된다.

    - instance : 클래스가 메모리에 생성된 상태 힙메모리에 멤버 변수의 크기에 따라 메모리가 생성

    - heap : new 연산자를 통한 동적 할당된 객체들이 저장되며, Garbage 컬렉션에 의해 메모리가 관리된다

* 참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수

* 참조값 : 생성된 인스턴스 메모리 주소 값 ex) System.out.println(참조변수);

* 생성자 : 객체를 생성할 때 new 키워드와 함께 호출(객체 생성 외에는 호출할 수 없음)

(constructor) 인스턴스를 초기화 하는 코드가 구현 됨(주로 멤버 변수 초기화)

                       반환 값이 없음, 상속되지 않음, 생성자는 클래스 이름과 동일

* 기본 생성자 : 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야함

                       생성자를 구현하지 않으면 프리컴파일 시 컴파일러가 생성자 코드를 넣어줌

* 생성자 오버로딩 : 같은 이름의 생성자를 두 개 이상 구현하는 경우

                              사용하는 코드에서 여러 생성자 중 선택하여 사용할 수 있음

* 참조자료형 : 클래스형으로 변수를 선언, 메모리는 클래스에 따라 다름.

* 접근제어자 변수, 메서드, 생성자에 대한 접근 권한 지정

    - public : 같은 클래스 내에서 변수 사용 가능

    - private : 클래스 외부에서는 접근 할 수 없음

    - protected : 상속 관계에서 상위 폴더에 있는 private 변수를 하위 폴더에서 사용하기 위하여 사용

    - 아무것도 안쓰면 : 기본 접근 제어자 : 같은 패키지 내에서 변수 사용 가능

* 정보 은닉

    - 외부에서 클래스 내부의 정보에 접근하지 못하도록 함

* this의 역할

    - 자신의 메모리를 가리킴

    - 생성자에서 다른 생성자를 호출 함

    - 인스턴스 자신의 주소를 반환

 

9월 24일

* DI(Dependency Injection)

    - 의존관계 주입

      1. A객체가 B/C 객체를 직접 생성 : 강한결합

      2. B/C객체가 외부에 생성되어 A객체에 주입 : 약한결합

 

* IoC

  - 제어의 역전

 

* 스프링

   - 객체를 생성, 라이프사이클 관리 및 필요로 하는 객체에 의존 주입을 하는 라이브러리 집합체

 

* 스프링 프레임워크

  - 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크

  - 자바 언어 기반 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크

  - 핵심기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타

  - 웹 기술 : 스프링 MVC, 스프링 WebFlux

  - 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원

  - 기술 통합 : 캐시, 이메일, 원격 접근, 스케줄링

  - 테스트 : 스프링 기반 테스트 지원

  - 언어 : 코틀린, 그루비

* 객체 지향 특징 : 추상화 캡슐화 상속 다형성

* 다형성은 역할(인터페이스)과 구현(클래스, 구현객체)으로 세상을 구분

   - 단순하고 유연해지며 변경도 편리해진다.

   - ex) 운전자/자동차 역할을 알면 자동차 구현(현대, 기아 ..) 과 상관없이 운용 가능.

  - 좋은 객체 지향? 

* 좋은 객체 지향 설계의 5가지 원칙 (SOLID)

  

* 스프링 부트

  - 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용

  - 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성

  - 톰캣 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨

  - 손쉬운 빌드 구성을 위한 starter 종속성 제공

  - 스프링과 3rd parth(외부) 라이브러리 자동 구성

  - 메트릭, 상태확인, 외부 구성 같은 프로덕션 준비 기능 제공

  - 관례에 의한 간결한 설정

 

* 이클립스 vs 인텔리제이

 

* IDE(ntegrated Development Environment)

  - 코딩, 디버그, 컴파일, 빌드, 배포 등 프로그래밍 관련 작업을 하나의 프로그램에서 처리하는 환경을 제공해주는 소프트웨어

 

* MVC(Model View Controller)

  - Model

  - View

  - Controller

 

참고 https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

* DTO(Data Translate Object)

  - 프로세스 간에 데이터를 전달하는 객체

  - 계층간 데이터 교환을 위한 객체

  - Form 데이터를 받는 객체

* Entity class

  - 실제 DB의 테이블과 매칭될 클래스

* DAO(Data Access Object)

  - repository package

  - 실제로 DB에 접근하는 객체

  - extends CrudRepository<T,Id> 로 사용

* JPA

  - DB가 Java 언어를 이해할 수 있도록 도와줌

  - 데이터 관리에 편리한 여러 기능 제공

  - 자바 객체를 DB가 이해할 수 있게 규격화 된 데이터 Entity

  - Repository를 통해 Entity가 DB로 전달되어 잘 처리 됨.

  - DTO -> Controller -> Entity -> Repository -> DB

 

* 롬복(Lombok)을 활용한 리팩토링

  - lombok : 코드를 간소화 시켜주는 라이브러리

  - 필수 코드의 반복을 최소화, 리팩토링

  - 리팩토링 : 코드의 구조 및 성능을 개선하는 작업

  - 로깅 : 프로그래밍 수행과정을 기록으로 남기는 작업

 

참고 : https://madplay.github.io/post/what-is-gradle

https://taeny.dev/javascript/8%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8x%EB%B9%8C%EB%93%9C/

* Gradle

  - 그루비를 이용한 빌드 자동화 시스템

  - Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스 빌드 도구

 

* 오버로딩, 오버라이딩

* Oracle

 

* static 변수

  - 하나의 클래스에서 생성된 여러 인스턴스는 각각 서로 다른 매개변수 값을 가질수 있음

  - 이러한 인스턴스가 하나의 값을 공유할 필요가 있을때 사용

  - 인스턴스 : HEAP 메모리, static 변수 : 데이터 영역 메모리(=상수 영역, static영역)

  - 인스턴스의 생성과 상관없이 사용할 수 있으므로 클래스 이름으로 참조

  - 클래스 변수, 정적변수라고 함. (= global val)

* static method

  - static 변수를 위한 기능을 제공하는 method

  - static method 내에서 인스턴스 변수 사용 불가!! 

      (인스턴스 변수는 인스턴스가 생성되어야지 변수가 생성됨.!! 즉 method 호출 시 변수가 생성되어 있지 않음)

 14강 마지막 표 넣깅

 

* static - singleton Pattern

  - 단 하나만 존재하는 인스턴스

  - 생성자는 private로, static으로 유일한 객체 생성

  - 외부에서 유일한 객체를 참조할 수 있는 public static get() 메서드 구현

* 디자인 패턴. .23가지.. 허헣

 

Chapter6 배열과 ArrayList

* 배열

  - 자료형의 순차적 자료 구조

  - 연속된 자료구조 

* 객체 배열

  - 기본 자료형 배열 int[] arr = new int[10];

  - 참조 자료형 배열 Book[] library = new Book[5];

  - 얕은복사 : 객체 주소만 복사 => 기존 값을 바꾸면 copy 값까지 바뀜

  - 깊은복사 : 기존값을 바꿔도  copy 값은 원래 값 유지

* 향상된 for문 (enhanced for)

  - 배열 요소의 처음부터 끝까지 모든 요소를 참조 할 떄 편리한 반복문

  - for(변수:배열{ 반복 실행 문;}

* 다차원배열

  - 2차원 이상의 배열, 지도, 게임, 평면이나 공간을 구현할 때 사용

* ArrayList 클래스

  - 자바에서 제공되는 객체 배열에 구현된 클래스

  - 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되어 있음

 

chapter7. 상속과 다형성

* 확장성 있는 시스템 설계 가능

* 상속

  - 새로운 클래스를 정의 할 때 이미 구현된 클래스를 상속받아서 속성이나 기능이 확장되는 클래스를 구현

  - IS-A관계 : 일반적인 개념과 구체적인 개념의 관계

  - HAS-A관계 : 한 클래스가 다른 클래스를 소유하는 관계, 코드 재사용의 한 방법

* 가상함수(가상메서드)

  - 메서드의 이름과 메서드의 주소를 가진 가상 메서드 테이블에서 호출될 메서드의 주소를 참조함

  - 재정의가 된 경우 재정의된 인스턴스의 주소를 가지고 온다

  - 가상함수 테이블의 주소 맵핑에 의해 호출이 되는 것

* 오버라이딩

  - 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음.

* 다형성

  - 하나의 코드가 여러 자료형으로 구현되어 실행되는 것

  - 같은 코드에서 여러 실행 결과가 나옴

  - 유연성, 재활용성, 유지보수성이 기본

* 업 캐스팅

  - 형변환 하위클래스에서 상위클래스로 업캐스팅, 묵시적

* 다운 캐스팅

  - 형변환이 된 상태에서 원래 자료형으로 돌아가는 경우, 명시적

  - instanceof 를 써야 안정적

 

chapter8. 추상클래스

* 추상클래스

  - 추상 메서드(구현 코드가 없이 선언부만 있는 메서드)를 포함한 클래스

  - abstract 예약어 사용, new(인스턴스화) 할 수 없음

  - 주로 상속의 상위 클래스로 사용됨

* 추상메서드

  - 하위 클래스가 구현해야 하는 메서드

* 템플릿 메서드

  - 디자인패턴

  - 추상메서드나 구현된 메서드를 활용하여 전체의 흐름을 정의해놓은 메서드

  - final로 선언하여 재정의 할 수 없게 함

 

chapter9. 인터페이스

* 인터페이스

  - 요소 :  Constant, abstract method, default method, static method, private method

 

* HTTP 통신방식(요청방법)

  - GET - Selete

  - POST - Insert

  - PUT - Update

  - DELETE - Delete

 

* stateless : 요청에 대한 응답이 끝나면 연결이 끝남, Session 유지 못함. 서버의 부하를 줄여줌

* statefull : 연결이 지속되어 있다(Sessiond유지, ex)채팅)

 

* Maven 중앙저장소에 있는 라이브러리들을 관리(pom.xml 읽어서 .m2 폴더에 생성)

* ORM (Object Relational Mapping) 객체-관계 매핑

* 연관관계 주인 = FK를 가진 오브젝트

 

DATABASE

* SQL 분류

  - DML (Data Manipulation Language)

     데이터 구조(ex, 테이블) 조작 언어 (Select, Insert, Update, Delete)

     트랜잭션이 발생하는 SQL / 임시로 적용히시고 취소 가능 (RollBack, Commit)

  - DDL (Data Definition Language)

      데이터 정의 언어 (Create, Drop, Alter, Rename, Truncate)

      DB, Table, View, Index 등의 데이터베이스 개체를 정의하는 역할

      트랜잭션 발생시키지 않음(실행 즉시 반영)  / RollBack, Commit 사용 불가

    - DCL (Data Control Language)

      데이터 제어 언어 (Grant, ReVoke)

      DB에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들

    - TCL (Transaction Control Language)

      논리적인 작업의 단위를 묶어서  DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어

      Commit, Rollback, Savepoint

      

     스프링이란...

   IoC 제어의 역전 (주도권이 스프링에 있다)

   DI 필요한 곳에서 IoC 된 객체를 가져다 쓰는 것

  리프렉션(런타임시 분석하는 기법),  컴파일 체킹 ( 힌트 어노테이션 )

MessageConverter (Jackson-Json), BufferedReader(가변 길이의 문자를 받을 수 있다), BurreredWriter(=Printwriter)

   

* JPA란.... (Java Persistence API)

   : JAVA 프로그램을 할 때 영구적으로 데이터를 저장하기 위해 필요한 인터페이스

       Persistence : 자바를 영구히 기록 (파일시스템, 관계형 DB, 객체 데이터베이스 등 활용)

      API( Application Programming Interface ) : 

       인터페이스 : 상하관계가 존재하는 약속 ( 프로그램을 공유한 사람(갑)이 정한 규칙으로 프로그램을 사용할 수 있음)

      프로토콜 : 동등한 관계 사이에 존재하는 약속  ( email로 연락하자 )

  ORM(Object Relational Mapping) : 클래스로 DB 생성, 반복적인 CRUD 작업

  영속성컨텍스트 : DB와 동기화된, 자바 Object로 이루어진, 모든걸 알고있는 녀석

  DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공( DB는 객체 저장 불가능 )

  OOP의 관점에서 모델링을 할 수 있게 해준다(상속, 컴포지션(결합), 연관관계)

  방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음( oracle 쓰다가 Mysql 쓰다가...)

 

* Spreing Boot 동작원리

  - 내장 톰캣을 가진다. 소켓! 스레드(시간을 쪼개서 동시에 동작하고있는것처럼 보이게 할 수 있다?)! 서버!

    Socket : 운영체제가 가지고 있는 것.

  - 서블릿 컨테이너 : JAVA는 URI(식별자 접근) 방식이기 때문에 서블릿컨테이너(톰켓) 무조건 사용

 

ajax 쓰는 두 가지 이유

  1. 웹프로그램을 사용하든지 앱 프로그램을 사용하든지 서버를 하나만 쓰기 위해

  2. 비동기 통신을 하기 위해서

 

 

erwin : Data Modeling Tool

 

영속성 컨텍스트 : 엔티티를 영구저장하는 환경, 자바 오브젝트 형태로 저장 하며 DB와 연결되어있음.

영속성 전이 ( CASCADE ) : 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들때 사용

JTA 글로벌 트랜잭션( 분산 트랜잭션 ) :

AOP : 관점 지향 프로그래밍으로 정적/동적 방법이 있고 객체 지향 프로그래밍을 보완하는방법

           클래스안에 본질적인 기술만 처리하고 본질적이지 않은 처리는 밖으로 꺼낸다.

           공통화 할 수 있는 처리(공통 관심사)는 aspect라는 하나의 단위로 모아서 처리 (모듈성을 높임)

 

반응형

댓글