Back-End/Springboot와 AWS로 혼자 구현하는 웹 서비스 32

Chapter 07. AWS에 데이터베이스 환경을 만들어보자 - AWS RDS (2)

7.2 RDS 운영환경에 맞는 파라미터 설정하기 RDS를 처음 생성하면 몇 가지 설정을 필수로 해야 한다. 우선 다음 3개의 설정을 차례로 진행한다. 타임존 Character Set Max Connection 왼쪽 카테고리에서 [파라미터 그룹] 탭을 클릭해서 이동한다. 오른쪽 위의 [파라미터 그룹 생성] 버튼을 클릭한다. 세부 정보 위쪽에 DB 엔진을 선택하는 항목이 있다. 여기서 방금 생성한 MariaDB와 같은 버전을 맞춰야 한다. 해당 파라미터 그룹을 클릭한다. 다음으로 Character Set을 변경한다. 이는 항목이 많다. 아래 8개 항목 중 character 항목들은 모두 utf8mb4로, collation 항목들은 utf8mb4_general_ci로 변경한다. utf8과 utf8mb4의 차이..

Chapter 07. AWS에 데이터베이스 환경을 만들어보자 - AWS RDS (1)

웹 서비스의 백엔드를 다룬다고 했을 때 애플리케이션 코드를 작성하는 것만큼 중요한 것이 데이터베이스를 다루는 일이다. 규모 있는 회사에서는 데이터베이스를 전문적으로 처리하는 DBA라는 직군 담당자들이 있다. 해당 전문분야의 담당자가 있기에 상대적으로 개발자가 데이터베이스를 전문적으로 다룰 일이 적다. 다만 그건 대용량/대량의 데이터를 다루기 때문에 전문성이 필요한 것이지, 백엔드 개발자가 데이터베이스를 몰라도 된다를 의미하지는 않는다. 스타트업이나 개발 인원수가 적은 서비스에선 개발자가 데이터베이스를 다뤄야만 한다. 어느 정도 데이터베이스 구축, 쿼리 튜닝에 대해서 기본적인 지식이 필요하다. 이번 장에서는 데이터베이스를 구축하고 앞 장에서 만든 EC2 서버와 연동을 해보겠다. 다만, 직접 데이터 베이스를..

Chapter 06. AWS 서버 환경을 만들어보자 - AWS EC2 (3)

6.4 아마존 리눅스 서버 생성 시 꼭 해야 할 설정들 Java 8 설치 : 현재 이 프로젝트의 버전은 Java 8이다. 타임존 변경 : 기본 서버의 시간은 미국 시간대이다. 한국 시간대가 되어야만 우리가 사용하는 시간이 모두 한국 시간으로 등록되고 사용된다. 호스트 네임 변경 : 현재 접속한 서버의 별명을 등록한다. 실무에서는 한 대의 서버가 아닌 수십 대의 서버가 작동되는 데, IP만으로 어떤 서버가 어떤 역할을 하는지 알 수 없다. 이를 구분하기 위해 보통 호스트 네임을 필수로 등록한다. Java 8 설치 EC2에서 다음의 명령어를 실행한다. sudo yum install -y java-1.8.0-openjdk-devel.x86_64 설치가 완료되었다면 인스턴스의 Java 버전을 8로 변경한다. s..

Chapter 06. AWS 서버 환경을 만들어보자 - AWS EC2 (2)

6.3 EC2 서버에 접속하기 방금 생성한 EC2로 접속을 진행할 것임 윈도우에서는 별도의 클라이언트를 설치해야한다. putty사이트에 접속해 실행 파일을 내려받는다. https://www.putty.org/ Download PuTTY - a free SSH and telnet client for Windows Is Bitvise affiliated with PuTTY? Bitvise is not affiliated with PuTTY. We develop our SSH Server for Windows, which is compatible with PuTTY. Many PuTTY users are therefore our users as well. From time to time, they need t..

Chapter 06. AWS 서버 환경을 만들어보자 - AWS EC2 (1)

