기록76 [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (4) Jenkins 설치 및 설정 1. Docker로 Jenkins 설치 1) jenkins 이미지 파일 내려받기 docker pull jenkins/jenkins:lts 2) jenkins 이미지 컨테이너로 실행 ubuntu와 젠킨스 컨테이너 볼륨을 연결한다. ubuntu의 /jenkins 와 컨테이너의 /var/jenkins ubuntu의 /home/ubuntu/.ssh 와 컨테이너의 /root/.ssh ubuntu의 /var/run/docker.sock 와 컨테이너의 /var/run/docker.sock (바깥에 설치된 docker를 jenkins 속 도커에서도 사용할 수 있도록 한다.) 이름은 jenkins, 계정은 root로 한다. docker run -d -p 8080:8080 -p 50000:50000 -v /jenkins:.. 기록/CI&CD 2022. 8. 13. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (3) Nginx 설치 및 설정 1. Nginx 설치 sudo apt update sudo apt install nginx 2. SSL 인증서 1) certbot 설치 sudo add-apt-repository ppa:certbot/certbot sudo apt install python-certbot-nginx 2) SSL 인증서 가져오기 nginx 플러그인을 사용한다. sudo certbot --nginx -d 도메인주소 차례대로 이메일, 서비스 약관 동의절차를 수행한다. Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgen.. 기록/CI&CD 2022. 8. 12. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (2) Docker, Docker Compose 설치 1. Docker 설치 1) 사전작업 sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common 2) 자동 설치 스크립트 활용 sudo wget -qO- | sh 3) Docker 서비스 실행하기 및 부팅 시 자동 실행 설정 sudo systemctl start docker sudo systemctl enable docker 4) Docker 그룹에 현재 계정 추가 sudo usermod -aG docker ${USER} # ${USER} 대신 ubuntu를 넣어 진행했다. sudo systemctl restart docker 2. Docker Compose 설치 1) 설치 $ sud.. 기록/CI&CD 2022. 8. 11. [AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (1) 초기설정 1. 초기 설정 sudo apt update sudo apt upgrade sudo apt install build-essential 2. java 설치 # 설치 sudo apt-get install openjdk-8-jdk # 버전확인 java -version 3. timezone 설정 sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 4. hostname 설정 sudo hostnamectl set-hostname 이름.localdomain sudo vi /etc/hosts /etc/hosts 맨 윗줄을 변경한다. 127.0.0.1 이름.localdomain 이름 localhost4 localhost4.loca.. 기록/CI&CD 2022. 8. 10. [AWS] ec2에 openVidu on premises 설치하기 1. 사전 작업 Docker와 Docker compose를 미리 설치해야 한다. 설치 방법은 [이 글]에 있다. openvidu는 포트를 많이 쓰기 때문에 아래 포트를 전부 열어야 한다. openvidu의 http, https 포트로 80, 443 외에 다른 걸 쓰려면 그 포트도 연다. (밑의 명령어는 80, 443만 열려있다.) # ufw 설치 sudo apt install ufw # 포트 열기 ufw allow ssh ufw allow 80/tcp ufw allow 443/tcp ufw allow 3478/tcp ufw allow 3478/udp ufw allow 40000:57000/tcp ufw allow 40000:57000/udp ufw allow 57001:65535/tcp ufw allow.. 기록/CI&CD 2022. 8. 9. [AWS] ec2에 mysql 설치하기 1. EC2에서 MySQL 설치 1) 설치 # 설치 sudo apt install mysql-server # root계정 접속 sudo mysql -u root -p 2) 계정 생성 및 권한 부여 CREATE USER '아이디'@'%' IDENTIFIED BY '비밀번호'; FLUSH PRIVILEGES; show grants for '아이디'@'%'; grant all privileges on *.* to '아이디'@'%'; 3) 외부접속 허용 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # bind-address=0.0.0.0로 변경한다. # 포트 허용 sudo ufw allow out 3306/tcp sudo ufw allow in 3306/tcp # mysql 재시.. 기록/CI&CD 2022. 8. 8. [SpringBoot] DB정보 엑셀로 다운로드하기 1. pom.xml org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.apache.poi poi-ooxml 4.1.2 mysql mysql-connector-java runtime 2. Excel Helper 업로드와 동일하게 POI의 Workbook, Sheet, Row, Cell 클래스를 사용한다. 간단한 과정은 다음과 같다. 1. Workbook 생성 2. Workbook에서 Sheet 생성 3. 파라미터로 받은 저장할 객체 리스트를 반복하면서 각 cell에 set한다. 4. ByteArrayOutputStream을 생성해서 workbook을 저장한다. 5. .. 기록/BACKEND 2022. 8. 5. [SpringBoot] 엑셀 DB에 업로드하기 1. pom.xml org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web org.apache.poi poi-ooxml 4.1.2 mysql mysql-connector-java runtime 2. Excel Helper Apache POI 클래스인 Workbook, Sheet, Row, Cell을 사용한다. 과정은 다음과 같다. 1. InputStream에서 Workbook을 생성한다. 2. Workbook에서 Sheet 이름으로 가져와서 Sheet 객체를 생성한다. 3. Sheet.iterator()에서 Row 객체들을 순서대로 가져올 수 있다. 4. Row에서 Cell 객.. 기록/BACKEND 2022. 8. 4. [SpringBoot] JPA repository로 ManyToOne관계 쿼리 작성 이번에 새로 JPA를 사용하게 되었는데, 기존 sql문과는 완전히 다르게 접근해야하는 부분이 있어서 작성해보려고 한다. 내 프로젝트에서 Board와 Comment 엔티티는 다음과 같다. 1. Entity Board @Entity @Table(name = "Board") @Data @DynamicInsert @DynamicUpdate public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "BoardNo", nullable = false) private Integer boardNo; @ManyToOne(fetch = FetchType.LAZY, optional = false) @OnDelete(ac.. 기록/BACKEND 2022. 8. 2. CI(Continuous Integration) 1. CI(Continuous Integration), 지속적 통합 개발자들이 빠른 주기로 작업한 내용을 통합 브랜치에 통합하고 빌드하는 개발 방식을 의미한다. 여기서 통합이란, 개인이 작업한 코드를 공용 작업 환경에 올리는 것을 의미한다. 이 과정은 개인 브랜치를 중앙 브랜치에 merge하는 과정으로 이뤄진다. CI는 통합과정에서 발생하는 이슈를 가능한 빨리 발견하기 위해 필요하다. 2. CI를 이용한 애자일 기능을 개발할 때는 코드를 여러 번 수정하게 되는데, 이 과정에서 코드를 반영하고, 버전 관리 시스템에서 변경 사항을 가져오고, 소스코드를 빌드하고, 단위 테스트를 진행하고, 통합하고, 통합된 코드르 빌드하고, 이를 묶어 배포하는 등 여러 과정을 수행한다. CI 환경에서는 젠킨스 같은 도구를 이용.. 기록/CI&CD 2022. 8. 1. [SpringBoot] JWT토큰 인터셉터 처리하기 보호되어 있는 글 입니다. 2022. 7. 30. [SpringBoot] 비밀번호 암호화하기 보안을 위해 사용자 비밀번호를 암호화시켜서 DB에 저장하려고 했다. 해시 알고리즘은 임의의 길이의 데이터를 해싱처리 해 고정된 길이의 데이터로 매핑한다. 그러나 원문을 다시 만들어낼 수는 없다. 따라서 암호 보안에서는 암호를 해시 처리한 후 사용자 ID와 함께 짝을 지어 DB테이블에 보관한다. 로그인 시, 입력한 암호는 해시 처리되어 DB 테이블의 해시 처리된 입력값과 비교한다. 두 값이 일치한다면 사용자가 올바른 비밀번호를 입력한 것이다. 스프링에서는 비밀번호 암호화를 위해 제공하는 라이브러리가 있다. 지금 진행하는 프로젝트에서는 springboot를 사용하고 있으므로 이 라이브러리를 활용하기로 했다. 1. pom.xml spring boot starter security를 추가한다. org.sprin.. 기록/BACKEND 2022. 7. 23. 이전 1 2 3 4 5 ··· 7 다음