일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- request
- 인터셉터
- Spring
- 스프링부트
- 관점지향프로그래밍
- 스프링
- MYSQL
- response
- Redis
- aop
- Filter
- 객체지향프로그래밍
- exception
- mybatis
- 자바
- git
- java
- Spring Security
- proxy pattern
- SQL
- http
- 디자인패턴
- Interceptor
- 스프링 시큐리티
- spring boot
- OOP
- network
- aspect
- RestControllerAdvice
- 트랜잭션
- Today
- Total
목록분류 전체보기 (76)
장쫄깃 기술블로그
들어가며 @Autowired는 Component Scan + @Component로 스프링 빈에 등록된 객체를 찾아서 필요한 의존관계를 설정한다. (우선적으로, 타입(Type)으로 해당 빈(Bean)을 찾는다.) 만약 @Autowired를 통한 자동 의존관계 주입 시 여러개의 빈이 존재한다면 어떻게 될까? 어떤 빈을 의존주입을 해야할 지 판단하지 못하는 경우 UnsatisfiedDependencyException 이 발생한다. UnsatisfiedDependencyException은 예외명에서도 알 수 있듯이 스프링 빈 객체들이 생성되는 과정에서 의존주입을 하게 되는데, 필드에 해당하는 의존관계를 만족시킬 수 없을 때 발생하는 예외이다. 그 중에서 대표적으로 NoUniqueBeanDefinitionExce..
Atomic 변수란 Atomic 변수는 원자성을 보장하는 변수이다. 멀티스레드 환경에서 동기화 문제를 해결하기 위해 synchronized 키워드를 사용하여 락을 걸곤 한다. 그런데 synchronized는 특정 스레드가 해당 블럭 전체를 lock 하기 때문에 낭비가 심하다. 이러한 문제를 해결하기 위해 고안된 방법이 Atomic 변수이다. Atomic 변수는 CAS(Compare And Swap) 알고리즘을 사용하여 NonBlocking하면서 동기화 문제를 해결할 수 있다. CAS(Compare And Swap) 알고리즘 멀티스레드 환경, 멀티코어 환경에서 각 CPU는 메인 메모리에서 변수값을 참조하는 것이 아니라, 각 CPU의 개시 영역에서 메모리를 참조하게 된다. (그림 2 참조) 이 때, 메인 메..
들어가며 Java에서 문자열을 다루는 대표적은 클래스로 String, StringBuffer, StringBuilder 가 있다. 연산이 많지 않을때는 특별한 이슈가 발생할 가능성이 거의 없다. 하지만 연산횟수가 많아지거나 멀티스레드, 경쟁 상태(Race Condition) 등의 상황이 자주 발생하면 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다. String, StringBuffer, StringBuilder의 기본적이니 차이는 String은 불변(Immutable), StringBuffer와 StringBuilder는 가변(Mutable) 이다. 1. String String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다. concat 메소드 또는 + 연산자를 통해..
Connection과 Connection Pool DriverManager.getConnection()은 실제 자바 프로그램과 데이터베이스를 네트워크상에서 연결해주는 메소드이다. Connection은 네트워크 상의 연결 자체를 의미한다. 보통 Connection 하나당 트랜잭션 하나를 관리한다. 트랜잭션은 하나 이상의 쿼리에서 동일한 Connection 객체를 공유하는 것을 의미한다. Connection Pool이란 클라이언트의 요청 시점에 Connection을 연결하는 것이 아니라 미리 일정수의 Connection을 만들어놓고 필요한 어플리케이션에 전달하여 이용하는 방법이다. JDBC Framework에서 close가 이루어지면 Connection을 Connection Pool에 반납하게 된다. Con..
String Constant Pool 흔히 new 연산자로 String 객체를 생성하지 않는 것이 좋다는 말을 볼 수 있다. String literal로 생성하면 해당 String 값은 Heap 영역 내 "String Constant Pool"에 저장되어 재사용되지만, new 연산자로 생성하면 같은 내용이라도 여러 개의 객체가 각각 Heap 영역을 차지하기 때문이다. 그림으로 살펴보자. String literal로 생성한 객체는 String Pool 영역에 들어간다. String literal로 생성한 객체의 값이 이미 String Pool에 존재한다면, 해당 객체는 String Pool의 reference를 참조한다. 그림에서 s1과 s2가 같은 곳을 바라보는 이유도 이 때문이다. new 연산자로 생성..
JVM이란? JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. 가상머신이란 프로그램이 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것 JVM은 스택 기반의 가상머신이다. ARM 아키텍쳐같은 하드웨어는 레지스터 기반으로 동작하지만, JVM은 스택 기반으로 동작한다. JVM의 역할은 다음과 같다. 자바 어플리케이션을 클래스 로더를 통해 읽어들여 자바 API와 함께 실행 Java와 OS 사이에서 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용을 가능하게 함 프로그램에 필요한 메모리 할당, 관리 GC(Garbage Collection) 수행 JVM 구조 Class Loader (클래스 로더) JVM내로 클래스(.class 파일..
들어가며 Java Strong Reference / Soft Reference / Weak Reference / Phantom Reference Java의 참조 유형에는 크게 4가지가 있다. 참조 유형에 따라 GC 실행 대상 여부, 시점이 달라진다. Strong Reference (강한 참조) Soft Reference (소프트 참조) Weak Reference (약한 참조) Phantom Reference (팬텀 참조) 아래로 갈수록 GC의 대상이 되는 경우와 실행되는 시점이 앞당겨진다. 1. Strong References (강한 참조) Java의 기본 참조 유형이다. MyClass obj = new MyClass(); obj 변수가 참조를 가지고 있는 한, MyClass 객체는 GC의 대상이 되지 ..
들어가며 Java의 가비지 컬렉터는 다양한 종류가 있지만 공통적으로 다음의 2가지 작업을 수행한다. 힙(Heap) 내의 객체 중 Garbage를 찾아낸다. 찾아낸 Garbage 객체를 반환하여 메모리를 회수한다. 최초의 Java는 Garbage Collection 작업에 사용자가 관여하지 않도록 구현되었었지만, JDK 1.2 부터는 java.lang.ref 패키지를 통하여 GC와 어느 정도 상호작용을 할 수 있게 되었다. Reference에 대해서는 해당 글을 참고하면 된다. 참고 : https://jangjjolkit.tistory.com/31 [Java] 참조 유형 (Strong Reference / Soft Reference / Weak Reference / Phantom Reference) 들어가..
들어가며 스프링을 이용한 Web IDE를 만들어보았다. 웹 화면에서 코드를 치고 실행하면 실행시간, 결과 등을 확인할 수 있다. 필자는 해당 프로젝트를 Docker Container로 실행시켜 문제 발생 시 프로젝트를 종료시켜버리고 Docker에서 자동으로 재시작해주는 방법을 사용했다. 해당 글에서는 Docker 환경에 프로젝트를 배포하는 방법은 생략하고, 코드를 실행하고 실행시간과 결과를 반환해주는 방법에 대해서만 설명하려고 한다. 1. Java Reflection 이란? 해당 프로젝트에서는 Java Reflection을 사용하였다. 때문에 Reflection에 대해서 알아야 한다. 자바의 리플렉션(Reflection)은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 ..
들어가며 지난 게시글에서 URL에 대한 권한을 동적으로 체크하는 방법에 대해서 알아보았다. 이번 게시글에서는 권한에 따른 메뉴를 동적으로 출력하는 방법에 대해서 알아보려고 한다. Spring Security 기본 설정은 이번 게시글에선 생략하려고 한다. 이번 게시글의 모든 내용은 이전 게시글에서 Spring Security Session or JWT 기본 설정 관련 내용을 전부 완료한 이후 진행하는 것으로 가정하려고 한다. Spring Security Session or JWT 기본 설정 관련 내용은 이전 게시글을 참고하면 된다. 링크 : https://jangjjolkit.tistory.com/25 [Spring Security] 2. Spring Security 적용하기 (Session) 들어가며 스..