[CLEANCODE] 함수
·
CLEANCODE
SOLID (객체지향 설계의 5가지 원칙) SRP 단일 책임원칙 OCP 개방 폐쇄 원칙 LSP 리스코프 치환 원칙 ISP 인터페이스 분리 원칙 DIP 의존성 역전 원칙 SRP 단일 책임원칙 한클래스는 하나의 책임만 가져야함 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야함 SRP 책임이 분명해지기 때문에, 변경에 의한 연쇄작용에서 자유로워짐 가독성 향상과 유지보수가 용이해짐 실무에서는 쉽지 않지만 늘 상기해야함 OCP 개방 폐쇄 원칙 소프트웨어 요소는 확장에는 열려있고, 변경에는 닫혀있어야함 변경을 위한 비용을 줄이고, 확장을 위한 비용을 가능한 극대화 객체지향의 추상화와 다형성을 활용하면 개방폐쇄원칙을 지킬 수 있음 요구사항의 변경이나 추가사항이 발생하..
[CLEANCODE] 의미있는 이름
·
CLEANCODE
의도를 분명하게 이름 사용 변수, 함수명을 의도를 분명하게 하면 코드를 이해하기 쉬워짐 for 문 사용시 i j k 를 사용 X 통일성 있는 단어 사용 똑같은 의미에 대해서는 똑같은 단어를 사용하는 것이 중요함 뜻이 같은 비슷비슷한 단어여도 통일이 안되면 오히려 혼란을 줌 통일성 있는 단어 사용을 위해 팀에서 협의를 하는 것이 좋음 변수명에 타입 금지 1. String addressString -> address 2. int itemPriceAmount -> itemPrice 3. Account[] accountArray -> accounts 4. List accountList -> accounts, accountList 5. public interface IShapeFactory -> ShapeFact..
[CLEANCODE] 깨끗한 코드
·
CLEANCODE
나쁜코드 성능이 나쁜 코드 : 불필요한 연산이 들어가서 개선의 여지가 있는 코드 의미가 모호한 코드 : 이해하기 어려운코드, 네이밍과 내용이 다른 코드 중복 코드 : 비슷한 내용인데 중복되는 코드 (중복된 코드는 버그를 낳는다고함) 나쁜코드가 나쁜 이유 나쁜 코드는 계속 나쁜코드가 만들어지도록 함 기술부채를 만들어서 수정을 더어렵게 하기 때문에 팀 생산성을 저하 시킴 나쁜 코드로 인하여 새로운 시스템을 만들게 됨 나쁜코드가 만들어지는 이유 촉박한 일정 : 나쁜코드는 하지만 오히려 생산성을 저하시켜서 일정을 못맞추게함 영향 범위가 매우 넓음 (영향 범위가 넓어서 다른부분에 버그가 발생할까봐) : 영향 범위가 넓다고 방치하면 결국 다시 돌아오게됨 클린코드 성능이 좋은 코드 의미가 명확한 코드 / 가독성이 좋..
[JAVA] Junit5
·
JAVA
JUnit5 2017년 10월에 공개됨 스프링부트 2.2부터 Junit5가 기본버전이 됨 JUnit5 구조 Platform : 테스트를 실행해주는 런처를 제공 / TestEngine API 제공 Jupiter : TestEngine API 구현체로 JUnit 5를 제공 Vintage: Junit4와 3을 지원하는 TestEngine 구현체 JUnit5 기본 어노테이션 어노테이션 기능 @Test 테스트 메소드 설정 @BeforeAll 현재 클래스 테스트 실행전 해당 테스트 실행 @BeforeEach 모든 테스트 실행전에 실행할 메소드 정의 @AfterAll 현재 클래스 테스트 종료후 해당 테스트 실행 @AfterEach 모든 테스트 실행후에 실행할 메소드 정의 @Disabled 미사용 테스트 정의 JUni..
[OS] Thread (쓰레드)
·
OS
Thread (쓰레드) 경량화 프로세스라고도 함 CPU를 점유하는 가장 기본적인 단위 Single Thread / Multi Thread 레지스터, 스택, 프로그램 카운터가 프로세스 내부에 별도로 가지게 되면 쓰레드가 됨 한 프로세스에 쓰레드를 여러개 가지게 되면 멀티쓰레드가 됨 Multi Thread 장점 반응성: User 인터페이스를 처리할때, 논블록킹으로 익스큐션을 계속 실행 가능 자원공유 : 스레드는 코드와 데이터 영역을 공유하기 때문에 Shared 영역을 안만들어도 자원공유가 자유로움 (프로세스 대비) 경제성 : 프로세스보다 비용이 더 경제성 있음 (컨텍스트 스위칭시 프로세스에 비해서 오버헤드가 낮음) 확장성 : 멀티프로세스 아키텍처에 병렬처리를 가능하게함 4개 쓰레드를 어플리케이션에서 상황별 ..
[DEVOPS] Nginx 설치 및 톰캣연동 / SSL 인증설정
·
DEVOPS
Nginx 설치 정리 및 설정(Centos 기준) 설치방법 ROOT 계정이 아닐경우 아래 명령어에서 sudo 추가 1. EPEL 레파지토리 설치 : yum install epel-release nginx는 센토스 베이스 레파지토리에 존재하지 않기 때문 필요 2. nginx 설치 : yum install nginx 3. nginx 실행 : service nginx start 정상실행이면 Starting nginx: [ ok ] 메세지 확인 nginx 설치 서버 80포트 방화벽 허용 확인 브라우저에서 해당 서버 주소 접속시 nginx 설치 확인용 페이지 보임 톰캣연동 nginx와 톰캣을 연동할라면 프록시 설정을 해야함 / ROOT 계정이 아닐경우 아래 명령어에서 sudo 추가 1. nginx 설정 파일 오픈..
[OTHER] 마이크로 서비스 아키텍처
·
OTHER
Microservices 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성 구성 : Container, Funcations, API Gateway 등 MSA 등장배경 모놀리식 아키텍처에 한계점으로 인해 등장함 모놀리식의 경우 서비스 변경이 어려움 (여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있어, 수정시 영향도가 큼) 모놀리식은 모든 구성요소가 한프로젝트에 통합되어 있는 형태라 규모가 커질 수록 작은 변경에도 높은 테스트 비용이 발생하며, 하나의 시스템을 개발하여 배포하기 때문에 배포시 비용이 큼 모놀리식 아키텍처에서 부분 서비스 장애시, 전체 서비스의 장애로 확대될 가능성이 큼 MSA 특징 애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트 들로 분해하고 이들을 조합..
[NETWORK] L4 스위치
·
NETWORK
L4 스위치 OSI 3, 4 Layer에 속한 IP 주소 및 TCP/UDP 포트 정보를 참조하여 스위칭하는 장비 Transport Layer(IP + Port)를 이용한 로드밸런싱 TCP, UDP 프로토콜을 사용 Port 기반 스위칭 지원 VIP(Virtual IP)와 매핑한 테이블을 가지고 있어, VIP로 들어오는 트래픽을 여러 서버에 분산시킴 주로 라운드로빈 방식을 사용 L4 스위치 주요기능 서버 로드밸런싱 기능 : 인터넷의 서버 부하분산 기능을 말하며, 여러 대의 서버를 마치 하나의 서버처럼 동작하게 함으로써, 인터넷 서버의 성능 및 안정성을 향상 시킴 캐시 리다이렉션 기능 : 캐싱 서버를 좀 더 효율적으로 사용할 수 있게 함, 캐시는 인터넷 서버와 클라이언트 단에서도 속도 향상과 WAN 구간의 트..
[ALGORITHM] 정렬
·
ALGORITHM & DATA STRUCTURE
정렬 어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 것 정렬은 프로그램 작성시 빈번하게 필요 다양한 알고리즘이 고안되었으며, 알고리즘 학습의 필수 버블정렬 (Bubble sort) 두 인접한 데이터를 비교해서, 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘 선택정렬 (Selection sort) 주어진 데이터 중, 최소값을 찾은뒤 해당 최소값을 데이터 맨 앞에 위치한 값과 교체함, 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복하는 정렬 알고리즘 삽입정렬 (Insertion sort) 두번째 인덱스부터 시작하여, 해당 인덱스 앞에 있는 데이터(B) 부터 비교해서 key 값이 더 작으면, B값을 뒤 인덱스를 복사함, 이를 key 값이 더 큰 데이터를 만날..