Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스
-
10장) 24시간 365일 중단 없는 서비스를 만들자Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 18. 15:40
9장까지 진행한 경우, 긴 시간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단됨 무중단 배포 소개 무중단 배포 방식 AWS에서 블루 그린(Blue-Green) 무중단 배포 도커를 이용한 웹서비스 무중단 배포 L4 스위치 ~> 고가의 장비라 큰 기업 말고는 잘 안씀 엔진엑스 웹 서버, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈소스 SW 대부분의 서비스에서 이용 리버스 프록시 => NginX가 외부의 요청을 받아 백앤드 서버로 요청을 전달 엔진엑스(NginX) 클라우드 인프라가 구축되어 있지 않아도 사용할 수 있다. 하나의 EC2 혹은 리눅스 서버에 NginX 1대와 스프링 부트 Jar 2대를 이용 NginX는 80(http), 44..
-
9장) 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 15. 21:31
CI & CD 소개 CI => Continuous Integration - 지속적 통합 VCS (코드 버전 관리 시스템)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정 CD => Continuous Deployment - 지속적 배포 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정 CI 4 규칙 모든 소스 코드가 살아있고(현재 실행되고) 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지할 것 빌드 프로세스를 자동화해서 누구든 소스로부터 시스템을 빌드하는 단일 명령어를 사용할 수 있게 할 것 테스팅을 자동화해서 단일 명령어로 언제든지 시스템에 대한 건전한 테스트 수트를 실행할 수 있게 할 것 누구나 현재 실행 파일을 얻으면 지금까지 가장 완전한 ..
-
8장) EC2 서버에 프로젝트를 배포해 보자Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 14. 23:55
EC2에 프로젝트 Clone 받기 git 설치 sudo yum install git으로 git 설치 git --version으로 설치 상태 체크 프로젝트 저장할 디렉토리 만들기 mkdir ~/app && ~app/step1 생성 cd ~/app/step1 이동 git clone하기 git clone 깃헙주소 테스트로 코드 검증하기 ./gradlew test 성공했다면, BUILD SUCCESSFUL이 뜬다. 여기서 한 번 실패가 떴는데, 실행권한이 없다는 표시가 떴다. chmod +x ./gradlew로 권한을 부여해줘서 해결 배포 스크립트 만들기 배포할 때마다 개발자가 하나하나 명령어를 실행하는 것은 비효율적 쉘 스크립트로 작성해서 스크립트만 실행하면, 위의 과정이 진행되도록 생성 쉘 스크립트 .sh라..
-
7장) AWS에 데이터베이스 환경을 만들어보자 - AWS RDSJava & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 8. 23:08
AWS RDS 웹 서비스의 백엔드를 다루려면 애플리케이션 코드를 작성하는 것 만큼 데이터베이스를 다루는 것이 중요하다. 모니터링, 알람, 백업, HA 구성 등 모두 직접 구현하려면 시간이 오래 걸리기 때문에, 여기서는 AWS RDS를 이용한다. RDS AWS에서 지원하는 관계형 데이터베이스 하드웨어 프로비저닝, DB설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스 먼저, 이 프로젝트에서는 MaridDB를 선택한다. 가격 Amazon Aurora(오로라)로 교체 용이성 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스 MySQL은 단순 쿼리 처리 성능에 압도적이다 썬마이크로시스템과 오라클이 합병되면서 많은 MySQL 개발자들..
-
6장) AWS 서버 환경을 만들어보자 - AWS EC2Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 7. 23:05
클라우드 호스팅 서비스나 집 PC를 이용하는 것이 일반적으로 비용이 저렴하지만, 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리 클라우드 서비스는 단순히 물리 장비만 대여하는 것이 아니라, 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등 지원해준다. 클라우드의 형태 Infrastructure as a Service(IaaS, 아이아스, 이에스) 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해주는 서비스 AWS의 EC2, S3 등 Platform as a Service (PaaS, 파스) IaaS에서 한번 더 추상화한 서비스 따라서, 많은 기능이 자동화 돼있음 AWS의 Beanstalk(빈스..
-
5장) 스프링 시큐리티와 OAuth2.0으로 로그인 기능 구현하기Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 5. 23:08
스프링 시큐리티 막강한 인증과 인가 기능을 가진 프레임워크 스프링 기반의 애플리케이션에서는 보안을 위한 표준이라고 보면 됨 스프링 시큐리티와 스프링 시큐리티 Oauth2 클라이언트 스프링 부트 1.5 vs 2.0 스프링 부트 1.5 더 이상 신규 기능은 추가 지원이 없다. (기존 기능은 유지) url 주소를 모두 명시해야함 스프링 부트 2.0 스프링 부트용 라이브러리(starter) 출시 신규 라이브러리의 경우 확장 포인트를 고려해서 설계된 상태 1.5버전에서 직접 입력하던 값들은 enum으로 대체되고, client 인증 정보만 입력하면 된다. CommonOAuth2Provide라는 enum이 새롭게 추가, 여기서 구글, 깃허브, 페이스북, 옥타 등의 기본 설정값 제공 (네이버나 카카오는 직접 해야함) ..
-
4장 ) 머스테치로 화면 구성하기Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 1. 01:26
서버 템플릿 엔진과 머스테치 소개 템플릿 엔진 지정된 템플릿 양식과 데이터가 합쳐서 HTML 문서를 출력하는 소프트웨어 서버 템플릿 엔진 : JSP, Freemarker -> 서버에서 구동 ~> 브라우저로 전달 클라이언트 템플릿 엔진 : React, Vue -> 브라우저에서 화면 생성 JSP, Velocity : Spring-boot에서 권장 X Freemarker - 과한 기능, 자유도가 높아서 숙련도가 낮을 수록 사용하기 힘들다. Thymeleaf - Spring에서 강하게 밀고있지만, 문법이 어렵다. 머스테치 서버 템플릿엔진, 클라이언트 템플릿 엔진으로 모두 이용 가능 (다양한 언어 지원) 장점 문법이 간단하다. View의 역할과 서버의 역할이 명확하게 분리된다. Mustache.js와 Mustac..
-
3장) 스프링 부트에서 JPA로 데이터베이스 다뤄보자Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 6. 28. 17:17
웹 서비스 개발, 운영에서 이전에는 MyBatis와 같은 SQL 매퍼를 이용해서 DB 쿼리를 작성했었다. 문제점 1) SQL 다루는 시간 > 개발 시간 2) 객체지향 프로그래밍과 관계형 디비 간 상호 호환성 저하(테이블 모델링에 더 집중하는 현상) 발생 (패러다임 불일치) 객체지향 프로그래밍 : 메세지를 기반으로 기능과 속성을 한 곳에서 관리 관계형 데이터베이스 : 어떻게 데이터를 저장할지 초점 ~> JAP가 이 문제를 해결 JPA 자바 표준 ORM(Objecet Relational Mapping) OOP 언어와 RDB 중간에서 패러다임을 일치시켜주는 기술 Spring Data JPA JPA는 인터페이스로서 자바 표준명세서 따라서, 사용하기 위해서는 구현체가 필요(Hibernate, Eclipse Lin..