정적 팩토리 메서드란? 쉽게 말해 생성자로 인스턴스를 생성하지 않고, static Method를 사용해 인스턴스를 생성하는 방식이다. 간단한 예시로 여러 장르(genre)를 가지는 게임(Game) 객체에 대한 코드를 살펴보자. 생성자 public class Game { private String genre; public Game(String genre) { this.genre = genre; } } public static void main(String[] args) { Game game = new Game("FPS"); } 정적 팩토리 메서드 public class Game { private String genre; private Game(String genre) { } public static Gam..
객체지향 프로그래밍을 잘 하기 위한 9가지 원칙을 준수해가며 코드를 리팩토링 하는 과정에서 디미터 법칙에 대한 오해가 한 가지 생겼습니다. Enum 클래스의 경우 열거형 상수 값을 가져 올 때 GameMessage.START.getMessage() 이런 식으로 코드 한줄에 점(.)이 2번 들어가게됩니다. 바로 여기서 오해가 생기게 되었습니다. 디미터 법칙은 코드 한줄에 점(.)을 하나만 허용해야 한다고 되어 있는데, "점(.)이 2번 들어갔으니 이건 디미터 법칙 위반아니야 ?" 라는 오해가 생겼는데요. 이 오해에 대해 정리한 제 생각을 공유해보자고 합니다. 디미터 법칙이란? 디미터 법칙은 결합도가 낮은 설계를 위해 생긴 규칙이지, 점(.) 이 몇번 쓰였냐가 중요한게 아니라 객체지향 측면에서 바라봐야한다고..
인증과 인가 JWT와 Session은 서버가 인증을 처리하는 방식으로 먼저 "인증과 인가"의 개념에 대해 알 필요가 있다. 인증 인증은 말 그대로 사용자의 신원을 확인하는 것으로, 특정 인증 요청(로그인, 이메일 인증 등)이 유효한 사용자인지를 검증하는 과정이다. 만약 인증 과정이 없다면 어떻게 될까? 인증되지 않은 사용자가 마음대로 상품 정보를 수정하고 주문하는 등 악의적인 행동을 할 수 있을 것이다. 그래서 인증 절차를 통해 서버가 인증된 사용자를 검증하는 과정이 필요하다. 인가 인가는 이미 인증된 사용자에게 특정 자원에 대한 접근 권한을 부여하는 과정이다. 예를 들어 일반 사용자 "USER"와 관리자 "ADMIN"이 있다고 가정해보자. USER는 ADMIN에 접근 할 수 없어야하고 ADMIN은 US..
레디스란? Redis는 Remote Disctionary Server의 약자로 키(Key) : 값(Value) 해시 맵과 같은 구조를 가진 NoSQL 데이터베이스이다. MySQL, Oracle같은 일반 DB와 다르게 하드 디스크(SSD, HDD)에서 데이터를 처리 하는 것이 아니라, Redis는 In-Memory(인메모리) 기반의 DB로 메인 메모리(DRAM)에서 데이터를 처리하기 때문에 작업 속도가 월등히 빠르다. DRAM과 SSD, HDD의 비교 메모리 계층 구조는 다음과 같이 여러 계층이 있지만 인메모리DB와 일반 DB를 비교하기 위해 2가지에 대해서만 비교 하고 넘어 가고자 한다. 특징 DRAM (메인 메모리) SSD, HDD (하드 디스크) 가격 하드 디스크 보다 비쌈 제일 저렴 지속성 휘발성 ..
MySQL에 주기적으로 특정시간에 DB에 어떤 작업을 해주어야 할 상황이 생길 때가 있다. 나는 이번에 쇼핑몰 프로젝트를 진행하면서 "장바구니에 담긴 상품은 최대 15일까지 보관되며 자동으로 삭제됩니다." 라는 장바구니의 정책이 있어서 이를 MySQL의 이벤트 스케쥴러와 프로시저를 활용하여 매일 자정에 15일이 지난 상품을 장바구니 테이블에서 삭제하도록 만들었다. 프로시저(Procedure) 프로시저는 MySQL의 함수(메서드)를 만드는 것이라고 보면 된다. 실행할 쿼리문을 함수로 빼서 재사용가능하고, 이 프로시저의 쿼리에 조건문이나 반복문도 함께 사용할수가 있다. 프로시저 생성 나같은 경우에는 현재날짜와 cart 테이블에 데이터가 생성된 시점을 비교해 15일이 지났으면 삭제하는 간단한 프로시저를 만들었..
정규화란? 데이터베이스 정규화는 데이터베이스 내의 데이터 구조를 조직화하고 최적화하는 과정이다. 정규화를 하는 목적은 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위함이다. 데이터 정규화에는 다음과 같이 여러 단계가 있다. 제1 정규화 (1NF) 제2 정규화 (2NF) 제3 정규화 (3NF) 이상 종류 이상 종류란 정규화를 거치지 않은 데이터에서 발생할 수 있는 현상을 말한다. 삽입 이상 (Insertion Anomaly) : 데이터 삽입 시 의도와 다른 값들도 삽입 삭제 이상 (Delete Anomaly) : 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제 갱신 이상 (Update Anomaly) : 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생 제1 정규화 (1NF) 데이터..