- Java 9, 10 주요 변경점starryeyeJDK 91. 인터페이스에 private 메서드 추가이전 history Java 8 버전에서는 인터페이스에 default, static 메서드가 추가 되었었다. 내용 Java 9 버전에서는 인터페이스에 private 메서드가 추가되었다. 코드 추상 클래스 vs 인터페이스 - 둘 다 객체로 만들 수 없다. - 추상클래스는 public, protected, private 가능하지만, 인터페이스는 public, private 가능 - 추상클래스에는 멤버변수 선언 가능, 인터페이스는 public static 변수만 선언 가능 - 추상클래스는 extends 1개 가능, 인터페이스는 implements 여러개 가능 2. try-with-resources 문법, effectively final 변수이전 history..
- 2023-05-19 21:19:19
- MongoDB 구조starryeyeMongoDB 의 구조에 대해 알아보자 관계형 DB와 용어간 매핑하여 MongoDB 구조 알아보기 RDBMS MongoDB Database Database Table Collection Row Document Column Field MongoDB Database MongoDB의 Database 단위는 관계형 DB의 Database 단위와 같다. 관계형 DB에서 Table 집합이 Database 인데, MongoDB에서는 Collection 집합이 Database라 보면 된다. MongoDB 인스턴스 를 생성하면 처음에 무조건 생성되어있는 것은 admin, local, config 3가지 Database 가 생성되어있다. 이는 MongoDB 를 관리하는데 사용되는 기본 설정 Database 이다. Data..
- 2023-05-18 20:20:00
- MongoDB 시작해보기starryeye먼저 NoSQL 에 대해 알아보겠다. NoSQL의 등장 배경 관계형 DB가 등장할 당시엔 Disk Storage 가 당시 매우 비싸고 용량의 제한이 컷다. 데이터 중복을 줄여서 용량을 최적으로 사용하는 방향으로 발전 되어 왔기 때문에 Scale-up, 데이터 정규화 기능에 특화 되어있다. NoSQL은 데이터의 일관성을 약간 포기한 대신 여러 대의 컴퓨터에 데이터를 분산하여 저장하는 것(Scale-out)을 목표로 등장하였다. NoSQL의 등장으로 작고 값싼 장비 여러 대로 대량의 데이터와 컴퓨팅 부하를 처리하는 것이 가능하게 되었다. NoSQL의 종류 1. Key-value 2. Document 3. Column-family 4. Graph 여기서 MongoDB는 Document 모델에 해당한다. Doc..
- 2023-05-18 14:18:14
- Hexagonal Architecture 정리starryeyeHexagonal Architecture 의 각 컴포넌트 별 책임과 주의 사항에 대해 정리해보겠다.. clean architecture 에서는 Application layer 와 Domain layer 를 합쳐서 Application Core 라고 부른다. Application 은 port 와 Use case, Service 가 존재하는 layer 를 뜻하나.. Domain이 포함된 개념으로 불리기도 함. Application 유스케이스 책임 1. 입력을 받는다. 2. 비즈니스 규칙을 검증한다. (도메인 엔티티와 책임 공유) 3. 모델 상태를 조작한다. 4. 출력을 반환한다. 각 유스케이스 마다 다른 입력/출력 모델을 가져가도록 해보자.. 각 입력 모델은 입력 유효성 검증 책임을 가진다. 주의) 입력 유..
- 2023-05-15 20:19:20
- 불변 객체 validationstarryeye불변 객체, lombok @Value 와 Java record 포스팅에서 이어진다. 개발을 하다보면 불변 객체는 Dto 로 사용되며 이는 Architecture 관점에서 각 layer 의 입력 모델과 출력 모델에 해당한다. 또한, 입력 모델과 출력 모델에 대한 검증 책임은 각 layer에 있기 때문에 불변 객체의 validation 은 항상 신경 써줘야 한다.. (생성 시점) 이번 포스팅에서는 불변 객체의 생성시점에서 자주 사용되는 검증 방법을 코드로 한번 알아보겠다. -> 선언적 유효성 검사 방법 -> 개발자가 모두 구현하는 방식은 제외 Lombok 을 사용한 방법 import lombok.Builder; import lombok.NonNull; import lombok.Value; @Value @Bu..
- 2023-05-07 06:32:38
- 불변 객체, lombok @Value 와 Java Recordstarryeyelombok 의 @Value 를 이용한 불변객체 만들기와 Java 14 ~ 16 부터 도입된 record 타입을 활용한 불변객체 만들기를 알아보자.. lombok @Value 롬복은 자바 개발을 단순화하고 가독성을 높이기 위한 라이브러리이다. (annotation 방식으로 boilerplate code 를 줄여준다.) 예를 들면 어떤 클래스에 @Getter 어노테이션을 적용하면 빌드 후 ".class 파일"을 까보면 해당 클래스의 모든 필드에 대한 getXXX 메서드가 만들어져 있다. 그러면 @Value는 개발자 대신 어떤 것을 해줄까.. 1. 모든 필드를 private final 로 만들어 준다. -> 이로써 필드의 값을 변경할 수 없게 되어 불변성이 보장된다. 2. 모든 인자를 받는 생성자를 만들어준..
- 2023-05-07 03:30:42
- 관계형 데이터베이스 조회 최적화starryeye컴퓨터 구조 시간에 배운 것을 떠올려 보자.. CPU가 데이터를 저장하거나 조회하기 위해서는 I/O Bus를 통해 동작되는 것을 떠올릴 수 있다. 그리고, CPU가 데이터를 저장하기 위해서는 메모리와 디스크를 이용한다. 메모리는 전원이 차단되면 휘발되기 때문에, 데이터의 영속성을 위해서는 결국 디스크에 저장 된다. 디스크는 메모리에 비해 굉장히 느리다는 것을 익히 알고 있다. 그래서.. 데이터베이스 성능의 핵심은 결국 디스크 접근을 최소화 하는 것이다. 따라서, 메모리에 존재하는 데이터는 최대한 메모리로 끝내는게 좋다. -> 캐시 히트율 UP 그러면 쓰기도 메모리에 쓰면 좋지 않을까.. 메모리에 쓰면 데이터 유실이 생길 수 밖에 없는데.. 그러기 위해서는 WAL(Write Ahead Log)를 사용한다...
- 2023-04-29 20:58:30
- 관계형 데이터베이스 조회와 쓰기 trade-off 1starryeye관계형 데이터 베이스에서 항상 고민해줘야 하는 부분들에 대해 알아보자.. 조회와 쓰기는 성능 관점에서 모두가 좋아지도록 만들 수 없다.. 지금부터 하나 씩 알아보도록 하겠다. 1. 데이터베이스 정규화/비정규화 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 비유를 통해 알아보겠다. 우리가 소설을 쓴다고 생각해보자.. [A 상황] 1. 주인공의 이름이 김찬호인 300 Page 에 달하는 소설을 다 썻다. 2. 그런데 갑자기 주인공 이름을 손인욱이라는 이름으로 변경해야 할 상황이 생겼다. 3. 그러면 우리는 하나하나 모든 주인공 이름이 적힌 곳을 찾아가서 변경해줘야 할 것이다. (툴의 도움을 받지 않는다고 가정) 이번엔 두번째 상황을 보자 [B 상황] 1. 주인공..
- 2023-04-29 20:41:13
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)