* 크로스 사이트 요청 위조(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
* 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라는 하나의 단위로 모아서 처리 (모듈성을 높임)
'공부' 카테고리의 다른 글
MYSQL 명령어 정리(DML) (0) | 2022.07.02 |
---|---|
MYSQL 비밀번호 재설정 (0) | 2021.09.27 |
블록체인 캠퍼스 190703 (0) | 2019.07.04 |
[오늘의 issue] 오늘도 버튼이 먹지 않는다! (0) | 2018.02.23 |
[정리] 개념이 명확하지 않은 단어 개념 정리! (0) | 2018.02.23 |
댓글