목록Back/Spring (26)
호비시의 끄적끄적
Singleton Pattern 싱글톤 패턴이란 디자인 패턴중 하나로, 애플리케이션이 시작될 때 객채의 인스턴스가 오직 1개만 생성되는 패턴을 말한다. 사용하는 이유 메모리 낭비 방지 하나의 인스턴스만 고정 메모리 영역에 생성하기 때문에 해당 객체에 접근할 때 메모리 낭비를 방지할 수 있다. 속도 빠름 이미 생성된 인스턴스를 활용하기에 속도 측면에서 이점이 있다. 데이터 공유하기 유리 전역으로 사용하는 인스턴스이기 때문에 다른 여러 클래스에서 데이터를 공유하기 쉽다. 주의할 점 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유할 경우 다른 클래스의 인스턴스들 간에 결합도가 높아진다. 따라서 수정이 어려워지고, 테스트하기가 어렵다. 또한 멀티스레드 환경에서 문제점이 많다. 여러개의 인스턴스가 생..
Static 선언 class StaticSample{ // non - static 필드, 메소드 int n; void g() { ... } // static 필드, 메소드 static int m; static void f() { ... } } 특성 static 멤버는 클래스당 하나만 생성되는 멤버로서, 동일한 클래스의 모든 객체들이 공유한다. non-static 멤버는 객체가 생길 때 함께 생성되고, 객체가 사라지면 함께 소멸된다. 그러나 static 멤버는 프로그램을 시작할 때나 클래스 로딩 시에 생성된다. 그러므로 객체를 생성하기 전에 staic 멤버를 사용할 수 있다. 또한 생성된 객체가 소멸 후에도 static 멤버는 여전히 살아 있으며, 프로그램이 종료할 때 함께 소멸된다. static meth..
Spring Security 인증과 인가 인증 : 사용자가 본인이 맞는지 확인하는 절차 인가 : 인증된 사용자가 요청한 자원에 접근권한 여부를 판단하는 절차 Security 인증 방식 credential : 아이디 + 비밀번호를 이용 principal : 아이디 Security 의 주요 모듈 SecurityContext : Authentication를 가지고 있고 SecurityContextHolder에 담아 보관한다. Security 인증 과정 클라이언트가 아이디 비밀번호로 로그인 요청 AuthenticationFilter에서 UsernamePasswordAuthenticationToken을 생성하여 AuthenticationManager에 전달 AuthenticationManager는 Authenti..
Stream? Stream 이란 JDK 8 부터 추가된 JAVA에서 사용 가능한 함수형 인터페이스이다. 이를 통해 JAVA를 함수형으로 프로그래밍 할 수 있게 해준다. Stream API는 자주 사용하는 함수들을 정의해 두었기 때문에 이를 잘 이용한다면, 가독성 좋은 코드를 작성할 수 있다. 특징 원본의 데이터를 변경하지 않는다. 일회용 내부 반복 Stream API의 3가지 단계 함수형 프로그래밍을 적용하기 위해 3가지 단계가 필요하다. 1. 생성 함수형 프로그래밍에서 말하는 INPUT x 를 만들어 주는 과정이다. 배열, 컬랙션 등등 다양한 자료형들을 stream으로 만들 수 있고, 이를 input x 라 볼 수 있다. 2. 가공 함수형 프로그래밍에서 말하는 FUNCTION F 를 만들어 주는 과정이..
Lombok 이란 Lombok 은 자바개발자에게 매우 중요한 프레임워크이다. 자바에서 자주 만들어 사용하는 getter, setter, 생성자 등 을 annotation 하나로 자동으로 만들어주는 편리한 친구다. 하지만 hibernate Entity를 사용할 때에는 주의할 점이 있다. @...Constructor Lombok은 Annotation 하나만으로 클래스에 필수적인 생성자를 자동으로 생성해준다. public class User1 { private String name; private String team; private int age public User1(String name, String team, int age){ this.name = name; this.team = team; this.a..
POJO 란? Plain Old Java Object 의 약자로 말 그대로 해석하자면, 오래된 방식의 자바 객체라는 뜻이다. POJO는 Java 가 무거운 프레임 워크를 사용하게 됨에 따라 해당 프레임 워크에 종속된 무거운 객체를 만들게 된 것에 반발하여 만든 개념이다. ORM이 나왔을 때, ORM 기술을 사용하고 싶다면 Hibernate와 같은 ORM 프레임워크를 사용해야한다. 자바 객체가 ORM 기술을 사용하기 위해 Hibernate에 의존하는 순간 POJO라고 할 수 없다. 특정 기술에 종속, 의존하기 때문이다. 왜 POJO를 지향해야 하는가? Java의 특징은 객체지향 프로그램이다. 객체지향 프로그래밍은 특정 기술에 종속, 의존하지 않아야 한다. 의존하게 된다면 확장성이 떨어지게 되고, 유지보수가..
Spring WebFlux란? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈이다. WebFlux는 클라이언트, 서버에서 Reactive 한 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며, non-blocking reactive stream을 지원한다. Reactive Programming 이란? 리엑티브 프로그래밍은 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임이다. 프로그래밍 언어로 정적이거나 동적인 데이터 흐름을 쉽게 표현할 수 있어야 하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다. Rx 프로그래밍의 핵심은 3가지 Observable, Observer, Schedule..
JVM ? Java Virtural Machine의 줄임말. 자바를 실행하기 위한 가상기계 Java의 특징으로는 OS에 종속되지 않는다는 점이 있는데, 이를 가능하게 하는 것이 JVM이다. JVM 구성요소 클래스 로더(Class Loader) 실행 엔진(Execution Engine) 인터프리터(Interpreter) JIT 컴파일러(Just In Time) 가비지 콜렉터(Garbage Collector) 런타임 데이터 영역(Runtime Data Area) 클래스 로더 JVM 내로 클래스파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈 런타임 시 동적으로 클래스를 로드, jar 파일 내에 저장된 클래스들을 JVM 위에 탑재한다. 실행 엔진 클래스를 실행시키는 역할 클래스 로더가 JVM내의 런..