WEB

    내가 보려고 정리하는 JAVA 멀티 스레드 2 - 동기화 메서드와 동기화 블록

    동기화 메서드와 동기화 블록 멀티스레드 프로그램에서는 스레드들이 객체를 공유해서 작업해야 하는 경우가 있다. 스레드a가 사용하던 객체를 b에 의해 상태가 변경 될 수 있어서 a가 의도했던 결과와 달라질 수 있기 때문에 사용중인 스레드의 작업이 끝날 때까지 객체에 잠금을 걸어 다른 스레드가 사용할 수 없도록 해야 한다. 단 하나의 스레드를 실행하는 임계 영역을 만들어주면 된다. -> 스레드가 객채 내부의 동기화 메소드 또는 블록에 들어가면 즉시 객체에 잠금을 걸어 다른 스레드가 영역에 있는 코드를 실행하지 못하도록 한다. 메서드 실행 종료 되면 잠금이 풀린다. 사용방법은 아래와 같다 public synchronized void method(){ // 임계 영역 } 일부 내용만 만들고 싶다면 아래와 같이 블..

    내가 보려고 정리하는 JAVA 멀티 스레드 1 - 멀티스레드 개념

    멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 볼 수 있다. 멀티 스레드는 다양한 곳에서 사용된다. 1. 대용량 데이터의 처리 시간을 줄이기 위해 데이터를 분할해서 병렬로 처리하는 곳에서 사용 2. UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용 3. 다수 클라이언트의 요청을 처리하는 서버를 개발할 때 - 메인 스레드 메인 스레드가 작업 스레드보다 먼저 종료되더라도 작업 스레드가 계속 실행 중이면 프로세스는 종료되지 않는다. - 작업 스레드 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성한다. (작업1) (작업2) (프로그램에서 병렬로 실행할 작업을 결정) -> 메인스레드 스레드1 스레드2 Thread클..

    React - useReducer

    userState보다 더 다양한 컴포넌트 상황에 따라 다양한 상태를 다른 값으로 업데이트 해 주고 싶을 때 사용하는 Hook 리듀서는 현재 상태, 그리고 업데이트를 위해 필요한 정보를 담은 액션 값을 전달받아 새로운 상태를 반환하는 함수이다.(새로운 상태를 만들 때는 반드시 불변성을 지켜 주어야 한다) 예제로 여러 인풋의 상태를 저장해봅시다! import React,{useReducer} from 'react'; function reducer(state,action){ retunr{ ...state, [action.name] = action.value }; } 우선 위와 같이 reducer 함수를 작성합니다. 1. ...state는 기존에 있는 state 값들을 복사 시키는것과 같습니다. 2. actio..

    React LifeCycle

    import React, { Component } from 'react'; class LifeCycleSample extends Component{ state={ error:false, number:0, color:null, } myRef = null; // 컴포넌트를 만들 때 처음으로 실행된다. // 초기 state를 정한다. constructor(props){ super(props); console.log('constructor'); } // props로 받아 온 값을 state에 동기화시키는 용도 // 컴포넌트가 마운트될 때, 업데이트될 때 호출 static getDerivedStateFromProps(nextProps,prevState){ console.log('getDerivedStateFrom..

    7. 자바 ORM 표준 JPA 프로그래밍 - 프록시와 연관관계 관리

    프록시 Team에 속해있는 Member 를 조회할 시 Team까지 조회할 필요가 있을까? 비지니스 로직에서 필요하지 않을 때가 있는데 항상 Team을 함께 조회한다면 낭비가 발생된다. 이 낭비를 하지 않기 위해 프록시라는 갠며으로 해결한다. - 실제 클래스를 상속 받아서 만들어지기 때문에 겉 모양이 같다 - 사용하는 입장에서는 진짜, 가짜 객체인지 구분하지 않고 사용하면 된다. - 프록시 객체는 실제 객체의 참조를 보관 -> 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 // 호출한 순간 쿼리 실행 Member findMember..

    6. 자바 ORM 표준 JPA 프로그래밍 - 고급매핑

    상속관계 매핑 관계형 데이터베이스는 상속 관계가 없다.(슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다) 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각 테이블로 변환 -> 조인 전략 (정석) - 테이블 정규화 - 외래 키 참조 무결성 제약조건 활용 가능 - 저장공간 효율화 - 조회시 조인을 많이 사용 -> 성능 저하, 조회 쿼리가 복잡함 - 데이터 저장시 INSERT 쿼리가 2번 호출 된다. 비지니스적으로 중요하고 복잡할 때 선택! 부모 클래스 설정 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn 자식 클래스 설정 -> dtype에 표시될 이름을 정해 줄 경우 @DiscriminatorVa..

    5. 자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계 매핑

    연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 - 객체 양방향 관계는 참조가 2군데 있기 때문에 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 - 외래 키를 관리하는 참조 - 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회 다대일[N:1] 가장 많이 사용함 단반향 아래와 같이 [N]에서 외래 키를 관리하고 Team을 조회 하고 추가할 수 있다. Team에 서는 조회하지 못함 -> Team에서 Member을 조회하는일이 빈번하다고 하면 -> 양반향 으로 매핑해주는게 좋음. 양반향 단반향에서 TEAM이 MEMBER를 mapped by 를 추가하여 MEMBER를 조회할 수 있다. (읽기 전용) 일대다[1:N] 1이 연관관계의 주인이다. 단방향 TEAM 에서..

    4. 자바 ORM 표준 JPA 프로그래밍 - 연관관계

    목표 - 객체와 테이블 연관관계의 차이를 이해 - 객체의 참조와 테이블의 외래 키를 매핑 객체와 테이블 연관관계의 차이를 이해 객체를 테이블에 맞추어 모델링 했을 때 문제점 (참조 대신에 외래 키를 그대로 사용) 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾기 때문에 아래와 같이 번거로운 코드가 발생된다. Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); // 외래키 식별자를 직접 다룬다. member.setTeamId(team.getId()); em.persist(member); // 멤버의 ..

    3. 자바 ORM 표준 JPA 프로그래밍 - 엔티티 매핑

    객체와 테이블 매핑 @Entity - @Entity가 정의되어있는 클래스는 JPA가 관리한다. - 기본 생성자가 꼭 있어야 한다. - 속성: name ->JPA에 사용할 엔티티 이름을 지정한다, 기본값 : 클래스 이름을 그대로 사용 @Table - name, catalog, schema 등등. . 필드와 컬럼 매핑 @Column 데이터베이스 컬럼명을 설정해줄 수 있다. unique(실무에서 잘 사용하지 않는다 -> 유니크 제약조건 이름을 설정할 수 없다 대신 @Table(uniqueCons.. 사용), length 등 설정할 수 있다. @Temporal 날짜 타입 매핑 하지만 LocalDate, LocalDateTime을 사용할 때는 생략 가능하다. @Enumerated enum 타입 매핑 default..

    2. 자바 ORM 표준 JPA 프로그래밍 - 내부 동작 방식

    JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기 - 영속성 컨텍스트 영속성 컨텍스트가 뭘까? JPA를 이해하는데 가장 중요한 용어이다. "엔티티를 영구 저장하는 환경"이라는 뜻. -> EntityManager.persist(entity); - persist는 사실 DB에 저장하는게 아니고 Entity를 영속성 컨텍스트에 저장한다는 뜻이다. - 논리적인 개념으로 눈에 보이지 않는다. EntityManager를 통해서 영속성 컨텍스트에 접근한다. - 여러개의 EntityManager가 하나의 영속성 컨텍스트를 바라본다. 엔티티의 생명주기는 어떻게 될까? 비영속 - 영속성 컨텍스트와 전혀 관계과 없는 새로운 상태 영속 - 영속성 컨텍스트에 관리되는 상태 준영속 - 영속성 컨텍스트에 저장되..

    1. 자바 ORM 표준 JPA 프로그래밍 - 간단한 실습

    아래와 같이 작성했을 때 저장이 될까? 에러가 생긴다. 왜냐하면 JPA는 트렌젝션이는 단위가 매우 중요하기 때문에 JPA의 모든 기능은 트렌젝션 안에서 이루어져야 한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); Member member = new Member(); member.setId(1L); member.setName("AE"); em.persist(member); em.close(); emf.close(); 트렌젝션을 추가한 코드 EntityManagerFactory emf = Persistence.createEntityMa..

    0. 자바 ORM 표준 JPA 프로그래밍 - 기본편

    www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔 www.inflearn.com 인프런에 있는 강의를 보며 정리한 내용입니다! 목표 : 객체와 테이블 설계 매핑 - 객체와 테이블을 제대로 설계하고 매핑하는 방법 - 기본 키와 외래 키 매핑 - 1:N, N:1, 1:1, N:M 매핑 - 실무 노하우 + 성능 고려 - JPA 내부 동작 방식 이해하기 - JPA가 언제, 어떤 SQL을 만들어 실행하는지 이해 J..