분류 전체보기

· Spring-boot
최근 팀원과 협업 프로젝트를 진행하는 과정에서 Repository Layer를 구성할 때 일반적으로 사용하는 JPARepository 외에 Repository라는 인터페이스를 확장 사용하여 구현하였기에 궁금하여 이에 대해 조사 후 포스팅하게되었다. JPARepository 위의 그림은 Spring Data JPA 진영에서 제공하는 인터페이스의 상속관계를 도식화한것으로 아래로 갈 수록 저수준 모듈이며 기능 구현이 많음을 알 수 있다. JPARepository의 최대 장점은 인터페이스에 별다른 정의 없이 다양한 메서드를 사용할 수 있다는 것이 장점이다. 하지만 이 또한 JPARepository의 최대 단점으로 다가온다. 이는 객체 지향의 관점과도 연관되는데 불필요한 메시지 노출된다는 점이다. 불필요한 메시지..
What is Index? 데이터를 빠르게 검색하고 조회하기 위해 사용되는 특정 칼럼 또는 칼럼의 조합에 대한 정렬된 데이터 세트이다. 데이터가 정렬된채 삽입이 일어나기에 삽입 속도가 느리지만, 그만큼 조회에서의 이점을 얻는다. 본격적인 사용내용을 말하기에 앞서 DDIP 프로젝트에 Index를 적용하게된 이유는 다음과 같다. DDIP은 선착순 기반의 링크 시스템이기 때문에, 많은 사용자가 하나의 이벤트에 대해조회하거나 이벤트에 참여할 것을 고려해야하였다. 그렇기에 동시성처리와 더불어 조회 쿼리의 성능을 향상시키는 것은 상당히 중요한 관건으로 고려되었고 중요도가 높은 API(사용자 조회가 많을 것으로 예상되는 API)와 관련된 컬럼에 인덱스를 설정하는 작업이 필요로 되었다. 그렇다면 Index 설정하면 무..
IaC의 최대 장점은 수동으로 설정하던 인프라 구조를 코드를 통해 작성함으로서 획일화 된 작업으로 설정 및 제거 할 수 있다는 것다. 즉, 코드를 통해서 인프라를 관리하고 프로비저닝할 수 있다. 어떤 상황에 효율적일까? 🤔 인프라를 완전히 다른 리전이나 IaaS에 똑같이 복제하고 싶을 경우 해당 리전이 사용할 수 없는 상황에 직면했을 경우 기존과는 다른 새로운 아키텍처를 빠른 시간 내에서 적용해야할 경우 다른 이점은 뭐가있을까? GUI 환경에서는 쉽게 서비스를 제공하고, 아키텍처를 빠르게 실험해볼 수 있다는 장점이 있었다. 하지만, 아래와 같은 단점을 가지고 있다. 설정값이 인프라 환경에 어떠한 영향 주는지 파악하기에 명시적이지 않다. 환경 설정에 대한 내용을 다른 팀 멤버에 전달하기 어렵다. IaC의 ..
· Java
Record Java 진영에서 JDK 16부터 정식스펙으로 새롭게 추가 클래스 선언 방법이다. 보일러 플레이트 코드(Bolierplate Code)를 줄이는 것을 목표로 도입되었다 💡 Bolierplate Code 코드의 재사용성이 높고 변경이 적은 코드 Java 진영에서는 getter, setter, equals, hashCode, toString 이나 접근제어자가 이에 해당 프로젝트의 진행을 위해선 반드시 필요하지만 반복적으로 작성되어야 하기 때문에 개발 효율성을 저하시키는 요소로 판단된다. 물론, lombok이나 IDE의 도움을 받아 코드를 간결하게 만들 수 있지만 이는 언어 자체의 해결방법이라기 보다는 라이브러리의 이용을 통해 해결된 부분 Record의 핵심 목표 객체 지향의 사상에 맞게 데이터를..
· 이성호
최근들어 개발자로서의 나에게는 상당한 고민이 있었다. 내 모토 중 하나인 함께 성장하기를 어떤 방법을 통해 지향할 것 인가? 또 하나는 넓이보다는 깊이를 챙기는 학습을 하자였다. 함께 자라나기 이전에 모함코를 만들고 종료된 후, 상당히 긴 시간동안 함께 성장을 촉진한다는 것을 말로만 할뿐이지 실천에 옮기지 못했다는 생각을 상당히 자주해왔다. 예전에 나의 시야는 함께 학습하는 것에만 국한이되어 "다같이 스터디 하는것만이 함께 성장하는 방법이야!"라고 생각을 해왔다. 하지만, 최근에 들어서는 "함께 코드리뷰를 한다거나, 공통된 주제로 준비되지 않는 토론을 하고, 서로 학습하면 좋을 것 같은 정보들을 공유하는 것이 오히려 본질에 가깝지 않을까?"라는 생각을 하게되었다. 그래서 이를 당장 실행에 옮기기로 마음먹..
· Spring-boot
Spring Data JPA를 사용할 때 10,000건 혹은 100,000건의 대규모 데이터를 저장하려면 어떻게 해야할까? 단순 계산으로만도 생각을 해보았을 때, 엔티티 1 : insert 쿼리 1의 방식을 서버에 부담시킨다고 가정하면 그 부하는 상상하기 힘들것이다. 우리는 이러한 부분을 개선하기 위한 방법으로 jdbc에서 설정값으로 제공하는 batch_size를 사용하는 법도 있지만 JDBCTemplate를 이용하는 Case를 소개하고자한다. Bulk Insert 우선 벌크연산이란 무엇일까? 데이터베이스에서 하나의 쿼리로 여러 데이터를 처리하는 작업을 말한다. 보통 삽입,수정,삭제 작업에 사용된다. 기본적으로 3건의 삽입(insert) 쿼리를 처리한다고 가정하면 아래와 같은 쿼리를 떠올릴 것이다. 일반..
· Java
이번 유니톤 10기의 해커톤대회를 진행하며, 상당히 어이없는 에러를 일으켰었다. 로직중 Server-Sent-Events를 구현하는데 있어, 전략으로 SseEmitter를 선택하였고 한 유저당 하나의 객체를 세션에 저장시키기위해 ConcurrentHashMap을 사용하여 유저의 닉네임(PK값)과SseEmitter 객체를 매핑시켜 관리하였다. 이중 중복 저장을 방지하기 위하여 아래와 같은 유효성 검사 로직을 작성하였는데, 해당 메서드의 반환타입이 Boolean 즉, Wrapper 클래스타입인게 문제였다. 그렇기에 조건문에 Null이 허용되어, 조건문에서 NPE가 발생하는 경우가 생겨버렸다. 당연하게도 원시타입으로 바꾸어 간단히 해결할 수 있는 Trouble이었지만, 객체로서 사용하지않아도 됐다는 점에서 ..
필자의 경우 Java에서 예외를 다루는법은 try/catch 이외에는 잘 알고있지 못했다. 하지만, 테스트코드에서 예외를 다루기위해 try/catch를 쓴다는 것은 정말이지 부적합 문법이라고 생각을 했고, 이를 역시 Junit측에서도 인지를 하였기에 별도의 예외처리를 위한 메서드를 구현해두었다. Junit에서 Assertions를 통한 예외를 다루는법 우선적으로 예외를 다루기 위해서 예외를 발생시키 메서드를 하나 생성하자. public class OnlyUseException(){ public static void error() { throw new RuntimeException("Something Error!"); } } 이를 실제 테스트코드에 적용시킨다면, 마냥 에러를 발생시키는 것이 아닌 테스트 조..
LEE티씨
'분류 전체보기' 카테고리의 글 목록 (3 Page)