전체 글

개발만 하기는 심심하니 기록 또 기록..
3-way Handshake TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 3-way handshake를 쇼앙한다. TCP 3 Way Handshake는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방의 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. Client -> Server: TCP SYN Server -> Client: TCP SYN, ACK Client -> Server: TCP ACK SYN: synchronized sequence numbers ACK: Acknowlegment 이러한 절차는 TCP 접속을 성공적으로 성립하기 위하여 반드시 필요하다. TCP 3-way Handshaking의 역할 양쪽 모..
자바에서는 기본적으로 DataSource 인터페이스를 사용해 커넥션풀을 관리한다. Spring에는 사용자가 직접 커넥션을 관리할 필요없이 자동화된 기법들을 제공하는데 Springboot 2.0 이전에는 tomcat-jdbc를 사용하다, 2.0 이후 부터는 Hikari CP를 기본옵션으로 채택하고 있다. Hikari CP 벤치마킹 페이지를 보면 다른 커넥션풀 관리 프레임워크들 보다 성능이 월등히 좋음을 알 수 있다. HikariCP가 빠른 성능을 보여주는 이유는 커넥션풀의 관리 방법에 있다. 히카리는 Connection 객체를 한번에 래핑한 PoolEntry로 Connection을 관리하며, 이를 관리하는 ConcurrentBag이라는 구조체를 사용하고 있다. ConcurrentBag은 HikariPool..
스프링 부트 내장 웹 서버 설정 스프링 부트 프로젝트를 생성할 시 스프링부트에서는 내장 서블릿 컨테이너인 톰캣(tomcat)이 자동으로 설정됩니다. 스프링부트에서는 ServletWebFactoryAutoConfiguration 클래스에서 자동적으로 Tomcat, Jetty 같은 내장 웹서버에 대한 설정을 자동적으로 처리하며 스프링부트 사용자가 쉽게 웹 서버 관련 설정을 하지 않아도 웹 서버 프로젝트를 안에 포함되게 합니다. @Configuration @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) @ConditionalOnClass(ServletRequest.class) @ConditionalOnWebApplication(type = Type.SERVLET) @Ena..
Nginx 아파치와의 관계 아파치는 1996년 부터 단 한번도 1등을 놓친적 없을 정도로, 사랑받는 웹서버이다. 하지만 오래된 만큼 신기술에 호환되지 않는 경우도 있을 수 있다. 현재 국내에선 아파치와 nginx 모두 많이 사용되고 있다. 특징 아파치와 다르게 비동기 이벤트 기반 구조를 가지고 있다. 동시접속 처리에 특화되어 있다. Event-Driven 처리 기반 구조 Event-Driven 처리 기반 구조는 여러 개의 커넥션을 모두 Event-Handler를 통해 비동기 방식으로 처리해 먼저 처리되는 것부터 로직이 진행되도록 한다. 이러한 기법의 주 사용 목적은 대화형 프로그램을 만드는 데 사용하는데 PCP 처리와 유사하다. HTTP 서버의 역할 http 프로토콜을 준수한다. 리버스 프록시로서의 역할..
gRPC, RPC, 작동원리, HTTP API 비교 RPC: Remote Procedure Calls 다른 컴퓨터의 프로그램의 프로시저를 실행하는 프로그램을 허용하는 프로토콜 개발자가 원격 상호 작용에 대한 세부 정보를 명시적으로 코딩하지 않아도 됨 -> 프레임워크가 자동 핸들링 클라이언트 코드에서는 직접 서버 코드의 함수를 호출하는 것 처럼 보임 클라이언트 코드 언어 != 서버 코드 언어: 다른 언어로 쓰일 수 있음 gRPC = Communtication 프레임워크 마이크로서비스는 여러 PL들로 만들어진다. (ex: Back-End: Go, Front-End: js) 이 서버들 간의 소통이 필요하다. 마이크로서비스 간의 교환되는 메시지 수 = 엄청나게 많음 >>> 빠른 소통이 좋음 개발자는 핵심 로직 ..
개요 Spring, Spring Boot 환경에서 개발을 하고계신 개발자 분들은 모두 JDBC라는 것을 들어보셨을 것이며, JPA와 같은 ORM 기술도 사용하시면서 개발을 하고계실 것이라고 생각합니다 😃 제가 생각하기에 데이터베이스와 함께 협력하는 우리 개발자들은 JDBC라는 개념을 무조건 알고가야 하지 않을까 하고 생각을 해봅니다. JDBC 등장 이유 애플리케이션을 개발할 때 데이터들은 대부분 데이터베이스에 보관합니다. 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음과 같은 과정을 통해 데이터베이스를 사용합니다. 1. 커넥션 연결 - 주로 TCP/IP를 사용해 커넥션을 연결한다. 2. SQL 전달 - 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된..
· Language.
Kotlin Delegation으로 결합도 낮추기 Delegation Delegation은 interface의 구현이나 Property의 Accessor의 구현을 다른 객체에 위임하도록 해주는 패턴이다. Delegator -> Delegate 형태로 책임이나 처리를 넘긴다. Composition + Forwarding 이라고도 할 수 있다. Composition Composition은 상속 대신 객체를 내부 private 변수로 두어 구성요소로써 동작하게 하는 것을 의미한다. Forwarding 부모 메서드의 전달을 의미한다. 상속과 비슷하게 한 객체의 기능 일부를 다른 객체에 넘겨서 대신 수행하도록 한다. 위임을 활용하면 결합도를 낮출 수 있다. 코틀린에서는 기본적으로 클래스가 final을 붙이기 때문..
클래스 변수, 인스턴스 변수, 지역 변수 차이 설명해주세요 클래스 변수는 클래스 내에서 정의된 변수로, 모든 인스턴스가 공유하는 변수입니다. 클래스 변수는 클래스 이름으로 접근할 수 있으며, 객체 생성 없이도 사용할 수 있습니다. 인스턴스 변수는 클래스 내에서 정의된 변수로, 객체가 생성될 때마다 새로운 인스턴스 변수가 생성됩니다. 인스턴스 변수는 객체를 통해 접근할 수 있습니다. 지역 변수는 메서드 블록 내에서 정의된 변수로, 해당 메서드나 블럭 내에서 사용할 수 있습니다. 지역 변수는 해당 블럭이나 메서드가 종료되면 소멸됩니다. ORM이란? ORM은 Object-Relational Mapping의 약어로 객체와 관계형 데이터베이스 간의 매핑을 자동화하는 기술입니다. 객체 지향 프로그래밍 언어에서 사용..
· Language.
강한 참조 Strong Reference 이것은 우리가 가장 일반적으로 사용하는 참조 유형입니다. 강한 참조가 객체에 연결되어 있으면, 가비지 컬렉터는 그 객체를 회수하지 않습니다. 약한 참조 Weak Reference WeakReference 클래스를 사용해 객체에 대한 약한 참조를 만들 수 있습니다. 가비지 컬렉터가 실행되면, 약한 참조만이 남아있는 객체는 메모리에서 제거됩니다. 소프트 참조 Soft Reference SoftReference 클래스를 사용해 만듭니다. 소프트 참조는 메모리가 부족할 때까지 가비지 컬렉션의 대상이 되지 않습니다. 즉, 가비지 컬렉터가 실행되더라도 충분한 메모리가 있는 경우에는 소프트 참조가 가리키니는 객체는 회수되지 않습니다. 팬텀 참조 Phantom Reference..
khope
메모장 희망편