일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MSA
- 백준
- 스프링
- K8s
- 토비의 스프링
- mysql
- IntellJ
- 자바 ORM 표준 JPA 프로그래밍
- GC
- thread
- 보조스트림
- 자바
- Stack
- Kotlin
- jvm
- gradle
- Collection
- 이스티오
- JPA
- Java
- 토비의 스프링 정리
- Stream
- redis
- SpringBoot
- spring
- 쿠버네티스
- Real MySQL
- 스트림
- list
- OS
- Today
- Total
목록Java (58)
인생을 코딩하다.

저는 현재 프로젝트를 진행함에 있어, https://github.com/f-lab-edu/black-postoffice f-lab-edu/black-postoffice 익명으로 편하게 고민, 일상을 공유하는 소셜 네트워크 서비스입니다. Contribute to f-lab-edu/black-postoffice development by creating an account on GitHub. github.com 지속적으로 성능을 튜닝하여 빠른 서비스를 만들어야 한다고 생각합니다. 서비스의 속도가 계속 느려진다면, 이용하는 사용자들의 수도 그만큼 줄어들겠죠? 이건 곧 수익의 저하로도 이어집니다. 최악의 시나리오네요. 따라서 저는 제가 진행중인 프로젝트의 성능을 꾸준히 튜닝하여 속도를 높이기 위해 http://..

싱글톤 패턴의 기본적인 구현 방법입니다. public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null){ instance = new Singleton(); } return instance; } } getInstance() 를 여러 번 호출 해도 단 하나의 동일한 instance 만을 반환해 줍니다. 싱글톤 패턴의 중요한 두 가지는, 생성 패턴은 시스템이 어떤 Concrete Class를 사용하는지에 대한 정보를 캡슐화합니다. 생성 패턴은 이들 클래스의 인스턴스들이 어떻게 만들고 어떻게 결합하는지에 대한 부분을 ..

메모리 누수(memory leak)란? CS 의미로 살펴볼 때, 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다. 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만 leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다. 자바에서 메모리 누수(memory leak) 더 이상 사용되지 않는 객체들이 가비지 컬렉터에 의해 회수되지 않고 계속 누적이 되는 현상을 말한다. Old 영역에 계속 누적된 객체로 인해 Major GC가 빈번하게 발생하게 되면서, 프로그램 응답속도가 늦어지면서 성..

I/O작업이 blocking 방식으로 구현되면 하나의 클라이언트가 I/O작업을 진행하면 해당 쓰레드가 진행하는 작업을 중지하게 된다. 영향을 미치지 않게 하기 위해서 클라이언트 별로 Thread를 만들어 연결시켜주어야 한다. Thread가 많아지면 시간 할당량은 작아진다. 시간할당량이 작으면 동시에 수행되는 느낌을 가질 수 있다. 하지만 문제가 있다. 이 문제는 java 1.4이후로 NIO가 나오기 전 blocking I/O의 큰 단점이였다. 이 경우에 Thread 수는 접속자 수가 많아질 수록 Thread 수도 많아지게 된다. Thread가 많으면 CPU의 Context Switching 및 interrupt 횟수와 오버헤드 증가하게 된다. 이러한 것들이 발생할 때 cpu는 일하지 못한다. 때문에, 실..
블로킹 큐(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을 통해 쓸 수 있다. 즉 직렬화 할 수 있다고 알려준다. 이 인..