프로젝트에 선차감 방식을 도입하려고 합니다. 이 방식은 요청이 들어왔을 때 미리 자원을 차감하고, 대기 큐로 메시지를 전달할 수 있기 때문에 효율적인 흐름 제어가 가능합니다.하지만 선차감은 동기 방식으로 작동한다는 점이 고민입니다. 동기 방식 자체가 문제라기보다는, 이를 레디슨(Redisson) 분산 락과 함께 사용할 때 병목이 생길 수 있다는 점이 우려됩니다.레디슨은 분산 환경에서 락을 걸기 위한 네트워크 통신이 포함되어 있고, 여기에 동기 코드가 포함되면, 락 획득까지의 대기 시간이 누적될 수 있습니다.즉, 락을 기다리는 동안 동기 코드가 블로킹되면 전체 처리량이 감소할 수 있는 것이죠.그렇다고 선차감 로직을 비동기로 전환하면, 락 대기 시간은 줄어들 수 있지만, 정합성 문제가 발생하게 됩니다.실제로..
왜 이름을 프리스타일로 했는지는 알 수 없지만 젠킨스 프리스타일은 젠킨스에서 GUI로 CI/CD를 할 수 있게 제공하는 기능이라고 생각하면 된다.그러면 프리스타일을 어떻게 하면 파이라인으로 바꿀 수 있을지 생각해보자.일단 CI/CD를 하기 위해서는 코드가 필요하다. 코드를 가져올 수 있는 방법은 크게 2가지가 있는데직접 가져오는 방법이 있겠고 깃에서 가져오는 방법이 존재한다.근데 사실상 직접 넣으면 젠킨스로 CI/CD를 하는 이유가 전혀 없을 거 같다.그렇다면 젠킨스는 어떻게 코드를 가져올 수 있을까? 이 그림은 젠킨스-프리스타일로 할때 깃에서 코드를 가져오는 구문이다.이렇게 되면 깃에서 코드를 가져올 수 있게 된다.다른 방안이 있는지는 잘모르겠지만 아무튼 이것을 프리스타일이 아닌 파이프라인으로 변경하면..
젠킨스를 학습을 하고 있는데 어떤식으로 학습을 해야 할지 막막했다.그래서 튜터님께 어떤것을 학습을 하면 좋을지 여쭤보았다. 그리고 나온 결과가 다음과 같다.- Jenkins 가 CI/CD에서 어떤 역할을 하는지? - 아키텍처 master-worker (agent) - 주요 구성요소(job, build, executor, node, label, workspace)- 각 배포환경에 따라 달라지는 Jenkins의 구성 (예정)- pipeline 공부 (Jenkinsfile) (예정)- 대표적으로 사용하는 플러그인 적용해보기 (git, git webhook, credentials, secret text등..) (예정)그리고 추가적으로 ec2와 통신을 step by step으로 알려주셨다.1. 젠킨스에서 ec2에..
오늘 JPA에 대한 면접 질문을 받았다.대부분 원리에 대한 질문들이었다. 하지만 나는 재대로 답변하지 못했다.ㅜㅜ질문은 총 6문제로 다음과 같은 질문이 있었다.JPA 엔티티 라이프 사이클 상태 설명N+1 문제와 FetchType(EAGER/LAZY)의 연관JPQL과 네이티브 쿼리 사용 시 영속성 컨텍스트 주의점@Transactional의 동작 원리낙관적 락 / 비관적 락의 차이 및 적용 방식QueryDSL 사용 시 영속성 컨텍스트를 타지 않는 경우첫 번째 질문같은 경우 엔티티가 어떻게 동작하는지 설명하는거였다. 제대로 설명하지 못했다.ㅜㅜ이건 내가 노션으로 정리할때 빼먹고 안적어 둔거 같다.암튼 요거는 엔티티가 어떻게 관리가 되어지는지 말해보라는건데... 쉽지 않았다.JPA 엔티티는 총 네 가지 라이프사..
클래스 멤버 변수 초기화 순서에 대해 설명해주세요.의존성 주입(DI, Dependency Injection)에 대해 설명해주세요. Spring Filter와 Interceptor에 대해 설명하고, 사용 예시를 설명해주세요.@Transactional에 readOnly 속성을 사용하는 이유에 대해서 설명해주세요.JPA와 같은 ORM을 사용하면서 쿼리가 복잡해지는 경우에는 어떻게 해결하는게 좋을까요?이렇게 총 5가지로 질문을 주셨다.뭔가 java와 스프링을 섞어서 질문을 주셨다.대부분 아는거이긴 한데 이번에도 정리가 좀 부족하다는 생각이 들었다.그리고 5월초아니면 국비종료한후에 지금까지 질문받았던 내용들을 한번더 정리하는 시간을 갖는것이 좋을거 같다.1번 질문 같은 경우는 클래스 맴버 변수에 대해 알아야 할거..
프로젝트에 디자인패턴을 적용을 해야 했다.이거 아니면 리펙토링을 하던가 해야 하는데 나는 프록시 패턴을 선택했다.선택한 이유는 그리 대단한 이유는 아니구 확장 가능성 때문에 이 패턴을 선택을 하였다.또 내가 누누이 얘기하는데 디자인패턴은 코드와 1:1 대응이 아니라 어떻게 표현하에 따라 달라진다고 생각한다.프록시 패턴은 프록시 객체를 사용하는 패턴이다.사실 프록시를 사용하는 패턴은 프록시만 있는게 아니다 프록시 말고 디코레이터 패턴도 있긴한데암튼 프록시 같은 경우 기존 코드에 부가 정보를 넣어주는 패턴이다.변경전 클래스 다이어그램변경된 코드 or 클래스 다이어그램적용 이유 및 단점:왜 해당 디자인 패턴 또는 리팩토링 기법이 적합했는가?공통된 부분만 구현체로 만들고 부가적인 정보를 ProxyService를..
오랜만에 플젝으로 돌아왔다. 이번에는 레디스 스트림을 넣어서 동작을 시킬예정이다.아마 내일부터는 면접준비랑 스터디를 병행하면서 할거 같다.쉴만큼 쉬었으니 괜찮겠지..아무튼 오늘 튜터님의 도움으로 레디스 스트림을 이용할 수 있게 되었다.내가 관가했던 부분은 config쪽을 완료하지 못했었다.오늘 같은 경우는 스트림만 만들예정이다.근데 생각해보면 레디스 스트림은 뭘까?? 대기열이라고 생각하면 된다. 대규모 트래픽에서 대기열이라고 할 수 있는건 카프카가 있다.그러면 왜 카프카가 아니라 레디스 스트림을 선택을 했나?일단 내 도메인의 특성을 이해를 해야하는데 내 도메인은 외부로 메시지를 보내는 시스템이 아니다. 동일한 도메인에서 대기열 큐를 만드는 시스템이다. 그렇다는건 외부에 메시지를 보내는 카프카는 다소 무거..
Clustered Index / Non-Clustered Index 에 대해 설명해주세요.IN 절에 들어갈 수 있는 최대 항목 수에 대해 알고 계실까요?인덱스를 타지 않거나 혹은 기대하는 성능을 못내는 경우는?트랜잭션 격리 수준에 대해 설명해주세요.이렇게 4문제를 정리를 하려고 한다. 눈에 띄는건 격리 수준에 대해 설명은 일부러 또 넣었다. 왜냐하면 굉장히 중요하다고 생각했기 때문이다.암튼 내가 제일먼저 학습을 해야 하는 부분은 클러스터라는 개념이다.과연 클러스터라는 건 무엇일까?찾아보니 클러스터는 군집,집단이라는 뜻이다.이걸 생각해보고 첫번째 질문부터 다시 생각해보자.첫번째 질문은 클러스터 인덱스와 논 클러스터 인덱스를 뜻한다.클러스터 인덱스는 군집의 대빵이 될 수 있는 인덱스로 자동적으로 정렬이 된다..
오늘은 모의 면접 복기나 해보자.1. MySQL에서 SQL 쿼리는 어떤 순서로 실행되나요?2. 커버링 인덱스란 무엇인가요?3. SQL Injection이란 무엇이고, 어떻게 방지하나요?4.COUNT(*) vs COUNT(1) vs COUNT(컬럼) vs COUNT(DISTINCT 컬럼)의 차이는?5. WHERE 컬럼 IS NULL 조건을 주면 인덱스를 탈 수 있을까요?6. MySQL에서 트랜잭션 격리 수준의 종류와 차이를 설명해주세요.이렇게 총 6가지 질문을 받았다. 일단 내가 준비한거에서 나오지 않아 굉장히 실망스러웠지만.. 뭐 어쩌겠나 이번에는 그래도 자신있게 말했던거 같다.다만 횡설수설하게 말하는 경향이 있어서 아직은 조금 부족한감이 있는듯하다.첫번째 질문같은 경우는SELECT DISTICT o.s..
정처기도 함께 공부하고 있어서 정규화도 이번에 한번 정리해보고3. 리플리케이션4. 파티셔닝 5. 샤딩 6. 인덱스 이렇게 학습을 해보자 이번엔그러니까 5가지를 학습할예정이다.정규화 같은 경우는 DB의 종복을 제거하고 이상현상을 제거하기 위한 방법이라고 생각하면 된다.하지만 조회 성능은 떨어진다고 알고 있다. 그럴땐 반정규화로 다시 데이터를 늘리는 방법을 선택할 수 있다. 또한 정규화에는 1~5까지 총 6가지가 존재한다. 원부이결다비 이거였나.. 원자성 부분 이행 함수 결정자 다중값 비손실 분해이건데.. gpt는 어케 대답하는지 보자정규화는 실무에서 테이블 설계를 할 때 중복을 줄이고 데이터 무결성을 유지하기 위해 사용하는 기본적인 기준입니다.하지만 모든 상황에 3NF 이상 정규화를 철저하게 적용하기보다는..
db같은 경우는 내 멘토님이 요런거를 공부하라고 하셔서 몇가지만 다시 적어보려구 한다.1. CAP & PACELC 이론2. 클러스터링3. 리플리케이션 (아직)4. 파티셔닝 (아직)5. 샤딩 (아직)더 많지만.. 다시 정리하는 차원에서 하는거니까..일단 요정도만 하장db는 그래도 내가 열심히 조사했으니 괜찮겠지..첫번째 cap&pacle이건 분산시스템에서 만족할 수 없는 원칙이라고 한다. 둘중 CAP이 만족할 수 없는 원칙이다.PACLE은 다른거이므로조금있다 작성예정이다. CAP은 약자로 일관성,가용성,네트워크 분할 하용이 존재하고 이들중 두개만 만족을 시킬 수 있다고 한다.더욱이 MSA환경에서는 네트워크 분할은 무조건 가져가야 하므로 일관성과 가용성중 하나를 포기를 해야 할듯싶다.근데 뭐가 더 중요할까?..
오늘을 끝으로 자바는 당분간 마무리짓고 DB를 진행할 예정이다. 아 학습안한건 어떻하냐고.. 걔네는 나중에 정리해야지.. 근데 당분간은 못할거 같다.다른것도 해야지... 해야지.. 아무튼 오늘은 내가 개인적으로 모의면접을 부탁해서 고것들을 위주로 학습할예정이다.수정되있는게 있으면 반영해야지1. callByValue vs callByReference 2. 이펙티브 final -> 람다 캡쳐링3. Runnable vs Thread 4. for문 vs 람다 forRoop 5. equals에서 hashcode의 관계요렇게다 문제 순서는 저렇지는 않는데... 암튼 고건 중요한게 아니구callByValue vs callByReference 요거같은 경우는 자바에서는 어떤것을 지원하는지 물어보는 질문이었다.이게....