본문 바로가기

전체 글

(108)
에러 표준화 과정 3 - 인증 과정에서 발생하는 Exception 처리 우리 프로젝트에서 처리되는 인증 방식은 세 가지이다. 이메일과 비밀번호 검증을 통한 로그인 타 소셜 플랫폼에서 대신 인증 JWT 토큰 검증을 통한 인증 타 소셜 플랫폼에서 발생하는 에러는 해당 플랫폼 서버에서 잘 처리되어 에러 응답을 보내주며 우리는 그것을 받아 SocialLoginFailedException으로 처리하고 있기 때문에 여기서는 따로 언급하지는 않겠다. 다만 Spring Security 기능을 사용하고 있는 이메일/비밀번호 검증과 JWT 토큰 검증 기능에서 발생하는 에러는 별도의 처리 방식이 필요했다. JWT 토큰 검증 과정에서 발생하는 에러 처리 원래는 유효하지 않은 토큰을 검증할 때에는 발생하는 jwt 검증 에러를 모두 catch하고 그냥 authentication을 SecurityCo..
에러 표준화 과정 2 - Custom Exception, Exception Handler Custom Exception Custom Exception에 대해서 구글링을 좀 해보니 사용 여부에 대해서 회의적인 사람들이 많아 보였다. 나의 프로젝트에 Custom Exception을 써야 할지에 대해서 고민하는 데에는 다음 글이 도움이 되었다. custom exception을 언제 써야 할까? custom exception을 언제 써야 할까? 우아한테크코스의 두 크루인 오렌지와 우가 싸우고 있다. 왜 싸우고 있는지 알아보러 가볼까? 오렌지 : 아니 굳이 사용자 정의 예외 안 써도 됩니다!! 우 : 아닙니다!! 써야 합니다!!! 사용자 정의 tecoble.techcourse.co.kr 다음 글을 보면서 Custom Exception을 써봐야 겠다고 생각했는데 그 이유들은 다음과 같다. 표준 Exce..
에러 표준화 과정 1 - Spring Validator 기능 구현에 급급하다보니 계속 신경이 쓰였던 부분 중에 하나였던 예외 처리를 리팩토링 해보려고 한다. 현재 상황 각각의 예외 처리가 일관적이지 못하고 일부 케이스는 그냥 서버 내부 에러 500으로 처리되고 있음 클라이언트의 잘못된 input 값에 대한 에러 처리에 일관성이 없음 컨트롤러와 서비스에 try/catch 문이 너무 많아 코드의 가독성을 떨어트림 Runtime Exception과 Exception 구별 없이 마구 사용되고 있음 컨트롤러 뿐만 아니라 dispatcher sevlet 전에 위치하는 security 관련 filter에서 발생하는 에러들도 일관적으로 처리되지 못하고 있음 목표 클라이언트 요청 처리에서 발생할 수 있는 예상가능한 예외들을 모두 표준화하여 일관적으로 처리하고, 예상할 수 없..
Spring Security를 이용한 JWT 로그인 2 - 구현 과정 목표 로그인 요청 시, 이메일과 비밀번호를 검증하여 JWT 발급 '/user/all/*'을 제외한 모든 요청에 대하여 JWT 인증/인가 처리 참고: https://bcp0109.tistory.com/301 Spring Security 와 JWT 겉핥기 Introduction 이 글에서는 Spring Boot + JWT + Security 를 사용해서 회원가입/로그인 로직을 구현했습니다. JWT 와 Spring Security 코드는 인프런 Spring Boot JWT Tutorial (정은구) 강의를 수강하면서 만들고.. bcp0109.tistory.com 필요한 설정 'spring-boot-starter-security' Dependency 추가 'io.jwonwebtoken' Dependency 추가..
Spring Security를 이용한 JWT 로그인 1 - JWT, Spring Security Monkey Penthouse라는 창업을 앞두고 있는 프로젝트의 백엔드를 맡게 되었고, 이 프로젝트의 메인 서비스가 될 어메니티/결제 기능 구현에 앞서 인증/인가 기능부터 구현하게 되었다. Monkey Penthouse의 인증/인가 기능 회원가입 로컬 로그인 소셜 로그인 (카카오, 네이버, 애플) 이메일 찾기 비밀번호 수정 이 글에서는 이 프로젝트에서 인증/인가 기능을 어떻게 구현하였는 지에 대한 로직을 정리해놓으려고 한다. JWT(JSON Web Token) 회원이 많아질수록 서버에 부하가 걸릴 수 있는 세션보다는 JWT을 사용하였다. JWT는 인증에 필요한 정보를 암호화한 토큰을 의미한다. JWT는 header와 payload, signature로 구성되어있고, 페이로드에 인증에 필요한 정보와 유효기..
[모던 JavaScript 튜토리얼] 2.2 코드 구조 모던 JavaScript 튜토리얼을 읽고 정리하였습니다. 이 파트에서 배우는 것은 코드 블록을 만드는 방법이다. 문(statement) 문은 어떤 작업을 수행하는 문법 구조(syntax structure)와 명령어(command)를 의미한다. 서로 다른 문은 세미콜론으로 구분한다. alert('Hello'); alert('World'); 세미콜론 줄바꿈이 있다면 세미콜론을 생략할 수도 있다. alert('Hello') alert('World') 자바스크립트는 줄 바꿈이 있으면 이를 암시적 세미콜론으로 해석한다. 이런 동작 방식을 세미콜론 자동 삽입(automatic semicolon insertion)이라 부른다. 그런데 아래와 같이 줄바꿈이 세미콜론을 의미하지 않는 경우도 있는데, 이때에는 자동 삽입이..
[모던 JavaScript 튜토리얼] 2.1 Hello, world! 모던 JavaScript 튜토리얼을 읽고 정리하였습니다. Hello, world! 이 파트는 실행 환경에 독립적인 코어 자바스크립트(core JavaScript)를 다룬다. 코어 자바스크립트를 다루고 있으나, 학습을 위해서는 스크립트를 실행할 수 있는 환경이 필요하다. 이 튜토리얼은 실행환경으로 브라우저를 사용할 것이다. 웹 페이지에 스크립트를 삽입하는 방법에 대해 알아보자. Node.js와 같은 서버 사이드 환경에서 스크립트를 실행하고자 한다면 'node my.js'와 같은 명령어를 사용하면 된다. script 태그 스크립트 후 예전에는 위와 같이 혹은 다음과 같이 url을 속성값을 사용할 수도 있다. 복수의 스크립트를 삽입하고 싶다면 스크립트 태그를 여러개 사용하면 된다. 스크립트가 길어지면 별개의 ..
[김영한의 스프링 입문] 1. 프로젝트 환경 설정 프로젝트 생성하기 사전 준비 Java 11 설치 IDE intelliJ (무료버전) 또는 Eclipse 스프링 부트로 프로젝트 생성하기 스프링 부트 스타터 사이트로 이동해서 원하는 설정으로 스프링 프로젝트를 생성할 수가 있다. 이 때, 프로젝트에서 사용할 라이브러리를 두 개 추가한다. spring web thymeleaf 프로젝트 구조 이를 통해서 생성된 파일 밑 build.gradle을 intelliJ에서 open 해주면 IntelliJ IDE에서 사용할 수 있도록 프로젝트 파일이 임포트된다. 이 IDE에서 보여지는 해당 프로젝트의 구조는 다음과 같다. .gradle .idea : 인텔리제이가 사용하는 설정 파일 gradle : gradle 관련 설정 파일이 들어가는 폴더 src main java : ..