전체 글

Love what you do
·백엔드/Java
이번 게시글에선 동시성 요청에 대한 이슈처리를 하기 위한 방법으로 '락'(lock) 에 대해서 알아보겠습니다.일반적으로 '락'을 분류할 때 큰 범주로 비관적 락과 낙관적 락으로 분류합니다.각각의 락에 대해 정리해보겠습니다.  비관적 락비관적 락은 충돌이 잦은 환경에서 주로 사용하는 락이라는 관점에서 '비관적'이라는 명칭이 붙었습니다.공유 자원에 락을 걸고 진행비관적 락은 데이터베이스 환경에서의 락입니다.비관적 락은 충돌이 발생할 것을 예상하고 작업을 진행하기 때문에시작부터 데이터베이스의 '공유락', '배타락'을 사용하여 작업을 순차진행 시킵니다. 공유락과 배타락에 대해선 저번 게시글에서 정리해보았었습니다.비관적 락은 공유락과 배타락은 락을 걸고 진행하기 때문에성능 오버헤드 이슈가 있고  또한 데드락의 위..
·독서
문제의 핵심을 살펴보자. 왜 스트레스가 생기는가? 어떤 문제가 발생하기 때문이다. 그 문제는 어디서 발생하는 것인가? 일이나 인간관계에서 발생한다. 스트레스는 일이나 인간관계에서 발생한 문제가 풀리지 않아서 생기는 것이다. 왜 문제가 안 풀리는 것일까? 푸는 방법을 모르기 때문이다. 왜 모르는가? 책도 안 읽고 공부도 안 하기 때문이다. 왜 공부를 스스로 안 하는가? 게으르기 때문이며 스스로의 판단과 생각을 우물 안 개구리처럼 최고로 여기기 때문이다. 한 달에 책 한 권도 안 보고 공부는 학원이나 학교에 가야만 하는 걸로 믿는다. 그러면서도 놀 것은 다 찾아다니며 논다. 그런 주제에 자기는 성실하게 열심히 살아가는데 주변 상황 때문에 스트레스를 받는다고 생각하며 그러면서도 수입이 적다고 투덜투덜댄다.  ..
·백엔드/JPA
안녕하세요. 이번 게시글에선 JPA 영속성 전이에 대해 분석해보고특히 복합키로 구성된 DB구조에서 어떻게 영속성 전이를 처리할지 알아보겠습니다.  “영속성 콘텍스트”는 무엇일까요?영속성 컨텍스트(Persistence Context)는 JPA에서 엔티티(Entity) 인스턴스를 관리하는 환경을 말합니다. 이 환경은 영속성을 관리하고 엔티티의 생명주기를 추적하는데 사용됩니다. “영속성”이라는 개념을 실현시키기 위해 어플리케이션 안에서 구체화된 것이 “영속성 컨텍스트”입니다.엔티티의 생명주기를 추적하고, 엔티티의 상태를 데이터베이스와 일치시키는 영속성을 관리하는 기술적 “환경“입니다.  어플리케이션 환경에서 구체적으로 표현해보면 위와 같이 그려볼 수 있습니다.정리하자면 영속성 컨텍스트는 크게 두가지 작업을 한..
·백엔드/Java
안녕하세요!! 이번 게시물은 저번 시간에 이어서 동시성 이슈처리를 위한 방안에 대해 알아보려고 합니다.   이번엔 트랜잭션 격리수준에 대해 중점적으로 알아보려고 하는데요,,동시성 이슈는 결국 여러 트랜잭션이 동시에 작업을 처리하게 되면서 생기는 문제이기 때문에트랜잭션 격리수준을 다르게 가져가면 해결해볼 수 있지 않을까? 라는 아이디어가 떠올랐습니다.  그럼 먼저 4가지 트랜잭션 격리수준에 대해 알아보겠습니다.일관성(Consistency)이 높은 순서대로 설명드리겠습니다.   1. SERIALIZABLE (직렬화 가능한)설명: 데이터에 접근할 때 기본적으로 s-lock을 획득한다. 쓰기 작업을 위해 x-lock을 획득해야 하므로 특정 데이터에 대해 조회 중인 다른 트랜잭션이 존재하면 쓰기 작업이 불가능하다..
·백엔드/Java
안녕하십니까! 이번엔 저번 포스팅에 이어서 동시성 요청을 테스트하고 처리하는 방법에 대해 알아보겠습니다. 일단 원하는 테스트 방식에 대해 정리를 먼저 해볼까요? 저는 많은 수의 요청을 동시에 수용할 수 있는 프로그램을 만들고 싶습니다. 그러기 위해서 많은 수의 요청을 동시에 보내는 테스트 코드를 작성해야합니다. 위의 그림처럼 테스트 코드 구조를 정리해볼 수 있습니다. 많은 수의 N번 요청을 보낼 수 있어야 하고, 해당 요청들을 동시에 받은 후 처리해야합니다. 저번시간에 알아봤던 스레드풀 프레임워크를 활용해서 빠르게 테스트를 작성해볼까요? @Test void 스레드풀_사용한_동시요청() throws InterruptedException { int n = 2000; ExecutorService executo..
·백엔드/JPA
궁금한 상황이 생겼다. ​ JPA 양방향 연관 관계 시, 연관 관계의 주인에서만 연관 관계 설정이 가능하다고 한다. ​ ​ 연관 관계 주인 엔티티(Member)에서 setter()로 관계 엔티티(Team)를 설정해주면 데이터베이스 테이블에선 외래키(TEAM_ID)가 입력되어, 그 외래키로 JOIN 하여 연관 관계를 매핑할 수 있다. -> "연관 관계 주인만이 DB 연관 관계와 매핑됨" ​ ​ @Entity @Getter public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne private Team team; //연관관계설정 public void setTeam(Team team){ this.team ..
// 1, 2, 3, 4 를 이용하여 세자리 자연수를 만드는 방법 (순서 X, 중복 x)의 각 결과를 출력하시오 public class Practice { //visited 배열이 true인 것들만 출력하는 개념 public static void main(String[] args) { // Test code int[] arr = {1, 2, 3, 4}; boolean[] visited = {false, false, false, false}; Practice p = new Practice(); p.combination(arr, visited, 0, 3); } public static void combination(int[] arr, boolean[] visited, int depth, int r) { if..
// 원형 연결 리스트 (Circular Linked List) 구현 class CircularLinkedList { NodeBi head; NodeBi tail; CircularLinkedList(NodeBi node) { this.head = node; this.tail = node; this.head.prev = tail; this.head.next = tail; } // 전체 조회 void showData() { if (this.head == null) { System.out.println("List is Empty !!"); return; } NodeBi cur = this.head; while (true) { System.out.print(cur.data + " "); cur = cur.nex..
/** * 직관적인 느낌과 다르게 순열보다 조합이 계산이 더 복잡 * 조합 = 순열 / 줄 세우는 방법의 수 * * 조합(줄 세우지 않는 뽑기 경우의 수) * == 먼저 줄 세워서 뽑은 후(순열) 줄세우는 것을 취소함(줄세우는 방법 경우의 수로 나눔) * * 5C3 = (5P3 == 5 * 4 * 3) / (3! == 줄세우는 방법의 수) --> 3!의 의미는 뭐지? (줄 세우는 방법의 수?) * * cf) 5C3 과 5C2의 결과는 같음. * 5개중 3개를 뽑는 것이 곧 나머지 2개를 뽑는 것. */ public class Main { public static int combination(int n, int r) { int nResult = 1; for (int i = n; i >= n - r + 1;..
/** * 순열은 뽑아서 줄 세우기 -> 곱의법칙 응용 * 5명 중 3명 줄 세우기 -> 5*4*3 */ public class Main { public static void main(String[] args) { // 1. 팩토리얼 System.out.println("== 팩토리얼 =="); // 5! int result = 1; for (int i = 1; i 5 * 4 * 3 int n = 5; int r = 3; result = 1; for (int i = n; i >= n - r + 1; i--) { result *= i; } System.out.println(result); // 3. 중복 순열 /** * * 중복 순열 이론 (중복 허용 순열) * cf) 하나의 대상이 여러번 등장하므로 사람의..
꾸준함의 미더덕
꾸준함의 미더덕