라벨이 MariaDB인 게시물 표시

Spring Boot Application Blue/Green Deploy to AWS Elastic Beanstalk Using Jenkins

이미지
바로 이전 글  스프링 부트 앱 EB 배포  에서 Spring Boot App 을 AWS console 을 이용해서 Elastic Beanstalk 에 단일 인스턴스 환경으로 배포했다. 하지만, 이전에 올렸던 소스는 local mariaDB 를 바라보고 있다. 따라서 회원가입 및 로그인 기능이 전혀 동작하지 않을 것이다.  이번 글에서 정리할 내용은 local MariaDB 를 AWS RDS MariaDB 를 바라보도록 변경하고, Blue/Green Deploy 를 Jenkins 를 이용해서 진행해볼 예정이다. 아래 포스트들에서 EC2 에 Jenkins 를 설치하고, Gradle 과 Git 을 이용하여 jar 로 Build 하고 S3 versioning 을 통해서 jar 를 관리하는 방법을 정리했었다. EC2에 젠킨스 설치 젠킨스로 Build 하고 S3 로 jar 관리하기 또한 Blue/Green Deploy 를 하기 위해서 기존에 Blue Environment 에 대한 설정을 그대로 따르기 위해, option-settings.json 란 파일을 생성하며 새로운 Environment 생성 시 동일한 구성을 사용할 수 있도록 하겠다. 마지막으로 Jenkins 가 설치된 EC2 에 Elastic Beanstalk Full Access Role 을 부여한다. 기존에 배포된 EB 환경에서는 DB connection 이 이루어지지 않아서 기능이 전혀 동작하고 있지 않은것을 확인할 수 있다. 먼저, local MariaDB 를 바라보고 있는 설정을 AWS RDS MariaDB 로 변경해보겠다. url 을 AWS RDS 로 변경했다. username 과 password 는 보안상의 이유로 적지 않았다. 그럼 이제 변경사항을 push 하고 Jenkins 를 이용하여 Build 하겠다. 젠킨스로 Build 하고 S3 로 jar 관리하기  글에서 작성한 방법으로 Build 를 했다. 다음은 기존 Environment 와 동일한 Environme...

Spring Security - UserDetailsService with Remember-me feature (PersistentTokenBasedRememberMeServices)

