Backend/JAVA

· Backend/JAVA
필터 클라이언트로부터 오는 요청/응답에 대해 '최초'/'최종' 단계에 위치한다. Spring Context가 아닌 Web Application에서 관리한다. 유일하게 ServletRequest, ServletResponse 객체를 변환할 수 있다. 인증과 관련된 로직을 필터에서 처리하는 게 보통이다. request/response 관련 로깅 로직도 여기 넣는 편이다. 로깅 찍을 때 ContentCachingRequest/responseWrapper 로 받아서 찍으면 stream 관련 에러를 피할 수 있다. 대신 내부 로직 떄문에 실제로 찍을 때 doFilter보다 나중에 찍어야 한다. 특정 컨트롤러에만 필터를 걸고 싶을 때는 @WebFilter 어노테이션을 사용하는 방법이 있다. 인터셉터 필터와 유사하게..
· Backend/JAVA
싱글톤 패턴 어떤 클래스가 유일하게 1개만 존재해야 할 때 사용. 예를 들어 어떤 프리터기에 여러 대의 컴퓨터가 접속해야 사용하는 것과 비슷한 논리이다. 소켓 통신을 위한 socketClient를 싱글톤 패턴으로 생성하는 예시 내 경험으로는 보통 Util 클래스 들을 싱글톤으로 만들었다. 주소를 주면 지역을 추출해 주는 유틸클래스 같은 것. 어댑터 패턴 서로 호환이 안되는 인터페이스를 호환되도록 만들어주는 장치 예를 들어 110V, 220V 인터페이스가 있을 때 어떤 기계가 둘 다 이용할 수 있도록 해주는 돼지코 같은 개념이다. DDD 패턴으로 도메인별로 모듈을 쪼개서 개발했는데, 이 도메인들을 다 호출할 수 있는 Core 모듈에서 실제 도메인 내부의 메서드를 호출해서 쓸 때 어댑터를 사용했던 경험이 있..
· Backend/JAVA
Thread? process: 프로그램이 실행되면 OS로부터 메모리를 할당받아 프로세스 상태가 됨. thread: 하나의 프로세스는 하나 이상의 thread를 가지게 되고, 실제 작업을 수행하는 단위는 thread임. Multi-threading 여러 스레드가 동시에 수행되는 프로그래밍. 스레드는 각각 자신만의 작업 공간을 가짐 (context) 각 스레드 사이에서 공유하는 자원이 있을 수 있음 (static instance) 여러 thread가 자원을 공유하여 작업이 수행되는 경우, race condition이 발생할 수 있음. 이렇게 여러 쓰레드가 공유하는 자원 중 경쟁이 발생하는 부분을 critical section이라고 부름. critical section에 대한 동기화를 구현하지 않으면 오류가 ..
· Backend/JAVA
자바 입출력 스트림은 데코레이터 패턴이다. 상속보다 유연한 구현 방식 데코레이터는 다른 데코레이터나 컴포넌트를 포함해야 한다. 지속적인 기능 추가/제거가 용이하다. 예를 들면, 커피라는 컴포넌트가 있고 이 커피를 조금씩 변화시켜줄 수 있는 데코레이터가 그 컴포넌트를 감싸고 있다. 라떼 데코레이터, 모카 데코레이터, 에스프레소 데코레이터 같은 게 있을 수 있다. 일단 데코레이터를 부르면 컴포넌트의 동작을 하고 특정 데코레이터가 가진 동작을 더해주는 개념이다. public abstract class Coffee { public abstract void brewing(); }public class Americano extends Coffee { @Override public void brewing() { Sy..
· Backend/JAVA
reduce() 연산을 거의 써본 적이 없어서 정리함. stream()이 가지고 있는 기본 연산들 말고 커스텀한 연산을 정의해서 stream()의 요소를 소모시키고 싶을 때 쓴다. 람다식으로 구현하거나 람다식 안에 들어갈 내용이 너무 길면 직접 BinaryOperator를 구현해서 쓴다. 예를 들어 배열에 무자열이 들어있을 때 가장 긴 문자열을 찾는 기능을 만들고 싶다면 아래와 같이 할 수 있다. public void test() { String texts[] = {"1111", "1231241247124", "2312874817427728472848", "123"}; System.out.println(Arrays.stream(texts).reduce("", (s1, s2) -> { if (s1.getB..
· Backend/JAVA
내가 잘 모르는 거 위주로 정리 이진 검색 트리 중복을 허용하지 않음 왼쪽 자식 노드는 부모 노드보다 작은 값, 오른쪽 자식 노드는 부모 노드보다 큰 값을 가짐. 자료 검색에 걸리는 시간이 평균 log(n) 자료를 순서대로 넣지 않을 때 쓸만함. inorder traversal을 하면 자료가 정렬됨. 자바에서는 TreeSet, TreeMap 이 이걸 씀. 좌우를 거꾸로 넣으면 내림차순으로도 정렬할 수 있음. 그래프 점점과 간선의 유한 집합. 정점(vertex) 간선(edge) 인접행렬, 인접리스트로 구현할 수 있음. 탐색은 BFS, DFS를 이용함. 해싱 자료를 검색하기 위한 자료 구조 키에 대한 자료를 검색하기 위한 사전 개념의 자료 구조. (key, dictionary) key / value를 쌍으로..
Purewater
'Backend/JAVA' 카테고리의 글 목록