일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코틀린
- Kotlin
- 백준 13460 Python
- 스프링 핵심 원리 - 기본편
- Kotlin In Action
- 스프링 핵심 원리
- 스프링 핵심 원리 이해
- 고급매핑
- Kotlin in action 10장
- 스프링 컨테이너와 스프링 빈
- 백준 20055 컨베이어 벨트 위의 로봇
- 20055 컨베이어 벨트 위의 로봇
- 코틸린인액션
- 싱글톤 컨테이너
- Kotlin in action 6장
- 기능개발 python
- 컨베이어 벨트 위의 로봇 Python
- kotlin in action 정리
- 7장 고급매핑
- 객체 지향 설계와 스프링
- spring
- 백준
- Python
- Kotlin in action 3장
- Kotlin in action 5장
- KotlinInAction
- 코틀린인액션
- 자바 ORM 표준 JPA 프로그래밍 7장
- 13460 구슬탈출 2
- 20055
- Today
- Total
목록분류 전체보기 (157)
기록하는 습관
** Elasticsearch를 공부하며 정리한 글입니다. Lucene은 내부적으로 일정 크기의 buffer(In-memory buffer)를 가짐. 만약, 내부 버퍼가 없다면 매번 색인하여 세그먼트를 만들어야 할 것이다. Lucene에 색인 작업이 요청될 때 전달된 데이터는 인메모리 버퍼에 순서대로 쌓임 정책에 따라 내부 버퍼에 일정 크기 이상의 데이터가 쌓이거나, 일정 시간이 흐를 경우 버퍼에 쌓은 데이터를 한번에 처리함. 인메모리 버퍼의 데이터를 처리하기 전 인메모리 버퍼의 데이터를 처리한 후 한 번에 처리된 데이터는 segment 형태로 생성되고 즉시 Disk로 동기화 됨. -> Disk 동기화까지 되어야 검색이 가능해짐!!!! 문제점 Segment 생성될 때마다 물리적 동기화를 진행하면 성능이 ..
** Elasticsearch를 공부하며 정리한 글입니다. [ 색인 이중화 ] 참고 검색 서비스 운영 중에 실수로 색인을 잘못 만들어 검색결과에 일부 데이터가 누락된 일이 있다면? 원본 색인(some-index)의 문제로 인한 장애를 발견한다. 새로운 색인(some-index-new)을 만든다. 스냅샷 또는 원본 데이터 저장소로부터 데이터를 추출하여 새로 만든 색인(some-index-new)에 색인한다. 검색 클라이언트 코드 내에 하드코딩되어 있는 색인명(some-index)을 새로 만든 색인명(some-index-new)으로 변경하고 배포한다. 여기에는 두 가지 문제점이 있다. 첫번째는 위 과정이 완료될 때까지 장애가 서비스에 그대로 노출된다는 점이다. 색인하는 것은 검색 서비스에서 가장 많은 시간이..
HTTP 완벽 가이드 10장 10.1 HTTP/2.0의 등장 배경 HTTP/1.0의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화 되었기에, 성능을 희생시킨 면이 있다. 대표적으로 커넥션 하나를 통해 요청 하나를 보내고 응답을 받아야만 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연이 생겼다. 이 문제를 해결하기 위해, 병렬 커넥션, 파이프라인 커넥션이 도입되었지만 근본적인 해결책은 되지 못했다. 성능 개선을 위한 여러 아이디어들이 제시가 됐고, 그 중 구글의 SPDY 프로토콜을 기초로 HTTP/2.0이 설계되었다. SPDY: 비표준 개방형 네트워크 프로토콜로, 기존의 HTTP에 속도를 개선하기 위해 여러 가지 기능을 추가. 헤더를 압축하여 대역폭 절약 하나의 TCP 커넥션에 여러 요청..
[ 컴포넌트 스캔과 의존관계 자동 주입 시작하기 ] 지금까지는 스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직 접 등록할 스프링 빈을 나열했다. 만약 등록해야 할 빈이 수백개가 된다면 관리하기 번거로워진다. 따라서, 스프링은 설정 정보가 없어도 자동으로! 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. 의존 관계도 자동으로 주입해주는 @Autowired 기능도 제공한다. 컴포넌트 스캔(Component Scan) @Component 어노테이션이 붙은 모든 클래스를 스캔해서 스프링 빈으로 등록한다. 이 때, 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. 빈 이름 기본 전략: MemberServiceImpl 클래스 -> memberS..
[ 싱글톤(Singleton) 패턴 ] 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 객체 인스턴스를 2개 이상 생성하지 못하도록 private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 한다. 싱글톤 미적용 상태 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다. 만약, 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다.. -> 메모리 낭비가 심함! 싱글톤 적용 상태 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회 할 수 있다. 이 메서드를 호출하면 항상 같은 인스턴스를 반환한다. [ 싱글톤 패턴 문제점 ] 싱글톤 패턴을 구현하는 코드 자체가 많이 ..
2019년부터 해오던 목표 세우기와 회고를 2021년은 절반이 지난 6월말이 되어서야 한다. 2020년 12월부터 '스마일게이트 Dev Camp' 인턴십을 진행해 2021년 2월에 종료된 후 약 2주 정도 휴식을 가진 후에 2021년 3월부터 정규직으로 다니게 되었다. 정규직이 된 후 신입 3개월 프로젝트를 진행하느라 6월까지 2021년은 절반 참 바쁘게 살아왔던거 같다. 문득 내 2021년 목표가 생각나서, 절반이 지났지만 아직 절반이 남았기에..! 목표를 세워보려고 한다. 2021년 목표 1. 회사에서 배운 기술들, 얻게 된 지식들을 기록하는 습관 들이기. (회사 쉐어포인트 사용) 2. Java 마스터가 되기 -> Spring 프로젝트 1개 이상 진행하기 3. 알고리즘 꾸준히 풀어서 감 잃지 않기 (..
[ Spring Container(스프링 컨테이너) ] ApplicationContext 를 스프링 컨테이너라 한다. 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용한다. 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다. 스프링 빈은 @Bean 이 붙은 메서드의 명을 스프링 빈의 이름으로 사용한다. ( memberService , orderService ) 스프링 빈은 applicationContext.getBean() 메서드 를 사용해서 찾을 수 있다. 스프링 컨테이너 생성 ApplicationContext를 스프링 컨테이너라 하고 인터페이스이다. 스프..
[ 들어가며 ] 이번 프로젝트는 순수 Java를 활용한 코드로, Spring 요소가 들어가지 않음. DI와 DI Container가 어떤 역할을 하는지 아는 것이 핵심. SOLID 관점에서 DI 적용 전/후를 비교해서 보는 것이 핵심. [ 비즈니스 요구사항과 설계 ] 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있 다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아..