본문 바로가기
728x90

전체 글410

DDD(Domain Driven Design) & 애그리거트(Aggregate) DDD(Domain Driven Design) 도메인 위주의 설계 기법을 의미한다. 도메인(Domain) 현실세계에서 접할 수 있는 비지니스적인 업무 영역을 뜻한다. 도메인 지식(Domain Knowledge)는 배달 애플리케이션으로 예를 들면 고객이 음식을 주문하는 과정, 주문받은 음식을 처리하는 과정, 배달하는 과정 등을 말한다. 도메인 지식을 자세히 알수록 보다 높은 퀄리티의 애플리케이션을 만들 수 있다. 애그리거트(Aggregate) 비슷한 범주의 연관된 업무들을 하나의 그룹으로 묶어놓은 것 그 중 대표적인 도메인을 애그리거트 루트(Aggregate Root)라고 한다. 애그리거트 루트는 다른 도메인들과 직관접적으로 연관이 되어 있는 도메인이 선정된다. 애그리거트 객체 매핑 규칙 모든 엔티티 객체.. 2022. 11. 22.
인메모리(In- Memory) DB 인메모리(In- Memory) DB 말 그대로 메모리 안에 데이터를 저장하는 방식의 데이터베이스이다. 인메모리 DB는 애플리케이션이 실행되는 동안에만 데이터를 저장하고 있기 때문에 실행 중지 후 재실행시키면 기존의 인메모리 DB안에 저장되어 있던 데이터는 모두 사라진다. 대표적으로 h2가 있다. 인메모리 DB를 사용하는 이유 테스트 환경에서 필요한 데이터 이외에 나머지 데이터는 없는 것이 보다 정확한 테스트로 이어지기 때문이다. 따라서 로컬 개발 환경에서는 테스트가 끝나고 나면 데이터베이스의 테이블에 남아있는 데이터는 모두 비우는 것이 좋다. 이러한 이유로 로컬 테스트 환경에서는 인메모리 DB 사용이 권장된다. 2022. 11. 22.
JWT(Json Web Token) JWT(Json Web Token) 데이터를 안전하고 간결하게 전송하기 위해 고안된 인터넷 표준 인증 방식으로 토큰 인증 방식에서 가장 범용적으로 사용된다. JSON 포맷의 토큰 정보를 인코딩 하여 그 정보를 Secret Key로 서명한 메시지를 Web Token으로써 인증 과정에 사용한다. JWT의 종류 Access Token 보호된 정보들에 접근할 수 있는 권한 부여에 사용 비교적 짧은 유효 기간으로 탈취되더라도 오래 사용할 수 없게 한다. Refresh Token Access Token이 만료되었을 때 새로운 Access Token을 발급받을 수 있다. 유효 기간이 길기 때문에 탈취당하면 큰 피해를 입을 수 있다. 그래서 사용하지 않는 곳이 많다. JWT의 구조 Header.Payload.Signa.. 2022. 11. 22.
세션 기반 자격 증명 방식과 토큰 기반 자격 증명 방식 세션 기반 자격 증명 방식 HTTP 프로토콜은 request 전송 후 response를 수신하게 되면 연결을 끊는 비연결성(Connectionless)의 특성과 request, response 상태를 저장하지 않는 비상태성(Stateless)의 특성을 가지고 있기 때문에 사용자 인증을 성공했을 때 인증된 사용자의 request 상태를 유지하기 위해 세션을 이용한다. 서버 측에 인증된 사용자의 정보를 세션 형태로 저장한다.(서버 측 세션 저장소에서 관리) 사용자의 고유 ID인 세션 ID는 클라이언트의 쿠키에 저장되어 증명 수단으로 사용된다. 세션 ID만 클라이언트 쪽에서 사용하기 때문에 토큰 방식에 비해 상대적으로 적은 네트워크 트래픽을 사용한다. 서버에서 세션 정보를 관리하므로 보안성이 유리하다. 서버 .. 2022. 11. 22.
JDBC와 Spring Data JDBC JDBC(Java Database Connectivity) Java 기반의 코드 레벨에서 사용하는 데이터를 데이터 베이스에 저장 및 업데이트하거나 그 반대로 데이터베이스 내의 데이터를 Java 코드 레벨에서 사용할 수 있게 해주는 표준 사양(명세, Specification)이다. Java 애플리케이션 -> JDBC API -> JDBC 드라이버 -> 데이터베이스 구조의 동작 흐름을 가지고 있다. Connection Pool JDBC API를 사용해서 데이터베이스와의 연결을 위한 Connection 갹체를 생성하는 일은 비용이 꽤 많이 든다. 이 비용을 줄이기 위해 애플리케이션 로딩 시점에 Connection 객체를 미리 생성해두고 애플리케이션에서 데이터베이스에 연결이 필요할 때 미리 만들어둔 Connec.. 2022. 11. 22.
@NotNull, @NotBlank, @NotEmpty 차이 @NotNull Null 허용 x "" 허용 " " 허용 type 관계 x @NotEmpty Null 허용 x "" 허용 x " " 허용 int, long ,Interger 등 x @NotBlank Null 허용 x "" 허용 x " " 허용 x String만 허용 2022. 11. 17.
스프링의 엔트리 포인트 클래스 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // 1 public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); // 2 } } 엔트리포인트(Entrypoint) : 애플리케이션 시작점을 의미한다. 위 코드는 스프링을 생성하면 이미 작성되어있다. 1. @SpringBootApplication 자동 구성을 활성화한다. 애플리케이션 패키지 .. 2022. 11. 16.
우선순위 큐(Priority Queue) // 낮은 숫자를 우선으로 하여 꺼내 처리하는 int 형 우선순위 큐 PriorityQueue pq = new PriorityQueue(); // 높은 숫자를 우선으로 하여 꺼내 처리하는 int 형 우선순위 큐 PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); 2022. 11. 6.
728x90