일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Spring Boot
- 백준 17779
- spring cloud
- 프로그래머스
- spring oauth
- JPA
- re.split
- springboot
- 백준 15685
- 백준 16719
- 프로래머스
- 웹어플리케이션 서버
- Kotlin
- spring security
- sql 기술면접
- 파이썬
- 백준 16236
- java
- 백준 파이썬
- 백준
- 백준 17626
- java 기술면접
- MSA
- 백준 16235
- Coroutine
- Spring
- with recursive
- 백준 19238
- MySQL
- JVM
- Today
- Total
목록Programming (98)
시작이 반
C나 C++은 OS레벨의 메모리에 직접 접근 한다. 때문에 사용자가 직접 메모리 누수를 막기 위해 메모리 해제를 해줘야 한다. 자바는 OS에 직접적으로 접근하지 않고 Java Virtual Machine(JVM) 이라고 하는 가상 머신을 통해서 간접적으로 접근을 하게 된다. 이런 JVM은 메모리를 자동으로 관리를 해주는데 이렇기 때문에 메모리 누수가 없으며 사용자가 메모리초과 이외에는 신경을 쓰지 않아도 된다는 장점을 가지고 있다. 그렇다면 JVM은 어떻게 메모리를 자동으로 관리를 해주는 것일까? JVM에는 Garbage Collection(GC)라고 하는 것이 존재한다. 이 가비지 컬렉션은 Heap영역을 스캔하여 사용하지 않는 메모리를 제거해준다. 사용하고 있는지 사용하지 않고 있는지 어떻게 아는 것인..
Sync, Async - 요청한 순서가 지켜지냐 Sync - 함수를 콜한 쪽에서 직접 결과를 처리함 Async - 함수를 콜한 쪽에서 처리 하지 않고 콜백을 넘기면서 콜백 함수를 통해 처리 Blocking, Non-Blocking - 요청에 대해 받은 쪽에서 처리가 끝나기전에 return 해주냐 Blocking - 작업이 완료될 때까지 기다림 Non-Blocking - 작업이 완료되지 않았음에도 즉시 응답 1. Sync, Blocking 2. Sync, Non-Blocking 3. Async, Blocking 4. Async, Non-Blocking
변수 선언 val : 불변 var : 가변 if로 초기화도 가능 var a = if( true ) { 0 } else { 1} for문 기본 for문 for( i in 0..10 ) -> 0 ~ 10까지 for( i in 10 downTo 0 ) -> 10 ~ 0까지 for( i in a..z ) -> a ~ z 까지 for(i in z downTo a) -> z ~ a 까지 for( (index, element) in (a..z).withIndex() ) : 인덱스도 같이 줄수 있음 배열 for문 for( element in array ) : 원소 반환 for( index in array.indices ) : 인덱스 반환 for( (index, element) in array.withIndex() ) ..
우선 Redis는 캐시 시스템을 이용한 in-memory 데이터 베이스이다. Cache란? 기존에는 데이터가 필요하다면 DB를 거치게 되고 DB에서 조회된 데이터를 사용할 것이다. 만약 서비스의 사용자가 증가하게 되었을때 모든 요청을 DB접근만으로 처리를 한다면 DB서버에 무리가 가게 될 수 있다. 물론 데이터베이스는 서버가 죽더라도 디스크에 저장이 되기 때문에 데이터가 유지된다는 안전한 방법이지만 성능적인 면에서는 기대하기 힘들다. 이렇게 필요한 데이터를 미리 저장해두었다가 데이터가 필요할 때 가져다 쓰는 것을 캐시라고 한다. 캐시는 메모리상에서 가져오기 때문에 디스크에 접근하는 것보다 훨씬 빠르다는 장점이있지만 서버가 죽게 되면 해당 데이터 또한 사라진다는 단점이 있다. Look Aside Cache..
코드를 개발하다 보면 같은 로직이 필요한 부분이 여러군데 있을 것이고 이러한 부분을 함수로 분리해서 처리한다. 이와 비슷하게 Spirng에서 흐름상 공통으로 처리해야 하는 부분이 있을 것이고 이를 위한 것이 필터, 인터셉터, AOP이다. 필터, 인터셉터, AOP의 공통점은 공통된부분을 따로 빼내어 처리하는 것이다. 필터(Filter) 필터는 스프링 컨테이너 외부에서 실행되는 공통 로직이다. 웹 컨테이너에 의해서 관리가 된다. 요청, 응답을 정제할 수 있으며 Dispatcherservlet 이전에 실행이 된다. (Spring과 분리되어야 하는 기능, 공통된 인증/인가 기능 등) 필터 메소드 - init() : 필터 객체 초기화 - doFilter() : 필터 전/후 처리 - destory(): 필터 객체 ..
어플리케이션을 운영하던 도중에 장애가 발생, 잘못된 접근, 사용자의 악의적인 행위, 예상치 못한 작동 등과 같이 문제가 발생했을 경우, 문제의 원인을 파악해야 한다. 이를 위해서 날짜, 시간, 서비스, 로직 등에 대한 정보가 필요하다. 이런 정보를 얻기 위해서 Exception이 발생하거나 중요한 기능들이 실행되는 부분에서는 로그(log)를 남기는 것이 필요하다. Log의 사전적 의미 로그의 사전적 의미는 "무언가를 기록하는 행위"이다. 이러한 파일을 모아 놓은 것이 Log파일이라고 한다. 로깅(Logging)이란? 정보를 제공하는 일련의 기록인 로그(Log)를 생성하도록 시스템을 작성하는 활동. 프린트 줄 넣기는 간단한 로그를 생성하기만 한다. 버그에 대한 유용한 정보를 제공할 수 있다. 성능에 관한 ..
JSX – 자바스크립트와 html의 중간인 새로운 표현식 이를 이해하기 위해서는 Babel이라는 컴파일러가 필요하다. 컴포넌트 -> 엘리먼트의 집합 use로 시작하는게 react에서 훅임 useState – 변경되는 변수 값을 사용할 때??? Const [value, setValue] = React.useState(“default value”); -> 상태값을 관리해주는 훅 -> 초기값을 넣어줄 수 있는데 가져오는데 오래 걸리면 함수를 써서 lazy init을 할 수 있다. -> useState로 만들어진 set함수는 이전 값이 저장되어있음 -> prev 컴포넌트 사이드 이펙트 다루기 - useEffect(함수, 배열) 함수 – 실행되는 것 dependency 배열 – side effect를 일으키고 싶..
Authentication 인증 : 로그인(spring security) -> jwt생성(유저정보로) -> SecurityContextHolder 인증객체 설정 Authorization 인가 : api 접근 -> jwt filter : 토큰 유효한지 확인 수행, 정상 수행 -> SecurityContextHolder에 인증 설정 Token Provider : 토큰의 생성, 토큰의 유효성 검증 등을 담당 Jwt filter : httpRequest 헤더에서 토큰을 가져와서 securityContextHolder에 저장 JwtSecuritConfig : Custom한 필터(JwtFilter)를 Security로직에 추가 JwtAuthenticationEntryPoint : 유효한 자격증명이 아니면 401에러..