일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- proxyFactory
- MySQL
- 2024회고
- Test
- 직장인 회고
- Java
- Test code
- OS
- Spring
- 자바
- softeer
- JPA
- FCM
- 소프티어
- 인프콘2023
- 일상
- 테크쇼
- 2025 계획
- modelmapper
- mapstruct
- Server
- ExceptionResolver
- enumSet
- 갓생
- Coputer Science
- Junit 5
- db
- Test Doulbe
- 공룡책
- Service 계층 테스트
- Today
- Total
목록분류 전체보기 (60)
공부내용공유
서론 온보딩 프로젝트를 맡으면서 처음 mongoDB를 사용하게 되어서 정신없이 mongoDB의 기본적인 문법과 spring 에서 제공하는 spring mongo jpa, mongoTemplate 만을 공부하고 디테일한 요소를 챙기지 못했었다. java에서 Bson을 위해 ObjectId 라는 객체를 지원한다는 것을 모르고 id는 String 으로만 사용했었고, 시간 관련 작업을 할 때 id를 활용하겠다는 생각을 못하다가 나중에야 알게되었다. 이 글에서는 objectId의 개념과 java에서 지원하는 객체에 대한 설명, id를 시간 관련 기능에서 어떻게 사용할 수 있는지 정리할 예정이다. 본론 ObjectId란? 저장되는 ObjectId의 예시를 보면 ObjectId(6629ad81291d943e5..
서론진행중인 프로젝트에서 쿼리에 Group By 를 사용해야하는 기능이 있었다. 학부생 때, SQL 문제를 풀 때 Group By를 사용하면 Select 절에는 Group By의 기준 값이나, 집계함수만 사용할 수 있는줄 알았는데 MySQL 5.7 이후로는 사용 가능 여부를 설정이 가능했다 (하지만 사용시 주의해야 할 점이있다). 이 글에서는 해당 내용에 대한 간단한 설명과 내가 group by로 해결하지 못하고 Window Function으로 해결한 간단한 쿼리를 정리할 예정이다. 본론GroupBy의 사실과 오해 간단한 예시 쿼리로 한번 설명해보자select category, max(price), from itemgroup by category 아이템을 카테고으로 그룹화 하고 카테고리의 이름, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GVoxr/btsGZn77eNP/l5ayhGd6ivza0C18sYtP6k/img.png)
서론MySQL에서도 고려할만한 주제이지만 특히 MongoDB를 사용할 때 많이 고민하게 되는 부분은 정규화, 반정규화 이다. 결국 상황에 맞게 알잘딱깔센으로 하는게 대부분 자료들의 결론이지만 자료들(몽고DB 완벽 가이드, Real MongoDB)을 찾고 보면서 간략하게 내용을 정리해 보았다. 본론정규화 vs 비정규화 먼저 정규화와 비정규화의 차이를 학생과 과목을 예시로 살펴보자 - students (학생별 도큐먼트)- classes(과목별 도큐먼트)- studentClasses(학생과 강의를 참조하는 도큐먼트) 학교 수업 관리자가 학생들이 듣는 과목 리스트, 상세 정보들을 조회하고 싶다면 어떻게 해야할까? 일반적인 잘 정규화된 테이블에서 SQL의 방식은 Student 아이디로 Studen..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oyagd/btsGNQor6c9/tjyXRK0QQpcsBKIIQaMwsk/img.png)
서론 프로젝트에서 벌크성 기능을 개발하면서 Mongo DB의 벌크성 쿼리에 대해 조사를 하게 되었다. (어떻게 작동하고, 오류 발생시 어떻게 처리할지) 해당 글에서는 내가 조사한 내용과 테스트 해본 내용을 정리할 예정이다. 본론 1. 쿼리 종류 먼저 Mongo DB에서 지원하는 벌크성 쿼리들을 종류를 나열해보면 insertMany updateMany deleteMany Bulk Write 정도로 구분할 수 있다. 여기서 조금 헷갈릴만한 부분은 Many 시리즈와 Bulk Write는 무슨 차이가 있을까이다. Many 시리즈 쿼리들은 말 그대로 여러 documente들에 대해 update, delete, insert와 같은 연산을 진행하는 쿼리이다. Bulk 쿼리도 위와 같은 방식으로도 여러 document..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ceoL8P/btsGqQBufXZ/Q4dUsabaPabKHzLEbrsSz1/img.png)
서론 현재 우리 팀은 새로 시작하는 프로젝트들은 대부분 DB를 Mongo로 만들어 진행하고 있고 추후 RDB를 사용하고 있는 프로젝트들도 Mongo로 전환 예정이다. MongoDB로 이전하는 이유를 여쭤봤었는데 여러가지 이유가 있지만 제일 큰 이유는 샤딩되어 있는 DB의 원활한 관리라고 하셨다. (현재 도메인의 데이터가 굉장히 많아 여러 sub db에 데이터를 저장하고 있다.) 샤딩이 무엇인지 정리하고 MongoDB에서는 샤딩을 어떠한 방식으로 지원해주는지 정리하기 위해 이 글을 작성하였다. 본론 먼저 sharding만 알아보면 살짝 아쉬우니 이 김에 partitioning과 replication도 같이 알아보자! (두 개념도 알아야 MongoDB의 sharding 방식도 편하게 이해할 수 있다.) Pa..
서론 프로젝트를 진행하다보면 null을 핸들링 해야하는 다양한 상황을 만난다. 오늘도 null 처리를 어디서, 어떻게, 어디까지 해줄까를 고민하고 팀원 분과 얘기를 하고 있었는데 kotlin의 문법을 null 처리 관련한 연산자를 알려주셨다. 코틀린을 사용해본 적이 없어서 이번 기회에 코틀린에서 지원해주는 null 핸들링 도구가 무엇이고 어떤 장점이 있는지와 내가 고민했던 java에서 null 처리 방법을 정리할 예정이다. 본론 적어도 null 처리 관점에서 가장 이상적인 객체의 설계는 nullable 한 필드가 없게하여 객체를 사용할 때NullPointerException을 피하는 설계라고 생각한다. 하지만 개발을 하다보면 Nullable한 값을 선언하고 (객체의 필드이든 메서드의 파라미터이든) 이를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uImL0/btsFZuzFL5S/Ba2sMSmyD7pr5IhkRqlGvK/img.png)
서론 DB에 직접 bulk update 쿼리를 실행시켜야 했는데 어떻게 하면 조금이라도 최적화 시킬 수 있을까를 검색을 하였더니 temporal table을 만드는 방식이 있었다. 해당 방식을 이번에 처음 알았고 성능이 얼마나 달라질까 궁금하여 직접 일반 업데이트와 temporal table을 생성하여 업데이트 하는 방식을 비교해보았다. 이 글에서 어떤 식으로 쿼리를 작성했고, 결과는 어땠는지를 정리할 예정이다. 본론 실험 조건 데이터는 대략 10만개를 넣어주었다. 많은 필드를 업데이트 하지는 않았고, 단 한 필드만 업데이트 하면 되는 상황이었기에 테스트를 할 때도 한 필드만 업데이트를 했다. (만간에 여러개 업데이트 할 때도 테스트를 할 예정이다.) 일반 update query update item s..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sXBOk/btsFP758XAy/qv0lCptsvgNYGdC5kOzOqK/img.png)
서론 현재 프로젝트에서 record를 dto로 열심히 사용중인데 처음에는 별 생각없이 아래 계층 dto로만 사용하다가 requestBody로는 왜 사용을 안하고 있었지라는 생각이 들어 코드를 바로 작성하였다. 그런데 JsonParsingError가 발생했다. requestBody 맵핑 과정 를 공부한 후라 맵핑이 안될이유가 없는데? 라고 생각을 하면서 열심히 삽질을 하여서 왜 안되는지 알게되었다. 이 글에서는 삽질 과정을 기록하기 위해 글을 작성하였다. 본론 내가 예외를 만나고 의심한 포인트들을 나열하고 간단하게 설명할 예정이다. build 처음에 jsonParsingException이 발생한 것을 보고 build tool이 intellij인지를 확인했는데 gradle이었고 그렇다면 문제없이 mappin..
서론 공부를 하다가 평소에는 딱히 생각 없이 사용하던 HashMap에 일반적인 put, remove와 같은 메서드 뿐만이 아니라 훨씬 더 많은 메서드가 있고 내부적으로 복잡하게 동작하는 클래스라는 것을 알게 되었다. java 8 이후로 (java 8 이전 HashMap도 공부할 것이 많긴 하지만) 구현된 HashMap 클래스에 있는 중요한 내용들을 분석하고 정리하였다. 본론 Node HashMap class 를 열었을 때 가장 먼저 Node 라는 클래스를 볼 수 있다. static class Node implements Map.Entry { final int hash; final K key; V value; Node next; Node(int hash, K key, V value, Node next) {..
서론 프로젝트를 진행하다 보면 Enum은 한번쯤은 꼭 사용하게 되는 타입이다. 맨 처음 프로젝트에서 Enum을 사용할 때는 단순히 열거를 위해서만 사용하고 타입 안정성을 위해서 사용하는구나 하고 넘어갔었는데 다른 프로젝트를 진행하면서 받은 리뷰를 통해 Enum의 다양한 활용법, Enum을 위한 특별한 (java의) 자료구조등을 알게되었다. 이번 글에서는 Enum에 대한 설명보다는 Enum을 어떤식으로 활용할 수 있는지, Enum을 사용할 때 알고있으면 좋은 자료구조에 대해 주로 다룰 예정이다. 본론 Enum 기본 활용 일단 가장 기본적인 Enum 사용법을 보자 public enum Message { NORMAL, ENCRYPTED, ANONYMOUS, RESERVATION, KAKAO } 이렇게 사용했을..