전체 글376 토큰 기반 인증을 선택한 이유 NOW 프로젝트를 진행하면서 기록한 글입니다. 기존 세션 기반 인증 이전 포스팅에서는 HTTP Session을 직접 구현해 해보면서, 몇가지의 보안, 확장성, 성능의 문제가 있다고 생각했습니다. 간략하게 다시 적어보자면, 보안 측면 세션 하이재킹 (Session Hijacking): 세션 ID를 도용하여 피해자의 세션에 접근하는 공격 세션 고정 공격 (Session Fixation): 세션 ID를 강제로 주입한 후, 세션 ID로 인증하는 공격 확장 측면 세션 불일치: 서버의 확장으로, 세션 정보를 공유하기 위한 Sticky Session, Session Clustering, 세션 스토리지 외부 분리 등의 작업 요구 따라서, 현재 프로젝트에서는 세션 기반 인증 방식이 아닌 토큰 기반 인증 방식을 선택하게 .. 2023. 8. 8. 상속을 활용한 Global Exception Handler 리팩토링 NOW 프로젝트를 진행하면서 기록한 글입니다. Global Exception Handler SpringBoot 환경에서의 사용자 정의 예외 처리 이전 포스팅에서는 기존 Controller에서 Exception을 처리하던 로직을 Global Exception Handler로 위임 후 ErrorResponse 객체를 생성해 응답했습니다. 하지만, 예외 클래스가 많아질수록 GlobalExceptionHandler에서 다음과 같은 문제가 발생했습니다. 코드 중복 발생 각 예외 클래스에서 코드를 중복하여 구현하면서 예외 처리 로직이 반복되어 작성 가독성 저하 예외를 처리하는 핸들러 메소드들이 여러 곳에 흩어져 있으면 가독성이 떨어지며 로직 파악이 어려움 확장성 제한 새로운 종류의 예외가 필요할 때마다 관련 핸들러.. 2023. 7. 20. 빈번하게 변경되지 않는 게시글 카테고리를 Enum으로 관리 NOW 프로젝트를 진행하면서 기록한 글입니다. 게시글의 카테고리를 DB에서 관리하다 하나의 게시글을 DB에 저장한다고 하면, 해당 글이 공지 글인지, 커뮤니티 글인지, 사진 글인지, 문의 글인지 구분해야합니다. 게시글 테이블의 카테고리 컬럼을 추가해서 해결할 수도 있겠지만, 게시글 카테고리에 한정하지 않고, 서비스 내에서 사용할 카테고리성 데이터에도 사용할 수 있도록 테이블을 설계해야 한다고 생각했습니다. 다음과 같은 용도로요. 출처: 우아한기술블로그(https://techblog.woowahan.com/2527/) 따라서, 현재 초기 프로젝트의 테이블 구조입니다. 게시글 카테고리에 사용할 데이터를 코드 그룹(tb_code_group)과 하위 코드 테이블(tb_sub_code)에서 다음과 같이 관리했습니.. 2023. 7. 18. enum 활용을 통한 파일(File) 도메인 관련 리팩토링 NOW 프로젝트를 진행하면서 기록한 글입니다. 이전 포스팅 게시글(POST) 도메인 모델링(Domain Modeling) 파일(File) 도메인 모델링(Domain Modeling) 이전 파일 도메인 모델링에서.. 원시값 포장(Wrapping) 객체를 사용하여 파일 이름, 파일 크기, 파일 확장자와 같은 필드에 대한 유효성 검증 로직을 캡슐화했습니다. 이번 포스팅에서는 파일 도메인 객체를 어떻게 사용하고 있는지와, ENUM을 활용한 리팩토링 사례에 대해서 소개해 드리고자 합니다. 본격적인 설명에 들어가기에 앞서, 현재 진행중인 NOW 프로젝트에 대해서 간략하게 소개해 드리겠습니다. 스프링 부트 버전: 2.6.3 자바 버전: 11 토큰(JWT) 기반 인증 방식 파일 업로드를 위한 MultipartFile .. 2023. 7. 11. 파일(File) 도메인 객체 설계와 테스트 코드 작성 NOW 프로젝트를 진행하면서 기록한 글입니다. 파일(File) 도메인 객체 설계와 테스트 코드 작성 지난번 포스팅에서는 게시글(POST) 도메인 모델링(Domain Modeling)을 진행했었습니다. 해당 글은 이전에 구현하지 못했던 커뮤니티(Community), 사진(Photo) 게시글의 파일 업로드와 관련된 요구사항을 기반으로 도메인 모델링을 진행하고자 합니다. 지난 번 포스팅에서 작성했던 내용입니다. 표시한 부분을 제외한 모든 내용은 지난 번 포스팅에서 어떻게 모델링했는지 설명드렸습니다. 이번 포스팅은 표시한 파일 업로드에 대해서 도메인 객체를 설계하고, 테스트 코드 작성을 하는 것까지의 과정을 소개해드리고자 합니다. 도메인 모델링 파일 업로드와 관련된 요구사항 중 허용하는 확장자, 최대 파일 크기.. 2023. 7. 11. 게시글(POST) 도메인 객체 설계와 테스트 코드 작성을 통한 리팩토링 NOW 프로젝트를 진행하면서 기록한 글입니다. 도메인(Domain) 객체 설계 게시글(POST) 도메인 모델링(Domain Modeling) 다음과 같은 요구사항이 주어졌습니다. 게시글은 크게 4가지 종류로 나눕니다. 공지사항(Notice) 관리자(Manager)만 작성 핀 설정(상단 고정 여부) 수정 및 삭제 수정 가능 댓글이 있는 경우 삭제 불가능 커뮤니티(Community) 사용자(User)만 작성 파일 업로드 확장자 jpg, gif, png, zip만 허용 크기는 2MB 까지만 허용 개수는 최대 5개까지 수정 및 삭제 수정 가능 댓글이 있는 경우 삭제 불가능 사진(Photo) 사용자(User)만 작성 파일 업로드 확장자는 jpg, gif, png만 허용 크기는 1MB 까지만 허용 개수는 최대 20.. 2023. 7. 5. SpringBoot에서 존재하지 않는 API 요청의 응답 해당 글은 SpringBoot 개발 환경에 해결했던 내용입니다. 존재하지 않는 API 요청의 응답 배경 SPA(Single Page Application) 기반 게시판 프로젝트에서 프론트, 백엔드 작업을 진행하다보니, 프런트에서 무언가를 요청을 하면, 항상 적절한 메시지를 응답해줘야 한다는 생각을 가지게 되었습니다. 예를 들면, 프론트에서 요청 url을 실수로 잘못 입력했을 경우, 서버에서는 해당 요청에 대해서 맵핑하지 않았으므로 다음과 같은 응답을 받게 됩니다. 위와 같은 상황에서 아래와 같은 응답으로 개선하고자 합니다. DispatcherServlet 들여다보기 DispatcherServlet의 doDispatch 메서드에서는 mappedHandler가 존재하지 않을 때 noHandlerFound 메.. 2023. 7. 4. SpringBoot 환경에서의 사용자 정의 예외 처리 해당 글은 SpringBoot 개발 환경에 해결했던 내용입니다. 예외를 발생시킬만한 상황 게시판 프로젝트를 진행하다보면 예외를 발생시킬만한 상황이 있습니다. 예를들어, BoardNotFound e 사용자로부터 전달받은 게시물 번호에 해당하는 게시물이 DB에 없을때 InvalidPassword e 사용자가 글을 수정 및 삭제에 사용하는 비밀번호가 DB에 저장된 비밀번호와 다를때 … 위와 같이 다양한 상황이 있을 수 있습니다. 실제 구현코드 위에서 언급한 BoardNotFound e가 발생하는 실제 구현코드는 어떻게 될까요? 우선, 아래 코드는 BoarController의 HTTP GET 요청을 처리하는 핸들러 메서드이며, 요청한 게시물 번호에 해당하는 게시글을 찾고, JSON 형식으로 응답을 반환합니다. .. 2023. 6. 26. Vue.js 구조 잡기 / Component 분리 / router push Vue.js 구조 잡기 Vue 애플리케이션의 진입점 public>index.html은 Vue 애플리케이션의 진입점입니다. 기본적인 HTML 구조와 Vue 앱에 필요한 리소스를 로드하는 스크립트 태그를 포함해야 합니다. 예를 들면 다음과 같은 내용으로 구성될 수 있습니다. 재사용(재활용) 가능한 부분을 Component 분리 만약 Home.vue에서 다음과 같은 코드가 있다고 가정해보겠습니다. 이러한 상황에서는 div class="col"로 시작하는 부분을 컴포넌트화할 수 있습니다. 컴포넌트를 만들기 위해서 다음과 같은 절차로 진행될 수 있습니다. components 디렉토리에 새로운 Vue 컴포넌트 파일 (예: Card.vue)을 생성합니다. 해당 컴포넌트 파일에 중복되는 내용을 추가합니다. // 예시 .. 2023. 6. 13. 이전 1 2 3 4 5 6 7 ··· 42 다음