https://school.programmers.co.kr/learn/courses/30/lessons/181916 프로그래머스의 주사위 게임 3의 자바 풀이법을 작성해 본다. 다른 블로그나 프로그래머스의 다른 사람의 풀이들을 봐도 명확하게 이해되지 않거나, 나름대로 어려운점이 있어서 HashMap 활용해서 풀이법을 작성한다. ⭐문제1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.주사위가 두 개씩 같은 값이 나오고, 나온 숫자를..
콜라츠 추측(Collatz Conjecture)이란?제발 풀려고 하지 마세요! (아무도 못푼 쉬운 문제. 콜라츠 추측)간단하지만 아무도 풀지 못한 문제. 페르마의 마지막 정리와 함께 수학자들을 골머리 앓게 했던 콜라츠 추측에 대해 알아보죠. 걱정 마세요. 초등학생도 이해할 만큼 쉽습니다. (추측 자체는요..ㅎ) #콜라츠추측 #2파티 #곱3+1이요 이름, 용어 수정 12:35 - 테리 타오 (수정)테렌스 타오 자막 수정 1:14 - “5가 되고 5에서 3을 곱하고 이를 더해 16이 나오죠.” (수정) 5가 되고 5에서 3을 곱하고 일을 더해 16이 나오죠. Special thanks to Prof. Alex Kontorovich for introducing us to this topic, filming t..
Spring Microservice in Action 책을 통해 마이크로서비스란 무엇이고, 다른 아키텍처들과 어떠한 차이점이 있는지 알아보려고 한다. 먼저 중소 규모의 많은 웹 애플리케이션이 사용하고 있고, 대중적인 모놀리스 아키텍처에 대해서 알아보자. 모놀리스 아키텍처(Monolith Architecture)모놀리스 아키텍처는 하나의 큰 단일 단위로 구축하는 소프트웨어 아키텍처 패턴이다. 하나의 소프트웨어를 구성하는 모듈과 코드를 한 프로젝트 단위로 관리한다. 애플리케이션을 실행하기 위해서 단일 프로젝트를 빌드하고 실행시키면 된다. 개발자들에게 제일 익숙한 방식일 것이다. 위 그림과 같이 단일 UI, 코드, 데이터베이스로 동작된다. 매우 일반적으로 활용되고 있는 만큼, 마이크로서비스 아키텍처보다 초기 ..
✅ Reactive Programming은 왜 선언적 프로그래밍인가?리액티브 프로그래밍은 데이터 스트림과 변경 사항 전파를 중심으로하는 비동기 프로그래밍이다. 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야 하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미하고 있다. 리액티브 프로그래밍은 비동기적 및 이벤트 기반 작업을 다루는 방식으로, 전통적인 명령형 프로그래밍과 비교하여 더 선언적(declarative)인 성격을 가지고 있다. 선언적 프로그래밍과 명령형 프로그래밍은 무엇일까? 명령형 프로그래밍(Imperative Programming)명령형 프로그래밍은 "어떻게(How)" 작업을 수행할 것인지를 명시적으로 지정하는 방식으로 코드를 작성한다. 개발자는 단계별..
✅ 트랜잭션 범위의 영속성 컨텍스트🔹스프링 컨테이너의 기본 동작 스프링은 트랜잭션 범위의 영속성 컨텍스트를 기본 전략으로 사용한다. 이 전략은 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다.트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 동일하며, 트랜잭션 종료 시, 영속성 컨텍스트도 동일하게 종료하게 된다. 스프링 어플리케이션에서는 @Transactional을 사용하면 호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작한다. 스프링 트랜잭션 AOP는 대상 메소드를 호출하기 직전에 트랜잭션을 시작하고, 대상 메소드가 정상 종료되면 트랜잭션을 커밋하면서 종료한다. 이때 영속성 컨텍스트로 동일한 라이프 사이클을 가지게 된다. 스프링 트랜잭션 A..
✅ Spring Data JPA란? Spring Data 프로젝트는 JPA, 몽고DB, REDIS, HADOOP, GEMFIRE 같은 다양한 데이터 저장소에 대한 접근을 추상화해서 개발자 편의를 제공하고 지루하게 반복하는 데이터 접근 코드를 줄여준다. 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원한다. 따라서 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료할 수 있다. 일반적인 CRUD 메소드는 JpaRepository 인터페이스가 공통으로 제공한다save(S): 새로운 엔티티는 저장하고 이미 있는 엔티티는 수정한다.delete(T): 엔티티 하나를 삭제한다. 내부에서 EntityManager.remove()를 호출한다findOne..
✅ 트랜잭션의 네 가지 속성🔹트랜잭션 전파(Transaction Propagation) A의 트랜잭션이 실행되고 있을 때, B의 트랜잭션이 별개로 시작되고 있다. 이러한 경우 어떻게 해야 할까? 🔻PROPAGATION_REQUIRED (Default)진행 중인 트랜잭션이 없으면 새로 시작하고, 이미 시작된 트랜잭션이 있으면 이에 참여한다DefaultTransactionDefinition의 기본 값이다. B는 A의 트랜잭션에 참여하기 때문에. A의 (2)번 위치에서 예외가 발생하면, B는 취소된다. 🔻PROPAGATION_REQUIRES_NEW항상 새로운 트랜잭션을 시작한다A, B는 각각 새로운 트랜잭션을 시작하기 때문에 독립적인 트랜잭션이 된다. 따라서 A의 (2)번 위치에서 예외가 발생해도, B는 커밋..
💡흔히 알고있는 JPA의 Entity Manager가 Hibernate에서는 Session이라 불린다. 그래서 Hibernate에서는 Open Session In View라 하고, JPA에서는 Open EntityManager In View라 하는데 관례상 OSIV라 한다. JPQL : Java Persistence Query Language → Java 표준QuertDSL : JPQL을 좀 더 쉽게 쓸 수 있게 해주는 구현체, 빌더 클래스 모음✅ JPQL(Java Persistence Query Language)엔티티 객체를 조회하는 객체지향 쿼리//쿼리 생성 String jpql = "SELECT m FROM Member as m WHERE m.name = 'kim'"; List resultList ..
✅ JPA 값 타입 분류와 특징엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경 시 추적 불가생명 주기를 엔티티에 의존공유하지 않고, 복사해서 사용해야 한다불변 객체로 만들어 사용하는 것이 좋다 ✅ 임베디드 타입(embedded type, 복합 값 타입)새로운 값 타입을 직접 정의할 수 있다.JPA는 임베디드 타입(embedded type)이라고 한다.주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 한다.int, String과 같은 값타입이다. 추적도 되지 않고 변경하..
✅ 영속성 전이란?JPA에서는 엔티티 객체가 영속성 상태에 있어야지 영속성 컨텍스트에서 관리가 가능하다. 영속성 전이란, 부모 엔티티의 영속성 상태가 자식 엔티티에게까지 전파되는 것을 뜻한다. 이로써 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되거나, 삭제할 때 자식 엔티티도 함께 삭제할 수 있다. 🔻영속성 전이의 종류ALL: 모든 상태 변화(생성, 수정, 삭제)를 전파PERSIST: 새로운 엔티티를 생성할 때 전파MERGE: 엔티티를 병합(수정)할 때 전파REMOVE: 엔티티를 삭제할 때 전파REFRESH: 엔티티를 리프레시할 때 전파DETACH: 엔티티를 분리할 때 전파 🔹저장MemberCascade@Entity public class MemberCascade { @Id @GeneratedVal..