Back-end 100

함수형 프로그래밍

고계함수 일급함수 커링과부분적용 재귀와 꼬리 재귀 최적화 멱등성 순수함수와 참조 투명서 불변성과 영속적 자료구조, 메모제이션 1. 높은 표현력을 통해 불필요한 코드를 줄일수 있다. 2. 함수형 프로그래밍 언어군은 프로그래밍 언어론의 최신 연구 결과를 반영하고 있다. 1. Lambda 익명 함수 내부의 변수는 불변하거나 실직적으로 불변해야하는 제약이 있다 -> 배열을 쓰면 회피 가능 익명 함수는 Checked Exception을 던질 수 없어서 반드시 내부에 Try - Catch 문을 써줄 수밖에 없다 Exception을 던지는 FunctionallInterface를 직접 정의하여 회피 가능 2. Currying 커리 함수 만들면 어느 함수나 커링 가능 3.Stream Sream은 실질적으로 List 와 ..

Back-end/ETC 2021.04.28

RESTful

REST? REpresentaional (표현) Steate (상태) Transfer (전달) 자원의 표현(HTTP URI)을 가지고 상태(Http Method)를 전달 아키텍쳐 스타일의 제약조건을 모두 만족하는 시스템 제약 조건 1. Client - Server 2. Steateless 3. Cache 4. Uniform InterFace -Identification of Resources -Manipulation of Resources through Representaiton -Self-Descriptive Message -Hypermedia As The Engine of Application State 5. Layered System 6. Code-On-Demand(Option) Level0 Htt..

Git Bracnches

Why git? 1. Version Control -> 최종분 수정 2. Co - Working Tool -> 협업에대한 전달 3. Powerful -Branchimg -> 관심사의 분리 Git Overview Commit -> 완전한 상태가 아니라, 부모 커밋이 있어야 한다 Common Parent -> Merge 를 하려면 공통부분이 있어야 한다. Merge -> 2개를 수정하지 않고 합친다. Rebase -> 하나의 흐름으로 생성되지만, 원래 있던 커밋이 뒤에가서 붙는다. Conflict -> 커밋의 중복되어 겹치는 수정 부분이 있어, 어떻게 할지 모른다. - Resovle Conflict -> 수동으로 작업한다 - Revert -> 사라지는 커밋의 자식 커밋을 붙여주고, 삭제해서, 충돌도 없어고 ..

Back-end/ETC 2021.04.26

JPA와 JDBC

JDBC connection설정 -> String 쿼리를 이용한 데이터 삽입 버퍼를 통해 sql 전달 , 결과값 가져옴 자바와 DB 연결 1. sql 문 2. connection 관리 3. preparedstatement, resultser 객체 connection 객체가 db와 app의 연결을 관리하고, preparedstatement가 sql을 전달하며, resultset 객체를 통해 결과값은 받아왔다. JPA jdbc api와 자바 연걸 1. sql문을 직접 javaapplication 내에서 쓸 경우가 적어진다. 2. sql 구조를 java application 내에서 적용 하지 않아도 된다 www.youtube.com/watch?v=Ppqc3qN75EE&list=PLgXGHBqgT2TvpJ_p9..

Back-end/Spring 2021.04.25

Cache

메모리 계층 구조 1. 데이터를 저장하는 공간의 속도와 용량은 반비례 관계 - 속도가 빠른 메모리일수록 용량이 작음 - 용량이 큰 저장장치는 속도가 느림 - 둘 다 잡기에는 비용이 너무 많이 든다 - 그래서 데이터 저장 공간은 속도와 용랴엥 따라 특성에 맞게 역할을 나누어서 사용한다 2. 데이터 저장 공간을 속도-용량 순서대로 쌓으면 마치 피라미드와 같은 형상이 나타난다 (MERMORY HIERACHY) 파레토의 법칙 이탈리아의 경체학자 빌프레도 파레토가 발견한 현상 원인 중 상위 20%가 전체 결과의 80% 만든다는 법칙 2대 8 법칙이라고도 한다 여러곳에 관찰할수 있다 - 인구의 20%가 전체부의 80%를 가지고 있다 - 잘 팔리는 제품 20%가 매출의 80%를 차지한다 - 많이 쓰이는 단어 20%가..

