본문 바로가기

분류 전체보기

(249)
[스프링 프레임워크 핵심 기술] IoC 컨테이너 1 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. 스프링 IoC 컨테이너 IoC (Inversion of Control) 는 의존 관계 주입이라고 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아니라, 주입 받아 사용하는 방법을 말한다. IoC 컨테이너는 스프링에서 쓰이는 여러 객체들을 생성, 관리하는 객체다. 여기서 IoC 컨테이너가 관리하는 객체들을 빈 이라고 한다. IoC 컨테이너 내부적으로, BeanFactory 객체를 통해, 빈 설정 소스로부터 빈 정의를 읽고, 빈을 구성 및 제공한다. 다음과 같이 객체를 의존성 주입을 통해 받고 싶으면, 해당 객체가 IoC 컨테이너에 등록되어 있어야 한다. @Autowired BookReposito..
[디자인 패턴 6편] 구조 패턴, 어댑터(Adapter) 1. 개념 어댑터 패턴은 서로 다른 인터페이스를 가진 두 클래스를 어댑터 클래스로 인터페이스를 통일 시켜 사용하는 방법이다. 1.1. 장점 기존 클라이언트 단의 코드 수정 최소화. 클라이언트는 연동부분을 몰라도, 새로운 코드의 기능을 일관되게 사용가능. 1.2. 단점 어댑터 클래스에서 통일 시켜주는 부분을 하나씩 구현해야 함. 1.3. 활용 상황 기존의 코드에 새로운 코드(써드파티 라이브러리 등)을 연동하여 사용하고 싶은데, 두 코드의 인터페이스가 달라, 이를 하나로 통일하여 사용하고 싶을 때. 아래 예의 경우, 기존의 클라이언트 단 코드에 맞춰 통일함. 2. 구조 3. 코드 3.1. 적용 전/후 모습 먼저 사전에 mp3 포맷만 지원하는 AudioPlayer 가 정의되어있고, 메인에서는 다음과 같이 사용..
[디자인 패턴 5편] 생성 패턴, 추상 팩토리 메쏘드 (Abstract Factory) 1. 개념 추상 팩토리 메쏘드는, 기존 팩토리 메쏘드 방식에서 팩토리의 상위 팩토리를 통해 구체적인 팩토리를 생성한다. 1.1. 장점 팩토리 메쏘드와 동일하다. 다만 팩토리의 종류가 늘었으므로, 커버 범위가 더 넓어졌다고 해야할까. 객체의 생성을 한 군데에서 할 수 있다. 1.2. 단점 팩토리 메쏘드와 동일하다. 1.3. 활용 상황 팩토리 메쏘드를 쓰던 상황에서, 팩토리의 종류를 늘려야 할 때. 2. 구조 3. 코드 먼저 클라이언트는 다음과 같이 사용할 수 있다. // AbstractFactoryPatternDemo.java public class AbstractFactoryPatternDemo { public static void main(String[] args) { // 팩토리의 팩토리인 Facto..
[디자인 패턴 4편] 생성 패턴, 빌더 (Builder) 여기서 말하는 빌더 패턴은 GoF 의 책에서 소개하는 Builder 패턴이 아니라, Effective JAVA 2/E 에서 소개되는 Builder 패턴입니다. 개인적으로 후자가 더 많이 쓰이는 것을 보았어서, Effective JAVA 에서 소개되는 패턴을 기준으로 정리합니다. 1. 개념 빌더 패턴은 생성 인자가 많을 시, 빌더 객체를 통해 구체적인 객체를 생성한다. 1.1. 장점 객체 생성에 필요한 파라미터의 의미를 코드 단에서 명확히 알 수 있다. (가독성이 좋다.) 생성에 필요한 파라미터가 추가될 때 마다, 생성자 오버로딩을 안해도 된다. 1.2. 단점 추가적인 빌더 클래스 구현해야 함. 1.3. 활용 상황 생성자 인자가 많은 경우. 예를 들면 다음 코드보다, WebBrowser browser = ..
[스프링 부트 개념과 활용] 스프링 어드민 인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다. 스프링 REST 클라이언트 해당 내용은 pass. 추후 더 심도깊게 제대로 공부해야 할 듯. 스프링 Actutator 와 Admin 스프링 Actutator 를 이용하면 현재 스프링 부트의 여러 정보들 (프로세스 수, 쓰레드 수, 가용 메모리 등등)을 알 수 있다. jconsole 이나 actutator 브라우저 등으로 정보들을 볼 수 있지만, 가장 이쁘게 표현해주는 것이 바로 spring-boot-admin-starter 다. 이 패키지는 스프링 부트의 자동설정 목록에 없으므로, 직접 버전을 명시해줘야 한다. 여기서는 스프링부트 2.2.4 RELEASE 버전으로 진행한다. 외부 라이브러리다 보니, 스..
[스프링 부트 개념과 활용] 스프링 시큐리티 인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다. Spring-Security 먼저 Spring Security 를 적용하면 어떻게 되는지 살펴보자. 1) dependency 추가 org.springframework.boot spring-boot-starter-security 2) 테스트를 위한 파일 작성 Thymeleaf 를 이용해 간단한 테스트 페이지를 만들어보자. org.springframework.boot spring-boot-starter-thymeleaf hello @Controller public class HomeController { @GetMapping("/hello") public String hello() { return "hel..
[스프링 부트 개념과 활용] 데이터 4. Redis, MongoDB, Neo4j 인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다. Redis 사용법 1) dependency 추가 pom.xml 에 라이브러리를 추가하자. org.springframework.boot spring-boot-starter-data-redis 2) Redis 띄우기 docker 로 Redis 컨테이너를 띄우자. $ docker run -p 6379:6379 --name redis_boot -d redis 컨테이너가 만들어졌으면, 다음 명령어로 접속하자. $ docker exec -i -t redis_boot redis-cli 3) Redis 연동하기 이제 코드 단에서 Redis 에 접근해보자. 바로 실행가능한 코드를 위해 ApplicationRunner ..
[스프링 부트 개념과 활용] 데이터 3. DB 초기화, 마이그레이션 인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다. 데이터베이스 초기화 1) JPA 를 이용한 초기화 Entity 와 JPA Repository 만 설정해놓으면, 테스팅 코드에서는 테이블이 생성되어 잘 돌아가지만, Application 을 구동하면 그렇지 않다. 애초에 테이블 생성하는 코드가 없어서 그렇다. 따라서 Application 구동 시, 테이블을 생성하거나 혹은 수정하거나, 검증하거나 하는 등의 일을 설정해줄 필요가 있는데 application.properties 에서 이를 설정해줄 수 있다. spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=create 위와 같이 설정값을 주면, Appl..