실습/리눅스 서버 + 스프링 부트61 Spring WebFlux Filter 처음으로 Spring Webflux를 이용한 프로젝트에 투입되었다. 해당 프로젝트의 요구사항 중에는 Request의 특정 Header에 URL이 들어오는데, 해당 URL에 접속하여 그 안의 정보를 파싱해서 DB에 유지해야 하는 요구사항이 존재했다. 이 요구사항을 식별했을 때 "이 정도면 Filter를 사용하면 쉽게 해결되겠는데?" 라는 생각이 들었고, 평소와 다를 것 없이 Filter를 작성하려고 했으나 실패했다. Spring Web과 달리 Spring Webflux는 별도의 방식으로 Filter를 제공하기 때문이았다. Spring Webflux에서 Filter를 사용하기 위해서는 org.springframework.web.server.WebFilter를 상속받은 클래스를 생성해야 한다. 해당 클래스는 .. 2022. 7. 25. Spring Security rememberMe (자동 로그인) 웹 사이트들을 보면 종종 로그인 정보 저장, 내 정보 저장 등 사용자의 정보를 기억하고 추후 웹 사이트 재방문 시 별도의 로그인 과정 없이 인증이 수행되도록 하는 기능이 존재한다. 문득 Spring의 인증/인가를 담당하는 Spring Security도 위의 기능을 제공하는지 궁금해졌고, 찾아본 결과 rememberMe라는 이름으로 해당 기능을 간편하게 구현할 수 있도록 제공한다는 것을 알아냈다. 그래서 해당 기능을 공부해보았고, 추후에 있을 프로젝트에서 언제든지 해당 기능을 쉽게 구현할 수 있도록 코드와 사용법을 정리해놓으려고 한다. 메인 주제가 Spring Security이기에 이전에 작성한 Spring Security 포스팅에서 이어서 작성한다. 가장 먼저 해야할 일은 HTML에 자동 로그인을 위한 .. 2022. 7. 25. Ehcache 아래 포스팅에서 이어진다. https://123okk2.tistory.com/326 Spring Boot 캐시 사용 개발이 완료된 프로그램이 있다. 해당 프로그램은 필요 이상의 인프라 (DB, RabbitMQ 등)를 요구했고, 이 점으로 인해 설치가 어렵고 프로그램의 복잡도가 높았다. 그래서 해당 프로그램의 인프라 123okk2.tistory.com 기본적으로 아무런 선언 없이 캐시를 사용하면 ConcurrentMapCacheManager가 빈으로 등록되어 사용된다. @Autowired CacheManager cacheManager; public String getCacheType() { return cacheManager.toString(); } 프로젝트를 만들어 위의 함수를 만든 다음 테스트로 함수를.. 2022. 4. 2. Redis In Java_메시지 큐 https://123okk2.tistory.com/344 Redis In Java_자료구조 Redis 레디스는 인메모리 기반의 키-값 데이터 저장소이다. 인메모리의 특성상 아주 빠른 속도를 가지고 있고, 이에 따라 자주 사용하는 데이터 정도를 저장하는 간단한 데이터베이스 정도로 생 123okk2.tistory.com 윗글에서 이어서 포스팅을 진행하자. 남이 만든 프로그램을 인수인계 받는 것은 참 어려운 일이다. 구조를 하나하나 다 뜯어보고, 코드 내부도 전부 읽어봐야 하니까 말이다. 아주 힘든 일이지만 그래도 그만큼 얻는 건 많은 것 같다. 만약 이번에 해당 프로그램을 인수인계 받지 않았다면 Redis를 메시지 큐로도 활용할 수 있다는 사실을 알지 못했을 테니까. *함께 설치되는 인프라 중에 Rabbit.. 2022. 3. 20. Redis In Java_자료구조 Redis레디스는 인메모리 기반의 키-값 데이터 저장소이다.인메모리의 특성상 아주 빠른 속도를 가지고 있고, 이에 따라 자주 사용하는 데이터 정도를 저장하는 간단한 데이터베이스 정도로 생각을 하고 있었다. 하지만 실무에서 본 Redis는 그 쓰임새가 생각보다 많았다.기본적으로 키-값 데이터 저장소라는 이야기를 듣고 아, 그냥 캐시에다 Map을 저장하는 거구나 라고 생각을 했었다.그리고 이 Map은 내 기준에서는 키와 값 두 개의 스트링으로 이루어진 데이터일 뿐이었다.하지만 의외로 Value에는 다양한 자료구조가 탑재될 수 있었다. 물론 여기까지는 어느정도 Map을 생각했을 때 당연하다고 생각되는 부분이었지만,보다 신기했던 기능은 Redis가 RabbitMQ, Kafka와 같은 메시지 큐로써의 기능도 탑재.. 2022. 3. 20. Spring Cloud Config 타인이 만든 프로그램을 유지보수 및 업그레이드 하면서 궁금한 점이 생겼다. 그것은 바로 Config-Server 라는 이름의 프로그램이었다. 처음에는 이 또한 프로그램의 일부로, 어떤 로직을 수행하는 것인줄 알았다. 하지만 막상 코드를 열어보니 안에는 아무 내용이 없었고, 그저 설정 파일과 디폴트로 만들어지는 메인 클래스만이 존재할 뿐이었다. 그래서 이게 뭘까... 도대체 왜 만든 걸까...? 하고 찾아보다 Spring-Cloud-Config 라는 개념을 처음으로 알았고, 앞으로 유지보수를 위해서도 알아야 할 내용이라는 생각이 들어 공부를 시작했다. Spring Cloud Config 어플리케이션에는 당연히 application.properties, application.yml, bootstrap.pro.. 2022. 3. 13. Spring Boot 캐시 사용 개발이 완료된 프로그램이 있다. 해당 프로그램은 필요 이상의 인프라 (DB, RabbitMQ 등)를 요구했고, 이 점으로 인해 설치가 어렵고 프로그램의 복잡도가 높았다. 그래서 해당 프로그램의 인프라 의존도를 낮추기 위한 수정 작업을 수행했다. 그 중 하나는 Redis에 저장하는 정보를 캐시에 저장하여 Redis에 대한 의존성을 없애는 작업이었다. 아래는 해당 작업을 위해 공부한 내용이다. Cache 캐시는 데이터의 값을 복사해놓는 임시 저장소이다. 주 메모리에 비해 데이터에 접근하는 시간이 짧기 때문에, 자주 사용하는 정보를 임시로 저장해놓고 사용한다. 스프링에서 Cache는 아래의 어노테이션을 사용하면 쉽게 사용할 수 있다. @Cacheable@CachePut@CacheEvict 데이터 준비.. 2022. 3. 11. httpd (아파치 웹 서버) 지금까지 테스트용 웹 페이지가 필요하면, 당연히 이클립스로 프로젝트를 만든 후 컨트롤러를 만들어 HTML 페이지를 띄웠다. 그런데 실무 중 테스트용 웹 페이지가 필요한 일이 생겨 부랴부랴 프로젝트를 생성하는데, 옆에서 사수분께서 리눅스에 httpd를 사용해 테스트용 웹 페이지를 띄우는 모습을 보았다. 그래서 오, 이런 게 있었구나 했고 알아두면 두고두고 활용할 일이 많을 수 있을 것 같아 공부를 시작한다. httpd 아파치라고도 불리는 httpd는 아파치의 HTTP 서버 프로그램이다. Cent OS를 기준으로 아래의 명령어로 설치할 수 있다. yum -y install httpd 설정 httpd의 설정 파일은 /etc/httpd/conf/httpd.conf 에 존재한다. *물론 이외에도 여러 설정 파일들.. 2022. 3. 6. Filter, Interceptor, AOP Dispatcher Servlet 필터, 인터셉터, aop를 알기 전에 먼저 디스패처 서블릿 (Dispatcher Servlet)을 알아야 할 것 같다. 디스패처 서블릿이란 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 수신하여 해당 프로토콜이 호출하는 컨트롤러에 위임해주는 프론트 컨트롤러이다. 즉 사용자가 HTTP 기반 접근을 수행할 경우 가장 먼저 해당 프로토콜을 수신하는 역할인데, 필터와 인터셉터는 해당 디스패처 서블릿의 앞 뒤에서 작동한다. 그리고 AOP는 컨트롤러의 바로 앞단에서 수행된다. 전체적인 구조도는 아래의 링크에서 확인 가능하다. 그림으로 정리를 너무 잘해놓으셨다. https://goddaehee.tistory.com/154 [Spring] Filter, Interceptor, A.. 2022. 2. 1. ntp를 이용한 타임서버 구축 외부망에 연결된 장비들은 얼마든지 타임서버와의 동기화를 통해 시간을 맞춰줄 수 있다. 하지만 외부망과 연결되지 않은 내부망은 그럴 수가 없고, 자체적으로 시간을 설정할 수 밖에 없는데 이렇게 맞춘 시간은 시간이 지나며 조금씩 틀어지게 된다. 그래서 장비들간 시간을 동기화하기 위하여 자체 타임서버를 구축하는 작업을 연습해볼 생각이다. 일단 사용되는 장비는 총 두 개이고, 모두 CensOS 7.8이다. ntp 타임서버 구축에는 ntp를 사용할 예정이다. 여기서 ntp란 network time protocol, 즉 네트워크 시간 프로토콜의 약자로 네트워크로 연결된 컴퓨터들끼리 클록 시간을 동기화하는 데 사용되는 프로토콜이다. 일단 타임서버가 될 서버와, 해당 서버의 시간을 따를 서버에 모두 ntp를 설치해주자.. 2022. 1. 22. Scheduler Scheduler 프로그래밍을 하다보면 주기적으로 실행되어야 하는 코드들이 있다. 스케줄러는 이러한 때에 사용되는 코드로, 특정 시간 혹은 특정 간격을 바탕으로 주기적으로 실행되는 코드이다. 스프링 부트에서 Scheduler를 시용하기 위해서는 먼저 SpringBootApplication에 @EnableScheduling 어노테이션을 추가한다. package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableSch.. 2022. 1. 15. JPA Java Persistence API (JPA) DB의 테이블을 프로그램에서 사용하기 위해 자바에서는 DTO라는 클래스를 DB와 같이 만들어 사용한다. 그렇다면 이 클래스는 DB 테이블과 완전히 같을까? 당연히 그럴 리가 없다. 예를 들어보자. 클래스는 부모 클래스를 상속받아 그 변수와 함수를 물려받을 수 있다. 하지만 테이블은? 당연히 상속이라는 개념이 없다. 또한 테이블에는 다른 테이블을 참조하는 외래키가 존재한다. 하지만 객체는? 당연히 외래키를 직접적으로 사용할 수 없기에 해당 객체를 직접 멤버변수르 가져야 하는 불편함이 생긴다. 이는 객체와 DB가 지향하는 목적이 다르기에 어쩔 수 없이 발생하는 표현 방법의 차이이다. 이러한 불일치를 패러다임 불일치라 부른다. 그리고 이 패러다임 불일치를 해결해.. 2021. 11. 27. 이전 1 2 3 4 5 6 다음