외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수 24시간 작동하는 서버에는 3가지 선택지가 있음 1. 집에 PC를 24시간 구동시킴 2. 호스팅 서비스(Cafe 24, 코리아호스팅 등)을 이용 3. 클라우드 서비스(AWS, AZURE, GCP 등)을 이용 일반적으로 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리 클라우드 서비스는 쉽게 말하면 인터넷(클라우드)을 통해 서버, 스토리지(파일 저장소),데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것임. 단순 물리 장비 대여가 아니다. 예를 들어 AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로..

Chapter 05. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (7)

5.7 기존 테스트에 시큐리티 적용하기 마지막으로 기존 테스트에 시큐리티 적용으로 문제가 되는 부분들을 해결해보겠다. 문제가 되는 이유는 기존에는 바로 API를 호출할 수 있어 테스트 코드 역시 바로 API를 호출하록 구성하였지만, 시큐리티 옵션이 활성화되면 인증된 사용자만 API를 호출할 수 있다. -> 기존의 API테스트 코드마다 인증한 사용자가 호출한 것처럼 작동하도록 수정 인텔리제이 오른쪽 위 [Gradle] 탭을 클릭 [Tasks -> verification -> test]를 차례로 선택해서 전체 테스트를 수행 test를 실행해 보면 다음과 같이 롬복을 이용한 테스트 외에 스프링을 이용한 테스트는 모두 실패하는 것을 확인할 수 있음. 이유를 하나씩 확인해보자 문제1. CustomOAuth2Use..

Chapter 05. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (6)

5.6 네이버 로그인 네이버 API 등록 https://developers.naver.com/apps/#/register?api=nvlogin 애플리케이션 - NAVER Developers developers.naver.com 서비스 URL은 필수 : 여기선 localhost:8080로 등록 등록을 완료하면 ClientID와 ClientSecret가 생성됨 해당 키값들을 application-oauth.properties에 등록 네이버에서는 스프링 시큐리티를 공식 지원하지 않기 때문에 그동안 Common-OAuth2 Provider에서 해주던 값들도 전부 수동으로 입력해야 한다. #registraion spring.security.oauth2.client.registration.naver.client-i..

Chapter 05. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (5)

5.5 세션 저장소로 데이터베이스 사용하기 현재 만든 서비스는 애플리케이션을 재실행하면 로그인이 풀림 -> 이는 세션이 내장 톰캣의 메모리에 저장되기 때문 기본적으로 세션은 실행되는 WAS의 메모리에서 저장되고 호출됨 메모리에 저장되다 보니 내장 톰캣처럼 애플리케이션 실행 시 실행되는 구조에선 항상 초기화가 됨. -> 즉, 배포할 때마다 톰캣이 재시작되는 것 톰캣마다 세션 동기회 설정을 해야만 함. 그래서 실제 현업에서는 세션 저장소에 대해 다음의 3가지 중 한 가지를 선택 1. 톰캣 세션을 사용한다. - 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식 - 이렇게 될 경우 톰캣(WAS)에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 ..

Chapter 05. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (4)

5.4 어노테이션 기반으로 개선하기 앞서 만든 코드에서 개선할만한 것은 IndexController에서 세션값을 가져오는 부분 SessionUser user = (SessionUser) httpSession.getAttribute("user"); index 메소드 외에 다른 컨트롤러와 메소드에서 세션값이 필요하면 그 때마다 직접 세션에서 값을 가져와야 함. 같은 코드가 계속해서 반복되는 것은 불필요 -> 이 부분을 메소드 인자로 세션값을 바로 받을 수 있도록 변경 LoginUser.java package com.jojoldu.book.springboot.config.auth; import java.lang.annotation.ElementType; import java.lang.annotation.Ret..

Chapter 05. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (3)

5.3 구글 로그인 연동하기 사용자 정보를 담당할 도메인인 User 클래스를 생성한다. 패키지는 domain아래에 user 패키지를 생성한다. User.java package com.jojoldu.book.springboot.domain.user; import com.jojoldu.book.springboot.domain.BaseTimeEntity; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; @Getter @NoArgsConstructor @Entity public class User extends BaseTimeEntity { @Id @GeneratedVal..