이미지
바로 지난 글( https://infondgndg91.blogspot.com/2020/06/spring-security-userdetailsservice-with.html )에서, 스프링 시큐리티에서 TokenBasedRememberMeServices 를 이용한 토큰 기반 Remember-Me 기능에 대해 알아보았다. 이번글에서는, PersistentTokenBasedRememberMeServices 를 이용한 영구 토큰 기반 Remember-Me 에 대해서 정리해보려고 한다. 먼저 영구 토큰 기반 Remember-Me 기능을 사용하기 위해선 말 그대로 토큰을 저장할 저장소가 필요하다. 나의 경우 MariaDB 를 사용했다. Persistent Token Based 는 Token Based 와 다르게 시그니처를 검증하지 않는다. 대신, 토큰 저장소에 일한 토큰이 존재하는지 확인한다. Persistent Token Based Cookie 는 아래와 같은 요소를 포함한다. 시리즈 식별자 (Series Identifier) : 사용자의 초기 로그인을 식별하며, 사용자가 세션에 자동으로 로그인될 때마다 값이 항상 동일하다 . 토큰 값 : 사용자가 Remember-Me 기능을 사용해 인증될 때마다 변경되는 고유한 값이다. 아래 다이어그램을 보면, Remember-Me 쿠키가 전송되면, 스프링 시큐리티는 전송된 쿠키의 시리즈 식별자를 통해서, PersistentTokenRepository 에서 예상되는 토큰값을 찾는다. 찾은 토큰의 값과 전송된 쿠키의 값을 비교하여 일치여부를 통해 인증을 한다. 사용자가 전송한 시리즈 식별자와 일치하는 값이 데이터베이스에 존재하지만 토큰 값이 일치하지 않는 경우 누군가가 Remember-Me 쿠키를 도용하고 있다고 간주할 수 있다. 해당 경우, 스프링 시큐리티는 관련된 Remember-Me 토큰을 폐기하고 사용자에게 해당 세션의 탈취 가능성을 경고한다. 이 경우 스프링 시큐리티는 관련된 모든 세션을...

Spring Security - UserDetailsService with Remember-me feature (TokenBasedRememberMeServices)

이미지
여러가지 서비스를 이용하다보면, 자동 로그인하기라는 체크 박스를 기본적으로 확인할 수 있다. 스프링 시큐리티에서 지원하는 Remember-me 라는 기능이 바로 그 기능이다. 웹사이트를 자주 방문하는 사용자에게 편리한 기능이다. 사용자가 웹 브라우저를 종료한 후에도 사용자의 웹 브라우저에 Remember-Me 쿠키를 저장함으로써 재방문 시 사용자를 기억하는 기능이다. 이는 사용자가 사용자명이나 패스워드를 다시 입력할 필요가 없다. 스프링 시큐리티 Remember-Me 기능에는 두 가지가 있다. 토큰 기반의 Remember-Me 기능으로, 암호화 시그니처 에 의존한다. (TokenBasedRememberMeServices) 영구 토큰 (Persistent Token) 기반 Remember-Me 기능이며, 데이터베이스 (datastore) 가 필요하다. (PersistentTokenBasedRememberMeServices) 먼저, 토큰 기반 Remember-Me 기능을 살펴보자. 아래의 로그인 화면과 같이, login.html 에서 Remember me 체크 박스를 만들어준다. 그리고 name attribute 설정을 해준다. spring security remember-me 기능의 default parameter 는 "remember-me" 이다. 물론 다르게 설정이 가능하다. 아래는 시큐리티 설정이다. HttpSecurity 에 rememberMe() 와 key() tokenValiditySeconds() 메서드를 통해 설정한다. key() -> Remember-Me 쿠키의 시그니처 생성 시 사용되는 고유한 키를 정의한다. 애플리케이션의 고유 이름을 포함한 최소 36자 길이의 문자열을 사용할 것을 추천한다. tokenValiditySeconds -> Remember-Me 쿠키의 만료 시간을 설정한다. -1 로 설정한다면, 2주를 의미한다....

Spring boot - MariaDB Configuration

이미지
올해 들어서 블로깅을 너무 안했다. 그래서 기초적인 것이지만 spring boot 에서 MariaDB 설정을 블로깅을 해보겠다. 우선 필자는 build tool 로 gradle 을 선택했다. 따라서 아래와 같이 필요한 의존성을 추가한다. security 와 web 은 해당 내용과 관련이 없지만, 필자가 개발하는 프로젝트에 필요해서 추가한 것이다. 따라서 아래 이미지에서 MariaDB 설정에 필수 의존성은 spring-boot-starter-data-jpa 와 mariadb-java-client 이다. 그리고 다음으뢰, application.yml 에서 아래와 같이 datasource 설정을 해준다. url, username, password 는 개인 mariadb 서버 설정에 맞게 넣어준다. 이제 설정은 끝났다. 왜냐면 spring boot 가 알아서 해준다. spring boot 의 장점이다. 설정이 너무쉽다. 왜냐면 아래와 같이 @SpringBootAppliation 이 다 알아서 해준다. 엄밀히 말하자면, @SpringBootApplication 을 까보면, 아래와 같이 @EnableAutoConfiguration 이 있다. 이녀석이 자동으로 해주는게 정말정말 많다. 이녀석을 까보고 공부하는 것도 재밌는일이 될 것 같다.

DataGrip 기존 table data INSERT 문으로 export && CREATE TABLE 문 export

이미지
혼자서 이거저거 만지고 개발하다 보니까 mysql, mariadb, postgre 등 여러 RDB를 사용했었다. 그러다가 문득 다른 DB 간에 테이블과 해당 테이블에 있는 Data가 필요하게 되어 편하게 옮기는 방법 없을까? 찾다가 내가 한 방법을 블로깅 한다. DataGrip 툴을 이용해서 먼저 DDL CREATE TABLE 을 뽑아낸다. 아래 이미지 처럼 해당 스키마이든 해당테이블을 선택하고 오른쪽 클릭을 하고, SQL Scripts 에 마우스를 올리면 오른쪽 처럼 Generate DDL 이라는 문구를 찾을 수 있다. 아래 처럼 DDL 을 뽑을 수 있다. 물론 mysql, mariadb 같은 경우 SHOW CREATE TABLE 문을 사용할 수 있지만, 테이블이 여러개일 경우, 혹은 전체 스키마를 다 따야할 경우 테이블 하나하나 하고 있을 수 없다. 그럴 때 이렇게 사용하면 좋을것 같다. 그렇다면 이제는 특정 테이블의 Data 들을 INSERT 구문으로 뽑아보자. 아래와 같이 우선 SELECT * FROM table; 을 하든 뭘 하든 추출하려는 데이터셋을 query 로 돌린다. 그리고 아래처럼 row 들을 선택하고 오른쪽 클릭을 한다. 우선 아래처럼 Data Extractor:~ 를 보면 여러가지 방법이 있다. INSERT 문의 두 가지가 가능하다. 1. SQL Inserts 2. SQL-Insert-Statements.sql.groovy 두 가지 중 하나를 선택한다. 그리고 아래 처럼 Dump Data 로 가서 파일을 생성하든지 클립보드에 출력하든지 선택하면 된다. 나같은 경우, 파일로 생성했다. 따라서 아래처럼 파일을 생성한다. 그리고 파일이 생성되면, DataGrip 오른쪽 하단에 아래와 같은 얼럿이 나온다. 파일을 눌러서 열어보면 아래 이미지와 같이 Insert 문으로 변환된 것을 볼 수 있다.

MariaDB 한글 insert 안 될 때

이미지
charset을 확인 하는데 먼저 글로벌 확인하기. 보는것과 같이 퍼킹하게 character_set_database 가 latin1으로 되어있다. 그리고 해당 테이블도 확인 해보자. 역시 퍼킹하게 테이블도 latin1로 되어있다. 먼저 글로벌 charset 설정을 바꿔준다.. /usr/local/etc 밑으로 가서 my.cnf를 바꾼다. 그리고 재시작 해주고 다시 글로벌 charset 확인하기 mysql.server stop mysql.server start server가 잘 안 꺼질땐 sudo mysqladmin shutdown 글로벌설정을 바꿔주어도 테이블은 영향 받지 않기 때문에 테이블 레벨에서 해당 테이블의 charset도 변경해준다. 변경이 잘 된 것을 확인할 수 있따리!

Mac MariaDB 서버 시작 시 뜨는 에러

이미지
우선 Mac 에 brew와 mariaDB가 설치 되어 있다는 전제가 깔려있다. $ brew list 하면 내가 설치한 목록이 나온다. mysql.server status - DB 서버가 돌고 있는지 확인하기 mysql.server start - DB 서버 시작시키기 mysql.server stop - DB 서버 중지시키기 이다. 시작 시키려고 하는데 아래와 같이 에러 메시지가 나온다. namdong-gil-ui-MacBookPro:~ namdong-gil$ mysql.server start /usr/local/Cellar/mariadb/10.3.13/bin/my_print_defaults: Can't read dir of '/usr/local/etc/my.cnf.d' (Errcode: 2 "No such file or directory") Fatal error in defaults handling. Program aborted Starting MariaDB /usr/local/Cellar/mariadb/10.3.13/bin/my_print_defaults: Can't read dir of '/usr/local/etc/my.cnf.d' (Errcode: 2 "No such file or directory") Fatal error in defaults handling. Program aborted ./usr/local/Cellar/mariadb/10.3.13/bin/my_print_defaults: Can't read dir of '/usr/local/etc/my.cnf.d' (Errcode: 2 "No such file or directory") Fatal error in defaults handling. Program aborted 190914 15:07:41 mysqld_safe L...

Django rest framework + MariaDB 맛보기 Feat.pycharm, swagger

이미지
2016년이였나??,, Django를 처음 접했던게? 대학교 3학년 때이다. 지금도 모르는게 많지만, 그때와 지금 비교해보면 그때는 지금보다 더 모르는게 많았었다. 만들고 싶은 웹서비스가 있어서, 프레임워크가 어떤것인지에 대한 개념도 모른 체로 무작정 사용 했었던 기억이 난다. 지금와서 다시 찾아보고, 공부하니까.. 예전에 고민했었던 사안이 생각난다. 과거에 선배 개발자들에게 선생님들에게 종종 물었었다. "언어도 너무 많고, 라이브러리 프레임워크가 너무 많다. 공부할 게 너무 많다 어떻게 해야될지 모르겠다"라고 고민을 얘기하면 돌아오는 대답은 항상 비슷했다. '하나를 깊게 알면, 언어가 달라도 금방 알 수 있다'라는 답변. 이 답변을 새삼 살결로 느끼게되었다. 물론 하나를 깊게 안다 라는 말은 과거의 나에비해 헤헤헤 상대성 이론은 완벽하다. 서두가 주저리주저리 너무 길었는데, 본론으로!!고우~ 먼저, 프로젝트 생성. 경로는 알아서 해주고, 앱이름도 알아서 해준다. 보는 바와 같이 파이썬 버전은 3.7 Django 버전은 2.1.7 필수 패키지는 djangorestframework 3.9.2 django-rest-swagger 2.2.0 mysqlclient 1.4.2.post1 mysqlclient는 MariaDB가 설치 되어있지 않으면, 패키지 설치가 안되기 때문에 MariaDB설치 -> mysqlclient 패키지 설치해야된다. 본인은 맥에서 개발중인데, brew는 이미 설치 되었다는 가정하고 brew update brew install mariadb 하고나면, 블라블라~ 설치 어쩌구 로그들 완료되고 서버를 키는데, 아래처럼 /usr/local/etc/my.cnf.d 가 없단다. 그래서 직접 만들어주고 다시 실행. namdong-gil-ui-MacBookPro:man namdong-gil$ mysql.server star...