본문 바로가기

분류 전체보기

(17)
DDD START! 수다 #1 본 게시글은 최범균님의 DDD START! 수다 #1를 듣고 정리한 내용 입니다. 분리에 따른 몇 가지 이점 명시적인 (강제) 언어 경계 -> bounded 컨텍스트별 독립적인 발전 인터페이스에 기반한 컨텍스트 간 통신 서비스로서 컴포넌트화 독립적인 배포 -> 서비스의 응집도(경계) 높아짐 각 서비스가 서로 영향을 거의 주지 않는다. Bounded Context를 MSA 단위로 구성한다. 컴포넌트가 Bounded Context와 잘 연결된다. 명시적 인터페이스 -> 공개 인터페이스 컴포넌트 사용 주체에게 규약인 인터페이스를 제공하게 된다. 💡 DDD를 할 때 잊으면 안되는건 언어다! 언어의 경계를 얼마나 잘 나누느냐가 DDD를 얼마나 잘해내느냐의 성패와도 연결이 된다. MSA에서는 이 경계를 물리적으로 ..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 필드와 컬럼 매핑 본 게시글은 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 듣고 정리한 내용 입니다. 요구사항 추가 1. 회원은 일반 회원과 관리자로 구분해야 한다. 2. 회원 가입일과 수정일이 있어야 한다. 3. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. package hellojpa; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Date; @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integ..
[자바 ORM 표준 JPA 프로그래밍 - 기본편] 객체와 테이블 매핑, 데이터 스키마 자동 생성 본 게시글은 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의를 듣고 정리한 내용 입니다. 엔티티 매핑 객체와 테이블 매핑 데이터베이스 스키마 자동 생성 필드와 컬럼 매핑 기본 키 매핑 실전 예제 - 1. 요구사항 분석과 기본 매핑 엔티티 매핑 소개 객체와 테이블 매핑: @Entity, @Table 필드와 컬럼 매핑: @Column 기본 키 매핑: @Id 연관관계 매핑: @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, ..
[실전! 스프링부트와 JPA 활용1] 프로젝트 환경설정 본 게시글은 실전! 스프링 부트와 JPA 활용1 강의를 듣고 정리한 내용 입니다. 1) 프로젝트 생성 start.spring.io에서 스프링 부트 버전 선택시 주의 사항 start.spring.io 사이트에서 스프링 부트 2.x 버전에 대한 지원이 종료되어 선택 불가능하고, 스프링 부트 3.0 이상 선택 가능하다. 스프링 부트 버전 3.0 이상 선택시 주의 사항 1. Java 17 이상의 버전(17 또는 21)을 사용해야 한다. 2. javax 패키지 이름을 jakarta로 변경해야 한다. (오라클과 자바 라이센스 문제로 모든 javax 패키지를 jakarta로 변경해야 함) 3. H2 데이터베이스 버전을 2.1.214 버전 이상 사용해야 한다. 4. Validation 모듈을 직접 추가해야 한다. + ..
[작성중] Java ThreadLocal ThreadLocal은 각 thread마다 별도의 저장공간을 갖는다고 생각하면 쉽다. ThreadLocal을 사용하는 기본적인 패턴 1. ThreadLocal 객체 생성 ThreadLocal은 제네릭 클래스로 정의되어 있어 특정 데이터 타입에 대한 지역 스레드 변수를 만들 수 있다. 예를 들면, 다음과 같이 사용할 수 있다. private static ThreadLocal threadLocalVariable = new ThreadLocal(); 2. 값 설정 (Set) set 메소드를 사용하여 현재 스레드의 지역 변수에 값을 설정한다. threadLocalVariable.set("This is a thread-local value"); 3. 값 얻기 (Get) get 메소드를 사용하여 현재 스레드의 지역..
Java Runtime Data Area Java Runtime Data Area란? JVM은 Java 컴파일러가 컴파일한 바이트코드를 Class Loader를 이용하여 메모리(Runtime Data Area)에 실행 가능한 상태로 적재한다. Runtime Data Area는 JVM이 프로그램을 수행하기 위해서 운영체제(OS)에서 별도로 할당받은 메모리 영역이다. JVM의 메모리 구조 1. 프로그램 실행시, JVM은 OS로부터 메모리를 할당한다. 2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일한다. 3. Class Loader를 통해 JVM Runtime Data Area로 로딩한다. 4. 로더에 의하여 로딩 된 .class들은 Execution Engine을 통해 Interpret(번역) ..
[작성중] JVM(Java Virtual Machine) 컴파일러 컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다. 번역 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠르다. 인터프리터 인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램이다. 줄 단위로 번역, 실행되기 때문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠르다. 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느리다. CPU의 사용시간의 낭비가 크다. Write once, run ..
Ch 18.10 객체 스트림 객체를 입출력할 수 있는 보조 스트림 ObjectOutputStream: 바이트 출력 스트림과 연결되어 객체를 직렬화한다. 직렬화(serialization): 객체를 출력하기 위해 필드값을 일렬로 늘어선 바이트로 변경하는 것 ObjectInputStream: 바이트 입력 스트림과 연결되어 객체를 복원하는 역직렬화를 한다. 역직렬화(deserialization): 직렬화된 바이트를 객체의 필드값으로 복원하는 것 ObjectInputStream ObjectInputStream의 readObject() 메소드: 읽은 바이트를 역질렬화해서 객체를 생성한다. readObject() 메소드의 리턴 타입은 Object이기 때문에 구체적인 타입으로 아래와 같이 강제 타입 변환해야 한다. 객체타입 변수 = (객체타입) ..
Ch 18.1 입출력 스트림 ~ 18.3 바이트 입력 스트림 이것이 자바다를 읽고 정리한 글 입니다. 18.1 입출력 스트림 자바에서는 입력 스트림과 출력 스트림을 통해서 데이터를 입출력한다. 스트림(Stream)은 단방향으로 데이터가 흐르는 것을 말한다. 입력 스트림: 프로그램을 기준으로 데이터가 들어오는 것 출력 스트림: 프로그램을 기준으로 데이터가 나가는 것 프로그램이 다른 프로그램과 데이터를 교환하려면 양쪽 모두 입력 스트림과 출력 스트림이 필요하다. 어떤 데이터를 입출력하는지에 따른 스트림의 종류 바이트 스트림: 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용 문자 스트림: 문자만 입출력할 때 사용 자바에서는 데이터 입출력과 관련된 라이브러리를 java.io 패키지에서 제공하는데, java.io 패키지는 바이트 스트림과 문자 스트림을 ..
2.2 정수 타입의 2진수 표현 변수는 선언될 때 저장할 수 있는 값의 종류와 저장되는 값의 허용 범위가 달라진다. 자바에서는 정수, 실수, 논리값을 저장할 수 있는 기본타입을 제공한다. 정수 타입은 총 5개로, 메모리 할당 크기와 저장되는 값의 범위를 가지고 있다.(byte, short, char, int, long) 정수 타입의 메모리 사용 크기순으로 나열하면 아래와 같다. 종류 byte short int long 메모리 사용 크기(단위 bit) 8 bit(1byte) 16 bit(2byte) 32 bit(4byte) 64 bit(8byte) 메모리의 크기를 n이라고 할 때, 아래의 그림과 같이 정수 타입은 2진수로 저장된다. 최상위 bit가 1인 음수의 경우, 나머지 7개의 bit를 모두 1의 보수(1은 0, 0은 1)로 바꾸고 ..