일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
31 |
- 소프티어
- proxyFactory
- db
- mapstruct
- Service 계층 테스트
- Java
- 인프콘2023
- 자바
- 2025 계획
- Test Doulbe
- Junit 5
- modelmapper
- MySQL
- 일상
- FCM
- OS
- 공룡책
- 테크쇼
- 직장인 회고
- enumSet
- Server
- Test
- 갓생
- 2024회고
- softeer
- JPA
- Test code
- Spring
- Coputer Science
- ExceptionResolver
- Today
- Total
목록전체 글 (62)
공부내용공유
서론 공부를 하다가 평소에는 딱히 생각 없이 사용하던 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 } 이렇게 사용했을..

서론 인덱스가 쿼리 성능에 굉장히 많은 영향을 끼치는 것도 사실이지만 그 외에도 고려해야할 다른 요소들도 많다. 해당 글에서는 이전 글에서 다루지 않았던 인덱스 외 튜닝 포인트들을 (특히 실무를 진행하면서 만날법 한) 정리할 예정이다. 본론 Order By 관련 최적화 Order By 절에 명시된 칼럼에 인덱스가 있다면 이미 정렬되어 있는 상태이기 때문에 추가적인 정렬 작업이 필요 없어진다. 인덱스가 없다면 정렬 작업을 따로 수행해야 하는데 데이터 양이 Buffer 보다 적다 -> 메모리에서 정렬 데이터 양이 Buffer 보다 크다 -> 데이터들을 쪼개서 디스크에 넣고 정렬하고 합쳐서 정렬 실행계획을 확인했을 file sort가 있다면 정렬이 일어난거고 index가 있다면 인덱스를 통해 추가적인 정렬이 ..

서론 어플리케이션의 성능을 고려했을 때 알고리즘, 쿼리 자체도 영향을 많이 끼치지만 인덱스는 단연 굉장히 높은 비중을 차지한다. 인덱스 설계, 튜닝을 할 때 어떤 부분들을 고려해야 하고 개선할 수 있는지 공부하기 위해 인프런의 MySql 성능 최적화 라는 강의와 MySQL 도큐먼트를 공부하고 정리하기 위해 이 글을 작성하였다. (해당 강의에는 다양한 최적화 방법을 다루고 있지만 이 글에서는 index 파트에 대해 다룰 것이다.) 본론 카디널리티 확인 방법 카디널리티는 다들 잘 알고있겠지만 다시 한번 정의를 설명하자면 특정 데이터 집합에서 유니크한 값의 개수이다. 그냥 특정 컬럼의 카디널리티는 select count(distinct(column)) from table 이러한 쿼리로 구할 수 있다. 만약 인..
서론 백엔드를 처음 공부하면서 접했던 계층 개념은 가장 흔히 쓰이는 presentation, service, repository 이 3개의 계층으로 나눈 패턴이었다, 입사를 하고나서 개발중인 프로젝트들 중 위 계층들 외에 business 계층을 추가하는 것을 보았고, 집에서 추가로 공부하면서도 business 계층을 사용하는 예시를 보게되었다. 해당 계층을 사용하면서 내가 느꼈을 때 어떤 이점이 있는지 간단하게 정리하고자 이 글을 작성하였다. (다른 장점, 틀린 내용이 있다면 댓글로 얘기해주세요!) 본론 일단 가장 핵심적인 목적은 도메인 로직만 들어있는 service 계층을 만들기 위해서이다. 도메인 로직만을 남김에 따라 인수인계를 할 때 처음 프로젝트를 보는 사람이 도메인 로직을 체력 낭비 없이 빠르게..
서론 프로젝트를 진행하다 보면 항상 검증에 대해 많이 고민을 하게된다. Request로 들어올 때 부터 철저히 검사해야할지, entity를 만들고 검증을 해야할지 등등... 이처럼 검증에 관해서는 굉장히 다양한 상황들이 있고 은총알은 없다고 생각한다. 해당 글에서는 내가 고민하면서 찾은 내용들, 받았던 조언들을 정리할 것이다. 본론 먼저 해당 글에서는 흔하게 사용되는 Presentation, Service, Repository 계층으로 나누어진다는 가정하에 글을 작성할 것이다. (entity 패키지, business 계층 같은 부가적인 부분은 생략한다.) 간단한 객체 생성에 대한 API를 예시로 어떤 계층에서 검증을 했을 때 어떤 장,단점이 있는지 알아보자. Presentation 계층 여기서 prese..
서론 spring secutiry에서 mvc에 설정되어 있는 cors config를 어떻게 가져오는 알아보기 위해 코드를 뒤집어 까다가 mvc에 핵심적인 코드를 만났다. spring으로 프로젝트를 진행하면 흔하게 접하는 EnableWebMvc, WebMvcConfigurer 등등을 보았고, 이번 mvc config에 있어서 핵심적인 클래스들, 작동 방식에 대해 이 글에서 정리할 예정이다. 본론 1. @EnableWebMvc @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc { } 위처럼 작..
서론 cors 에 관한 설정은 security를 사용한다면 bean 이름을 security에서 제공하는 bean 이름으로 만들면 filter에 자동으로 주입이 된다. 그리고 spring mvc 차원에서도 WebMvcConfiguer와 같은 클래스를 상속하고 메서드를 오버라이딩 하면 해당 메서드에서 커스터마이징 한대로 설정이 적용된다. 만약 2가지 설정이 있으면 어떤 것이 작동하는지 궁금해져서 security 내부 코드를 간단하게 살펴보고 정리하였다. 본론 CorsConfigurer class public CorsConfigurer() {} public CorsConfigurer configurationSource(CorsConfigurationSource configurationSource) { this..
서론 프로젝트를 진행하면서 사용자가 원하는 종류에 따라서 기능을 실행해야 하는 요구사항이 있었다. 간단하게 예시를 들자면 Kakao, naver, google, iphone 과 같은 써드파티 로그인 기능들을 구현해야 하는 상황이라고 생각할 수 있다. 위와 같은 로그인 기능을 예시로 프로젝트에서 어떤 식으로 팩토리 패턴을 적용했는지 글을 작성할 예정이다. 본론 일단 팩토리 패턴을 적용하지 않은 간단한 예시 코드를 만들어보자. (각 써드파티 로그인 별로 인증 로직이 조금 다르다고 가정하겠다. ) // controller public Response login (@RequestBody loginRequest) { Boolean success = userService.login(loginRequest); ret..
서론 프로젝트를 하면서 검색 기능을 구현해야 했다. 기능 구현을 위해 알아봤던 내용을 간단하게 정리하였다. 본문 전문 검색 인덱스(Full Text Search Index) Full-Text-search-index(전문 검색 인덱스)란 많은 형태의 데이터가 있을 때 효율적으로 데이터를 찾는 방법중 하나로 텍스트로 구성된 데이터의 내용을 기반으로 생성한 인덱스이다. 메일, 메세지 내용을 기반으로 검색을 할 때 효율적으로 검색하기 위해 필요하다. MongoDB 전문 검색 인덱 알고리즘 불용어(stop word) 처리 가치 없는 단어를 필터링 주로 대명사, 관사, 전치사, 주요 동사 형태소 분석 검색어로 선정된 단어의 어근을 찾는 작업 처리과정 불용어 처리 there are not droids you are ..