일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백트래킹
- PS
- 연결리스트
- 다대다
- 낙관적락
- 스토어드 프로시저
- 즉시로딩
- shared lock
- dfs
- 일대다
- 연관관계
- 지연로딩
- execute
- fetch
- 유니크제약조건
- 다대일
- BOJ
- 스프링 폼
- exclusive lock
- 동적sql
- 데코레이터
- 비관적락
- 힙
- FetchType
- querydsl
- CHECK OPTION
- JPQL
- eager
- SQL프로그래밍
- 이진탐색
- Today
- Total
목록All (557)
흰 스타렉스에서 내가 내리지
선택 정렬 :: selection sort 삽입 정렬 :: insertion sort 퀵 정렬 :: quick sort 병합 정렬 :: merge sort 계수 정렬 :: count sort ... # 1. 선택 정렬 :: Selection Sort - O(N^2) - 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾼다. - 가장 원시적인 방법으로 매번 '가장 작은 것을 선택' 한다는 의미에서 선택 정렬 알고리즘이라 한다. arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(arr)): min_index = i for j in range(i+1, len(arr)): if arr[min_i..
# DFS - 스택 자료구조 사용 * 구체적인 동작 과정 탐색 시작 노드를 스택에 삽입하고 방문 처리 스택의 최상단 노드에 if 방문하지 않은 인접 노드가 있다 : 그 인접 노드를 스택에 넣고 방문처리. (재귀함수 호출) elif 방문하지 않은 인접 노드가 없다 : 스택에서 저 최상단 노드 꺼내 2번의 과정을 더 수행할 수 없을 때까지 반복 - 실제로는 스택을 쓰지 않아도 되고, 탐색을 수행함에 있어서 데이터 개수가 N개인 경우 O(N)의 시간이 소요된다. - DFS는 스택을 사용하는 알고리즘이라 실제 구현은 재귀 함수를 이용했을 때 매우 간결하게 구현할 수 있다. # BFS - 큐 자료구조 사용 * 구체적인 동작 과정 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다 큐에서 노드를 꺼내 해당 노드의 인..
# 그래프 : 0️⃣ | 1️⃣----7----ᅩ-----5----2️⃣ - 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 - 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식 # 인접행렬 0 1 2 0 0 7 5 1 7 0 INF 2 5 INF 0 - 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식이다. INF = 987654321 graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] * 노드1과 노드7의 거리? → graph[1][7] # 인접 리스트 0️⃣ --→ (1️⃣ , 7) --→ (2️⃣ , 5) 1️⃣ --→ (0️⃣ , 7) 2️⃣ --→ (0️⃣ , 5) - 모든 노드에, 연결된 노드에 대한 정보를 차례대로 연결하여 저..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cd0igf/btsCzsFpn5t/5SSBoGK6jRdvh7ndIhxvnK/img.png)
# 공통 관심 사항 - 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면, 등록/수정/식제/조회 등등 상품 관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 이 때 발생하는 문제는, 로그인과 관련된 로직이 변경될 때이다. 작성한 모든 로직을 다 수정해야 할 수도 있다. → 실제로 내가 진행한 ㅌㅌ 프로젝트에서, 모든 API 경로에 대해서 가장 첫번째로 있는 코드는 헤더에 담긴 토큰으로 사용자를 불러오는 것이다. 이는 심각한 코드 중복이라고 생각한다. - 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(cross-cutting concern)라고 한다. 예를 들어, 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있다. - 이러한 공통 관심사는 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cHkSL8/btsCy71021e/MSgk7nK3akKgZjsKoyp1IK/img.png)
# 쿠키의 2가지 종류 1. 영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지 2. 세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 # refreshToken은 httpOnly쿠키로 셋팅하고 accessToken은 json으로 응답을 리턴하는 코드 @PostMapping(value = "/api/v1/authenticate") public ResponseEntity createAuthenticationToken(@RequestBody JwtRequest authenticationRequest, HttpServletResponse response) throws Exception{ authenticate(authenticationRequest.getUsername(),authentica..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pDgCc/btsCtnjp8Cs/7jAVyhWDeqakTZrK6rV5k0/img.png)
# 1. 슬랙에서 할 것 https://api.slack.com/ Slack은 생산성 플랫폼입니다 Slack은 팀과 커뮤니케이션할 수 있는 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다. slack.com - [Your apps] 버튼 클릭! - [Create New App] 누르고 [From scratch] - [App Name] 에는 Bot의 이름 - 그 아래에는 봇이 생성될 우리 워크스페이스를 골라주면 된다 - [Bots] 눌러 - 페이지가 이동되었을 것입니다. 좌측 메뉴에서 [OAuth & Permissions] 눌러줘요 - 페이지를 내리다 보면, [Scopes] 가 있다. - [Add an OAuth Scope] 를 누르고 슬랙 봇이 가질 권한을 선택해주자. - 우선 아..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Cxixw/btsCquDJC4f/isL1kk56113ak9fKPOmxHk/img.png)
# 1. 모니터링 서버 생성 애플리케이션 서버와 모니터링 서버를 분리하기로 하였다. ec2 인스턴스를 새로 만들고, 테스트를 위해 임시 스프링부트 프로젝트를 실행했다. # yum update # timezone # java 설치 # git 설치 # docker 설치 yum install docker -y # docker 시작 systemctl start docker # docker-compose 설치 curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-..
# 모니터링 3단계 대시보드 애플리케이션 추적 - 핀포인트 로그 # 모니터링 대상 시스템 메트릭 (CPU, 메모리) 애플리케이션 메트릭 (톰캣 쓰레드 풀, DB 커넥션 풀, 애플리케이션 호출 수) 비즈니스 메트릭 (주문수, 취소수) # 애플리케이션 추적 - 주로 각각의 HTTP 요청을 추적, 일부는 마이크로 서비스 환경에서 분산 추적 * 제품 👍핀포인트(오픈소스), 스카우트(오픈소스), 와탭(상용), 제니퍼(상용) https://github.com/pinpoint-apm/pinpoint # 로그 - 가장 자세한 추적, 원하는대로 커스텀 가능 - 같은 HTTP 요청을 묶어서 확인할 수 있는 방법이 중요, MDC 적용 → 예를 들어, 로그 앞부분에 사용자 UUID를 붙인다. [7d93e] * 파일로 직접 로..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Ih8Be/btsCeyFRvAo/TUDkuKBD4OecuW3Znc0qA0/img.png)
# 기본 코드 제작 http://localhost:8080/order : 주문 - 재고 1 감소 http://localhost:8080/cancel : 취소 - 재고 1 증가 http://localhost:8080/stock : 현재 재고 리턴 - 현재 재고는 AtomicInteger 변수형을 사용한다. @Configuration public class OrderConfigV0 { @Bean OrderService orderService(){ return new OrderServiceV0(); } } - OrderService 빈 등록 @Import(OrderConfigV0.class) @SpringBootApplication(scanBasePackages = "hello.controller") publ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/FvaLG/btsCbdIHhsa/SFWbgMetX05SkzkKXapt01/img.png)
# 실무에서 많이 발생하는 대표적인 문제 CPU 사용량 초과 JVM 메모리 사용량 초과 커넥션 풀 고갈 에러 로그 급증 # CPU에 부하를 주는 코드 추가 @Slf4j @RestController public class TrafficController { @GetMapping("/cpu") public String cpu(){ log.info("옛다 cpu 부하!!!!!"); long value = 0; for (long i=0; i< 100000000000L; i++){ value++; } return "ok value = " + value; } } # cpu 부하 주는 api 실행 # JVM 메모리 사용 누적하는 코드 private List list = new ArrayList(); @GetMappi..