| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 오블완
- Spring
- 자바
- 스프링핵심원리
- 클린아키텍처
- java
- 엘라스틱서치
- 이펙티브자바
- kubernetes
- JavaScript
- effectivejava
- Kotlin
- 카카오
- 티스토리챌린지
- 카카오 면접
- 김영한
- 자바스크립트
- Effective Java
- 알고리즘정렬
- 이펙티브 자바
- 스프링 핵심원리
- 알고리즘
- Sort
- 스프링부트
- ElasticSearch
- Effective Java 3
- 스프링
- 이차전지관련주
- 예제로 배우는 스프링 입문
- k8s
- Today
- Total
목록개발 (134)
Kim-Baek 개발자 이야기
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 스프링부트는 복잡한 프로젝트 의존성을 '스타터(Starter)' 의존성 수십 개로 해결한다. 그저 프로젝트에 필요한 기능들을 빌드에 선언을 하기만 하면, 그에 필요한 개별 라이브러리들을 자동으로 추가해준다. 스타터 의존성을 사용안한다고 생각해보자. 그렇다면 스타터 의존성의 장점을 바로 알 수 있을 것이다. 스프링 부트 없이 빌드하려면 어떤 의존성을 추가해야 할까? 스프링 MVC를 지원하려면 어떤 의존성들이 필요할까? 어떤 버전을 사용해야 잘 호환이 될까? 이렇듯 이미 코드 첫줄을 작성하기도 전에 빌드 명세에 어떤 것을 추가하여 기능을 만들어야 할지 많은 고민해야 한다. 이러한 많은 고민 끝에 그레이들 빌드 명세에 다음 의존성..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @SpringBootApplication은 다음의 3개의 어노테이션을 포함한다. @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration SpringBoot 어플리케이션 구동에 특히 눈여겨 볼 것은 @ComponentScan 과 @EnableAutoConfiguration @ComponentScan @Component @Configuration, @Repository, @Controller, @Service, @RestController 위 어노테이션을 포함한 모든 클래스를 Bean으로 등록한다. @EnableAutoConfiguration - 설정 자동 등록하기 S..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @WebServlet 서블릿을 선언할 때 사용되는 Annotation 이 Annotation이 표시된 클래스는 Servlet Container에 의해 처리된다. 속성 값을 통해 해당 Servlet과 매핑될 URL 패턴을 지정한다. @Controller 이 Annotation이 표시된 클래스는 “Controller” 임을 나타낸다. @Controller는 @Component의 구체화된 역할을 한다. classpath scanning을 통해 구현 클래스를 자동으로 감지할 수 있도록 해준다. 일반적으로 RequestMapping 어노테이션을 기반으로 한 handler method와 함께 사용한다. @WebServlet과 @Cont..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @Component component-scan을 선언에 의해 특정 패키지 안의 클래스들을 스캔하고, @Component Annotation이 있는 클래스에 대하여 bean 인스턴스를 생성한다. @Controller, @Service, @Repository @Component —구체화—> @Controller, @Service, @Repository bean으로 등록 해당 클래스가 Controller/Service/Repository로 사용됨을 Spring Framework에 알린다. @RequestMapping @Controller @RequestMapping("/home") // 1) Class Level public cl..
@Autowired와 @Resource는 같은 기능을 하는 어노테이션이다. 하지만 둘에는 차이점이 존재한다. 1. @Autowired는 스프링 프레임워크 어노테이션이다. 그렇기 때문에 스프링을 사용하지 않는 환경에서는 @Resource를 사용해야 한다. 2. @Autowired의 경우 type과 id 가운데 매칭 우선순위는 type이 높다. @Resource는 그 반대. 표로 정리하면 다음과 같다. @Autowired @Resource 스펙 스프링 표준 자바 소속 패키지 org.springframework.beans.factory.annotation.Autowired javax.annotation.Resource 빈 검색 방식 byType 먼저. 못 찾으면 byName byName 먼저. 못 찾으면 by..
@SerializedName annotation의 value는 객체를 직렬화 및 역직렬화 할 때 이름으로 사용된다. class Albums { @SerializedName("제목") public String title; @SerializedName("내용") public String message; } { "제목": "Albums" "내용": "Free Music Archive", } isPresent() 라는 메소드를 찾아보다가 optional 쪽을 확인해보게 되었다. boolean isPresent() -> 내부객체가 null이 아닌지 확인한다. null이면 false를 반환한다. Optional 은 따로 정리를 할 필요성이 있다. 아래 포스팅을 참조해보자 www.daleseo.com/java8-op..
ES 를 도커 이미지로 띄우는 과정에서 에러가 발생하였다 [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 해당 문제는 vm이나 윈도우에 띄운다면 간단하게 설정만 변경하면 해결할 수 있는 문제이다. decaffein.tistory.com/entry/Elasticsearch-%EC%8B%A4%ED%96%89%EC%8B%9C-vmmaxmapcount-65530-is-too-low-%EC%98%A4%EB%A5%98-%EC%88%98%EC%A0%95-%EB%B0%A9%EB%B2%95 Elasticsearch 실행시 vm.max_map_count [65530] is too low 오류 수정 ..
Openstack 의 Tenant - Openstack Keystone 에서 사용하는 용어로, 사용자 그룹을 의미할 수 있고, 리소스나 어플리케이션에 권한을 갖고 관리하는 단위라고 볼 수 있다. - Keystone v2 에서 사용하는 용어이고, v3 에서는 project 로 용어가 변경되었다. @ignore - junit의 테스트 중, 제외하고 싶은 내용을 이 어노테이션을 사용하면 해당 테스트는 수행되지 않고 진행하게 된다. - 테스트 자체를 지우고 싶지는 않고, 빌드시 돌리고 싶지 않을 경우에 사용하면 좋을 듯 하다.
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 @Component Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation이다. 즉, scan-auto-detection과 dependency injection을 사용하기 위해서 사용되는 가장 기본 어노테이션이다. @Controller Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다. @Repository 이것은 Annotation based Configuration, @Repository의 작업은 플랫폼 별 예외를 잡아서 Spring의 통합 검사되지 않은 예외 중 하나로 다시 던지는 것입니다. 이를 위해 Pe..
인텔리제이와 이클립스에서 프로젝트의 구조 인텔리제이에서 프로젝트 아래에 여러 모듈을 가지면서 사용한다. gradle 에서 모듈을 세팅하면서 발생한 문제 아래와 같이 build.gradle 파일에 내가 원하는 모듈을 세팅할 수 있다. project(':worker') { springBoot { mainClassName = '메인클래스 명' } dependencies { implementation(project(':core')) compile('org.elasticsearch:elasticsearch:6.6.1') } compileJava.dependsOn(processResources) } 위처럼만 하고 리빌드를 하면 에러가 나오는 것을 확인할 수 있다. Project with path ':mypath' ..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 자바 웹 개발을 하다보면, 공통적으로 처리해야 할 업무들이 많다. 예를들어 로그인 관련(세션체크)처리, 권한체크, XSS(Cross site script)방어, pc와 모바일웹의 분기처리, 로그, 페이지 인코딩 변환 등이 있다. 공통업무에 관련된 코드를 모든 페이지 마다 작성 해야한다면 중복된 코드가 많아지게 되고 프로젝트 단위가 커질수록 서버에 부하를 줄 수도있으며, 소스 관리도 되지 않는다. 즉, 공통 부분은 빼서 따로 관리하는게 좋다. 이러한 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 위와 같은 공통처리를 위해 활용할 수 있는 것이 3가지가 있다. 1. Filter 2. Int..
Kubernetes Service Qwiklabs의 Orchestrating the Cloud with Kubernetes을 공부 하면서 정리한 내용이다. Service Kubernets Service는 논리적인 Pods set의 추상적개념으로 이해하면 된다. 즉 Pods의 Endpoint라고 생각하면 된다. 특정 Pod 들은 언제든지 restart되거나 stop 될 수 있다. 그래서 Service를 통해 Pod 들의 안정적인 Endpoint를 제공할 수 있다. Service는 label 를 사용해 어떤 Pod들을 묶을지 결정한다. Service Type Service는 4가지 Type을 가지고 있으며, default는 ClusterIP Type이다. Service Type에 대해서는 간단하게 정리하고,..
Kubernetes Pod Qwiklabs의 Orchestrating the Cloud with Kubernetes을 공부 하면서 정리한 내용이다. Pod Kubernetes의 Pod 개념은 중요하다. 하나 또는 그 이상의 Container의 Collection 관리와 Networking을 위해서 같이 묶여 있는 Continer의 Group이다. Storage와 Network를 공유한다. Creating Pod Pod 생성을 위한 매니페스트 파일을 작성해주고, kubectl create -f 명령어를 통해 생성 할 수 있다. kubectl create -f pods/[Manifest].yaml 또는 kubectl run 명령어를 통해 Deployment와 Pod를 함께 생성 할 수도 있다. kubectl..
2020-06-10 spark 3.0.0 이 정식 Release 됐다. https://spark.apache.org/releases/spark-release-3-0-0.html Spark Release 3.0.0 | Apache Spark Spark Release 3.0.0 Apache Spark 3.0.0 is the first release of the 3.x line. The vote passed on the 10th of June, 2020. This release is based on git tag v3.0.0 which includes all commits up to June 10. Apache Spark 3.0 builds on many of the innovations fro spark.a..
카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 서블릿 컨테이너 먼저 서블릿컨테이너를 정의하면 다음과 같을 수 있다. 서블릿 컨테이너는 웹 애플리케이션 서버중에서 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..
