인프런의 "Spring Cloud로 개발하는 마이크로서비스" 강의를 보고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4
강의에서는 microservice로 쇼핑몰을 구현하기 위해 다음과 같은 서비스 구성을 사용합니다.
Catalog Service : 상품 조회
User Service : 사용자 조회, 주문 확인
User Microservice는 사용자 가입과 전체 회원 목록 조회의 기능을 하고, 추후에 로그인 기능을 연동할 계획입니다.
다음과 같은 api 설계를 갖고 있습니다.
DevTools, Lombok, Web, Eureka Discovery Client
다른 dependency는 이후 추가될 예정입니다.
yml 파일에 위와 같은 메시지를 추가하고 로직에서 사용하는 방법은 다음 2가지가 있습니다.
Environment의 getProperty 메소드를 사용하여 매핑된 정보를 가져옵니다.
다음과 같이 Bean으로 등록하여 org.springframework.beans.factory.annotation의 @Value을 사용해 정보를 매핑시킵니다.
등록한 Bean을 주입받아 아래와 같이 사용할 수 있습니다.
console을 사용하기 위해서 console.path에 /h2-console을 추가해주고 datasource를 등록해 주었습니다.
url에 /h2-console을 붙여 접속하면 다음과 같은 화면이 나오고 datasource로 등록한 JDBC URL로 테스트를 확인할 수 있습니다.
이때, 스프링 부트 최신 버전에서는 보안상의 이유로 DB가 없으면 데이터베이스를 자동으로 생성해주지 않기 때문에, 생성하기 위해서 임의의 엔티티를 등록해 주었습니다.
회원 가입 시 data 흐름은 위와 같습니다.
json 형식의 데이터를 RequestUser에 받으면 컨트롤러에서 Dto로 변환해 서비스에 넘겨줍니다.
Dto를 Entity로 변환해 데이터베이스에 저장합니다.
Jpa를 사용하여 데이터베이스에 접근하기 위해 Dependency를 추가합니다.
Spring Validation도 같이 추가해 주었습니다.
Json 형식으로 받는 데이터를 담기 위해 RequestUser를 구현했습니다.
Controller에서 Service로 데이터를 전달하기 위해 사용할 Dto를 구현했습니다.
UserService 인터페이스를 만들어 createUser 메소드를 작성하였고, 이를 구현한 UserServiceImpl을 만들었습니다.
createUser 컨트롤러가 잘 작동하면 201 code를 반환합니다.
postman으로 테스트해봤을 때 구현한 모습대로 잘 진행된 모습입니다.
h2 데이터베이스에 데이터도 잘 확인되었고, 마지막으로 encrypted pwd 부분에 암호화된 비밀번호가 저장되도록 Spring Security를 적용하려 합니다.
Security를 이용해 인증, 인가를 진행합니다.
기존에는 위와 같은 방식으로 Security의 Config를 구성하였으나 스프링 부트 버전이 변경되면서 Security 설정 방식이 변경되었습니다.
따라서 아래와 같이 WebSecurity의 Config 파일을 구성해야합니다.
간단하게 path에 대한 허용과 h2 console에 접속했을 때 화면이 보이도록 하는 설정을 적용했고, 추후에 다른 설정을 추가할 예정입니다.
비밀번호를 암호화 시키기 위해 다음과 같이 BCryptPasswordEncoder를 메인 클래스에 Bean으로 등록해주었습니다.
서비스에서 passwordEncoder의 빈을 주입 받은 뒤 encode 메소드를 이용해 패스워드를 암호화 시킬 수 있습니다.
위에서 진행한 방법대로 postman으로 사용자 추가 요청을 보낸 후 다시 h2 console에 접속해 확인하면 암호화된 비밀번호가 저장된 모습을 볼 수 있습니다.