본문 바로가기

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

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.
05. RestfulAPI_Redis CRUD 다음으로 만들어 볼 것은 Redis를 활용한 RestfulAPI CRUD 이다. 인메모리 데이터베이스란 컴퓨터의 주 메모리에 데이터를 저장하는 DB를 의미한다. 보조기억 장치가 아닌 주 메모리에 데이터를 저장하기 때문에 데이터 처리가 다른 DB에 비해 월등히 빠르다는 장점을 갖고 있다. Redis란 키-값 기반의 인메모리 데이터 저장소이다. 키-값 기반이라는 점에서 Java의 Map 자료구조와 비슷하게 데이터가 저장 및 관리된다. 인메모리 데이터베이스의 특성상 빠른 입출력 속도를 가지며, 비단 데이터의 저장 뿐 아니라 메시지 큐로써 동작할 수도 있다. 일단 외부에서 Redis에 진입할 수 있도록 설정하자. 설정은 /etc/redis/redis.conf 파일을 다음과 같이 수정하면 된다. 이후 system.. 2021. 5. 23.
04. RestfulAPI_MongoDB 이번에 만들 것은 MongoDB를 활용한 CRUD RestfulAPI이다. 몽고DB는 NoSQL DB의 한 종류로, humongous의 줄임말이다. 직역하면 매우 큰 DB 라는 뜻이다. 몽고DB는 NoSQL 중 Document DB 타입의 데이터베이스로, 그냥 간단하게 설명하면 데이터가 JSON/XML 같은 형태로 저장되는 DB라는 의미이다. 예시를 보자면 아래와 같이 저장된다고 볼 수 있다. 몽고디비의 데이터는 Document라고 부르고, 이 Document의 집합 즉 테이블을 Collection이라고 부른다. Collection의 집합은 DB로, 이 부분은 RDB와 같다. NoSQL 답게 몽고디비는 RDB보다 훨씬 빠르지만, 일관성을 유지하기에는 힘이 들 수 있다. 그러면 이제 개발을 시작할 것인데,.. 2021. 5. 23.
03. RestfulAPI_MariaDB 지난 포스팅에서 설치 및 준비가 끝이났다. 그러니 이번에는 스프링 부트를 사용해 간단한 RestfulAPI를 제작해보자. 가장 먼저 할 것은 MariaDB에 대한 CRUD Restful API 개발이다. 마리아 디비는 오픈 소스의 RDBMS이다. MySQL이 오라클에 인수된 후 MySQL의 핵심 개발자들이 제작한 오픈소스로, MySQL과 굉장히 유사하며, 오픈소스이기 때문에 무료인 덕에 상업용으로도 많이 사용되는 DB이다. 구현은 간단하게 아이디-패스워드로 구성된 테이블을 사용할 것이다. JPA를 사용한 구현을 진행할 것이기 때문에 다음의 설정을 application.properties에 추가해주었다. 그 외의 다양한 설정은 다음 포스팅 참고 끝이났으면 일단 마리아디비에 linuxTest 이름의 데이터베.. 2021. 5. 19.
02. 윈도우 세팅 및 프로젝트 생성 리눅스의 세팅이 전부 완료되었으니, 이제 윈도우에서의 세팅을 할 차례이다. 물론 DB 같은 건 리눅스에 전부 만들어놓은 상태이니, 이클립스에 Spring Boot와 몇 가지 사용 예정인 툴들만 설치해두자. STS를 별도로 설치하지 않고, 이클립스 내부의 마켓플레이스를 사용해 STS를 사용했다. 즉, 이클립스만 사용할 예정이다. 1. 스프링 부트 다운 먼저 스프링 부트를 다운받자. 이클립스를 켜서 Help => Eclipse Marketplace 로 들어가자. 그리고 STS 를 검색해서 Spring Tools 4 를 다운받자. 알아서 Confirm이나 Next, Finish만 눌러주다보면 이클립스가 재시작되고 스프링 부트 설치가 끝이난다. 스프링 부트란? 스프링에서 한 단계 진화한 형태이다. 스프링의 최대.. 2021. 5. 19.
01. 리눅스 서버 세팅 일단 가시성을 위해 clear 명령어로 cmd 창을 전부 지워주고 시작한다. *clear : 윈도우의 cls 1. VIM 설치 VIM이란 리눅스의 터미널 환경에서 사용할 수 있는 텍스트 편집기이다. IDE를 사용할 때를 제외하고 코딩은 물론, 환경파일을 수정할 때는 이걸 활용할 예정이라 설치해주었다. # apt-get install vim 2. JDK 설치 및 환경변수 설정 당연한 말이지만, Spring은 자바 기반이기에 JDK를 설치해야만 한다. 당장은 리눅스에서 데이터베이스 정도만 구축할 생각이나, 언젠가 리눅스 서버에 직접 jar 파일을 올려 구동을 시키는 연습도 할 예정이라 설치해주자. # apt-get install openjdk-11-jdk java -version의 결과 잘 설치 되었음을 확.. 2021. 5. 5.