[TIL_Carrotww] 107 - 23/04/18

유형석·2023년 4월 18일
0

TIL

목록 보기
122/138
post-thumbnail

📝Carrotww의 코딩 기록장

🧲 python algorithm

🔍 백준 1987 알파벳

시간초과때문에 엄청 빡센 문제이다. bfs로 풀었는데 queue를 set으로 잡아주면 시간초과 문제를 해결할 수 있다.

  • 코드
if __name__ == "__main__":
    import sys

    row, col = map(int, sys.stdin.readline().split())
    graph = []

    for _ in range(row):
        graph.append(list(sys.stdin.readline().strip()))

    dx, dy = [1, -1, 0, 0], [0, 0, -1, 1]

    queue = set()
    queue.add((0, 0, graph[0][0]))

    max_val = 1

    while queue:
        cur_row, cur_col, total = queue.pop()

        for i in range(4):
            n_row, n_col = cur_row+dx[i], cur_col+dy[i]
            if n_row < 0 or n_row >= row or n_col < 0 or n_col >= col or graph[n_row][n_col] in total:
                continue
            max_val = max(max_val, len(total) + 1)
            queue.add((n_row, n_col, graph[n_row][n_col]+total))

    print(max_val)

🧲 Microservices Architecture 이해하기

🔍 소개

애플리케이션이 어떻게 빠르고 효율적이며 확장 가능하도록 구축되었나 보면 대부분 답은 MSA에 있을 가능성이 있다.

MSA란?

MSA는 애플리케이션을 마이크로 서비스 라고 하는 더 작은 자체 포함 단위로 나누는 소프트웨어 개발 접근 방식이다.
각 마이크로 서비스는 애플리케이션의 특정 기능을 담당하며 서로 독립적으로 개발, 배호 및 확정할 수 있다.
그림을 보면 쉽게 이해된다.


비유

이해가 어려울 수 있는데 이렇게 생각해보자.
각 셰프가 특정 요리를 전문으로 하는 식당이 있다. 이 식당은 모든 식사를 한 명의 셰프가 준비하는 식당과 달리 각 셰프가 자신의 전문 분야에 집중할 수 있다.
이러한 전문화를 통해 식당은 고품질 요리를 빠르고 효율적으로 제공할 수 있을것이다.
마찬가지로 MSA를 사용하면 개발자가 더 나은 성능, 확장성 및 유지 관리성을 갖춘 애플리케이션을 만들 수 있다.


MSA의 이점

  1. 확장성 : 각 마이크로서비스를 독립적으로 확장할 수 있으므로 애플리케이션 전체 시스템에 과부하를 주지 않고 특정 기능에 대한 수요 증가를 개별적으로 처리가 가능하다.
  2. 유연성 : 개발자는 해당 서비스의 요구 사항 및 제약 조건에 따라 각 마이크로 서비스에 대해 서로 다른 언어, 프레임워크 및 데이터 스토리지 기술을 사용할 수 있다.
  3. 더 빠른 개발 : 더 작고 집중적인 팀이 개별 마이크로 서비스에서 작업할 수 있으므로 개발 및 배포 주기가 더 빨라진다.
    솔직히 더 빠른 개발 이 부분은 더 많은 개발자를 부분적으로 사용하여 개발한다는 의미인데 당연한거 아닌가...?
  4. 내결함성 : 단일 마이크로서비스가 다운되더라도 전체 애플리케이션이 다운되는 것이 아니다. 나머지 서비스는 계속 작동하여 전반적인 영향을 최소화 할 수 있다.

아마도 MSA를 사용하는 가장 큰 이유중 하나는 개인적으로 4번인 것 같다. (개인적임) AWS인지 넷플릭스인지 기억이 안 나지만 둘중 한 기업에 장애가 났을때 MSA 형식의 서비스가 아니여서 복구하는데 오래 걸렸다고 했던걸 들은 적이 있다.
그 장애 이후 MSA로 다시 아키텍처를 구축했다고...


MSA가 해결해야할 과제

  1. 복잡성 증가 : 당연하다. 잘게 쪼개놨으니 여러 서비스를 관리하는 것은 어려울 것이다. 서비스 간의 통신 처리, 모니터링 및 데이터 일관성 보장과 관련하여 복잡할 수 있다.
  2. 통신 오버헤드 : 마이크로서비스는 서비스 단위로 통신을 하기 때문에 종종 네트워크 장애가 일어날 수 있다.
  3. 보안 : 마이크로서비스에는 고유한 보안 요구 사항과 잠재적인 취약성이 있을 수 있으므로 여러 서비스를 보호하는 것이 기존 모노리틱 애플리케이션을 보호하는 것 보다 어려울 수 있다.

요약

Microservices Architecture는 확장 가능하고 유연한 애플리케이션을 구축하는데 널리 사용되는 방식이 되었다. 해결해야할 문제가 있지만 MSA는 개발팀에게 많은 이점을 제공한다. MSA는 복잡한 애플리케이션을 더 작고 관리 가능한 구성 요소로 분해함으로써 개발자가 끊임없이 변화하는 디지털 세계의 요구에 쉽게 적응할 수 있는 강력하고 효율적인 시스템을 만들 수 있도록 도와준다.

🧲 근황

알고리즘을 꾸준히 풀고있긴 했는데 TIL이 밀리다보니 2주정도 공백기가 생겼다...
소마에 붙어서 팀만들고 강의듣고 바쁘기도 하고.
이제 다시 꾸준히 써야지..!!

profile
Carrot_hyeong

0개의 댓글