STUDY/백엔드
-
Spring Singleton vs Java static 기반 SingletonSTUDY/백엔드 2024. 11. 27. 22:41
Spring Singleton스프링에서의 싱글톤은 Spring IoC 컨테이너가 관리하는 객체의 라이프사이클을 통해 보장된다. 스프링 컨테이너는 해당 객체의 인스턴스를 하나만 생성하고, 이를 애플리케이션 전체에서 공유한다. 스프링은 기본적으로 @Bean, @Component 등의 어노테이션을 사용하여 싱글톤을 관리하고, 이는 ApplicationContext를 통해 관리된다. Spring Bean 등록 1. @Component@Componentpublic class MyService {} Spring은 컴포넌트 스캔(Component Scan)을 사용해 @Component 어노테이션이 있는 클래스들을 찾아서 자동으로 스프링 컨테이너에 싱글톤 빈으로 등록하고 관리한다. 2. @Configuration + ..
-
Apache MPMSTUDY/백엔드 2022. 1. 13. 01:27
MPM(Multi Processing Module)은 다중 처리 모듈의 약자로, 클라이언트로부터 받은 요청을 어떤 방식으로 처리할 것인지에 대해 결정하는 모듈을 말한다. 아파치에서 가장 대중적으로 사용하는 MPM에는 Prefork, Worker, Event 방식이 존재한다. Prefork 미리 복수의 프로세스를 생성하여 클라이언트의 요청에 대비하는 멀티프로세스 방식이다. 하나의 요청에 대해서 하나의 자식 프로세스가 하나의 스레드를 사용해서 처리하는 방식이다. 동시에 여러개의 요청이 들어올 경우, 미리 생성되어 있는 자식 프로세스에서 각 요청을 처리한다. 각 프로세스들의 자원이 독립적이기 때문에(프로세스 복제시 메모리 영역까지 복제), 다른 요청이 들어오거나 프로세스 하나에 오류가 발생해도 다른 요청에 영..
-
실제 Client IP 구하기STUDY/백엔드 2021. 6. 25. 17:31
클라이언트 IP → Proxy 서버 및 장비 → 웹 서버 웹 서버나 WAS 앞에 L4같은 Load Balancer나 Proxy 서버, caching 서버 등의 장비가 있을 경우 웹서버는 Proxy 서버나 장비 IP에서 접속한 것으로 인식한다. 때문에 실제 Client IP가 아닌 앞단에 있는 Proxy 서버 IP를 요청 IP로 인식한다. 이러한 이유 때문에 Client IP를 얻기 위해 사용하는 HttpServletRequest.getRemoteAddr()를 이용하면 실제 Client IP를 얻기 어렵다. Proxy 서버 IP가 아닌 실제 요청한 Client IP를 얻기 위해서는 HTTP 헤더에 있는 클라이언트의 IP를 찾아야 한다. * Load Balancer : 여러 대의 서버가 동작하고 있을 때, ..
-
Java Bean ValidationSTUDY/백엔드 2021. 5. 7. 16:28
Bean Validation 이란? Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체를 의미한다. 각 계층마다 데이터 검증 로직이 추가되면 코드 중복이 심하고, 검사 로직 추적이 어려우며 애플리케이션이 복잡해진다. 그래서 Domain Model에 @Notnull, @Min, @Max와 같은 어노테이션을 사용하여 메타데이터를 정의하고, 이를 통해 JavaBean의 유효성을 검증한다. Bean Validation을 실제 동작하도록 구현한 Hibernate Validator를 사용한다..
-
@TransactionalSTUDY/백엔드 2021. 5. 7. 11:53
트랜잭션이란? 데이터베이스의 상태를 변경시키는 작업 또는 한번에 수행되어야하는 연산들을 말한다. 트랜잭션 작업이 끝나면 commit 또는 rollback 되어야한다. 트랜잭션 성질 원자성(Atomicity) : 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉 모두 성공 또는 모두 실패이다. 일관성(Consistency) : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 지속성(Durability) : 트랜잭션이 성공적으로 처리되면 결과가 항상 저장되어야 한다. @Transactional 스프링에서는 @Transactional 어노테이션을 선언하는 방법으로 트랜잭션 처리를 지원하는데,..
-
람다 표현식STUDY/백엔드 2021. 5. 6. 17:19
람다 표현식(lamda expression)이란? 메소드를 하나의 식으로 표현한 것을 말한다. 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있다. 람다 표현식은 메소드의 매개변수로 전달될 수도 있고, 메소드의 결과값으로 반환될 수도 있다. 메소드 int max(int x, int y) { return x > y ? x : y; } 람다 표현식 (x, y) -> x > y ? x : y; 장점 1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있다. 2. 지연연산 수행 - 람다는 지연연상을 수행함으로써 불필요한 연산을 최소화 할 수 있다. 3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 ..
-
OptionalSTUDY/백엔드 2021. 5. 6. 14:23
java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해주는 래퍼 클래스(Wrapper class)이다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다. * Wrapper class(래퍼 클래스)란? 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스(Wrapper class)라고 한다. 래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해..
-
StreamSTUDY/백엔드 2021. 4. 28. 17:58
Stream '데이터의 흐름’이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있다. 병렬처리(multi-threading)가 가능하다. 스트림 인스턴스를 생성해서 필터링, 매핑, 정렬, 그룹핑 등의 중간처리와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리를 파이프라인(Pipelines)으로 해결한다. 생성하기 : 스트림 인스턴스 생성. 가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업(intermediate operations). 결과 만들기 : 최종적으로 결과를 만들어내..