SpringBoot Auto Configuration

Annotation = 주석? 컴파일러가 Anotation을 만나면 미리 정의 된 일이 동작한다. @SpringBootApplication -> 들어가보면 @SpringBootConfiguration -> 빈을 만들어준다. @EnableAutoConfiguration -> 2번 Resoruse 의 Meta-info- spring factories의 EnableAutoConfigration이 있는 Compent들과 연관이 있는 외부클래스들을 가져와 빈을 등록한다. @ComponentScan -> 1번 @Component 붙어있는 객체들을 스캔을 하면서 빈으로 등록한다 @Filter @inrherited @Documented @Retention @Target www.youtube.com/watch?v=OXI..

Back-end/SpringBoot 2021.04.25

MVC 패턴

디자인 패턴? 구현 SW 개발방법을 공식화 한것 1. MVC 패턴이란 Model & View & Controller 애플리 케이션을 3가지로 역할로 구분한 개발 방법론 모델 1. JSP(view) + javaBean(Service) 뷰와 로직이 섞인다 장점 단점 구조가 단순 출력과 로직 코드가 섞여 JSP코드가 복잡해진다 프런트와 백엔드가 혼재되어 분업이 용이하지 않다 유지보수가 어렵다. 모델 2. [JavaBean(Service) + JSP(view) + 서블릿(controller)] MVC구조 장점 단점 뷰와 로직의 분리로 모델1에 비해 덜 복잡하고, 분업이 용이하며, 유지보수가 쉽다. 습득이 어렵고 작업량이 많다 MVC흐름 1. 사용자는 원하는 기능을 처리하기 위한 모든 요청을 컨트롤러에 보낸다. ..

DTO vs VO

DTO(Date Transfer Object) 레이어 간 데이터를 전달하는 객체 데이터 접근 메서드 외에 기능을 가지지 않음(setter, getter 로만 구성) + 정렬, 직렬화 등 데이터 표현을 위한 기능은 가질수 있음 데이터의 캡슐화를 통해 유연한 대응이 가능함 + 데이터 요청 수 감소 효과 VO 값 자체로 의미를 가지는 객체 변하지 않는 값을 가지는 객체 -> 값이 변하지 않음을 보장하여 코드의 안정성과 생산성을 높임 값이 같다면 동일한 객체 -> 각 개체를 비교하는 데 사용되는 ID가없음 -> 같은 객체인지 판단하기 위해 각 속성들의 값을 비교함 공통점 레이어 간 데이터를 전달할때 사용가능 (VO는 불변을 보장하기 때문에 데이터 전달 용도로 사용 가능) DTO VO 값이 변할수 있음 레이어와 ..

Back-end/Spring 2021.04.23

OCP 와 전략 패턴

1. if-else의 문제점 변경, 확장이 될 수록 코드가 복잡해진다 코드를 수정하거나 수정할 위치를 찾는데 점점 오래 걸린다. 실수로 추가하지 않고 누락하는 부분이 생길 가능성이 있다. -> 유지보수가 어려워 진다!! 계속되는 기능 추가 -> 복잡도 증가 -> 추가, 수정이 힘들다. 2. OCP (open close principle, 개방폐쇄의 원칙) 소프트웨어 구성 요소(컴포넌트, 클래스, 모듈, 함수)는 확장에 대해서는 개방돼야하지만 변경에 대해 폐쇄 되어야한다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 뜻이다. 적용방법 - 1 상속(is-a) 깨지기 쉬운 상위 클래스 문제 : 상속은 하위클래스가 상위클래스의 기능과 밀접하기 때문에 상위가 바뀌면 하위에 영향이..