일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 김영한
- 이펙티브자바
- java
- 자바
- 클린아키텍처
- 엘라스틱서치
- k8s
- 알고리즘
- 자바스크립트
- 카카오 면접
- 스프링핵심원리
- 티스토리챌린지
- 스프링
- 이펙티브 자바
- Effective Java 3
- 알고리즘정렬
- 이차전지관련주
- kubernetes
- Spring
- Sort
- 오블완
- 카카오
- 스프링부트
- Effective Java
- JavaScript
- 스프링 핵심원리
- 예제로 배우는 스프링 입문
- ElasticSearch
- 코딩테스트
- effectivejava
- Today
- Total
목록2020/08 (21)
Kim-Baek 개발자 이야기
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 서블릿 컨테이너 먼저 서블릿컨테이너를 정의하면 다음과 같을 수 있다. 서블릿 컨테이너는 웹 애플리케이션 서버중에서 HTTP 요청을 받아 처리하는 기초 역할을 맡고 있다. 대부분의 웹 프레임워크가 제공하는 기능은 서블릿 컨테이너 위에서 동작하는 서블릿, 필터, 이벤트 리스너등을 적절하게 구현한 것이다. 따라서 사용자가 웹 프레임워크로 작성한 웹애플리케이션은 결국 서블릿 컨테이너 위에서 동작한다. 서블릿컨테이너의 종류로는 아파치 톰켓, 제티등이 서블릿 컨테이너로 현재 널리사용 된다. 서블릿 구현 먼저 톰캣 즉 서블릿 컨테이너에 의해 프로그램이 실행되기 위해서는 표준 즉 Servlet interface를 구현해줘야 한다.사용자 정..
구현하고자 하는 비즈니스 로직과는 다소 거리가 있으나, 여러 모듈에 걸쳐 공통적이고 반복적으로 필요로 하는 처리 내용을 횡단 관심사라고 부른다, - 보안 - 로깅 - 트랜잭션 관리 - 모니터링 - 캐시 처리 - 예외 처리 이러한 것들이 예시가 될 수 있다. 횡단 관심사에 해당하는 부분을 한 곳으로 모으는 것을 횡단 관심사의 분리라 하고, 실현하는 방법을 관점 지향 프로그래밍이라 한다. AOP는 관점 지향 프로그래밍을 의미하는 약자로, 여러 클래스에 흩어져 있는 횡단 관심사를 중심으로 설계와 구현을 하는 프로그래밍 기법이다. 인스턴스들이 필요한 공통적인 기능을 외부에서 집어넣는 것이다. AOP의 개념 - 애스팩트 : 단위되는 횡단 관심사. 예로 "로그를 출력한다", "트랜잭션을 관리한다"와 같은 관심사가 ..
자바 앱을 개발 할 때, 요즘에는 여러 인터페이스를 결합해서 쓰는 경우가 많다. 결합해서 쓸 때, 구체 클래스를 미리 생성해서 하려면, 이 클래스는 미리 개발이 되어야 있어야 하고, 교체가 힘들다. 이를 위해서, 생성자를 통해서, 받기도 하는데 , 이것도 마찬가지로 더미로 쓰고 있다면 바꿔줘야 하는 문제가 있다. 컴포넌트를 외부에서 생성한 후, 내부에서 사용가능하게 해주는 것을 의존성 주입이라 한다. 의존성 주입을 자동으로 하는 기반을 DI 컨테이너라고 한다. 스프링에서 가장 중요한 것이 이 DI 컨테이너의 기능이다. 스프링에 미리 인터페이스와 구현 클래스를 알려주고, 의존 관계를 정의하면 생성될 때, 구현 클래스가 자동으로 생성되어 주입 된다. 이것의 장점은, 의존성 해결도 있지만, 스코프 관리 ( 싱..
빈번하게 사용되는 함수적 인터페이스(Functional Interface)는 java.util.function 표준 API 패키지로 제공한다. java.util.function 패키지의 함수적 인터페이스는 크게 Consumer, Supplier, Function, Operator, Predicate로 구분된다. > 필요한 용도에 맞는 게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라 java.util.function 패키지에는 총 43개의 인터페이스가 있지만, 6개만 알면 나머지는 유추 가능 1. UnaryOperator -> 인수가 1개 String::toLowerCase 2. BinaryOperator -> 인수가 2개 BigInteger::add 3. Predicate -> 인수 1..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 Java의 OOM와 Memory Leak 자바는 Garbage Collection이라는 메모리 관리방식을 채택하고 있어서, 사용자는 메모리에 큰 관심을 두지않고도 어플리케이션을 작성할수 있지만, 떄로는 메모리 누수 (Memory Leak)에 관심을 가져야 할 때가 있다. 메모리 누수란 Garbage Collection되어야 할 메모리가 정리되지 못하고 계속 Java의 메모리 공간에 남아있는 현상을 말한다. 이 Memory Leak이 계속 되면 결국 OOM( Out Of Memory - 메모리 부족)현상이 발생해서 어플리케이션이 더이상 동작하지 못하고 JVM이 종료되는 최악의 상황이 된다. 그러므로 상용, 특히 24시간 서비스..
Aggregations Aggregation은 검색 쿼리를 바탕으로 집합된 데이터를 제공해주는 프레임워크이다. 복잡한 데이터들을 요약하기 위해서 Aggregation이라고 불리는 작은 블록들로 구성되어있다. Aggregation은 각각의 목적과 결과에 해당하는 타입들이 존재한다. Bucketing, Metric, Matrix, Pipeline 등 다양한 타입들이 존재한다. Aggregation 구조 Aggregation은 JSON Object 형태이다. 은 사용자가 정의한 논리적인 이름이다. 예를들어 학생의 수 sum_student 처럼 정의 가능하다. "aggregations" : { "" : { "" : { } [,"meta" : { [] } ]? [,"aggreg..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 1. Servlet(서블릿) 서블릿을 한줄로 정의하자면 아래와 같이 정의할 수 있습니다. 웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술 간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 그런데 좀더 들어가서 설명하자면 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다. 예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다. 그때 서버는 클라이언트의 아이디와 비밀번호를 확..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅
Mapping Mapping은 Document가 어떤 field들을 포함하고 저장할지를 정의하는 것이다. index를 생성하면 자동으로 기본 mapping이 생긴다(Dynamic Mapping). 각각의 index는 하나 이상의 mapping type들을 가지고 있다. Mapping type은 Meta-field 와 Field or property 을 가지고 있다. Field Datatype 각각의 field들은 데이터 타입을 가지고 있다. 간단한 데이터 타입(text, keyword, date, long, double..) 부터 복잡한 데이터 타입(array, object..) 등 document의 field들을 위한 타입이 존재한다. Field를 사용하는 목적과 방법에 따라 Datatype을 사용하는..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 자바10 자바11 새로운 가비지 컬렉터 ZGC: A Scalable Low-Latency Garbage Collector (Experimental). 성능을 향상시킨 새로운 가비지 컬렉터(Carbage Collector)입니다. 메모리를 자동으로 정리해주는 가비지 컬렉터는 자바의 장점 중 하나이지만, 가비지 컬렉터가 동작할 때 JVM이 애플리케이션을 멈추기 때문에 자바의 단점이기도 합니다. ZGC는 이 시간을 10ms 미만으로 줄이고 15% 이하의 성능 페널티를 목표로 합니다. Flight Recorder Flight Recorder. 자바 애플리케이션과 HotSpot JVM의 문제 해결을 위한 오버헤드가 낮은 데이터 수집 ..
Index API Index API를 이용해 JSON Document를 특정 index에 insert, update 할 수 있다. Create index & Delete index # Check Cluster Health curl -XGET 'localhost:9200/_cat/health?v&pretty' # Create index curl -XPUT 'localhost:9200/myIndex' # Get all indexing curl -XGET 'localhost:9200/_cat/indices?pretty' # Delte index curl -XDELETE 'localhost:9200/myIndex' Insert Document & Query Insert Document PUT {index}/{t..
elasticsearch Elasticsearch는 높은 확장성을 가지고 full-text 검색과 분석 엔진을 가진 오픈소스이다. 대용량의 데이터도 거의 실시간으로 저장하고 검색하고 분석할 수 있다. Elasticsearch는 오픈소스 분산 시스템이며 아파치 루씬(오픈소스 검색 라이브러리)을 기반으로 만들어졌다. Elasticsearch 의 다양한 기능 빠른 검색 제공 - 각각 단어가 어디에 속해있는지 목록을 유지하는 자료구조를 생성하여. 루씬 기반의 reverse indexing 을 사용한다. 로그 수집 및 데이터 분석 - Elasticsearch, Logstash, Kibana 스택을 이용하여 로그를 수집하고 분석할 수 있다. 관련성 보장 - 기본적으로 tf-idf 알고리즘을 사용하여 검색어에 대한 ..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 Serial GC (-XX:+UseSerialGC) Young 영역에서의 GC는 앞 절에서 설명한 방식을 사용한다. Old 영역의 GC는 mark-sweep-compact이라는 알고리즘을 사용한다. 이 알고리즘의 첫 단계는 Old 영역에 살아 있는 객체를 식별(Mark)하는 것이다. 그 다음에는 힙(heap)의 앞 부분부터 확인하여 살아 있는 것만 남긴다(Sweep). 마지막 단계에서는 각 객체들이 연속되게 쌓이도록 힙의 가장 앞 부분부터 채워서 객체가 존재하는 부분과 객체가 없는 부분으로 나눈다(Compaction). Serial GC는 적은 메모리와 CPU 코어 개수가 적을 때 적합한 방식이다. Parallel GC (-..
Tree Traversal Tree Traversal 은 트리 순회이다. Tree 자료구조에서 각각의 노드를 정화히 한 번만, 체계적으로 방문하는 과정이다. 전위 순회(PreOrder Traversl) Root 노드부터 탐색하기 시작한다. root => sub left => sub right PreOrder Traversal은 가장 깊은 왼쪽 노드부터 탐색하기 때문에, 우리가 잘 알고 있는 DFS 라고 생각하면 된다. def preOrder(node): print(node, end = ' ') if node.left != null: preOrder(node.left) if node.right != null: preOrder(node.right) 중위 순회(InOrder Traversal) 왼쪽 서브 트리..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 다른 관심사 Blocking-Sync가 비슷하고, NonBlocking-Async가 비슷하지만, Blocking/NonBlocking과 Sync/Async이 2:2 매트릭스 그림에서 각각 다른 축에 자리잡는 데는 이유가 있다. 두 그룹은 관심사가 다르다. Blocking/NonBlocking Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다. 호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있으면 NonBlocking이다. 그렇지 않고 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고..
JPA ( java persistence API ) 는 자바 표준 ORM이다 Entity Entity 는 데이터 베이스에서 영속적으로 저장된 데이터를 자바 객체로 매핑한 것 EntityMananger Entity를 필요에 따라 데이터 베이스와 동기화하는 역할을 담당하는 것. 영속성 컨텍스트 ( Persistence Context ) 라는 엔티티를 관리하는 영역이 있다. 영속성 컨텍스트가 데이터베이스의 캐시와 같은 역할을 한다. 여기에 작업이 수행되더라도 즉시 데이터 베이스 반영은 안됨 영속성 컨텍스트는 트랜잭션마다 준비되기 때문에 엔티티는 같은 트랜잭션에서만 공유되고 다른 트랜잭션에서 처리 중인 엔티티는 보이지 않음 트랜잭션 종료되면 모든 엔티티는 분리 상태다. 스프링 데이터란 데이터베이스나 캐시 서버 ..
Fetch Type 이란 Fetch Type 은 JPA 가 하나의 Entity 를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값입니다. Fetch Type 은 크게 Eager 와 Lazy 두가지 전략이 있습니다. Fetch Type Issue 상황이라는 것은 하나의 Entity 를 로드할 때, 아래의 두가지 전략 중 고민하는 상황을 말합니다. 연관 관계에 있는 Entity 들 모두 가져온다 → Eager 전략 연관 관계에 있는 Entity 가져오지 않고, getter 로 접근할 때 가져온다 → Lazy 전략 N+1 문제는 이럴 때 발생합니다. ManyToOne, OneToOne 컬럼의 FetchType 을 LAZY 로 하였을 경우 발생합니다. 이렇게 하위 엔티티들을 첫 쿼리..
JPA란? ORM vs Sql Mapper 차이점 JPA ( Java Persistent API )와 ORM ( Object Relational Mapping ) JPA란 자바 ORM 기술에 대한 API 표준 명세를 의미합니다. JPA는 ORM을 사용하기 위한 인터페이스를 모아둔 것이며, JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 합니다. Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다. ORM은 데이터베이스 객체를 자바 객체로 매핑함으로써 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해주지만 SQL Mapper는 SQL을 명시해줘야 한다. ORM은 관계형 데이터베..
1. JPA 트랜잭션의 전파방식, 격리 수준에 대한 설명 @Transactional을 클래스 또는 메써드 레벨에 명시하면 해당 메써드 호출시 지정된 트랜잭션이 작동하게 된다. 단, 조건이 있다. 해당 클래스의 Bean을 다른 클래스의 Bean에서 호출할 때만 @Transactional을 인지하고 작동하게 된다.(같은 빈 내에서 @Transactional이 명시된 다른 메써드를 호출해도 작동하지 않는다.) Spring Framework는 내부적으로 AOP를 통해 해당 어노테이션을 인지하여 프록시를 생성하여 트랜잭션을 자동 관리하기 때문이다. Propagation.REQUIRED @Transactional(propagation = Propagation.REQUIRED) 특정 메써드의 트랜잭션이 Propaga..
Spring 앱을 만들다보면 로그를 저장하고 확인해야 할 일이 많다. 앱을 띄우고, 하나의 파일에 로그를 쌓다보면 무한정 커지게 되고, 나중에는 로그 파일을 여는 것 조차 오래걸리는 문제가 발생한다. 또, 앱을 재시작하면, 동일 파일에 로그가 남기 때문에, 이전 로그가 날아가는 문제 또한 생긴다. 이를 해결하기 위해 Spring 에서 logback 설정을 하여, daily 로 rolling 로그를 남길 수 있다. src/java/resources 폴더 아래에 logback.xml 파일을 만든다. 파일의 예시로는 true /home/marble_admin/container-deploy/logs/application.%d{yyyy-MM-dd}.%i.log 30 50MB 1GB INFO %d{yyyy:MM:d..