분류 전체보기

Framework/Spring

[SpringBoot] @RedisHash를 이용한 Spring Data Redis Repository 적용기

Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다. String, List, Sets, SortedSets, Hashes 자료 구조를 지원하며 데이터를 디스크에 쓰는 구조가 아닌 메모리에서 데이터를 처리하기 때문에 속도가 빠르다. Spring Boot에서 Redis 사용하기 Spring Boot에서 Redis 인메모리 저장소를 사용하는 것에는 2가지 방법이 있다. RedisTemplate String refreshToken = jwtTokenProvider.createRefreshToken(); ValueOperatio..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (3) - 템플릿과 콜백

이전 포스팅에서 알아본 UserDao와 JdbcContext, StatementStrategy의 구조는 템플릿/콜백 패턴과 관련이 있다. 템플릿/콜백 패턴 바뀌지 않는 일정한 패턴을 갖는 작업 흐름 ( = 템플릿) 이 존재하고 그 중 일부분을 변경해야하는 전략 패턴 구조에 익명 내부 클래스 ( =콜백)을 활용한 방식을 의미한다. 두 가지 용어에 대해서 조금 더 알아보자. 템플릿 (template) : 어떤 목적을 위해 만들어 둔 고정된 로직(틀)이다. 템플릿 메소드 패턴은 바뀌지 않는 템플릿 메소드를 상위 클래스에 두고, 바뀌는 부분을 서브 클래스의 메소드로 오버라이딩하는 구조를 가지고 있다. 콜백 (callback) : 실행되는 것을 목적으로 다른 오브젝트에 전달되는 오브젝트를 의미한다. 메소드가 담긴..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (2) - JdbcContext를 UserDao에서 사용하는 두 가지 방법

이전 포스팅에서, UserDao의 코드에서 예외처리 구문을 추가하고, 디자인 패턴을 이용해 각 테스트 코드에서 쿼리문을 실행하는 PrepareStatement 객체를 생성하는 작업을 최적화하였다. 변하는 부분을 메소드로 추출한 메소드 추출 기법, 추상 메서드를 오버라이딩하는 템플릿 메소드 패턴, 그리고 인터페이스를 생성하여 각각의 PrepareStatement 생성 방법마다 구현 클래스를 만드는 전략 패턴을 고려하였다. 전략 패턴에서 테스트 메소드 안에 직접적으로 구현 클래스가 결정되는 현상을 막기 위해서 컨텍스트 코드를 분리하고, 테스트 메소드는 하나의 클라이언트로 작동하도록 하였다. 즉 DI를 사용해 클라이언트 (UserDao) 와 컨텍스트 (jdbcContextWithStatementStrategy..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (1) - 디자인 패턴과 DI를 이용한 DAO 최적화

앞서, 초난감 DAO 중에서 변경이 자주 일어나는 부분과 고정된 부분에 대해 효과적으로 활용하기 위한 리팩토링을 진행해보았다. 템플릿이란, 이렇게 서로 다른 부분에서 변경이 거의 일어나지 않는 부분을 자유롭게 변경되는 성질을 가진 부분으로 독립시켜 효과적으로 활용할 수 있게 하는 방법이다. UserDao 예외 처리 기존에 작성하였던 UserDao는 예외처리 구문이 빠져있다. JDBC 코드에서는 어떤 상황에도 정상적으로 리소스를 반환하도록 try/catch/finally 구문을 사용할 것을 권장한다. 기존에 작성하였던 deleteAll 함수를 보자. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection();..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 2장 테스트 - 단위 테스트와 테스트 코드 개선

1장 '오브젝트와 의존관계'에서 확장되고 복잡해져가는 애플리케이션을 고려한 확장을 위해 IoC/DI와 같은 기술을 배우고, 실제로 만든 서비스에 적용해보는 실습을 하였다. 2장에서는 스프링에서 가장 중요한 가치 중 하나인 테스트에 대해 배워볼 것이다. 단위 테스트 (Unit Test) DB Connection을 진행하는 코드를 마음대로 변경하는 작업을 수행하면서, 커넥션이 잘 수행되는 지 확인하기 위해 테스트 코드를 사용할 수 있다. 아래는 사용자의 정보를 만들고, 조회하는 테스트 예제이다. public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { Applicat..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (3) - 싱글톤 레지스트리와 의존관계 주입

2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (2) - 제어의 역전 (IoC)과 Applicat..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (2) - 제어의 역전 (IoC)과 ApplicationContext

2023.09.13 - [DEV book] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 이전 포스팅에서 DAO를 리팩토링하는 과정에서 다양한 디자인 패턴, 객체지향 설계 등을 고려해 최적의 DAO 클래스를 만들어보는 실습을 하였다. 이번 포스팅에서는, 여기에서 사용된 제어의 역..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링

스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모델은 IoC/DI, 서비스 추상화, AOP가 있다. 왜 스프링을 사용하는가 ? 단순함 POJO(Plain Old Java Object) 프로그래밍으로 객체지향적인 개발 모델을 구현한다. POJO 프로그래밍이란, 컨벤션이나 프레임워크에 종속되지 않는 단순한 Java 오브젝트를 사용한 프로그래밍을 의미한다. 유연함 많은 Third Party의 지원으로 라이브러리가 많고, 유연성과 확장성이 뛰어나다. 예를 들어서 버전 호환성 문제를 겪거나 아키텍쳐를 대거 수정해야하는 등의 불필요한 트러블..

Server/Architecture

Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (3)

2023.08.27 - [Server/Architecture] - Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) Github Actions + Code Deploy + S3 + NginX 로 Spring Boot 블루/그린 무중단 배포 구현하기 (1) 시스템 아키텍쳐 해당 프로젝트에서 사용한 시스템 아키텍쳐는 다음과 같다. 1. 개발자가 코드를 수정하고, 배포를 원하는 브랜치로 Github에 Push한다. 2. Github Actions에서 정해진 워크플로우에 따 mingyum119.tistory.com 2023.08.27 - [Server/Architecture] - Github Actions + Code De..

MINGYUM
'분류 전체보기' 카테고리의 글 목록 (12 Page)