일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스트림
- Java
- 이스티오
- redis
- 자바
- 스프링
- 토비의 스프링
- Stack
- 토비의 스프링 정리
- 백준
- GC
- Stream
- Kotlin
- SpringBoot
- Real MySQL
- JPA
- K8s
- OS
- 자바 ORM 표준 JPA 프로그래밍
- spring
- gradle
- list
- MSA
- 쿠버네티스
- jvm
- mysql
- 보조스트림
- Collection
- thread
- IntellJ
- Today
- Total
목록전체 글 (153)
인생을 코딩하다.
블로킹 큐(Blocking Queues) 특정 상황에 쓰레드를 대기하도록 하는 큐이다. 큐에서 element를 빼려고 시도했는데(디큐) 큐가 비어있다거나, 큐에 엘레멘트를 넣으려 했는데(인큐) 큐에 넣을 수 있는 공간이 없다거나 할 때 디큐/인큐 호출 쓰레드를 대기하도록 한다. 비어있는 큐에서 엘레멘트를 빼려고 시도하는 쓰레드의 대기 상태는 다른 쓰레드가 이 큐에 element를 넣을 때까지 지속된다. 꽉 찬 큐에 element를 넣으려 시도하는 쓰레드의 대기 상태는 다른 쓰레드가 큐에서 element를 빼거나 큐를 정리하여(clean) 큐의 공간이 확보될 때까지 지속된다. 블로킹 큐는 put과 take라는 핵심 메소드를 갖고 있고, 더불어 offer와 poll이라는 메소드도 갖고 있다. 만약 큐가 가득..

volatile관련해서 책에서 32비트와 64비트에 효과적이라는 것을 보았는데, 왜 효과적이며 기존 32비트와 64비트에는 어떤 문제가 있는 것일까? 에 관한 고민을 하였다. 그리고 이에 관해 조사해 보았다. oracle docs를 보니, 라고 써있었다. 위 글에 관한 해결 방법이 volatile이고, 아래 내용이 문제점에 관해 조사해본 내용이다. long value = 123L; A,B 두 쓰레드가 있을 때, 위의 value에 값이 할당될 때 완벽히 한 메모리 작업 안에서 완벽히 쓰여지지 않는다. int value = 123; 하지만 int형이라면 완벽히 쓰여진다. 왜 그럴까? int형 보다 더 큰 타입, long이나 객체..그리고 변수 할당 및 연산 시 일어나는 작업에서는 완벽히 원자성을 가지지 않고..

첫 화면에서 로그인을 해야 기능을 사용할 수 있는 어떤 웹 사이트를 가정해보자.일반적으로 첫 화면에서 로그인을 하고, 나머지 기능들을 ui 클릭을 통해 사용할 것이다. 하지만, 어떤 사용자가 로그인을 해야만 하는 어떤 기능의 url을 복사해 뒀다가 로그인 없이 주소창에 그 url을 붙여넣는다면 어떨까? '별도의 처리' 가 없다면 아마 로그인 없이도 기능을 사용하게 되거나, 에러가 발생할 것이다. 그 '별도의 처리'가 포함된 로직은 일반적으로 아래와 같을 것이다. 1. 사용자는 로그인을 한다. 2. 시스템은 로그인한 사용자 정보를 세션에 저장한다. 3. 사용자는 기능을 요청한다. 4. 시스템은 사용자가 요청한 기능을 수행하기 전에 요청한 사용자의 세션을 체크한다. 5. 시스템은 올바른 세션일 경우 기능 승..

Serializable의 동작방식이 궁금하여 내부를 보았는데, 어라? 필드와 메소드가 한 개도 없었다. 이것을 마커 인터페이스라고 한다. 마커 인터페이스(marker interface) 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 것 자바의 대표 마커 인터페이스로는 위에서 언급한 Serializable, Cloneable와 흔히 알지는 못하지만 Spring 에서 리스너를 사용한다면 보이는 EnentListener라는 인터페이스도 있다. 아무것도 담고 있지 않으면, 왜 쓰는 것일까? 아무것도 담지 않고 있지만, Serilaizable을 구현한 클래스의 인스턴스는 objectOutputStream을 통해 쓸 수 있다. 즉 직렬화 할 수 있다고 알려준다. 이 인..

Servlet 웹 애플리케이션을 만들 때 필요한 인터페이스 Spring web MVC spring : Spring Framework에 있는 모듈 web : Web Service를 만들때 필요 MVC : MVC 패턴을 사용해서 (Model View Controller) 그리고 이 Spring web MVC가 Servlet를 사용하게 된다. Servlet은 왜 생겼을까? 정적 데이터만 전달하는 Web Server 처음에 웹 프로그래밍인 정적 데이터만 전달할 수 있었다. 어떤 사용자가 들어와도 Hello.html만 줄 수 있었다. 그래서 사용자(요청)에 따라 다른 처리를 해줄 수 없었다. 동적인 처리를 해주는 웹 애플리케이션이 없었다. 그래서 나온게 CGI다. 동적인 데이터를 처리하는 CGI, Web Serv..

Apache와 Nginx는 현재까지 가장 폭넓게 쓰이는 2가지의 오픈소스 웹 서버이다. Apache Apache는 Client 요청을 받으면 MPM(Multi Processing Module : 다중처리모듈)이라는 방식으로 요청을 처리하며 대표적으로 Prefork와 Work방식이 있다. MPM 서버는 시스템의 네트워크 포트에 연결하고, 요청을 받아들이며, 받아들인 요청을 처리하기 위해 자식들에게 분배하는 다중처리 모둘(Multi-Processing Modules, MPMs)을 선택할 수 있다. 클라이언트에서 요청을 받으면 MPM 방식으로 처리를 하는데 대표적으로 Prefork와 Worker방식이 있다. 커넥션 생성(binding, acecept) 커넥션 분배 프로세스든 스레드든 해당 커넥션에 대한 요청을..

ArrayDeque란? 위위 사진은 ArrayDeque의 상속, 확장 구조 및 설명이다. 아래 접은 글은 번역이다. 더보기 "Deque 인터페이스의 크기 조정 가능한 어레이 구현. 어레이 데크에는 용량 제한이 없으며 필요에 따라 확장되어 사용량을 지원합니다. 외부 동기화가 없는 경우 여러 스레드에 의한 동시 액세스를 지원하지 않습니다. null 요소는 사용할 수 없습니다. 이 클래스는 스택으로 사용할 때 Stack보다 빠르며, 대기열로 사용할 때는 LinkedList보다 빠릅니다. 대부분의 ArrayDeque 작업은 상각된 상수 시간으로 실행됩니다. 제거, 제거 첫 번째 발생, 제거 마지막 발생, 포함, 반복기.remove() 및 대량 작업은 모두 선형 시간으로 실행됩니다. 이 클래스의 반복기 메서드에 ..

팩토리는 공장을 의미한다. 공장은 물건을 생산하는데 객체 지향에서 팩터리는 객체를 생성한다. 결국 팩터리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기에 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩 해서 객체를 반환하게 하는 것을 의미한다. package DesignPattern.FactoryMethodPattern; public abstract class Animal { // 추상 팩터리 메서드 abstract AnimalToy getToy(); } package DesignPattern.FactoryMethodPattern; // 팩터리 메서드가 생성할 객체의 상위 클래스 public abstract class AnimalToy { abstract void identify(); }..