본문 바로가기

실습/리눅스 서버 + 스프링 부트54

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.
Spring Security 로그인을 처리할 때 고려해야 할 점은, 단순히 사용자로부터 아이디와 비밀번호를 입력받아 그 값을 DB 내 사용자 테이블의 데이터와의 일치여부를 판단하는 인증 기능 하나만으로 끝이나지 않는다. 그렇게 로그인이 되었다면 독립적인 HTML 파일로 존재하는 모든 웹 페이지에서 로그인 정보를 유지할 수 있도록 세션을 유지해야 하고, 필요하다면 인가 기능을 통해 해당 사용자에게 보여줄 페이지와, 보여줘서는 안 될 페이지를 나눠야 한다. 이러한 작업은 물론 직접 코딩을 통해 구현할 수 있겠지만, 매우 귀찮은 작업이다. 그런데 Spring Security는 이러한 귀찮은 작업을 쉽게 구현할 수 있도록 도와준다. Spring Security Spring Security는 스프링의 파위 프레임워크로, 어플리케이션의 보안을.. 2021. 11. 7.
HAProxy를 활용한 IFrame 활성화 프로젝트 중 웹 기반 오픈소스의 일부를 IFrame이나 Embed를 활용하여 개발 중인 포탈에 탑재해야 할 요구사항이 생겼다. 이에 당연히 IFrame에 src만 넣으면 해결이 되는 문제인 줄 알고 쉽다고 생각했으나, 실제로는 그렇게 녹록치 않았다. 대부분의 웹사이트들은 CSRF, 클릭 하이재킹 등의 공격에 대비하기 위하여 웹 사이트가 IFrame에 사용되지 못하도록 막아놓고 있다. 이 정도는 이미 알고있는 내용이었으나, 문제는 로컬에서 운영하는 웹 기반 오픈소스들도 마찬가지일 줄은 몰랐다. 물론 이는 소스코드 및 설정 파일로 막혀있기 떄문에, 소스코드가 공개된 오픈소스의 경우 코드 및 설정 파일의 수정을 통해 IFrame을 활성화할 수 있었다. 보안 및 설정 측면에 무지했기 때문에 서로다른 오픈소스 다.. 2021. 9. 26.
[스프링부트] Thymeleaf Thymeleaf 타임리프란, 자바 기반의 템플릿 엔진으로 MVC 패턴에 적합하게 설계된 템플릿 엔진이다. 타임리프는 View Template이라고도 불리는데, 이는 컨트롤러가 전달하는 데이터를 이용하여 동적으로 화면을 구성할 수 있게 해준다. JSP vs Thymeleaf jsp를 사용한 웹 어플리케이션 제작시, 자바 프로젝트 파일은 필연적으로 war 파일로 만들어진다. 그리고 war 파일은 jar 파일에 비해, jsp의 해석과 관련된 모든 패키지들이 포함되며 무거운 구조가 되었다. 타임리프는 HTML을 기반으로 하기에 굳이 war로 말 필요 없이 jar 파일로 말아서 사용할 수 있고, 덕분에 war이라는 무거운 구조에서 벗어날 수 있게 되었다. 활용법 스프링 부트을 기준으로 사용법은 web.xml에 .. 2021. 9. 26.
09. MariaDB CRUD_UI 마지막으로 연습해볼 것은 마리아디비를 활용한 UI 기반 CRUD이다. 원래는 Restful을 공부할 때 했던 것처럼 MongoDB, Redis 등도 함께 해볼 생각이었으나, 어차피 복사-붙여넣기 후 이름 바꾸기 작업만 할 것이 뻔한데 공부가 될 것 같지도 않고, 굳이 해야할 이유도 느끼지 못하여 마리아디비로만 연습할 것이다. CRUD에는 이전에 만들었던 Rest API 에 타임리프와 Ajax를 함께 사용하여 구현할 생각이다. *타임리프 vs jsp jsp를 활용한 View를 만들 경우, 프로젝트 파일은 필연적으로 jar가 아닌 war 파일로 만들어지게 된다. 하지만 war 파일은 jsp와 관련된 모든 패키지를 전부 포함하기에 복잡하고 무거운 구조를 가진다고 한다. 이는 가볍고 독립적인 실행을 목표로 하는.. 2021. 9. 18.
08. HAProxy HAProxy란? 프록시를 기반의 로드 밸런서 소프트웨어이다. 한 서버가 있다고 하자. 사용자들이 서버에 접속할 때 그 수가 적으면 서버는 무리없이 작동할 수 있다. 하지만 사용자들이 많아진다면? 당연히 서버에 무리가 갈 수 밖에 없고 이는 OOM으로 이어져 결국 서버가 닫히고 만다. 로드 밸런싱은 이러한 문제를 해결하기 위한 방법이다. 많은 사용자의 접속을 여러 서버에 분산하는 Scale-out을 위한 방법이다. 갑작스러운 과도한 트래픽으로 인한 장애를 해결할 수 있고, 한 서버에 장애가 발생해도 다른 서버에서 서비스를 제공함으로써 고가용성을 제공할 수 있다. HAProxy는 이러한 방법 중, 프록시 기반으로 한 로드 밸런서 소프트웨어이다. 이번 포스팅에서는 HAProxy의 설치법과 작동법, 그리고 간.. 2021. 5. 30.
07. Kafka_Pub&Con Kafka란 이전 포스트에서 작성한 RabbitMQ와 마찬가지로 메시지를 보내는 시스템이다. Kafka는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈소스 메시지 브로커로, 분삭 환경에 특화되어 있으며 빠른 속도를 자랑한다. Kafka는 다음 요소로 구성되어 있다. Broker : Kafka 서버 Topic : 메시지가 생산되고 소비되는 주체 Partition : 토픽 내에서 메시지가 분산되어 저장되는 단위 Zookeeper : 여러 Broker의 분산 메시지 큐의 정보 관리 자세한 내용은 다음 포스트에 작성해놓았다. 해당 포스팅에서 해볼 것은 RabbitMQ와 마찬가지로 Kafka를 사용한 생성자, 구독자 만들기이다. RabbitMQ에서 했던 것처럼 별도로 웹 UI에 접속해 설정해야할 부분은 없다. 그.. 2021. 5. 30.
06. RabbitMQ_Con&Pro 동기식과 비동기식? 메일을 보내는 상황을 예시로 들어보자. 사용자는 메일 전송을 위해 메일을 작성하고, 전송 버튼을 누르게 된다. 그리고 메일을 보내는 시간이 5초라면? 동기식은 그 메일이 전송 완료되는 5초동안 아무런 작업도 할 수 없다. 그에 반해 비동기식은 메일의 전송 버튼을 누르고 메일 전송이 완료되는 5초동안 다른 작업을 할 수 있다. 즉, 동기식은 요청과 그 결과가 동시에 일어나는 방식으로, 요청한 상황에서 결과가 주어져야 하기 때문에 다른 상황으로 바꿀 수 없다. 그에 반해 비동기식은 동시에 일어나지 않는 방식이라, 요청한 상황과 다른 상황에서 결과를 받을 수 있게된다. RabbitMQ 메시지 브로커란 송신자(Publisher)로부터 메시지를 전달받아 수신자(Subscriber)에게 전달하는.. 2021. 5. 30.