본문 바로가기

분류 전체보기46

BeanFactory 와 ApplicationContext BeanFactory Spring Container 의 최상위 인터페이스 이다. Spring Bean 을 관리하고 조회하는 역할, 책임을 담당하는 명세 이다. Spring Bean 에 관련된 모든 기능은 대부분 BeanFactory 가 제공하는 기능이다. "getBean()" 과 같은 메서드 제공 ApplicationContext BeanFactory 의 모든 기능을 상속 받아서 제공하는 인터페이스 이다. Bean 에 대한 관리와 모든 기능들을 BeanFactory 에서 제공해주는데 불구하고, 왜 ApplicationContext 를 사용하는가? BeanFactory 와 ApplicationContext 이 둘의 차이점은 과연 무엇인가? 실제 Application 을 개발할 때는 Bean 을 관리하고 조.. 2020. 11. 29.
관심사의 분리 각각의 인터페이스를 공연하는 배역이라 가정할 때, 실제 배역에 맞는 배우를 선택하는 것은 누가 하는가? 각 역할을 누가 할지는 배우들 본인이 정하는게 아니다. 역할이 아닌 구현까지 봐라보는 것은 배우가 자신의 역할 뿐만 아니라 상대 배우도 직접 선택하는 것이나 다름 없는 것이다. 이는 결코 유연한 공연을 진행할 수 없다. 유연한 공연을 진행하기 위해선 그 누가 오더라도 해당 배역은 대체될 수 있어야 한다. 관심사를 분리하는 것의 진정한 의미는 배우는 본인의 역할인 배역을 수행하는 것에만 집중할 수 있도록 하는 것이다. 다양한 역할, 책임을 주어지는 것이 아니라 본연의 역할과 책임 한가지만 가질 수 있도록 하는 것을 의미한다. 이를 구현하기 위해선 역할을 지정해주는 책임을 가진 별도의 기획자가 필요하다. .. 2020. 11. 12.
Java Heap Dump 분석하기 Java 로 개발된 애플리케이션을 운영하던 중, OOM(Out Of Memory) 등과 같은 Heap 사용량이 순간적으로 증가하여 발생하는 문제들을 분석하기 위해 사용되는 Heap Dump에 대해 소개할 수 있도록 하겠습니다. Heap Dump 는 Heap 의 높은 사용량을 만든 주범을 알아내기 위해 사용되며, 장애가 났을 때의 Heap 상태를 기록으로 남겨 그 당시에 어떤 Java 객체들이 많이 만들어졌는지 분석하는데 사용됩니다. Heap Dump 만들기 Heap Dump 하기 앞서, Dump 하고 싶은 애플리케이션 프로세스 PID 를 찾아내야 합니다. $ jps jmap 툴을 이용한 Heam Dump 파일 만들기 $ jmap -dump:format=b,file=[FILE_NAME] [PID] Heap.. 2020. 11. 9.
객체 지향 설계의 5가지 원칙 SOLID 원칙 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP (Single Responsibility Principle) OCP (Open / Closed Principle) LSP (Liskov Substitution Principle) ISP (Interface Segregation Principle) DIP (Dependency Inversion Principle) SRP 단일 책임 원칙 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임의 기준은 때론 그 역할이 클 수도, 작을 수도 있기 때문에 사실 모호할 수 있다. 책임의 범위를 구분 지을 땐 변경 범위를 생각하자 변경이 있을 때 해당 변경으로 인한 파급 효과가 적다면 단일 책임 원칙을 잘 따른 것이라.. 2020. 11. 4.
Spring AOP AOP란 Aspect-Oriented Programming 의 약자이다. 서로 다른 곳에서 사용되고 있는 Aspect(관점) 들을 모아 모듈화 하는 기법이다. 즉, 다시 말해 Aspect 은 여러 곳에서 공통으로 적용되는 기능을 의미한다. (e.g. 로깅, 트랜잭션, 접근 제어 등의 보안) 용어 정리 Target Object 부가 기능을 부여할 대상 Spring 에서는 대게 Service 계층이 해당 Advice 부가 기능을 정의한 구현체 Aspect가 어느 시점에 적용이 될 지를 결정 아래의 여러 어노테이션을 통해 적용 시점을 변경시킬 수 있다. @Before 메소드 실행 전 기능 수행 @After 메소드 결과와 상관없이 메소드가 완료 된 이후에 기능 수행 @AfterReturning 메소드가 성공적으.. 2020. 10. 19.
[자료구조] Trie 구현 with Java TrieNode public class TrieNode { private final Map child; private boolean isLast; public TrieNode() { child = new HashMap(); isLast = false; } public TrieNode insert(Character character) { return child.computeIfAbsent(character, c -> new TrieNode()); } public boolean isLast() { return isLast; } public void setLast(boolean isLast) { this.isLast = isLast; } public boolean contains(Character charac.. 2020. 10. 12.