일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인 패턴
- Service Locator 패턴
- 플라이웨이트
- restTemplate
- db
- SQL 삽입 공격
- Service Locator
- Firebase
- multi module
- Connection Pool
- 데이터베이스
- deleteById
- springboot
- FCM
- Effetive Java
- @MockBean
- NotBlank
- @ControllerAdvice
- 이펙티브 자바
- Item04
- NotEmpty
- java
- 트랜잭션
- JPA
- Web
- @SpyBean
- @Valid
- Proxy Patter
- Effective Java
- Spring Boot
- Today
- Total
목록분류 전체보기 (64)
NoTimeForDawdling
플라이웨이트 패턴이란? 플라이웨이트 패턴은 구조 패턴 중 하나로, 많은 수의 객체를 생성해야 할 때 사용하는 패턴입니다. 플라이웨이트 패턴을 사용하면 객체의 내부에서 참조하는 객체를 직접 만드는 것이 아니라, 없다면 만들고, 만들어져 있다면 객체를 공유하는 식으로 객체를 구성합니다. 보통 팩토리 메서드 패턴을 사용해 객체(FlyweightFlyweight 객체)를 생성하며, 이때 생성하는 객체가 내부적으로 참조하는 객체에 대해, 기존에 있는 객체를 참조만 하는 식으로 객체를 구성하기 때문에 객체의 할당에 사용되는 메모리를 줄일 수 있을 뿐 아니라, 객체를 생성하는 시간도 들지 않게 됩니다. 플라이웨이트 패턴을 언제 적용하면 좋을까? 플라이웨이트 패턴은 다음과 같은 상황이 많을수록 적용하기에 적합합니다. ..
정적 메서드와 정적 필드만을 담은 클래스를 쓸 때가 있습니다. 예를들어 java.lang.Math와 java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓거나, java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수도 있습니다. 정적 멤버만 담은 유틸리티 클래스의 인스턴스화? 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아닙니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줍니다. public class RandomNumberGenerateUtil { private static final Random random = new Random(); private stati..
Service Locator 패턴이란? Service Locator는 의존성을 해결할 객체들을 보관하는 일종의 저장소입니다. 외부에서 객체에게 의존성을 전달하는 주입과 달리 Service Locator에게 직접 의존성을 해결해줄 것을 요청합니다. 영화 예매 코드 예제 ServiceLocator.class public class ServiceLocator{ private static ServiceLocator saleInstance = new ServiceLocator(); private DiscountPolicy discountPolicy; public static DiscountPolicy discountPolicy() { //인스턴스를 반환하기 위한 메서드 return saleInstance.disc..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/wvYRX/btq03uTQVzb/7tOdPZiid0LIb6nR0J7NGK/img.png)
Spring Boot에서 의존성 주입 방법으로 3가지가 있습니다. 지금부터 스프링의 의존성 주입 방법에 대해서 알아보겠습니다. 1. 생성자 주입(Constructor Injection) 생성자 주입 방법은 Spring framework reference에서 가장 권장하는 방법입니다. @Service public class SampleService { private final SampleRepository sampleRepository; @Autowired public SampleService(SampleRepository sampleRepository) { this.sampleRepository = sampleRepository; } } 생성자에 @Autowired 애너테이션을 붙여 의존성을 주입받을 수..
SQL Injection이란 SQL Injection은 이용자의 입력값이 SQL 구문의 일부로 사용될 경우, 해커에 의해 조작된 SQL 구문이 데이터베이스에 그대로 전달되어 비정상적인 DB 명령을 실행시키는 공격 기법입니다. 웹 애플리케이션이 데이터베이스와 연동되는 모델에서 발생 가능합니다. SQL Injection이 발생 조건 SQL Injection은 데이터베이스 명령어인 SQL 쿼리문에 기반하여 공격을 수행합니다. 공격에 이용되는 쿼리문은 문법적으로 정상적인 SQL 구문이지만, 실행되지 말아야 할 쿼리문이 실행되어 공격에 이용됩니다. SQL Injection은 다음과 같은 조건을 충족하면 공격이 가능합니다. 웹 애플리케이션이 DB와 연동하고 있다. 외부 입력값이 DB 쿼리문으로 사용된다. 위 두 조..
싱글턴 패턴이란? 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하여, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴입니다. Singleton class는 하나의 인스턴스만을 생성하는 책임이 있으며 getInstance() 같은 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행합니다. 싱글턴 패턴의 필요성 싱글턴 패턴은 오직 하나의 인스턴스만 생성하기 때문에 메모리 낭비를 방지할 수 있습니다. 그리고 여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있으므로, 요청이 많은 곳에서 사용하면 효율을 높일 수 있습니다. 싱글턴 만드는 방법 (Java 8) 1. public static final 방식 public class Singleton { pub..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/t2SuV/btqZ0squ1zN/hwtssf0op6kHnRggxsgS5K/img.png)
SQL(관계형 데이터베이스) SQL은 구조화된 쿼리 언어(Structured Query Language)의 약자로 데이터베이스 자체를 나타내는 것이 아니라, 특정 유형의 데이터베이스와 상호 작용하는데 사용하는 쿼리 언어를 말합니다. 즉, SQL은 관계형 DB가 아닌 관계형 DB를 설계하는데 사용되는 언어입니다. SQL의 두 가지 주요 특징 데이터는 엄격한 데이터 스키마(structure)를 따라 데이터베이스 테이블에 저장됩니다. 데이터는 관계를 통해서 연결된 여러 개의 테이블에 분산됩니다. 1. 엄격한 스키마 데이터는 테이블(table)에 레코드(record)로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)가 있습니다. 구조는 필드의 이름과 데이터 유형으로 정의됩니다. (관계형 데이터..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ckLvDV/btqZP3Le1rt/wqFnRjr4G9g31Rs4Gm1PR1/img.png)
데이터베이스 데이터 캐싱 캐시란 한 번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 도와주는 공간입니다. 데이터베이스 데이터 캐싱은 읽기(Read) 성능을 개선시키기 위해 DB와 같은 영구 저장소로부터 로드된 데이터를 빠르게 읽어올 수 있는 Memory 영역에 저장해두는 방식입니다. Cache를 사용할 때 동일한 요청에 대하여 빠른 응답이 가능하며, 최초 요청에 대한 응답을 전송하는 시점에 서버는 DB에서 읽어온 값을 Cache에 저장해 둡니다. 만약, 해당 요청이 다시 한번 들어온다면 서버는 DB가 아닌 Cache에서 동일한 요청 값을 리턴할 수 있을 것이며, DB에서 값을 조회하지 않기 때문에 DB resouce(자원)을 다른 요청에 할당할 수 있게 됩니다..