본문 바로가기

개발

(66)
[강의 요약 노트]실전! 스프링 부트와 JPA 활용1 : (4) 회원 도메인 개발 Transactional 적용 안 되는 경우 https://www.whiteship.me/spring-transactional-and-spring-aop/
[강의 요약 노트]실전! 스프링 부트와 JPA 활용1 : (3) 애플리케이션 구현 준비 ** 실무에서는 검증 로직이 있어도 멀티 쓰레드 상황을 고려해서 회원 테이블의 회원명 컬럼에 유니크 제 약 조건을 추가하는 것이 안전
[강의 요약 노트]실전! 스프링 부트와 JPA 활용1 : (2)도메인 분석 설계 도메인 모델과 테이블 설계 주문-상품은 다:다 관계이므로, 주문과 상품 사이에 주문 상품을 끼운다. 테이블별 중요사항 Member 1) Address: 내장타입(Embeded Type) - 연관된 데이터는 하나의 객체로 묶어, 내장 타입으로 사용하는 것이 낫다. (예. 국가, 도시, 우편번호 -> 주소로 묶자) - 값타입은 Setter 절대 사용 금지. 예시. https://devlog-wjdrbs96.tistory.com/405 ( 상세 설명은 기본편 참고) [JPA] 9장: 값 타입이란 무엇일까? 값 타입 분류 JPA의 데이터 타입을 크게 분류하면 엔티티 타입 과 값 타입 으로 나눌 수 있습니다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String 처럼 ..
[강의 요약 노트]실전! 스프링 부트와 JPA 활용1 : (1) 프로젝트 환경 설정 강좌 소개 웹 애플리케이션 개발 1. 프로젝트 세팅 2. 회원, 주문, 상품의 요구 사항 분석 3. 도메인 모델 설계 4. 엔티티 설계 5. 애플리케이션 아키텍처 구성 6. 핵심 비즈니스 로직 개발 - 회원, 상품, 주문 도메인 개발 - 핵심 비즈니스 로직 개발 - 테스트 케이스 검증 - 도메인 주도 설계 이해 7. 웹 계층 개발 API 개발과 성능 최적화 REST API 개발 - 등록,수정, 조회 REST API 개발 - API 개발 실무 노하우 성능 최적화 - JPA 극한의 조회 성능 최적화 노하우 전수 - 복잡한 예제를 6단계로 성능 튜닝 - 실무 JPA 성능 문제의 90% 해결 1편 강좌의 장점 웹 애플리케이션 개발의 전체 사이클을 볼 수 있다. 프로젝트 생성 세팅 의존 관계: Spring Web..
아이템 17. 변경 가능성을 최소화해라 개념 불변 클래스 인스턴스 내부 값을 수정할 수 없는 클래스 어떻게 불변 클래스를 만들까 (규칙 5가지) 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. public class Car { private final int position; public Car(int position) { this.position = position; } public int getPosition() { return position; } public static void main(String[] args) { // 위치를 1로 초기화한 후 변경 불가. // 위치가 2인 차가 필요할 경우, 객체를 새로 만들어야만 한다. Car car1 = new Car(1); System.out.println("current positi..
아이템 16. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하여라. 개념 중첩 클래스 특정 목적을 위해 한 클래스에서 별도로 정의한 내부 클래스 참고: https://jobjava00.github.io/language/java/basic/nested-class/ 원칙 1. public클래스(=패키지 바깥에서 접근할 수 있는 클래스)는 접근자를 제공한다. 1.1 왜 접근자를 사용해야할까? - 내부 표현 방식을 언제든지 바꿀 수 있는 유연성이 생긴다. - 필드를 공개할 경우 클라이언트가 이를 직접 사용하므로, 마음대로 바꿀 수 없어 유연성이 떨어진다. 1.2 클래스의 필드를 잘못 노출한 예시 1.2.1 java.awt.package의 Point 클래스 2. package-private 클래스 or private 중첩 클래스는 데이터 필드를 노출해도 문제가 없다. 책에서 이해..
아이템 15. 클래스와 멤버의 접근권한을 최소화하여라 개념 정보은닉 1. 뜻 클래스 내부 데이터, 구현정보를 외부 컴포넌트에서 분리시키는 것 2. 장점 2.1 시스템 개발 속도 높인다. : 여러 모듈 동시에 개발 가능 2.2 다른 컴포넌트로 교체가 쉽다. 2.3 소프트웨어의 재사용성을 높인다. (필요한 모듈만 분리하여 타 프로그램에 붙이면 됨) 접근 제어자 private: 멤버가 선언된 클래스 내 default: 접근 제어자 생략시 자동 부여. 동일 패키지 내 protected: 동일 패키지 내 or 상속했을 경우 public: 어디서든 정보 은닉 원칙 1. 모든 클래스&멤버의 접근성을 가능한 낮춘다. 2. public 클래스의 인스턴스 필드는 가능한 public이 아니어야한다. - 값의 불변성을 보장해야한다. - thread-safe하지 않다. 3. 클래..
[JPA 기본] 2. JPA 소개 1. SQL 중심적인 개발의 문제점 1.1 반복되는 CRUD 쿼리 작성 작업 INSERT, SELECT, UPDATE, DELETE....계속 반복만하는 지루한 작업의 연속이다. 1.2 필드 추가시 객체 변환, 관련 쿼리 일괄 변경 (이건 실제 내 경험)최근 프로젝트에서 실제로 일어난 일이다. 기존의 정책에서는 회원 정보 테이블에서 NAME이라는 컬럼을 사용하고 있었다. 이 안에 사용자 성, 이름 모두 포함되었다. 그런데, "우리는 글로벌 서비스니까, 외국인들도 사용하기 쉽게 성, 이름을 구분해서 입력 받아야겠다!"라는 요구사항이 들어왔다. FIRST_NAME, LAST_NAME으로 필드 추가는 쉬웠지만, NAME 컬럼을 사용하는 쿼리를 조회한 결과 수백개의 쿼리가 나왔다 (흑흑) 결국 몇 일에 걸쳐 F..