일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- githubactions
- Spring
- 스프링시큐리티
- 도커
- 액세스토큰
- 메시지
- 데이터베이스
- 스프링
- 프로그래머스
- 오블완
- java
- 스프링부트
- oauth2
- 재갱신
- docker
- AWS
- 티스토리챌린지
- springsecurityoauth2client
- JIRA
- 토이프로젝트
- 소셜로그인
- springsecurity
- 트랜잭션
- 리프레시토큰
- 국제화
- 파이썬
- yaml-resource-bundle
- 백준
- CI/CD
- springdataredis
- Today
- Total
목록분류 전체보기 (102)
땃쥐네

회원가입 기능을 구현했으니, 이어서 로그인 기능을 구현해보겠습니다.1. 로그인 개요 - 세션과 토큰HTTP는 기본적으로 무상태 프로토콜입니다. 기존 사용자가 누구인지 HTTP 자체 사양만으로는 기억할 수 없어요. 그래서 존재하는 기능이 로그인입니다.사용자가 아이디(또는 이메일), 패스워드를 전달하고, 이후에 서버에 사용자가 다시 요청을 보낼 때는 사용자가 누구인지를 기억하도록 하기 위한 작업입니다. 그런데 서버 입장에서는 사용자가 누구인지 어떻게 기억하고 관리할까요? 1.1 세션방식 첫번째로 세션방식이 있습니다. 가장 많이 사용되는 방식인데요.한번 로그인 하면 서버는 사용자에게 sessionId 에 해당하는 쿠키를 발급하여, 사용자가 계속 요청을 할 때마다 쿠키를 보내게 합니다. 쿠키에 기입된 sessi..

이메일 인증 기능을 구현했으므로, 이어서 회원가입 기능을 구현해보겠습니다.1. 표현 계층(Api 모듈)@RestControllerclass RegisterMemberController( private val useCase: RegisterMemberUseCase, private val messageResolver: MessageResolver, private val localeManager: LocaleManager,) { @PostMapping("/api/v1/members") fun register(@RequestBody request: RegisterMemberRequest): ResponseEntity> { // 애플리케이션 서비스에 요청 처리를 위임 ..

지난 인증 이메일 발송 기능 구현 글에서 이어집니다.인증 코드 발송 기능은 구현했고, 이어서 이메일 인증을 실제로 해볼거에요.1. 표현계층(api 모듈)@RestControllerclass EmailVerificationController( private val useCase: EmailVerificationUseCase, private val messageResolver: MessageResolver, private val localeManager: LocaleManager,) { @PostMapping("/api/v1/members/email-verification") fun emailVerification(@RequestBody request: EmailVerificati..

1. 개요이메일 인증은 크게 두 가지 과정으로 구성됩니다. 사용자가 이메일 주소를 우리 서버에게 보내면, 우리서버가 해당 이메일 주소로 인증울 위한 코드를 포함한 이메일을 발송하는 과정사용자가 이메일을 통해 받은 코드를 우리 서버에 전달하여, 이메일 인증을 마무리 하는 과정이번 글에서는 1번째 기능을 구현해볼거에요. 2. 이메일 인증 시작 컨트롤러package com.ttasjwi.board.system.member.apiimport com.ttasjwi.board.system.core.api.SuccessResponseimport com.ttasjwi.board.system.core.locale.LocaleManagerimport com.ttasjwi.board.system.core.message.Me..

지난 글에서 이메일/username/닉네임 유효성 검사 API를 작성했는데, 데이터베이스 연동을 하지 않았죠.이번 글에서는 데이터베이스 연동을 해보겠습니다.1. 로컬 MySQL 설정우선 로컬의 개발환경을 먼저 구성해보겠습니다. docker pull mysql:8.0.40-debian; 도커를 통해 mysql 이미지를 풀해오고mkdir -p ./tmpecho "FROM mysql:8.0.40-debian" > ./tmp/Dockerfileecho "RUN apt-get update && apt-get install -y locales" >> ./tmp/Dockerfileecho "RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8" >> ./tmp/Dockerfileecho "E..

이번 글에서는 이메일 사용가능 여부, 사용자아이디(username) 사용가능 여부, 닉네임 사용 가능 여부 API를 하나씩 구현해보겠습니다. 다만 데이터베이스와 접근해서 실제 데이터를 저장하고 조회하는 부분은 이번 글에서 다루지 않고 이후 글에서 다루겠습니다.1. 표현계층 구현 표현계층부터 구현해보겠습니다. EmailAvailableController 관점에서 생각해보겠습니다.EmailAvailableController는 EmailAvailableUseCase 를 통해 이메일 유효성 확인을 위임하고 그 결과를 받아와서, Api 응답을 작성합니다. 이 과정에서는 MessageResolver 를 사용할겁니다. 그런데 이 컨트롤러 구현 관점에서는 실제 빈으로 등록한 구현체가 어떤지는 생각할 필요가 없습니다.그..

이번 글에서는 지난 글들에서 계속 발생했던 테스트 픽스쳐 중복 문제를 해결해보도록 하겠습니다.1. 문제점: 픽스쳐의 중복 제 프로젝트 구조는 현재 멀티모듈로 구성되어 있습니다. domain-core 를 application-member, domain-member 가 의존하고 있고, 향후 domain-auth 모듈과 같은 모듈이 추가된다면 이들 역시 domain-core를 의존할 것입니다. package com.ttasjwi.board.system.member.domain.modelclass Email( val value: String) { companion object { /** * 기본 Email 객체 복원 */ fun restore(va..

이번 글에서는 애플리케이션 기능 전반에 대한 설계를 소개해보고자 합니다. 사실 처음에는 프로젝트의 모든 기능을 하나하나 구현해가는 과정을 담으려 했으나, 모든 것을 다루기에는 글의 분량이 지나치게 많아지고 취준 관점에서 시간 비용이 너무 많다는 판단이 들었습니다. 이번 글부터 진행되는 내용은 구체적인 코드 구현에 대한 내용은 어느 정도 생략하고 설계 및 일부 예시 코드 언급 수준으로만 진행하도록 하겠습니다.(다만 실제 코드는 GitHub Repository에 계속 게시됩니다.) 일단 회원 가입기능을 예시로 들어 기능 설계/구현을 해보겠습니다. 1. 이벤트 스토밍 서비스를 운영한다는 것은, 그 서비스를 이용하는 사용자들이 있고 그들에게서 서비스 운영의 대가를 직,간접적으로 받아 수익을 창출하는 것이죠. 개..