목록Back (34)
호비시의 끄적끄적

어댑터 패턴 Adapter pattern 어댑터 패턴이란 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 코드의 재활용성을 증가시키고 기존 코드를 수정하지 않는다. 어댑터 패턴의 핵심은 호환성이다. 언제 사용할까 외부 구성 요소를 기존 시스템에 재사용하고 싶지만 호환되지 않는 경우 애플리케이션이 클라이언트가 기대하는 인터페이스와 호환되지 않는 경우 원본 코드를 수정하지 않고 애플리케이션에서 레거시 코드를 재사용하려는 경우 예제 설문 조사 대상자로부터 받은 설문 응답을 홈 페이지에 표시하는 온라인 포털 사이트를 상상해보자. 설문 조사 Response는 포털 사이트가 응답을 얻기 위해 협력하..
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 를 만들어 주는 과정이..

Session 을 통한 로그인 관리 세션을 통해 사용자 인증 및 유지 로그인 관리를 할 때는 다음과 같은 절차를 거친다. 사용자가 로그인 할 때 ID 와 PW를 보낸다. DB에서 사용자의 계정 정보를 조회하여 일치하는지 확인한다. 일치한다면, 서버에 세션을 생성하고 생성된 세션 ID를 세션 저장소에 저장한다. 사용자에게 응답과 함께 세션ID를 보낸다. 위와 같은 과정을 통해 세션에 사용자가 로그인 한 상태인지를 저장한다. 인증한 이후에는 사용자가 요청을 보낼 때 세션 ID를 같이 보내고, 서버에서는 받은 세션 ID가 존재하는지, 유효한지를 확인한다. 옳다고 판단한 후엔 사용자가 보낸 요청을 처리한다. 장점 중요한 정보가 서버에 전부 있기 때문에 보안적으로 우수하다. 서버단에서 세션에 대한 통제가 가능하다..
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..

Docker란? 도커는 2014년 6월 Docker 1.0 발표한 기술로 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 백엔드 프로그램,데이터베이스, 메시지큐 등을 컨테이너로 추상화가 가능하다. Docker 가 없었을 때를 생각해보자 우리가 열심히 만든 서비스를 배포한다고 가정하자. 그럼 서비스를 제공하기 위한 서버가 필요하다.서버에서 작성한 코드를 실행하기 위해서는 다양한 작업을 해줘야 한다. os 설치, 실행환경 세팅(java, python 등), 어플리케이션 코드(or 빌드) 다운로드, 필요한 라이브러리 다운로드 등등 서버에 다양한 사전작업이 필요하다. 이런 우여곡절 끝에 서버에 환경설정을 끝내고 배포했다고 가정하자. 하지만 서비스를 운영하다 보면 다양한 요청이 들어올 수 있다. 예를 들어 ubunt..