스프링 Spring/전체 글

2. Spring + MongoDB Atlas - Spring 에 적용하기

leexx 2023. 4. 17. 03:58

application.yml

spring:
  data:
    mongodb:
      uri: mongodb+srv://{ID}:{PASSWORD}@{CLUSTERNAME1}.{CLUSTERNAME2}.mongodb.net/?retryWrites=true&w=majority
      database: {NAME}

Entity 만들기

package sanga.spring.study.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "member")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Member {

  @Id
  private String userId;

  private String username;

  @JsonIgnore
  private String password;

  private String nickname;

  @JsonIgnore
  private boolean activated;
}

Repository 만들기

package sanga.spring.study.repository;

import org.springframework.data.mongodb.repository.MongoRepository;
import sanga.spring.study.entity.Member;

import java.util.Optional;

public interface MemberRepository extends MongoRepository<Member, Long> {
  Optional<Member> findByUsername(String username);
}

Service 만들기

package sanga.spring.study.service;

import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sanga.spring.study.dto.UserDto;
import sanga.spring.study.entity.Member;
import sanga.spring.study.repository.MemberRepository;
import sanga.spring.study.util.SecurityUtil;

import java.util.Optional;

@Service
public class MemberService {
  private final MemberRepository memberRepository;
  private final PasswordEncoder passwordEncoder;

  public MemberService(MemberRepository userRepository, PasswordEncoder passwordEncoder) {
    this.memberRepository = userRepository;
    this.passwordEncoder = passwordEncoder;
  }

  @Transactional
  public Member signup(UserDto userDto) {
    if(memberRepository.findByUsername(userDto.getUsername()).orElse(null) != null) {
      throw new RuntimeException("Already join");
    }


    Member member = Member.builder()
            .username(userDto.getUsername())
            .password(passwordEncoder.encode(userDto.getPassword()))
            .nickname(userDto.getNickname())
            .activated(true)
            .build();

    return memberRepository.save(member);
  }

  @Transactional(readOnly = true)
  public Optional<Member> getUser(String username) {
    return memberRepository.findByUsername(username);
  }

  @Transactional(readOnly = true)
  public Optional<Member> getMyUserWithAuthorities() {
    return SecurityUtil.getCurrentUsername().flatMap(memberRepository::findByUsername);
  }
}
  • JWT 관련 내용입니다