2022_3 (작성중)
3/3
Network
- L4스위치
: 서버 부하 분산 Network Switch 혹은 소프트웨어가 담당.
외부로부터 요청을 서버가 직접받는 것 X 부하분산
NetworkSwitch 혹은 소프트웨어가 받은 후 서버로 적절하게 나눠줌.
- 부하분산(Load Balancing)
: 처리해야 할 업무 혹은 요청등을 나누어 처리하는 것.
(가용성 및 응답시간을 최적화시킬 수 있음)
JPA insertable 과 updateable
insertable : 엔티티 저장시 이 필드도 같이 저장. false로 설정하면 DB에 저장하지 않음(읽기 전용일 때 사용)
updatable : 위와 동일 하지만 수정일 때 사용
3/4
JWT Signing ALgorithms
JWT 토큰을 발급받을 때 사용하는 알고리즘.
토큰 발급자는 검증하기 위해서 모든 정보를 포함하고 있는 토큰을 발급받음. 이때 발급해주는 사람이 의도적으로 토큰을 수정할 수 없도록 인코딩해야함.
- HS256 (symmetic algorithm) -> 대칭알고리즘
: 발행자와 발급자가 같은키를 공유
- RS256 (asymmetric algorithms) -> 비대칭 알고리즘
// 객체 초기화, Secret Key를 Base64 encoding
@PostConstruct
protected void init() {
secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
}
public String generateToken(final String email) {
Claims claims = Jwts.claims().setSubject(email);
return Jwts.builder()
.setClaims(claims)
.setIssuedAt(new Date())
.setExpiration(Date.from(LocalDateTime.now().plusMonths(1).atZone(ZoneId.systemDefault()).toInstant()))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
Filter vs InterceptorFilter vs Interceptor
디스패처 서블릿에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공
필터는 스프링 범위 밖에서 처리가 됨.
interceptor → 특정 그룹의 사용자는 어떤 기능을 사용하지 못하는 경우가 있는데. 이런 작업들은 컨트롤러로 넘어가기 전에 검사해야하기때문에 인터셉터가 처리하기에 적합하다.
3/7
RestTemplate
Spring 3.0 부터 지원하는 템플릿.
스프링에서 제공하는 http 통신에 쓸 수 있음.
HTTP 서버와의 통신을 단순화하고 Restful원칙을 지킴.(json, xml을 쉽게 응답 받을 수 있음.) → xml같은 경우 xmlParser 를 통해서 데이터를 xml로 바꿔도 가공 후 jason의 형태로 보여 줄 수 있음.
3/8
https://v2.vuejs.org/v2/guide/installation.html
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
Vue Instance → 루트인스턴스
new Vue({ /*options*/ })
options 객체를 전달하여 생성
인스턴스에 데이터를 저장하고 작업을 수행할 수 있는 기능을 제공
(다양한 선택적 속성이 있음)
Vue.js가 이 객체를 가지고 Vue인스턴스를 초기화함.
var app = new Vue({
el: '#app',
data: {
product: 'Socks',
description: 'A pair of warm fuzzy socks'
}
})
Plugging in to an Element
el: ‘#app’,
vue인스터스는 DOM의 해당 부분 사이의 관계를 형성 → <div id= “app”>
로 vue를 활성화함.
Using an Expression
{{ EXPRESSION }}
→ 중괄호 안에서 JavaScript expression을 사용.
💡 Vue는 Reactive하다 → 인스턴스의 데이터는 데이터가 참조되는 모든 위치에 연결됨.Vue Instance Life Cycle
인스턴스의 라이프 사이클 동안 각 단계별 로직을 정의할 수 있는 능력을 제공
3/14
GIT
-
Fetch : pull 전에 변경 된 내용을 확인 하고 싶을 때 사용. Fetch 실행 해도 Local 저장소에 적용이 되지 않음.
-
Merge : 현재 사내 프로젝트는 대부분 작업 시 branch 새로 생성 후 master 에 merge통해 관리되고 있다고 생각됩니다.
해당 방법으로 개발 작업 하는 것을 추천 드립니다.
- Amand : 최근 작업 해서 잘못 올렸거나 단순 수정 작업이 필요하면 commit 을 하지 말고 amend commit 통해 최근 작업에
덮어서 commit 을 함
(commit 창에 check box를 체크 하면 사용 가능)
1. commit - amend 【튜토리얼 3: 커밋을 변경해보자! 】 | 누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog
- Stash : 현 시점에 작업 내용을 저장하고 최근 소스로 돌아감. (저장만하고 커밋하지는 않음)
(VCS->Git->Stash changes : 소스 저장,UnStash changes : 소스 복원)
-
Reset : 잘못 commit 했을 경우 원복, commit 로그가 남지 않는다. push. 된 이후는 적용 불가.
-
Revert : 잘못된 소스 commit&push 이후 다른 작업자들이 pull 한 상태에서 잘못 push 한 소스 원복 시 사용. commit 로그가 생김.
-
cherry-Pick : commit 목록 중 원하는 시점으로 Merge 하고 싶을 때 사용.
JPA Specifications
findAll()
에 조건을 걸어서 결과값을 조회할 수 있다.
Optional ifPresent
null을 체크하는 if문을 줄이는 방법
특정 결과를 반환하는 대신에 Optional객체가 감싸고 있는 값이 존재할 경우에만 실행될 로직을 함수형 인자로 넘길 수 있음.
함수형 인자로 람다식이나 메소드 레퍼런스가 넘어올 수 있음. LIKE 비동기 메소드의 콜백함수처럼 작동.
Java Serialize
자바 직렬화, 그것이 알고싶다. 훑어보기편 | 우아한형제들 기술블로그
내부에서 사용되는 객체 또는 데이터를 외부의 자바시스템에서도 사용할 수 있도록 byte 형태로 데이터 변환하는 기술(직렬화)
바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)
JVM의 메모리에 상주(힙 또는 스택)되어있는 객체 데이터를 바이트형태로 변환하는 것 또는 직렬화된 바이트 형태의 뎅;터를 객체로 변환해서 JVM으로 상주시키는 형태
3/15
try catch vs instanceof(예외처리)
Exception ex = someObj.getExcp();
try{
throw ex;
} catch (ExceptionExampl1 e) {
e.getSomeCustomViolations();
} catch (ExceptionExcampl2 e) {
e.getSomeOtherCustomViolations();
}
Exception ex = someObj.getExcp();
if(ex instanceof ExceptionExample1) {
ex.getSomeCustomViolations();
} else if(ex instanceof ExceptionExample2) {
ex.getSomeOtherCustomViolations();
}
Using throw, catch and instanceof to handle Exceptions in Java - GeeksforGeeks
Throw and catch an exception, or use instanceof?
RestTemplate vs WebClient
(스프링 버전 5부터 webclient를 권고)
RestTemplate : 동기화, blocking (호출할때 응답을 받을때까지 대기해야함)
WebClient : 비동기, non-blocking
Blocking vs Non-Blocking
Blokcing : 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않음.
Non-Blocking 호출된 함수가 자신이 할 일을 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른일을 진행할 수 있도록 해줌.
비동기 방식을 사용하는 큰 이유는 큰 서비스를 이루는 마이크로서비스 중 하나가 실패해도 전체적인 서비스는 그대로 진행되도록 하기 위함.
3/16
null과 관련된 문제
- 런타임 → NullPointerError 예외 발생
- NPE방어를 위해 들어가는 null 체크 로직 → 가독성과 유지보수성 하락
Optional은 존재할 수 도 있지만 안할 수 도 있는 객체, 즉 null이 될 수 도 있는 객체를 감싸고 있는 일종의 래퍼클래스 →null을 담을 수 있는 특수한 그릇으로 생각.
optional 클래스는 간편하게 객체 생성을 할 수 있도록 3가지 정적 팩토리 메소드 제공.
-
Optional.empty()
null을 담고 있는, 비어있는 Optional 객체를 얻어옴. 비어있는 객체는 Optional 내부적으로 미리 생성해놓은 싱글턴 인스턴스.
-
Optional.of(value)
null이 아닌 객체를 담고 있는 Optional 객체를 생성. null이 넘어올 경우, NPE를 던지는 것에 주의
-
Optional.ofNullable(value)
null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체를 생성.
Optional.empty() + Optional.of(value) 이렇게 합쳐놓은 메소드라고 생각
해당 객체가 null인지 아닌지 확신 할 수 없는 상황에서는 이 메소드 사용.
자바8 Optional 2부: null을 대하는 새로운 방법
isPresent() 메소드
get() 메소드는 비어있는 Optional 객체를 대상으로 호출할 경우, 예외를 발생시킴.
객체 존재여부를 bool 타입으로 반환하는 isPresent()메소드를 통해서 null체크가 필요함.
isPresent()
method returns true if the Optional contains a non-null value, otherwise it returns false.
ifPresent()
method allows you to pass a Consumer function that is executed if a value is present inside the Optional object.
It does nothing if the Optional is empty.
Java Optional Tutorial with Examples
Author And Source
이 문제에 관하여(2022_3 (작성중)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dodamtanguri/20223저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)