Docker와 Jenkins Spring windows에서 자동배포
·
JPA 게시판/JPA게시판 만들기
자동배포깃허브에 내가 원하는 브랜치에 푸시 또는 머지가 된다면 새로 빌드되어서 배포를 시킨다.DOOP 형태로 젠킨스도커에서 새로운 도커를 만들 때, 젠킨스 외부 운영체제에 있는 도커를 이용하여 새로운 컨테이너를 만든다.필요요소젠킨스 도커 > 외부 운영체제의 도커에 접근 가능한 방법젠킨스에서 깃 훅의 정보를 브랜치별로 나눠서 가져올 수 있는 방법배포될 스프링 깃 레포지토리에 Dockerfile을 놓는 것 (해당 도커파일을 사용해서 서버를 배포할 예정이기 때문)배포방식원래 ec2 그러니까 여러개의 서버를 이용하는 경우, DockerHub를 사용해서 도커 이미지 파일을 공유하고, 그 파일을 배포서버에서 내려받아 사용하겠지만, 지금은 하나의 컴퓨터에서 모든 파일을 관리하고 있기 때문에 도커파일을 이미지로 빌드하..
새로운 환경설정 (서버분리)
·
JPA 게시판/JPA게시판 만들기
도커를 이용한 새로운 환경설정보편적인 서버 환경을 만들어서 시험해보기 위해서, 도커를 사용하기로 했다.환경 설정 구조스프링 서버가 올라갈 도커(실제 백엔드 서버-레디스가 추가된다면 이 도커에 추가될 예정)DB도커(mysql 8.0.32 기반) 젠킨스 도커환경 설정 이유스프링 서버만 독립적으로 놓는 것이 추후 확장에 있어서 좋다고 판단 - 로드밸런싱을 위한 다수 서버 운영DB의 경우, 별개의 서버로 운영해야 여러개의 서버에서 오는 요청을 받을 수 있다고 생각, 추후 마스터-슬레이브 구조로 여러개의 DB서버 구조로 바꿀 때도 유리하다고 판단젠킨스는 서버 빌드, 스프링 서버 업로드 등 여러 관점에서 봤을 때, 분리해 놓는 것이 좋다고 판단.위 세가지 이유에서 도커를 사용해서 서버를 분리하여 사용해보기로 했다...
Nginx 무중단 배포하기 - react, springboot Server 쉘스크립팅 없이
·
JPA 게시판/JPA게시판 만들기
React와 SpringBoot Server리액트와 스프링 부트 서버를 배포하는데 있어서, nginx를 통해 배포해왔다.기본 주소를 입력했을 때 리액트를 빌드한 창이 뜨게끔 만들었으며 cert와 let’s encryt를 써서 ssl인증도 할 수 있었다. 이후 무중단 배포를 하기 위해서 포트포워딩 설정을 시도했다.하지만 문제가 발생했다. spring boot의 ssl인증서는 내 외부 dns host주소를 기반으로 만들어져 있어서 host주소가 아니라면 host주소와 ssl의 인증 주소가 맞지 않다면서 React의 요청을 무시해 버리는 것이다. 그래서 할 수 없이 server가 할당된 포트를 공개하고(방화벽 및 oracle cloud 설정) 외부에서 내가 지정한 포트 주소로 요청이 오면, nginx에서 리버..
백엔드 프론트엔드 하나의 서버에서 배포하기
·
JPA 게시판/JPA게시판 만들기
react는 단순하게 빌드한 후에, 빌드한 파일이 nginx가 기본적으로 제공하고 있는 index의 위치에 들어가게끔 했다.아래와 같이 설정했다.server { server_name [호스트주소]; root /usr/share/nginx; # nginx가 기본으로 제공하는 index의 주소 이곳에 정적파일을 모두 집어넣는다. asset폴더까지 # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { root /usr/share/nginx; index index.html; try_files $uri $uri/ /index.html; } nginx로 무중단 배포를 하기 위해서..
DTO 검증 및 오류처리
·
JPA 게시판/JPA게시판 만들기
DTO를 검증하지 않고 받다보니, 빈값을 받거나, 형식에 맞지 않는 요청을 보내게 된다면, 서버측에서 아무런 검증을 하지 않고있기 때문에, 그냥 그값 그대로 회원가입이 되거나, 글이 등록이 되고있다. 그 부분을 없애기 위해, Exception Handle을 해보았다. 위와같이 검증이 필요한 DTO에 어노테이션을 달아, 어떤 형식이여야하는지, 어떤 값이 들어와야하는지 빈값이 들어와도 되는지 안되는지 등등을 검증할 수 있다.password와 같은 경우에는, 이 dto가 쓰이는 곳이 지금 로그인, 회원가입에도 쓰이고, 다른 부분에서도 쓰이고 있는데, 암호화된 값이 들어가거나, 빈값이 보내질 때가 있어서, 일부러 NotEmpty를 하지 않았다. (이래서 요청마다, 응답마다 따로 dto를 작성해야 하는것같다. 검..
오라클 클라우드에 페이지 배포하기 (1)
·
JPA 게시판/JPA게시판 만들기
바로 볼 수 있는 페이지 배포하기포트폴리오에서 볼 수 있는 페이지가 없어서 접근성이 떨어짐데이터베이스를 따로 배포해야하는 귀찮음실제로 프로젝트가 잘 작동하는지 볼 수 있도록 해야한다 nginx 와 Oracle Cloud를 이용하여 배포한다.nginx를 설치한다 (명령어를 통해)Oracle Cloud에서 방화벽 설정을 진행하여, nginx의 디폴트화면이 뜰 수 있게 한다.nginx의 리버스프록시 설정 등을 통해 리액트 프론트 페이지를 볼 수 있게 한다. 몇가지 진행하면서 발생한 오류접속이 거부됨 — 방화벽 설정 및 오라클 클라우드 설정Failed to start iptables.service: Unit iptables.service not found. 위 오류는 iptables 서비스가 존재하지 않는다는 ..
데이터베이스 설계
·
JPA 게시판/JPA게시판 만들기
일단 이전에 설계했던 데이터베이스는 아래와 같다.상품과 멤버, 오더,카트아이템 우선적으로 구현하기로 했다.오더와 카트아이템의 관계는 주문하나에 여러개의 상품이 있을 수 있기 때문에, 일대 다로 설정했다. 카트아이템은 상품을 구매한 것이므로 1:1관계가 된다. 상품이 사이즈를 바로 일대 다 관계로 만들고 있는데, 색상이 들어갈 경우에는 달라진다.상품이 여러 색상을 가질 수 있으므로, 상품과 색상이 1대다 관계가 된다.그리고, 색상에 여러 사이즈가 있으므로, 색상과 사이즈가 1:N 관계가 된다.  상품은 카테고리와 다대 다 관계가 형성된다. 왜냐하면 쇼핑몰의 카테고리에 여러 상품이 들어있고,상품은 여러 카테고리에 속할 수 있기 때문이다. 위와 같은 형태가 되도록 엔티티를 구성한다.BaseEntity의 작성 ..