본문 바로가기

스터디/Server

Rails あれこれ https://rails-study.net/if/ https://www.rubylife.jp/ini/inherit/index3.html >このページ、英語もある。たぶん。 https://railsguides.jp/active_record_validations.html https://qiita.com/nullkal/items/accc5d62836a930b3cd9 https://qiita.com/kidach1/items/46a6e49b6306655ccd64 あとでまとめる! https://qiita.com/mochio/items/45b9172a50a6ebb0bee0 https://stackoverflow.com/questions/3264751/what-does-the-t-tag-mean-in-ruby-on-rails 더보기
VagrantBox + CentOS+ Ruby on Rails 참고 (일문)https://qiita.com/orangeboy/items/29cf53139efe86eaa14b MySQL 쪽 문제가 있어서 아래도 참고함https://stackoverflow.com/questions/8456300/mysql2-so-libmysqlclient-r-so-15-cannot-open-shared-object-file-no-such-file 하ㅠㅠ 또 삽질 엄청 했네 중간에 *.conf 파일 같은게 아예 존재조차 안해서 뭔가 했더니 sudo vi ~~ 로 그냥 해당 경로에 생성해주면 되는거였음. 아파치 쪽 설치할 때도 passenger-install-apache2-module명령어 쳐주고 Almost there! 나올때까지 얌전히 엔터쳐주어야 함.복사해서 만들어주라 하는건 복사해.. 더보기
IOCP - ServerSide 사실 웹상에는 먼저 이걸 공부한, 은혜로운 선배들이 잘 정리해둔 글을 엄청 많이 찾아볼 수 있다. 구현 자체야 충분히 다른 깔끔하고 훌륭한 포스트를 참고한다면 얼마든지 가능하지만, 이해에 측면에 있어서는 과연? 그 어떤 강의나 포스트를 보아도 결국 이해해야하는 것은 자기 자신이기 때문에 자신만의 언어로 정리해둘 필요가 있다. 정리를 하는 중에는 분명히 덜 이해한 부분도 튀어나오고, 좀 더 궁금해지는 부분도 생기기 마련. 그래서 시간을 들여서 정리를 한번 해보려고 함. 일단 서버사이드. 개념적인 이론적인 설명은 생략하고 구현 중심으로 설명함.개념적인 설명은 여기 이 시리즈! [링크] 이해에 많이 도움이 됨. 구현적인 부분에서 IOCP는 쉽게 말해서버소켓 생성, 주소값 할당, 클라이언트 Accept, Rec.. 더보기
IOCP를 사용한 서버 라이브러리 제작 1. 다음부터는 이런 귀찮은 일련의 작업들에게서 벗어나기 위해 만들었다. 저번에 이벤트 방식으로 한번 만들어두긴 했는데, 확실히 다른 작업을 또 진행할때 소켓 할당하고 뭐 주소값 넣고.. 이런 귀찮은 작업들이나 더 나아가서 Send나 Recv가 필요할 때도 그 많은 인자값들을 일일히 넣어주지 않아도 되고... 다 만든 건 아직 아닌데 기초적인 기능들은 다 구현했고 사용자 편의성만 좀 높여주면 된다. 지금은 좀 거지같다. 2. 서버 사이드 * CreateServerSocket 함수를 호출하면 자동으로 내부에 CompletionThread풀과 접속 가능한 유저 리스트 등을 생성한다. 클라이언트 접속은 acceptEx를 쓰기 때문에 미리 유저 정보와 소켓등을 할당해둔다. * Accept/Recv/Send 등의.. 더보기
AcceptEX 개객기야 IOCP 정리 포스팅은 언제 하지(..) 아무튼 채팅서버를 만들었으니 lib 만드는 작업을 하는데 Accept 에서 막혔다. Accept는 타임아웃 같은게 없다. 고작 이 Accept 하나 때문에 쓰레드를 하나 더 만드는 건 '공부'차원에서도 몹시 좋지 않은 느낌이라 안써봤던 AcceptEx를 써보기로 했다. 참고한 사이트AcceptEx 풀 예제: http://yongpa.tistory.com/20 구조에 대한 이해: http://bestmin.tistory.com/180 난관을 이래저래 겪었는데... 1. 클라가 접속을 했는데도 GetQueuedCompletionStatus 가 overlapped 주소값을 정상적으로 내뱉질 않음.-> AcceptEx 의 마지막 인자에는 overlapped 객체의 주소값.. 더보기
일단 IOCP 채팅서버 만드는 건 끝! 한달내내 뭔가 논 건 아닌데 예전에 만들었던 이벤트 방식으로 서버 하나 만들었다가... 책 좀 보다보니 이제서야 IOCP 채팅서버 예제 완성함ㅋㅋ 메모리풀도 안 만들어봐서 오늘 급공부하고 급만듦. 어딘가에 구멍이 있는건지 중간에 문자열 뒤에 54가 붙어서 나오네 ... 코드정리 및 정리 포스팅은 내일!... 더보기
Overlapped IO 모델 개인적인 생각.IOCP모델 공부하기 전에 흔히들 먼저 책에서 권하는 단계. 서버 공부하다보니 이 부분부터가 약간의 분기점이 되지 않나 싶다. 기존까지는 Send/Recv 함수를 그냥 써줬다면, 여기서부터 WSASend/WSARecv를 써주기 때문이다. 소켓 생성 역시 마찬가지로 socket 함수를 기존까지 썼다면, OverlappedIO모델부터는 WSASocket 함수를 사용해서 소켓을 생성한다. 기존까지의 방식과 차이점.TCP/IP 통신의 특성상, 보내려는, 혹은 받으려는 정보를 정상적으로 받을 때 까지 통신이 이루어지는 걸로 알고있다. 따라서 정상적으로 송수신이 처리되었는지 '결과'를 받는 과정이 필요한데, 기존까지는 Send/Recv 함수의 리턴이 이러한 과정이었다. 따라서 프로그램은 이 함수들이 .. 더보기
Notification IO Model 전에 이미 공부한 내용이긴 하지만 Overlapped IO Model 보다 앞서서 봐야할 내용이므로 정리 차원에서 포스팅. Select함수를 사용하는 다중접속 서버에 구현 방법에 대해서 먼저 알아야 하지만이것도 나중에(..) 정리하고 우선 Select 함수에 대한 기본적인 이해가 있다는 전제. 동기 vs 비동기 '동기'적 처리에 대한 단점 : recv 함수를 사용할 때(물론 select 함수를 사용하지 않은 상황), 서버는 받은 데이터가 존재할 때 까지 recv 함수의 반환을 기다려야 함. 반환을 기다리는 동안 다른 연산을 처리한다던가 하는 유용한 일을 처리할 수도 있는데 말이다. 이러한 단점을 개선해서'비동기'적 처리로 서버를 구현할 수가 있다. Select 함수로도 물론 처리할 수 있다. 다만, 개발.. 더보기
서버 라이브러리 구조 있는 기능1. 소켓 생성 및 주소 할당 (IP/Port는 인자값으로 받음)2. Data Send3. 이벤트 방식의 메세지 수신(Recv) 없는 기능1. 서버1:클라多 의 경우에만 적용 가능. 서버가 서버에 접속할 수가 없음.2. 이벤트 방식이 아니면 사용자가 직접 프로젝트에 select며 뭐며 구현해주어야 함 그래서 만들고 있는 기능.없는 기능 1번 개선중 더보기
주소 할당 IP, Port 개념 IP는 Network ID + Host ID 로 이루어져 있는게 일반적.Network ID : 어느 지역에Host ID : 어느 컴퓨터Port : 어느 프로그램에 연결해줄 것인지 정해주는게 IP/Port. IP주소 에서 Network ID와 Host ID는 구분이 확실히 되어있는데IP주소의 가장 앞자리를 보고 Host ID의 범위를 알아낼 수가 있다. 0 ~ 127 . host . host . host : 뒤에 세자리가 host ID128 ~ 191 . network . host . host : 뒤에 두자리가 host ID192 ~ 223 . network . network . host : 뒤에 한자리가 hostID 223 ~ 255 : 멀티 캐스팅 ip주소인데 아직 잘 모르겠으니 .. 더보기