프로그래밍90 [Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 2 기본 코드에 조금 더 살을 붙여서 CLI환경에서 단채 채팅방 환경을 구축했다. 아직 최적화시킬 부분도 남았고, slack처럼 늦게 들어와도 채팅방의 기록을 볼 수 있게 구축하고 싶기 때문에 시간이 남으면 세 번째 작업도 진행할 예정이다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def msg_func(msg): print(msg) for con in user_list.values(): try: con.send(msg.encode('utf-8')) except: print("연결이 비 정상적으로 종료된 소켓 발견") def.. 프로그래밍/Multi thread TCP server_Python 2019. 11. 23. [Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 1 N사 최종 면접 후 멀티 스레드에 대한 이론은 있지만 실전에 약하다는 느낌을 받았다. 아무래도 멀티 스레드 환경에서 프로그래밍을 할 경험이 없어서 더 그런 것 같다. 그! 래! 서! 혼자서라도 멀티 스레드 채팅 서버를 구축해보는 프로젝트를 진행하려고 한다. 기본 코드 Python 게시판에 올려두었던 서버, 클라이언트 코드를 조금 변조해서 뼈대가 될 코드를 작성하였다. - 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def handle_receive(client_socket, addr, user): while 1: data =.. 프로그래밍/Multi thread TCP server_Python 2019. 11. 20. [백준] 11003번 최솟값 찾기 Python 해설 출처 : https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 슬라이딩 윈도우 알고리즘으로 분류된 문제이다. 열몇 번의 시도만에 풀었다.. 풀이 - Python 정답 코드 from collections import deque n, l = map(int, input().split()) arr = [*map(int, input().split())] m = deque() for i in range(n): tmp = arr[.. 프로그래밍/Algorithm 2019. 11. 18. [백준] 10868번 최솟값 Python 해설 출처 : https://www.acmicpc.net/problem/10868 10868번: 최솟값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자. 여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최솟값을 찾아야 한다. 각각의 정수들은 www.acmicpc.net 세그먼트 트리에 입문하기 위해 딱 좋은 문제라고 생각한다. 풀이 - Python 정답 코드 import sys from mat.. 프로그래밍/Algorithm 2019. 11. 18. [Python] 멀티 스레드 소켓 서버 구축하기 내가 한 번도 경험하지 못했던 "멀티 스레드 서버 프로그래밍"을 시작하기에 앞서 뼈대가 될 코드를 만들었다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 def handle_client(client_socket, addr): print("접속한 클라이언트의 주소 입니다. : ", addr) user = client_socket.recv(1024) string = "안녕하세요? %s 님"%user.decode() client_socket.sendall(string.encode()) print("1초 후 클라이언트가 종료됩니다.") time.sleep(1) client_socket... 프로그래밍/Python 2019. 11. 18. [Python] 파이썬 소켓 서버 프로그래밍 나는 개발자가 되기에 아직 많이 부족하다는 것을 느끼고 조금 더 열심히 살기로 다짐했다. 오늘은 파이썬으로 에코 서버를 TCP타입 소켓 통신을 통해 만들었다. 코드와 함께 간단한 주석으로 설명을 대체할 것이다. 사실 진짜 만들고 싶었던 건 내가 계속되는 질문에도 답을 못 했었던 스레드를 이용한 서버이다. 이번 건 맛 보기라는 뜻이다! 서버 코드 import socket host = "127.0.0.1" port = 9123 #IPv4 체계, TCP 타입 소켓 객체를 생성 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #포트를 사용 중 일때 에러를 해결하기 위한 구문 server_socket.setsockopt(socket.SOL_SO.. 프로그래밍/Python 2019. 11. 17. [Thread] 스레드란 무엇인가 (vs 프로세스) 스레드의 정의 스레드의 정의는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다. *프로세스에 대해 잘 모른다면 여기를 참고 스레드의 특징 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다. 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다. 스레드의 종류 스레드를 지원하는 주체에 따라 2가지로 나눌 수 있다. 사용자 레벨 스레드 (User-Level Thread) 사용자 스레드는 커널 영역의 상위에서 지원.. 프로그래밍/Etc. 2019. 11. 2. [Process] 프로세스란 무엇인가 프로세스(Process)란 컴퓨터에서 프로그램은 "특정 작업을 수행하는 일련의 명령어들의 모음"이다. 그렇다면 프로세스는 무엇인가? 프로세스는 다양한 종류의 프로그램 중 "실행 중인컴퓨터 프로그램"이다. 조금 더 자세하게 "운영체제로부터 시스템 자원을 할당받는 작업의 단위"라고 정의하기도 한다. *시스템 자원이란? - CPU 점유 시간 - Code, Data, Stack, Heap의 구조로 되어 잇는 독립된 메모리 영역 프로세스끼리는 서로 독립되어있기 때문에 서로 다른 프로세스의 메모리에 접근할 수 없다. 만약 다른 프로세스의 자원에 접근해야 한다면, IPC(Inter-Process-Communication)를 통해 접근할 수 있다. *대표적인 IPC의 종류 1. Signal 2. Pipe 3. Mess.. 프로그래밍/Etc. 2019. 11. 2. [DevOps] DevOps란 무엇인가 이미지 출처 : https://medium.com/@neonrocket/devops-is-a-culture-not-a-role-be1bed149b0 DevOps를 공부하기 위해 구글에 검색해보고 위키백과도 한번쯤은 읽어봤을 것이다. "Developement(개발)와 Operations(운영)의 합성어", "개발자와 운영자의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화"라고 정의한다. 하지만 이 한 줄 정의만으론 DevOps에 대한 이미지가 그려지지 않았기에 내 방식대로 정리를 시작하게 됐다. DevOps의 배경 하나의 소프트웨어를 개발하면서 개발자와 운영자 사이에 갈등이 생긴다. 개발자는 고객의 요구에 따른 변경을 빠르게 보기를 원하고, 운영자는 속도 보단 안정성을 중요시하기 때문이다. 새로운 프.. 프로그래밍/Etc. 2019. 11. 2. [Go] 10. Go(golang)의 익명 함수(Anonymous function) 이전 공부에서 golang의 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 익명 함수에 관한 내용이다. 파이썬에서 Lambda와 비슷한 맥락이라고 봐도 될 것 같다. Go에서 익명 함수란? 익명 함수는 말 그대로 이름이 없는 함수이다. 함수는 하나의 큰 프로그램을 여러 부분으로 나누고, 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다. 그렇다면 익명함수는 어떤 녀석이고 어떻게 호출할까? 익명함수는 그 자리에서 만들고 바로 그 자리에서 실행할 수 있다는 장점이 있다. 사실 익명 함수의 쓰임새는 말로 설명하는 것보다 직접 상황이 돼봐야 이해할 수 있을 것이다. (링크 - 실제로 내가 파이썬에서 익명 함수를 사용했던 경우이다.) Go에서 익명 함수의 형태는 함수의 이름만 .. 프로그래밍/GO 2019. 11. 1. [백준] 4673번 셀프 넘버 C, Python 해설 에라토스테네스의 체 알고리즘으로 분류된 문제이다. 하지만 C언어로 푼 다면 단순하게 자신만의 알고리즘으로도 풀이가 가능하다. 풀이 문제에서 정의한 셀프 넘버는 생성자가 없는 숫자를 뜻한다. 문제에서 제공된 함수 d(n)을 구현하고, 1부터 10000까지 반복하여 생성자가 존재하는 숫자에 대해서는 미리 체크한 뒤 체크되지 않은 수만 출력하는 알고리즘으로 문제에 접근하였다. - C 정답 코드 #include int self_num(int num) { int sum = num; while (num != 0) { sum += num % 10; num /= 10; } return sum; } int main() { int i = 1, tmp; char arr[10001] = { 0, }; for (; i < 10.. 프로그래밍/Algorithm 2019. 10. 29. [백준] 17618번 신기한 수 파이썬 해설 (Python) 출처 : https://www.acmicpc.net/problem/17618 17618번: 신기한 수 평소에 수에 대한 관심이 많은 아이인 민철이는 오늘도 노트에 연필로 수를 더하거나 빼거나 곱하거나 나눠보면서 시간을 보내고 있다. 그러다가 18이라는 수는 신기한 성질을 가진다는 것을 알아냈다. 18을 이루는 각 자릿수인 1과 8을 합한 9는 18의 약수가 된다. 민철이는 18과 같이 모든 자릿수의 합으로 나누어지는 수를 여러 개 더 찾아냈는데, 12, 21도 그런 신기한 수였다. 민철이는 이렇게 모든 자릿수의 합으로 나누어지는 수를 “신기한 수”라고 부 www.acmicpc.net 따로 알고리즘이 분류되지 않은 문제이다. 수학으로 분류될 수 있을 것 같다. 풀이 파이썬이 아니면 아주 간단하게 풀 수 있.. 프로그래밍/Algorithm 2019. 10. 28. 이전 1 2 3 4 5 6 7 8 다음