본문 바로가기

전체 글92

AWS codedeploy build 오류 오류메세지 : The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems. Travis에서 AWS S3 와 codedeploy를 이용해서 빌드를 하는중 위와같은 오류발생 원인은 오타였다. .travis.yml 파일에서 s3의 파일을 지정하는 부분 key:에 오타 발견 s3에 업로드된 파일명에 오타가 있어서 위와같은 오류가 발생함. 수정후 실행 잘됨. 위와같은 오류발생하는 분들은 오타를 확인.. 2021. 4. 26.
Travis 빌드중 s3 접속시 Failed to open TCP connection 오류발생 Failed to open TCP connection to s3-url.s3.ap-northeast.amazonaws.com:443 (getaddrinfo: Name or service not known) (Seahorse::Client::NetworkingError) Travis에서 s3접속해서 파일을 ec2에 전송하는 부분에서 오류가 발생하였다. 원인을 확인해보니 s3접속 주소중에 ap-northeast로 접속이 되는것이었다. 실제 s3주소는 ap-northeast-2였는데 말이다. 그래서 원인을 찾던중 .travis.yml파일의 deploy부분에서 region부분이 ap-northeast로 되어 있었다. 책에 있는 소스 그대로 입력하다보니 생긴 문제였다. 당연히 이부분은 ap-northeast-2로.. 2021. 4. 26.
AWS AMI2에 CodeDeploy 설치하기 CodeDeploy를 설치해보자 sudo yum update sudo yum install ruby sudo yum install wget 이전 캐싱정보가 있으면 아래 스크립트를 작성하여 실행한다. #!/bin/bash CODEDEPLOY_BIN="/opt/codedeploy-agent/bin/codeploy-agent" $CODEDEPLOY_BIN stop yum erase codedeploy-agent -y cd /home/ec2-user wget https://bucket-name.s3.region-identfier.amazonaws.com/latest/install bucket-name과 region-identifier은 각각 맞게 작성한다. asia/seoul리저은 다음과 같이 작성합니다. bu.. 2021. 4. 25.
/home/travis/.travis/functions: line 351: ./gradlew: Permission denied travis 연동시 다음과 같은 오류가 발생하였다. /home/travis/.travis/functions: line 351: ./gradlew: Permission denied 당연히 gradlew의 실행권한이 없어서 발생하는 오류다. .travis.yml을 수정한다. script: "./gradlew clean build" 아래부분에 다음과 같이 권한을 부여한다. before_install: chmod +x gradlew 참조: m.blog.naver.com/PostView.nhn?blogId=ggomjae&logNo=221778504421&proxyReferer=https:%2F%2Fwww.google.com%2F 2021. 4. 25.
스프링 시큐리티 Mysql 용 session 테이블 생성 쿼리 스프링 시큐리티 Mysql용 session 테이블 생성 쿼리 CREATE TABLE SPRING_SESSION ( PRIMARY_ID CHAR(36) NOT NULL, SESSION_ID CHAR(36) NOT NULL, CREATION_TIME BIGINT NOT NULL, LAST_ACCESS_TIME BIGINT NOT NULL, MAX_INACTIVE_INTERVAL INT NOT NULL, EXPIRY_TIME BIGINT NOT NULL, PRINCIPAL_NAME VARCHAR(100), CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID) ) ENGINE=InnoDB ROW_FORMAT=DYNAMIC; CREATE UNIQUE INDEX SPRIN.. 2021. 4. 24.
gradle 테스트시 오류발생하는경우 gradle 테스트시에 소스에 별다른 문제가 없지만 오류가 나는 경우가 있다 이런경우에는 gradle를 다운그레이드 해보자 gradlew wrapper --gradle-version 4.10.2 2021. 4. 24.
5. 스프링 시큐리티 - Remember Me 기능 구현 사용자가 로그인 후 로그인을 유지 시켜주는 기능이 있다. 사용자 세션이 만료가 되어도 Remember Me 쿠키가 셋팅되어 있으면 자동으로 로그인하는 기능이다. 스프링 시큐리티에서 제공해주는 Rmember Me기능을 구현해보겠다. 이번 포스트는 이전 포스트에 이어서 작성하니 참조하기 바란다. 세션 설정 테스트를 위한 세션시간을 조정하기 위해 HttpSessionListener인터페이스 구현체를 하나 만든다. @WebListener 어노테이션으로 리스너를 등록해주고, 이 리스너는 스캔할수 있게 Application클래스에 @ServletComponentScan추가한다. 세션을 10초로 설정을 해준다. 10초이지만 시간이 더 지나야 세션이 만료된다. SessionListener @WebListener pub.. 2021. 4. 19.
4. 스프링 시큐리티 - 회원가입 이번에는 회원가입후 로그인 처리를 한번 해보자 프로젝트는 이미 셋팅했다고 가정하고 진행을 한다. 프로젝트 설정 build.gradle plugins { id 'org.springframework.boot' version '2.4.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.samlasoft' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { i.. 2021. 4. 19.
3. 스프링 시큐리티 - h2base 적용하기 스프링시큐리티에 db를 적용해보자. 여기서는 적용하기 쉽게 h2base적용해보자. 프로젝트 생성은 이미 되있다고 가정하고 진행을 한다. 먼저 h2db를 셋팅하고 유저 테이블과 유저엔티티를 만든후 유저를 한명 등록하고 스프링시큐리티에서 로그인하는 걸 한번 구현해보겠다. build.grade 프로젝트는 gradle로 설정을 한다. plugins { id 'org.springframework.boot' version '2.4.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.samlasoft' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' config.. 2021. 4. 17.
스프링 부트에서 h2database Server 클래스 불러오지 못할때 h2database를 적용하던중 Server.createServer 메서드를 추가할때 h2database의 Server클래스를 import 못할때가 있다. 이문제는 gradle에 의존성 설정을 runtimeOnly로 설정했기 때문이다. 이부분을 compile로 수정하고 다시 Server클래스를 사용하면 import가 되는걸 볼수 잇다. runtimeOnly 'com.h2database:h2' 를 compile로 수정한다. compile 'com.h2database:h2' 2021. 4. 16.
2. 스프링시큐리티 - 로그인 페이지 변경 이전에는 스프링시큐리티 기본설정으로 이용을 하였다. 그래서 기본적으로 스프링시큐리티가 제공하는 로그인 페이지를 이용하였지만 이번에는 로그인페이지를 직접 작성해서 해보자. 부트스트랩의 로그인 페이지 샘플을 가지고 구현을 해보겠다. 여기서는 기본 프로젝트 셋팅은 끝났다고 가정하고 시작하기로 한다. build.gradle 설정 프로젝트 생성후 라이브러리 설정은 다음과 같다. plugins { id 'org.springframework.boot' version '2.4.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.samlasoft' version = '0.0.1-SNAPSHOT' sourceCom.. 2021. 4. 15.
intellij gradle java file outside of source root 인텔리제이에서 스프링 부트 프로젝트를 생성하고 그 프로젝트안에서 new > Module로 스프링부트 프로젝트를 또 생성하였다. 그렇게 잘 사용하던중 인텔리제이를 업데이트하고 나는 추가한 모듈 프로젝트 중에 하나가 위와같은 오류가 나오며 실행이 안되는 현상이 발생하였다. 그래서 오류를 찾던중 다음과 같은 방법으로 해결하였다. 1. 인텔리제이 우측 gradle 탭에서 실행이 안되는 모듈을 삭제한다. 2. 삭제가 되면서 다시 gradle을 인식을 하는 창이 다음과 같이 뜬다 3. Load gradle project를 클릭하면 다시 gradle 모듈이 표시된다. 4. 이후 다시 모듈을 run시켜면 제대로 스프링 부트가 start가 된다. 2021. 4. 15.
1. 스프링 시큐리티 - 기본 로그인 스프링 시큐리티에서 제공하는 기본 로그인을 알아보자 1. 프로젝트 생성 프로젝트는 다음과 같이 생성한다. 2. 서버를 실행 서버를 실행하고 localhost:8080으로 접속한다. 그러면 로그인 페이지가 바로 나온다. spring-security가 자동으로 생성해주는 로그인 페이지이다. username은 user password는 로그에서 찾아본다. 다음그림과 같이 usernam과 password를 입력하고 로그인을 하면 빈 에러 페이지가 나온다. 3. index.html 작성 resources/templates아래에 index.html 작성한다. Hello World! 서버를 다시 시작한다. 로그인을 하면 인덱스 페이지가 나온다. 4. 로그레벨 debug로 수정 로그를 더 상세하게 보기 위해서 appl.. 2021. 4. 12.
The specified project directory '프로젝트 디렉토리' does not exist 인텔리제이로 개발을 하다보면 The specified project directory '프로젝트디렉토리' does not exist. 오류가 나오는걸 볼수 있다. 나의 경우는 인텔리제이에서 gradle를 사용할경우 나오는 오류 메세지이다. 이런 오류가 생기는 이유는 새 모듈을 하나 생성했지만 잘못 생성하여 삭제후 다시 생성한경우 위와 같은 오류가 났다. 이런 경우에는 인텔리제이 우측탭에서 gradle를 선택하고 생성하고 지운 모듈을 삭제해주면 된다. 인텔리 제이에서 모듈삭제시에 gradle 탭에있는 프로젝트까지 삭제하지 않아서 생기는 문제이다. 참조: stackoverflow.com/questions/49598291/the-specified-project-directory-does-not-exist 2021. 4. 5.
스프링 시큐리티에서 중요한 컴포넌트들 스프링 시큐리티를 적용하려고 할때 먼저 알면 좋은 컴포넌트들을 알아보자 DelegatingFilterProxy, FilterChainProxy, SecurityFilterChain 스프링 시큐리티는 필터를 통해서 인증과 권한을 체크한다. 여기서 필터는 서블릿컨테이너에서 관리하는 서블릿 필터와 스프링컨테이너에서 관리하는 필터 두가지가 있다. 서블릿필터에서는 스프링의 빈을 사용하지 못하기 때문에 스프링은 서블릿필터에서 스프링 빈을 사용할수 있는 DelegatingFilterProxy를 서블릿 필터로 등록을 해둔다. DelegationFilterProxy는 다시 FilterChainProxy라는 스프링 시큐리티에서 사용하는 필터에 위임을 하고 이 필터에는 filterChain이라는 변수가 있는데 이변수는 Se.. 2021. 4. 4.