전체 글

    CLEAN 함수 (1)

    1. 작게 만들자 - 최대한 짧은 함수를 만들자 짧은 함수가 명백하고, 하나의 이야기를 표현할 수 있으면 최고의 함수라고 말할 수 있다. - 블록과 들여 쓰기 if/else문 while문 등에 들어가는 블록은 한 줄이 적당하다. 또한 중첩 구조가 1단이나 2단을 넘지 말자 2. 한 가지만 하도록 하자 - 한 가지 작업을 하는 함수를 만들자 ''함수는 한 가지를 해야 한다. 그 한 가지를 잘해야 한다. 그 한 가지만을 해야 한다."라는 유명한 충고가 있는데, 이때 한 가지라는 의미는 추상화 수준을 말한다. 추상화 수준이란? 어떤 함수를 구성할 때 큰 개념에서 파생된 개념들로 나아가면서 단계적으로 나눠졌을 때 같은 단계를 같은 추상화라고 한다. 만약 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수..

    CLEAN 코드 네이밍 (2)

    1. 인코딩을 피하라 (1) 헝가리식 표기법 변수명에 유형이나 범위 그리고 정보까지 인코딩에 넣으면 그만큼 이름을 해독하기 어렵다. 또한 인코딩한 이름은 발음하기 어렵고 오타가 생기기도 쉽다. 따라서 헝가리식 표기법과 기타 인코딩 방식을 지양하자. 헝가리식 표기법이란? 변수 앞에 데이터 형식(약자)을 붙여서 이름을 짓는 방법 (2) 멤버 변수 접두어 멤버 변수에는 m_이라는 접두어를 붙였었는데, 이제는 붙일 필요가 없다. ( IDE의 발전 ) public class Part{ private String m_dsc; void setName(String name){ m_dsc = name; } } // m_ 을 붙인다고? 너무 옛날 방식인데? public class Part{ String descriptio..

    CLEAN 코드 네이밍 ( 1 )

    1. 의도를 분명하게 밝히자 좋은 이름을 짓는 시간보다 좋은 이름으로 절약하는 시간이 훨씬 더 많다. int d // 시간 int elaspedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; 이름 d보다는 아래 elaspedTimeInDays 처럼 의도가 드러날 수 있도록 이름을 짓는 게 좋다. 또한 알고리즘을 만들때도, public List getThem(){ List list1 = new ArrayList(); for(int[] x : theList) if(x[0] == 4) list1.add(x); return list1; } 누구나 봤을 때 아무런 의도를 알 수 없게 만드는 것이 아닌... public..

    [C#] List 클래스 Remove() 이슈

    😄 List 클래스 사용 중 요소 제거 중 발생하기 쉬운 문제 해결 방법 C#의 List 클래스에는 아이템을 제거하는 메소드가 Remove, RemoveAt로 2개 존재한다. Remove(obejct element) 특정 요소를 리스트에서 제거 ( 객체 지정 ) RemoveAt(int index) 특정 위치의 요소를 리스트에서 제거 ( 인덱스 지정 ) 이 때 아래와 같이 반복문을 사용하며 Remove 메소드를 사용하면, class Game { public string name; // 게임 이름 public int favorite // 나의 선호도 } class Program { static void Main(string[] args) { List list = new List(); list.Add(new ..

    [스마게 인턴] 시그널링 서버 다중 인스턴스 환경 구축하기

    WebRTC를 연결하기 위한 사용자의 미디어 정보와 ICE 프레임워크를 통해 나온 네트워크 정보들을 중계해주는 역할을 하는 시그널링 서버를 구축했다. 이때 다수의 사용자들이 서버에 접속하기 위한 트래픽을 견디기 위해서는 Scale out이 필요했는데,이를 위해서는 다중 인스턴스를 고려해야했었다. TCP를 연결하는 소켓 서버이기 때문에 다중 인스턴스로 설계할때 어떤 방식으로 설계해야하는지가 정말 중요했다. 만약 제대로 설계하지 않는다면 세션 컨트롤에 많은 문제점이 생겼을 것이다. 우선 우리 팀이 생각한 방식은 아래 그림과 같다. 그림을 설명하자면,각 시그널링 서버의 인스턴스에서 사용자와 연결된 세션 수를 Redis에 캐싱을 하고, Channel 서버에서는 캐시를 확인해서 사용자가 새로운 음성 채팅 룸을 생..

    [WebRTC] TURN 서버의 필요성

    WebRTC 기술을 사용해 음성 애플리케이션을 만들어 테스트하는 중 P2P 연결이 잘 안 되는 문제가 있었다. 원인을 찾아보려고 코드를 계속 수정했지만 실행이 되지 않았다. 그러던 중 LTE를 사용하고 있던 Test 폰을 와이파이를 연결해보니 잘 동작했었고, LTE 환경에서 P2P 연결이 안 된다는 것을 알 수 있었다!! 🧐 Why? WebRTC에서 P2P 연결을 위해 최적의 ICE를 찾으며 연결해야할 사용자에게 갈 수 있는 최적의 네트워크 경로를 찾는다. 이때 최적의 경로는 어떻게 찾게 되는 걸까? 보통은 NAT환경에 있는 사용자를 찾기 위해 STUN서버를 사용하고 이를 통해 NAT 뒤의 종단(사용자)을 파악할 수 있다. 하지만 이때 STUN 서버를 거쳐도 NAT 뒤에 누군가가 있는지 (IP정보가 무엇..