[Java] Thread 동기화가 필요해.
·
BackEnd/JAVA
쓰레드 동기화쓰레드 동기화란?애플리케이션 내에서 멀티스레드로 동작을 하게 되면 스레드끼리 자원을 공유하며 작업하게 됩니다.이때, 공유 자원의 안정성을 위하여 하나의 쓰레드 작업 시 다른 쓰레드는 접근하지 못하도록 막는 것을 쓰레드 동기화 라고 합니다.동기화를 위해서는 임계영역과 잠금이 사용됩니다.임계영역 (critical section) : 오직 한 스레드만 접근을 보장하는 영역잠금 (Lock) : 임계 영역에 접근 시 락을 획득하고, 작업 완료 후 락을 반납하며 임계영역을 벗어납니다. 동기화를 사용하는 이유간단히 입출금으로 비교했볼 수 있습니다.통장에 10만원이 있다고 가정할 때, A가 통장에서 3만원을 출금하려고 시도하던 중 B가 동일한 통장에 들어와 2만원을 출금을 하고, A의 출금 작업을 완료했습..
[Java] Socket 통신 구현해보기(ServerSocket, Socket)
·
BackEnd/JAVA
SocketTCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점을 의미합니다.프로토콜과 IP주소, 포트 넘버로 구성되며 클라이언트/서버 구조로 동작합니다. Socket 통신의 흐름서버 흐름소켓 생성IP와 Port번호를 설정하는 바인딩 작업 수행listen으로 클라이언트 요청 대기accept로 클라이언트와 연결데이터 송수신소켓 닫기클라이언트 흐름소켓 생성서버에 설정된 ip와 port로 연결데이터 송수신소켓 닫기 ServerSocket서버측에서 클라이언트의 접속을 대기하며 클라이언트 접속 시 접속을 허용하고 통신하기 위한 클래스입니다.실제 모든 작업은 SocketImpl 인스턴스가 수행하게 되며 생성자 호출 시 인스턴스를 생성합니다.내부 bind와 accept함수를 보면 모든 작업 수행 시 soc..
[JAVA] 함수형 인터페이스라는게 있더라구요..(feat.Lambda)
·
BackEnd/JAVA
오늘 교육 도중 함수형 인터페이스라는 것을 배웠습니다.계속해서 자바를 해왔지만 처음 보는 것이라 매우 신기하고 당황스러웠는데요..여전히 공부할게 많고 더욱 더 노력해야겠구나 싶었습니다..흑..이 생소한 듯 익숙했던 함수형 인터페이스에 대해서 알아보겠습니다.  함수형 인터페이스란?함수형 인터페이스는 인터페이스 내에 추상메서드가 하나인 인터페이스를 의미합니다. 단일 메서드 작성 테스트간단한 예시를 작성해보겠습니다.@FunctionalInterfacepublic interface FcInterface { String printStr(String str);}@FunctionalInterface 어노테이션을 명시해주면 함수형 인터페이스임을 명시하는 것입니다.새로 생성한 FcInterface 내에 입력한 St..
[Spring] 빈 스코프(BeanScope)
·
BackEnd/Spring
빈 스코프란?스코프=범위빈 스코프란 빈이 관리되는 범위를 의미합니다. (스코프=범위)스프링 빈은 기본적으로 싱글톤으로 생성하여 관리됩니다. 싱글톤으로 생성된다는 것은 스프링 컨테이너의 시작과 함께 생성되고 종료될때까지 유지된다는 의미입니다. 스프링이 지원하는 스코프 전략은 여러가지가 있는데요. 스프링에서의 기본 설정이 싱글톤으로 되어있기 때문입니다. 기본값인 싱글톤 방식의 특징과 그 이외에 어떤 스코프 전략의 특징들을 간단히 살펴보겠습니다. 스프링이 지원하는 스코프 종류Singleton Scope 스프링에서의 기본 스코프 전략으로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프입니다. 앱 구동 시에 ApplicationContext에 싱글톤으로 생성됩니다.Prototype Scop..
[JAVA] 빈 생명주기 콜백
·
BackEnd/JAVA
스프링 컨테이너는 Bean을 관리해준다고 했습니다.여기서 관리란 객체를 초기화하고 종료하는 것을 컨테이너가 대신 해주는 것입니다. 스프링 컨테이너가 관리를 해준다는 것은 객체 관리의 주체가 프레임워크가 되므로 개발자는 객체 관리를 제외한 객체를 이용한 로직에만 집중할 수 있다는 장점이 있습니다.빈의 생명주기스프링 빈은 초기화 작업과 종료 작업이 나누어 진행됩니다. 초기화 시 객체 생성 후 의존관계 주입이라는 라이프사이클을 가지며, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있습니다. 스프링 빈의 이벤트 라이프 사이클은 위 순서대로 수행됩니다. 스프링은 모든 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주며 스프링 컨테이너가 종료되기 직전에는 소멸 전 콜백..
컴포넌트 스캔(@ComponentScan)에 대해 알아보자
·
BackEnd/Spring
스프링에서 빈을 등록하는 방법으로 아래 두 가지 방법이 있었습니다.@Configuration 클래스 내의 메소드에 @Bean 을 명시해 주는 방법XML 을 이용해 명시하는 방법그러나 스프링 에서는 위 두가지 정보가 없어도 스프링 빈을 등록하는 방법이 있습니다. 컴포넌트 스캔이란?컴포넌트 스캔은 이름 그대로 @Component 어노테이션이 붙은 클래스를 찾아 스프링 빈으로 등록해 주는 것입니다. 이 컴포넌트 스캔 기능을 사용하기 위해서는 @ComponentScan 어노테이션을 설정 정보 클래스에 붙여주면 됩니다. 간단한 테스트를 해보겠습니다. 1. 두개의 컴포넌트 클래스를 작성FruitRepository.class @Component public class FruitRepository { publ..
싱글톤 컨테이너(Singleton Container)란 무엇인가
·
BackEnd/Spring
“스프링에서 빈은 싱글톤으로 관리됩니다.”이 말을 항상 들어왔지만 무슨말인지 설명을 못했습니다. 이번 글에서는 이게 무슨말인지 알아가 보겠습니다. 일단 빈과 싱글톤 두가지 단어에 집중해서 알아보겠습니다.빈(Bean) 이란?빈은 스프링 컨테이너의 의해서 관리되는 객체를 의미합니다. 스프링 컨테이너는 객체간의 의존관계를 설정하기 위해 빈을 관리 합니다. 그럼 싱글톤(Singleton)이란 무엇일까요?싱글톤은 디자인 패턴 중 하나입니다. 개발을 하다보면 초당 수백, 수천건 이상의 요청을 받게 됩니다. 한 건의 요청 당 10개의 객체가 사용된다고 하면 수백, 수천건의 요청이 들어오면 수도 없이 많은 객체가 생성이 되게 됩니다. 이 많은 객체들이 메모리에 적재되고 참조되지 않을 때까지 기다렸다가 GC에 걸려 제거..
[스프링] SpringContainer, BeanFactory, ApplicationContext
·
BackEnd/Spring
스프링 컨테이너(SpringContainer)IoC컨테이너라고도 불리며 BeanFactory와 ApplicationContext를 통틀어 하는 말입니다. 스프링은 스프링 컨테이너에 의해서 객체를 관리합니다. 이 객체를 저희는 Bean 이라고 합니다. 스프링 컨테이너는 이 Bean 객체를 IoC(제어의 역전)방식으로 관리하고 이 Bean 의 구성정보를 바탕으로 의존관계를 주입해주며, 애플리케이션 구성 및 생애관리를 해줍니다.  빈 팩토리(BeanFactory)BeanFactory는 스프링 빈을 생성, 의존관계 설정, 사용 등 관리해주는 스프링 컨테이너의 최상위 인터페이스입니다. 이를 구현한 클래스에서는 getBean() 메서드를 통해 오브젝트를 요청할 수 있습니다.스프링 빈의 이름은 자동으로 클래스명의 가..