본문 바로가기

728x90

개발공부/원티드 챌린지 정리

(11)
9월 백엔드 챌린지 정리 : 클린 코드 (4) ISP : Interface Segregation Principle 인터페이스도 작게 쪼개자 객체는 자신이 사용하는 기능(메서드)에만 의존해야 한다는 원칙에 따라 분리하는 것과 마찬가지로, 인터페이스는 그 인터페이스를 사용하는 클라이언트(객체)를 기준으로 분리해야 한다. 클래스(인터페이스)가 가진 책임의 크기를 줄일 수 있고, 관심사의 분리를 해낼 수 있으며 확장성을 가져갈 수 있기 때문에 필요하다 A 인터페이스를 상속하는 B와 C 클래스가 있다. B는 A의 모든 메서드를 사용하기 때문에 상속에 문제가 없지만, C의 경우 A의 모든 메서드를 사용할 필요가 없을 때, C는 사용하지도 않는 메서드와 의존성을 맺는 것이다. 이러한 경우, ISP를 위반하면서, A의 a-1 메서드(C가 사용하지 않는 메서드)에 ..
9월 백엔드 챌린지 정리 : 클린 코드 (3) SOLID - 1 1. SRP : Single Responsibility Principle - 객체를 변경시키는 요인은 무조건 하나여야 한다 책임이란, 객체에 의해 정의되는 응집도(행동과 관련된 상태를 한 클래스에 모이는 정도) 있는 행위의 집합으로, 객체가 유지해야 하는 정보(상태)와 수행할 수 있는 행동(메서드)에 대해 추상적으로 서술한 문장이다. 책임과 기능은 구분이 가능하고 그 크기가 다르다. 책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에 기능보다 추상적이고 개념적으로 더 크다 커피 주문 서비스를 설계하면서, 필요한 기능으로 1) 주문받기 -> 2) 커피 제조 -> 3) 준비된 커피 전달의 3가지 기능에 대한 책임을 "Cashier" 객체에 할당하도록 구현했다 publi..
9월 백엔드 챌린지 정리 : 클린 코드 (2) 소프트웨어 모듈이 가져야 할 3가지 기능1. 필요한 기능이 오류 없이 제대로 동작 2. 변경이 용이한 코드 3. 누가 읽어도 이해할 수 있는 코드, 예상 가능한 동작을 수행하는 코드절차지향과 객체지향1) 절차지향 : 메서드와 프로세스의 역할을 분리해 프로그래밍하는 방식 ~ 프로세스는 데이터의 변경에 따라 영향을 받기 때문에 프로세스도 변경을 해야한다. 따라서 이는 변경하기 쉬운 설계가 아니다 ~ 변경하기 쉬운 설계는 한 번에 하나의 클래스만 변경할 수 있는 설계를 말한다. 1. 하나의 클래스에서는 하나의 처리만 실행될 수 있도록 설계한다(적절하게 나눈다) 2. 나눠진 프로세스를 해당 프로세스와 연관이 있는 데이터가 있는 클래스로 옮긴다 ~ 데이터와 프로세스를 한 곳에 둔다. 데이터와 프로세스가 동일 모듈..
9월 백엔드 챌린지 정리 : 클린 코드 (1) 1. 의미있는 이름 의도를 분명히 밝혀라 - 클래스로 정의하기 이름을 정할 때 1) 존재 이유 2) 수행 기능 3) 사용 방법 정보를 잘못 전달하지 말 것 1) 약속된 용어에 대한 사용 ex) String accountList = "송혜교, 전지현, 김태희, 고소영"; (X) -> List를 쓰는 것은 List 타입일 때 사용해야 정보를 올바르게 전달할 수 있다 2) 유사한 이름을 사용하지 않는다 3) 개념 단위로 묶을 때 유사 표기법을 사용하기 4) 구분하기 어려운 대문자/ 소문자 사용 지양 의미있게 구분하기 : 각 메서드 뒤에 1, A, B 등으로만 구분하는 것은 좋지 못한 구분이다 발음하기 쉬운 이름짓기 검색하기 쉬운 이름 사용하기 인코딩 피하기 이름에 데이터 타입을 명시하는 것은 이후 형변환 등으..
8월 백엔드 챌린지 : 도커 프로 (3) 1. 컨테이너 오케스트레이션 툴 - GCP GKE(Google Kubernetes Engine) - AWS EKS(Elastic Kubernetes Services) ECS(Elastic Container Service) 기능 - 컨테이너 클러스터링 ~ 여러 대의 노드를 하나의 클러스터로 묶어, 어플리케이션을 분산 실행하고, 자원을 효율적으로 활용 ~ 여러 대의 물리적인 또는 가상의 서버를 하나의 시스템처럼 동작하게 하는 기술 ~ 컨테이너를 실행하는 호스트의 자원을 효율적으로 분배, 컨테이너가 안정적으로 실행되도록 함 ~ 여러 대의 컨테이너를 묶어 하나의 서버처럼 사용할 수 있도록 지원 - 서비스 디스커버리 ~ 컨테이너를 자동으로 발견하고, 서비스 이름과 IP주소 등을 관리해 어플리케이션 간 연결을 관리..
8월 백엔드 챌린지 : 도커 프로 (2) 1. 도커 명령어(Docker CLI) 1) 레지스트리에서 이미지 다운로드 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 2) 이미지 목록 docker images [OPTIONS] [REPOSITORY[:TAG]] 3) 이미지에서 새 컨테이너 만들고 실행하기 docker run [OPTIONS] CONTAINER [CONTAINER...] 4) 컨테이너 로그 페치 docker logs[OPTIONS] CONTAINER 5) 실행중인 컨테이너 정지 docker stop [OPTIONS] CONTAINER [CONTAINER...] 6) 컨테이너 제거 docker rm [OPTIONS] CONTAINER [CONTAINER...] 7) 이미지 제거 docker rm [OPTION..
8월 백엔드 챌린지 : 도커 프로 (1) 1. Docker란? - 오픈 플랫폼 - 어플리케이션을 인프라에서 분리해준다 - 신속하다 - 인프라를 어플리케이션을 관리하는 것처럼 관리할 수 있다 - 코드 배포에 용이하다 - 컨테이너 기반 가상화 도구 - 어플리케이션을 컨테이너라는 단위로 격리해 실행하고 배포하는 기술 2. 컨테이너란? - 컨테이너는 가상화 기술 중 하나 - 호스트 운영체제 위 여러 개의 격리된 환경을 생성 - 각각의 컨테이너 안에서 어플리케이션 실행 3. 가상화 기술이란? - 하나의 물리적인 컴퓨터 자원(CPU, 메모리, 저장장치) 등을 가상적으로 분할해 여러 개의 가상 컴퓨터 환경을 만들어 내는 기술. 이를 통해 물리적인 컴퓨터 자원을 더육 효율적으로 사용할 수 있으며, 서버나 어플리케이션을 운영할 때 유연성과 안정성을 제공한다 하..
7월 백엔드 챌린지 4. 예제 적용 1. 알림 시스템 설계 1.1 개요 알림 시스템은 많은 서비스에서 최신 뉴스, 제품 업데이트, 이벤트 등 비즈니스적으로 중요한 내용을 비동기로 제공한다. 모바일 푸시, SMS, 그리고 이메일로 분류할 수 있다 1.2 기본 설계 1) IOS - 알림 제공자 : 알림 요청을 만들어 애플 푸시 알림 서비스로 보내는 주체. 알림 요청을 보내려면 device token, payload 데이터가 필요하다 - 알림 서비스(APNS) : 애플에서 제공하는 원격 서비스. 푸시 알림을 IOS 장치로 보내는 역할을 담당한다 2) AOS : APNS 대신 FCM을 사용한다(기본 설계는 같다) 3) 이메일, SMS 역시 동일 4) 연락처 정보 수집 절차 - 알림을 보내려면 모바일 단말 토큰, 전화번호, 이메일 주소 등의 정보가..

728x90