Computer Science

    [리트코드]18. 4Sum

    class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: #두개 고르고 투포인터 고르고 하나를 옮김 nums.sort() ans = [] for i in range(len(nums) - 3): for j in range(i + 1, len(nums) - 2): s, e = j + 1, len(nums) - 1 while s < e: sum = nums[i] + nums[j] + nums[s] + nums[e] if sum == target: if sorted([nums[i], nums[j], nums[s], nums[e]]) not in ans: ans.append([nums[i], nums[j], nums[s]..

    [리트코드]16. 3Sum Closest

    class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: diff = 1e9 nums = sorted(nums) for i in range(len(nums)): s, e = i + 1, len(nums)-1 while s < e: sum = nums[i] + nums[s] + nums[e] if abs(target - sum) < abs(diff): diff = target - sum if sum < target: s += 1 else: e -= 1 if diff == 0: break return target - diff ''' 투포인터문제 정렬하고 범위 줄여가면서 계산한다. '''

    Spring Framework, Spring Boot 도대체 뭐가 다른거지?

    Spring 공부를 하다보니 Spring 관련 해서 Spring boot(이하 boot)와 Spring Framework 가 뭐가 다른건지 궁금해졌다. 두 개가 무엇인지 개념부터 설명하겠다. Spring Framework의 탄생은 자바진영의 봄이 도래했다해서 프레임워크의 이름이 Spring이다. (기존의 자바진영에서 사용하던 EJB가 너무 별로였기 때문에 해당 프레임워크의 탄생을 모두가 두 손 들고 환영했다고) 스프링의 가장 큰 특징은 의존성주입(DI), 제어의 역전(IoC), 관점지향 프로그래밍(AOP) 로 들 수 있다. DI - 객체 사이의 의존 관계를 스프링 컨테이너가 자동으로 연결해 줌. 개발자가 객체를 직접 생성하지 않고 외부에서 주입시켜준다. IoC - 메소드나 객체를 개발자가 생성하는 것이 ..

    [리트코드]1762. Buildings With an Ocean View

    class Solution: def findBuildings(self, heights: List[int]) -> List[int]: stck = [] #비어있으면 넣고 #다음에 들어온게 더 크면 넣고 작으면 넣지 않는다. stck.append((heights[-1], len(heights)-1)) for i in range(len(heights)-1, -1, -1): if stck[-1][0] < heights[i]: stck.append((heights[i], i)) stck.sort(key = lambda x : x[1]) #print(stck) ans = [] for i in range(len(stck)): ans.append(stck[i][1]) return ans 미디움이라고 되어있지만 조금 쉬..

    Monolithic Architecture란 무엇인가?

    Monolithic, MSA, SOA 정리 1편 Monolithic Architecture 개발되는 서비스의 모든 비즈니스 로직, UI, 데이터베이스 등을 한 곳에 다 때려넣고 운영하는 구조로 프로그램을 설계하는 방법이다. 하지만 소프트웨어의 규모가 커지고 복잡해지는 현 상황에서 대규모 서비스를 제작하기에는 합리적이지 않기에 서비스 개발 초기 빠른 개발을 위해 사용하더라도 해당 서비스가 어느정도 사업 모델로서 인정을 받고 기능들이 추가되면서 프로그램 복잡도가 높아진다면 MSA로 변경 작업을 거친다. 그렇기 때문에 처음부터 대규모 프로젝트를 생각했다면 사용되지 않는다. 장점 -하나의 언어와 프레임워크에 종속되어 구현하는 사람 입장에서는 하나의 언어와 프레임워크만 사용하면 된다. -하나의 프로그램을 실행하면..

    081321 MSA_SpringCloud

    Apigateway-service 해당 서비스는 rabbitmq, eureka-server(discovery-service), config-service를 사용한다. 도커 run 옵션을 줄때 환경변수를 세팅해서 연관된 서비스들과 연결될 수 있게 해야 한다. docker run -d -p 8000:8000 --network ecommerce-network -e "spring.cloud.config.uri=http://config-service:8888" \ -e "spring.rabbitmq.host=rabbitmq" \ -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \ --name apigateway-serv..

    081221 MSA_SpringCloud

    Rabbitmq Rabbitmq를 Docker에서 실행 Rabbitmq 다운로드 사이트에 들어가면 Docker에서 어떻게 써야하는지 명령어가 나와있다. docker run -d --name rabbitmq --network ecommerce-network -p 15672:15672 -p5672:5672\ -p 5671:5671 -p 15671:15671 -p 4369:4369 -e RABBITMQ_DEFAULT_USER=guest\ -e RABBITMQ_DEFAULT_PASS=guest rabbitmq:management -d는 백그라운드에서 실행옵션 --name은 컨테이너 이름지정 옵션 --network는 docker의 어떤 network에서 사용하겠다는 옵션 -p는 포트바인딩해주는 옵션 Rabbitm..

    081121 MSA_SpringCloud

    현재까지 개발한 것들을 Docker에 올려서 Sevice해보자 docker 명령어 ex> mysql docker run -d -p 3306:3306 --name mysql mysql:${version} docker run은 create + start 합쳐놓은것 -d 옵션 : 백그라운드에 실행 -p 옵션 : 포트설정 -p 3306:3306 앞부분포트는 Host에서 접근하고자하는 포트 뒷부분포트는 컨테이너에서 응답하는 포트 --name 옵션 : container의 이름 설정, 설정안하면 임의의 이름 들어감 docker exec -it mysql bash 실행중인 컨테이너에 명령을 실행하거나 shell로 진입하려 사용 Docker Network 사용 docker는 3개의 Network방식 제공 Bridge, ..

    081021 MSA_SpringCloud

    Prometheus, Grafana 설치 https://prometheus.io/download/ Download | Prometheus An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach. prometheus.io https://grafana.com/get/?plcmt=top-nav&cta=downloads OS에 맞춰서 다운로드 받고 Grafana는 cloud 말고 self-managed에서 다운로드 받는다. Window기준 Prometheus폴더에서 prometheus.yml에서 내가 s..

    080921 MSA_SpringCloud

    Micrometer - JVM 기반의 Application의 Metrics 제공 - Prometheus등의 다양한 모니터링 시스템지원 Timer - 짧은 지연 시간, 이벤트의 사용빈도를 측정 - 시계열로 이벤트 시간, 호출 빈도 등의 정보를 제공 - @Timed 어노테이션을 메소드에 붙여 사용 MSA에 Micrometer 적용 pom.xml에 Micrometer Dependency 추가 application.yml의 actuator에 info, metrics, prometheus 추가 메소드위에 어노테이션 @Timed Prometheus - Metrics를 수집하여 모니터링 및 알람에 사용되는 Opensource Application - CNCF에서 두번째로 관리하는 프로젝트(첫번째는 k8s) - 시계열..