전체 글 146

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가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 ..

[Spring Error] Bean method 'clientRegistrationRepository' in 'OAuth2ClientRegistrationRepositoryConfiguration' not loaded because OAuth2 Clients Configured Condition registered clients is not available

에러 내용 : Description: Method springSecurityFilterChain in org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found. The following candidates were found but could not be injected: - Bean method 'clientRegistrationRepository' in 'OAu..

Back-End/Issues 2022.03.27

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..

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

5.2 구글 서비스 등록 먼저 구글 서비스에 신규 서비스를 생성한다. 여기서 발급된 인증 정보(clientId와 clientSecret)를 통해서 로그인 기능과 소셜 서비스 기능을 사용할 수 있으니 무조건 발급받고 시작해야 함 구글 클라우드 플랫폼 주소 (http://console.cloud.google.com)로 이동한다. - 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트할 URL - 스프링 부트 2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}로 리다이렉트 URL을 지원하고있다. - 사용자가 별도로 리다이렉트 URL을 지원하는 Controller를 만들 필요가 없다. 시큐리티에서 이미 구현해 놓은 상태 - 현재는 개발 단..