Coder Social home page Coder Social logo

limited-sales-service's Introduction

Apple-Market

limited-sales-service's People

Contributors

f-lab-bot avatar xxxx-jeung avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Forkers

daramii

limited-sales-service's Issues

google formatter 적용 및 피드백 반영

User와 api response 방식과 같은 제웅님과 상의해서 맞춰야 할 부분들은 제외하고 제이슨님 피드백 관련 사항들 1차적으로 반영 완료했습니다.

  • google formatter 적용
  • 불필요한 주석 제거
  • 일부 소스코드 수정

Spring Security, JWT Token 회원가입, 로그인 적용

  • Controller, Service, Mapper, Vo 패키지 구성
  • Mybatis 연동
  • Spring Security
  • JWT Token
  • 회원가입 기능 구현 (/join)
  • 로그인 기능 구현 (/login)
  • user/abc (임시 user 권한 진입 테스트)
  • home (임시 권한 없음 테스트)

Authentication 객체 커스텀 작업

  • 로그인한 사용자의 정보를 기존에는 Principal 객체를 직접 불러 왔으나
    @currentuser 커스텀 어노테이션을 통해 불러오는 방식으로 변경하였습니다.

고려사항 1.
@AuthenticationPrincipal 어노테이션을 사용할 경우 PrincipalDetailsService에서 반환한 객체를 매개 변수로 직접 받아 사용할 수 있지만 현재 제가 원하는 방법은 로그인한 사용자의 정보를 참조하고 싶을 때 domain 패키지 내 사용자를 나타내는 �user 객체를 직접 사용하고 싶으므로 Adapter 클래스를 사용해야 합니다.
--> UserAdapter 클래스 구현 (도메인 객체는 특정 기술에 종속되지 않도록 개발하기 위함입니다.)

고려사항 2.
고려사항 1만 생각했을 경우, UserAdapter.getUser()와 같이 getter를 통해 접근해야 하다보니, 코드의 중복이 많이 생깁니다.
이를 해결하기 위해서는 스프링 표현 언어(SpEL)를 사용하면 됩니다. 하지만 이렇게 했을 경우, 코드가 너무 길어지므로
커스텀 어노테이션을 만들어 이를 해결했습니다.

토큰 재발급 및 검증, 예외처리, Redis 적용 및 결합도 낮추기 작업

토큰


  • Redis Session 을 사용해 RefreshToken 을 저장하려 했으나, 생성된 기존 세션 아이디를 클라이언트에게 전달해줘야 하는 부분으로 인해 해당 작업을 철회했습니다.

  • RedisService.java 클래스를 생성하여 Key, Value 형식으로 Email : RefreshToken 값을 저장하는 방식으로 우회했습니다.

  • TokenController.java 클래스를 생성해 AccessToken 을 재발급 받을 수 있도록 처리했습니다.

  • TokenVo.java 클래스를 굳이 생성하면 취약할 것 같아 더 단단한 캡슐화를 위해 TokenController 내부 클래스로 생성해 개발했습니다.

  • 토큰 생성 및 검증 클래스를 분할하여 처리하도록 변경했습니다.

  • 로그아웃 시 억세스 토큰 black_list ConcurrentHashMap 을 만들어 이메일 : 억세스 토큰 형식으로 저장합니다. 해당 토큰이 존재할 경우 로그인 할 수 없도록 조치했습니다.

  • UserController -> Authentication 해당 객체를 사용해 요청한 사용자의 정보를 참고하여 데이터를 가공하는 방식으로 수정했습니다.

  • Token 과 관련된 기능들을 확장하기위해 TokenVo 를 내부 클래스에서 외부 클래스로 변경했습니다.

예외처리


  • 로그인, 회원가입, 토큰 예외 클래스를 생성해 예외 발생을 더더욱 원활하게 파악하기 위해 클래스를 생성했습니다.
  • RestControllerAdvice 를 사용해 예외 발생시 Json 형식으로 응답하도록 처리했습니다.

결합도


  • 시큐리티 부분이 결합도가 높아보여 리팩토링 진행.
  • UserService 와 Impl 로 나눠 구현했습니다. UserService 의 결합도가 점점 높아지는 것을 보고 Interface 화 시켜야 될 것 같아 수정했습니다.

refreshToken 추가, Redis 설정

  • 최초 로그인 시, accessToken과 재발급을 위한 refreshToken을 생성하고, refreshToken은 redis에 저장합니다.
  • 로그아웃시 만료시간이 남은 accessToken을 redis에 저장하여, 이후 해당 토큰으로 더이상 접근을 못하도록 막습니다.
  • 각 토큰은 만료시간이 지나면 자동으로 사라지는 특성을 통해 유효성을 판단합니다.

프로젝트 설정 및 사용자 기능 구현

프로젝트에서 기본적인 환경세팅

  • Mybatis
  • Spring Security

사용자 기능 구현

  • Controller, Service, Mapper, Vo 패키지 구성
  • 회원가입 기능
  • 로그인 기능

위 내용을 큰 틀로 잡아 개발을 진행할 예정이며 이슈가 생길 때 마다 추가로 작성할 예정입니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.