분류 전체보기205 [C# 채팅 프로그램 #02] IOCP - EAP 패턴을 이용한 비동기 TCP/IP 클라이언트 구현 (SocketAsyncEventArgs) 이전 글에서 서버를 구현하는 것을 알아 보았고 이번 글에서는 클라이언트에 대해 알아 볼 것이다. 클라이언트에서도 서버와 동일하게 SocketAsyncEventArgs 클래스를 사용했으며 구현 소스를 통해 알아보자. 1. 서버 연결 client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Connect(IPAddress.Parse(tb_server_ip.Text), int.Parse(tb_server_port.Text)); JObject data = new JObject(); data.Add("type", "init"); data.Add("text", tb_userid.Text); // json -.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 채팅 프로그램 #01] IOCP - EAP 패턴을 이용한 비동기 TCP/IP 서버 구현 (SocketAsyncEventArgs) 이번글에서는 비동기 소켓 이벤트인 SocketAsyncEventArgs를 활용하여 서버를 구현을 해보려한다. SocketAsyncEventArgs는 보통 유니티 게임 서버 개발을 할때 사용하는 경우가 있다고 하며, 나도 사실 이번 프로젝트 진행하면서 처음 사용해본 클래스이다. 이 클래스는 닷넷 비동기 소켓에서 사용하는 개념으로 비동기 소켓 메서드를 호출할 때 마다 반드시 필요한 객체이다. 닷넷 3.5 이전 버전에서는 Begin과 End계열의 API를 사용했지만 닷넷 3.5이상 버전부터는 해당 클래스의 API를 사용하여 소켓 프로그래밍을 구현할 수 있다고 한다. 나도 여지껏 사용해왔던 Begin ~ End 계열의 API를 사용할 경우 IAsyncResult라는 객체를 사용했지만 해당 이벤트 클래스를 이용하.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [C# 채팅 프로그램 #00] 작업 환경 / 기능 구현 리스트 / UI 제작 서론 앞으로 어플리케이션 일을 하면서 TCP/IP 연동은 기본적으로 알아야할 소양이라 생각이 들어 그간 많이 사용해보지 못한 기능들을 사이드 프로젝트를 통해 적립시켜놓을려고 한다. 기본적인 채팅 기능만을 가진 프로그램을 만드는것은 크게 어렵지 않지만 이번 프로젝트를 통해 중요 포인트로 보고있는것은 특정 클라이언트에게 보내는 방법과 패킷 암복호화 작업이다. 사실 이정도만 할줄알면 기본적인 어느 tcp/ip를 통한 연동 프로그램을 만드는데 크게 문제가 없을 것이라고 생각든다. 이번 기회에 나만의 tcp/ip 통신 기술 스택을 쌓아보자. 프로젝트 진행 환경 Tool : VisualStudio 2019 작업 : Windows Form 환경 : .Net Framework 4.8 프로젝트 기능 구현 예정 1. TC.. Project History/다중 기능을 포함한 채팅 프로그램 2022. 2. 10. [Servlet] 서블릿 실행 시간 측정 필터 만들기 (Servlet Performance Time Check Filter) 서블릿에서 필터를 활용하여 모든 서블릿의 동작시간을 체크하는 로직을 정리해두려한다. 만약 필터 없이 페이지마다의 실행 속도를 체크하고 싶으면 해당 클래스마다 타이머 작업을 해줘야하는데 필터를 활용하여 모든 페이지의 퍼포먼스 시간을 체크할 때 사용하면 좋을 것이다. package com.unittest.performance; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.s.. Programming/Spring 2022. 2. 1. C# 프로그램 실행(빌드) 에러 - 혼합 모드 어셈블리는 런타임의 버전에 빌드되며 런타임에 로드 할 수 없습니다. > 발생 에러 문구 만약 4.0 버전이 아니라면 해당 버전에 맞게 supportedRuntime version의 값에 맞춰서 빌드하면 될 것 같다. Error Document/C# 2022. 1. 20. [Java] 정적(Static) 변수와 메서드란? (개념 / 사용 장 단점 / 사용 시기 / 예제) 서론 객체언어에서 사용되는 static과 인스턴스의 변수 및 메서드의 내용을 정리해보려한다. 해당 내용은 기초적인 내용이지만 자세히 인지하지 못하고 넘어갈 수 있는 부분이기에 초기에 잘 잡고 가는 것이 좋을 것같다. ** Static 메서드와 Instance 메서드 개념 ** Static 메서드란? (클래스 메서드) 객체 생성 없이 "클래스.메서드()" 형태로 호출 하는 방식. 인스턴스 멤버와 관련 없는 작업을 하는 메서드이다. 메서드 내에서 인스턴스 변수를 사용할 수 없다. Static 사용의 장점 1. 메모리를 효율적으로 사용이 가능하다. > 생성할 때 마다 인스턴스가 힙에 올라가는 것이 아닌 고정 메모리 이므로 보다 효율적이다. 2. 속도가 빠르다. > 객체를 생성하지 않고 사용하기 때문에 속도가 .. Programming/Java 2022. 1. 20. C# MSSQL 쿼리 실행 에러 - 실행 제한 시간을 초과했습니다. C# 프로그램에서 MSSQL로 쿼리문을 실행할 때 발생하는 에러 정리이다. RELASE모드에서는 발생하지않고 DEBUG모드로 실행하면 속도가 느리기때문에 간혹 발생하는 문제다. 말그대로 느리게 실행이 되기때문에 발생하는 문제이기에 CommandTimeout의 시간을 늘려주면 된다. CommandTimeout란? 명령 실행을 종료하고 오류를 생성하기 전 대기 시간(초 단위)을 가져오거나 설정하는 속성이다. 에러 메세지 "실행 제한 시간을 초과했습니다. 작업이 완료되기 전에 실행 제한 시간이 지났거나 서버가 응답하지 않습니다." 소스 using (var conn = this.CreateDbConnection()) { if (conn.HasConnection) { var query = "select * fro.. Error Document/C# 2022. 1. 17. C# 박싱과 언박싱이란? (개념 / 예제 / 사용 이유) 서론 이번 글에서는 평소 프로그래밍을 할 때 몰라도 개발은 가능하지만 프로그램에서 사용되는 메모리가 많거나 메모리 관리가 필요하다면 필히 알아야 하는 박싱과 언박싱에 대한 내용을 정리해 볼 것이다. 추가적으로 변수를 사용함에 있어서 알아야하는 값 타입과 참조 타입에 대해서도 정리해볼려한다. 값 타입과 참조 타입이란? 1. 값 타입 (Value Type) 값 타입은 스택영역에 저장한다. 값 타입은 Object를 상속받은 System.ValueType을 상속받은 구조체이다. ex) int => System.Int32로 정의 되며, 상속 관계는 Object ->ValueType -> Int32 순 데이터에 직접 값이 저장된다. 2. 참조 타입(Reference Type) 힙에 저장된다. 모든 타입의 Base .. Programming/C# 2022. 1. 16. [Refactoring 기법 #05] 메서드 정리 - 알고리즘 전환 ※ 오늘의 명언 코드 수를 기준으로 프로그램의 진도를 측정하는 것은 비행기 제작 진도를 무게로 측정하는 것과 같다. - Bill Gates 서론 이번 글에서는 메서드 안에 있는 알고리즘을 전환하는 방법에 대해 기술해볼 것이다. 목적 알고리즘을 더 분명한 것으로 교체해야 할 땐 해당 메서드의 내용을 새 알고리즘으로 바꿔보자. 작성 소스 String foundPerson(String[] people) { for(int i=0; i Refactoring/Refactoring Skill 2022. 1. 16. [IntelliJ] Community에서 Spring Initializr 설정하는 방법 인텔리제이(Intellij)에서 다운로드를 할 때 Ultimate와 Community가 있다. 나는 스프링을 진행하기 위해 새로운 프로젝트를 만들었는데 Community로 실행했을 때 Spring Initializr가 없어서 당황했다. 그 이유는 유료는 알아서 추가가 되어있는데 무료는 따로 추가를 해야줘야한다고 한다. 그래서 이 글에서는 Spring Initializr 추가하는 방법을 메모해놓을려고한다. 1. start.spring.io 접속 (구글에 Spring Initializr 입력해줘두 됨) https://start.spring.io/ 2. 본인이 사용할 프로젝트의 이름과 언어 설정하기 -> Artifact에서 사용할 프로젝트 이름 명시해주면 됨. 3. ADD DEPENDENCIES.. 눌러서 라.. Programming/Spring 2022. 1. 16. [MSSQL] Cursor문이란? (사용 방법 / 사용 이유 / 특징 정리) 커서(Cursor)란? 데이터 작업을 할 때 테이블에서 집합 단위가 아닌 행 단위로 처리를 해야할 때 사용하는 방식을 말한다. 보통 DML(SELECT, UPDATE, DELETE, INSERT)등으로 이뤄지며, 아래의 예시를 통해 확인해보자. 커서 특징 / 구조 특징 집합이 아닌 행 단위로 작업을 수행하기때문에 속도가 느리다. 프로그램에서 비유하면, 컬렉션을 루프를 돌려 한 인덱스 별로 처리하는 것과 같다고 보면 된다. 사용 방법 예제 시나리오 : "PEOPLE" 테이블에서 한 행마다 나이(age)를 1, 2, 3씩 커서문을 사용하여 증가시켜보자. 1. 테이블 생성 CREATE TABLE PEOPLE( NAME VARCHAR(10), AGE INT, ) INSERT INTO PEOPLE(NAME,AGE.. Database/RDBMS 2022. 1. 14. [Refactoring 기법 #04] 메서드 정리 - 임시변수를 메서드 호출로 전환 ※ 오늘의 명언 만일 디버깅이 벌레를 잡는 과정이라면, 프로그래밍은 그걸 집어넣는 과정이다. - Edsger W. Dijkstra, 구조적 프로그래밍, 세마포어로 유명한 컴퓨터 과학자 서론 이번에 공부할 내용은 메서드 정리 파트에서 임시변수를 메서드 호출로 전환하는 방법에 대해 서술해 볼 것이다. 작성소스 double basePrice = _quantity * _itemPrice; if(basePrice > 1000) return basePrice * 0.95; else return basePrice * 0.98; 위의 소스에서 어떤 것을 리팩토링 할 수 있을까? 책에서 제안하는 내용은 이렇다. "수식의 결과를 저장하는 임시변수가 있을 땐 그 수식을 빼내어 메서드로 만든 후, 임시변수 참조 부분을 전부 .. Refactoring/Refactoring Skill 2022. 1. 11. 이전 1 ··· 10 11 12 13 14 15 16 ··· 18 다음 💲 많이 본 글