Computer_Language 69

[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..

[Thread] 스레드란 무엇인가 (vs 프로세스)

스레드의 정의 스레드의 정의는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다. *프로세스에 대해 잘 모른다면 여기를 참고 스레드의 특징 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다. 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다. 스레드의 종류 스레드를 지원하는 주체에 따라 2가지로 나눌 수 있다. 사용자 레벨 스레드 (User-Level Thread) 사용자 스레드는 커널 영역의 상위에서 지원..

[Process] 프로세스란 무엇인가

프로세스(Process)란 컴퓨터에서 프로그램은 "특정 작업을 수행하는 일련의 명령어들의 모음"이다. 그렇다면 프로세스는 무엇인가? 프로세스는 다양한 종류의 프로그램 중 "실행 중인컴퓨터 프로그램"이다. 조금 더 자세하게 "운영체제로부터 시스템 자원을 할당받는 작업의 단위"라고 정의하기도 한다. *시스템 자원이란? - CPU 점유 시간 - Code, Data, Stack, Heap의 구조로 되어 잇는 독립된 메모리 영역 프로세스끼리는 서로 독립되어있기 때문에 서로 다른 프로세스의 메모리에 접근할 수 없다. 만약 다른 프로세스의 자원에 접근해야 한다면, IPC(Inter-Process-Communication)를 통해 접근할 수 있다. *대표적인 IPC의 종류 1. Signal 2. Pipe 3. Mess..

[DevOps] DevOps란 무엇인가

이미지 출처 : https://medium.com/@neonrocket/devops-is-a-culture-not-a-role-be1bed149b0 DevOps를 공부하기 위해 구글에 검색해보고 위키백과도 한번쯤은 읽어봤을 것이다. "Developement(개발)와 Operations(운영)의 합성어", "개발자와 운영자의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화"라고 정의한다. 하지만 이 한 줄 정의만으론 DevOps에 대한 이미지가 그려지지 않았기에 내 방식대로 정리를 시작하게 됐다. DevOps의 배경 하나의 소프트웨어를 개발하면서 개발자와 운영자 사이에 갈등이 생긴다. 개발자는 고객의 요구에 따른 변경을 빠르게 보기를 원하고, 운영자는 속도 보단 안정성을 중요시하기 때문이다. 새로운 프..

[Go] 10. Go(golang)의 익명 함수(Anonymous function)

이전 공부에서 golang의 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 익명 함수에 관한 내용이다. 파이썬에서 Lambda와 비슷한 맥락이라고 봐도 될 것 같다. Go에서 익명 함수란? 익명 함수는 말 그대로 이름이 없는 함수이다. 함수는 하나의 큰 프로그램을 여러 부분으로 나누고, 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다. 그렇다면 익명함수는 어떤 녀석이고 어떻게 호출할까? 익명함수는 그 자리에서 만들고 바로 그 자리에서 실행할 수 있다는 장점이 있다. 사실 익명 함수의 쓰임새는 말로 설명하는 것보다 직접 상황이 돼봐야 이해할 수 있을 것이다. (링크 - 실제로 내가 파이썬에서 익명 함수를 사용했던 경우이다.) Go에서 익명 함수의 형태는 함수의 이름만 ..

[백준] 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..

[백준] 17618번 신기한 수 파이썬 해설 (Python)

출처 : https://www.acmicpc.net/problem/17618 17618번: 신기한 수 평소에 수에 대한 관심이 많은 아이인 민철이는 오늘도 노트에 연필로 수를 더하거나 빼거나 곱하거나 나눠보면서 시간을 보내고 있다. 그러다가 18이라는 수는 신기한 성질을 가진다는 것을 알아냈다. 18을 이루는 각 자릿수인 1과 8을 합한 9는 18의 약수가 된다. 민철이는 18과 같이 모든 자릿수의 합으로 나누어지는 수를 여러 개 더 찾아냈는데, 12, 21도 그런 신기한 수였다. 민철이는 이렇게 모든 자릿수의 합으로 나누어지는 수를 “신기한 수”라고 부 www.acmicpc.net 따로 알고리즘이 분류되지 않은 문제이다. 수학으로 분류될 수 있을 것 같다. 풀이 파이썬이 아니면 아주 간단하게 풀 수 있..

[백준] 1652번 누울 자리를 찾아라 파이썬 해설 (Python)

출처 : https://www.acmicpc.net/problem/1652 1652번: 누울 자리를 찾아라 첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. www.acmicpc.net 수학 알고리즘 문제로 분류된 문제이다. 문제를 잘못 이해해서 한 번에 맞추지 못했던 문제여서 억울함이 가득한 문제이다. 해설을 보기 전에 문제를 다시 한번 정독한 뒤 다시 풀어보는 것을 추천한다! 풀이 문제에 그림이 나오고 입력이 특이하다고 겁먹지 말고 문제를 천천히 읽어보면 그리 어렵지 않은 문제라는 것을 알 수 있다. 문제에서 원하는 출력인 "가로로 누울 수 있는 자리"와 "..

[백준] 11403번 경로 찾기 파이썬 해설 (Python)

출처 : https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net BFS와 DFS 혹은 플로이드 와샬 알고리즘으로 분류된 문제이다. BFS : Breadth-first search DFS : Depth-first search 플로이드 와샬 알고리즘은 시간 복잡도가 O(n^3)이기 때문에 위 두 가지 방법으로 푸는 것을 추천한다. 풀이 이전에 BFS 혹은 DFS알고리즘 문제를 푼적이 있다면, 해당 문제에서 사요한 코드를 조금만 변형하면 풀 수 있는 문제이다. 문제를 풀기위해 알고리즘을 설계했던 순..

[백준] 1058번 친구 파이썬 해설 (Python)

출처 : https://www.acmicpc.net/problem/1058 1058번: 친구 지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람이 친구이거나, A와 친구이고, B와 친구인 C가 존재해야 된다. 여기서 가장 유명한 사람은 2-친구의 수가 가장 많은 사람이다. 가장 유명한 사람의 2-친구의 수를 출력하는 프로그램을 작성하시오. A와 B가 친구면, B와 A도 친구이고, A와 A는 친구가 아니다 www.acmicpc.net 그래프 이론 알고리즘으로 분류된 문제이다. 문제를 다 풀고 다른 사람들의 풀이를 참고하며 공부했는데 플로이드 와샬 알고리즘을 사용했..