Unit Java의 void와 동일하다. 함수가 유용한 것을 반환하지 않거나 리턴해줄 값이 아무것도 없으면 암시적으로 Unit을 반환한다고 말합니다. 그리고 이러한 기능은 부작용이 있는 작업을 수행할 수 있습니다. 무언가 기록/인쇄하거나 반환 값 없이 조작을 수행합니다. fun printHelloUnit(name: String?): Unit { if (name != null) println("Hello $name") else println("Hi there!") } //The Unit return type declaration is also optional. The above code is equivalent to: fun printHello(name: String?) { if (name != null)..
Developer Perspective
네트워크 장비에서 Broadcast 작업을 수행하면 브로드 캐스트를 진행하면 연결된 모든 네트워크 장비들에게 request 요청이 가게 됩니다. 여기서 브로드캐스트란 연결된 모든 네트워크에게 동시에 메시지를 전송하는 방법입니다. 그리고 이 요청에 알맞는 네트워크에게 요청이 들어가면 응답을 받죠. 여기서 하나 생각해보아야할 때 네트워킹 장비가 늘어나면 늘어날 수록 브로드캐스트의 양도 많아지게 됩니다. 그럼 네트워크 대역폭은 브로드캐스트로 가득 차게 될 것이고, 데이터 전달 속도는 당연히 눈에 띄게 느려질 것이며 시도 때도 없이 날아오는 브로드캐스트를 처리하는 컴퓨터는 다른 작업을 처리할 수 없겠죠 또한 서브넷 마스크가 다른 여러 개의 IP 대역을 사용하고 싶다면 어떻게 해야 할까요? 각각의 IP 대역을 사..
글이 생각보다 많이 있습니다. 천천히 다 읽어봐주시면 무조건 도움되리라고 장담합니다. 저는 항상 당신의 개발자로서의 앞날을 응원합니다. 개요 개발 관련 멘토링 활동을하거나 여러 개발자들을 만나보면서 네트워킹을 해볼때, 저는 항상 이 질문을 들어보거나 이 질문을 하는 것을 보는 것 같습니다. 그 질문은 바로 개발 공부 어떻게 해야 하나요..? 참고할만한 공부 자료 있나요? 좋은 인강! 좋은 책! 네 보통 개발 공부를 시작한지 얼마 안된 여러분들이 공통적으로 가지고있는 궁금증일 것이라고 생각해요 😢 저 또한 개발 공부를 시작한지 얼마 안되었을때(물론 지금도 햇병아리지만) 최대한 효율적으로 공부 효율을 내려고 모든 선배 개발자분들께 정말 짜증이 나실 정도로 많이 물어보고 그랬던 것 같습니다. (지금 생각해보면..
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을 연결된..