일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- Spring Security
- spring
- lombok
- cache
- 코딩테스트
- 이펙티브자바
- Transactional
- @Transactional
- effective java
- 클린아키텍처
- EffectiveJava
- AOP
- collapse
- JVM
- Java
- 배낭문제
- 알고리즘
- thymeleaf
- JPA
- TDD
- 멱등성
- BFS
- Garbage Collection
- interceptor
- EntityGraph
- 파이썬
- 캐시
- 타임리프
- 동시성처리
- Today
- Total
목록전체 글 (69)
Jinnie devlog

REST, REST API, RESTful REST “Representational State Transfer”의 약자 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. 자원(resource)의 표현(representation)에 의한 상태 전달 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다. HTTP URI를 통해서 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해서 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. CRUD Operation Create:..
메모리 누수 자바에서 메모리 누수는 더 이상 사용되지 않는 객체들이 GC(가비지 컬렉션)에 의해 소멸되지 않고 누적되는 현상이다. 가비지 컬렉션의 소멸 대상이 되려면 다른 Reference 변수에서 참조하고 있지 않아야 한다. 예시 1. Static 변수가 객체를 참조하고 있다면, 해당 객체는 GC에 의해 소멸되지 않는다. - Static 변수는 프로그램 종료 시점에 메모리가 반환되고, 사용하지 않아도 메모리를 점유하고 있다. 이런 static 변수를 재사용한다면 이점이 있지만, 사용하지 않으면 메모리를 점유하고 있게 된다. 2. Stack에서 Heap에 있는 객체를 참조하고 있는 동안에는 해당 객체는 GC에 의해 소멸되지 않는다. 메모리 누수가 발생하는 패턴 1. 무의미한 Wrapper 객체를 생성하는..

빈 스코프란? 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지될 수 있는 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤(Singleton): 기본 스코프. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입(Prototype): 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 applicati..

스프링은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 스프링에서 공통된 처리를 위해 필터, 인터셉터, AOP를 사용할 수 있다. 필터(Filter) 필터는 J2EE 표준 스펙 기능으로 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞게 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리 되는 것이다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되고, 디스패처 서블릿 전/후에 처리하는 것이다. 디스패처 서블릿(Displatcher Servlet) HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적..

JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부르며 자바 프로그램 실행환경을 만들어 주는 소프트웨어다. 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행된다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 스택 기반으로 동작한다. JVM을 사용함으로써 얻는 가장 큰 이점은 JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있다는 점이다. C언어로 작성된 Test.c를 윈도우 컴파일러를 사용하여 컴파일하면 Test.exe가 만들어진다. 윈도우 컴파일..
wait와 notify보다는 동시성 유틸리티를 애용하라 자바 5에서 도입된 고수준의 동시성 유틸리티가 이전이라면 wait와 notify로 하드코딩해야 했던 전형적인 일들을 대신 처리해주기 때문에 지금은 wait과 notify를 사용해야 할 이유가 많이 줄었다. 갖고 있던 고유 락을 해제하고, 스레드를 잠들게 하는 wait와 잠들어 있던 스레드 중 임의로 하나를 골라 깨우는 notify는 synchronized 블록이나 메소드에서 호출되어야하고, 올바르게 사용하기가 아주 까다로우니 고수준 동시성 유틸리티를 사용하자. java.util.concurrent의 고수준 유틸리티는 세 범주로 나눌 수 있다. 실행자 프레임워크, 동시성 컬렉션, 동기화 장치다. 동시성 컬렉션 동시성 컬렉션은 List, Queue, M..
스레드보다는 실행자, 태스크, 스트림을 애용하라 책 초판의 아이템 49에서는 단순한 작업 큐(work queue) 클래스는 클라이언트가 요청한 작업을 백그라운드 스레드에 위임해 비동기적으로 처리해줬다. 작업 큐가 필요 없어지면 클라이언트는 큐에 중단을 요청할 수 있고, 그러면 큐는 남아 있는 작업을 마저 완료한 후 스스로 종료한다. 안전 실패나 응답불가가 될 여자를 없애는 코드를 추가해야 했기 때문에 코드가 길고 복잡했다. java.util.concurrent 패키지 java.tuil.concurrent 패키지가 등장하면서 더이상 위와 같은 코드를 작성하지 않아도 됐다. 이 패키지는 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 그래서 모든 면에서 뛰어난 작업 큐를 ..

Open EntityManager In View 필터는 JPA EntityManager(영속성 컨텍스트: DB에서 읽어온 객체들을 관리하는 컨텍스트. persistent 상태인 것을 관리)를 요청을 처리하는 전체 프로세스에 바인딩 시켜주는 필더이다. 스프링부트는 기본적으로 Open EntityManager In View를 설정해준다. persistent 상태인 객체들은 트랜잭션 안에서는 객체 상태의 변경만 감지하다가 트랜잭션이 종료될 때에 DB에 반영한다. 그러므로 데이터를 변경해야하는 일이 있는 경우, 트랜잭션 내에서 관리해주어야 한다. 뷰를 랜더링 할 때 까지 영속성 컨텍스트를 유지하기 때문에 필요한 데이터를 랜더링하는 시점에 추가로 읽어올 수 있다. (지연 로딩. Lazy Loading) 엔티티 객..