본문 바로가기

전체 글22

테스트 코드 작성 규칙 테스트 코드 작성 규칙 테스트 코드 작성 규칙 테스트 코드는 적시에 작성한다 기능의 완성된 이후 테스트코드를 끼워 맞추는것이 아닌 테스트코드로 상황과 기능의 정의를 내린후 로직을 작성한다 테스트는 독립적으로 시행된다 DB의 정보나 외부 api에 연동에 영향을 받아서는 안된다 DB의 정보가 필요할경우 맵퍼나 레파지토리를 모킹한다 즉 순수 자바코드와 프로젝트내에서의 동작을 검증해야한다 (인터넷이 연결이 안되어있어도 돌아가야한다) 테스트는 자가 검증해야한다 테스트코드에 로그를 찍어 확인하는 패턴은 금지 A메서드를 실행시 true라는 값이 나온다면 Assertion을 이용해 검증한다 테스트 코드엔 성공/실패만 있어야한다 최대한 다양한 변수상황을 대입해야한다 다양한 상황을 테스트하여 테스트의 신뢰성을 높여야한다 .. 2021. 9. 29.
블로그 재연재 시작 2월에 취업한 이후로 회사업무 파악과 개인공부의 일정때문에 한동안 블로그가 밀렷는데 최근에 다시 시작할려합니다 7월쯤 할려했는데 그때는 또 손목인대가 좀 문제가있어서; 무조건적인 안정이 필요한시기라 한번 더 밀려서 이제라도 시작하네요 ㅎ 개인 공부하면서 했던 공부들 + 회사 업무하면서 적용해본 기술들을 포스팅 해볼려합니다 아마도 ? 포스팅 순서 - Testcode / junit / mockito / TDD / BDD - spirng aop / aop로깅 / aop 멀티쓰레딩 - java 멀티 쓰레딩 / 적정 쓰레드수 계산법 - java 기본기 / 깊은복사 얕은복사 / java의 자료구조 - 디자인패턴 - jpa 포스팅 예정이구요 추가로 개인 포폴용 프로젝트를 하나 해볼려합니다 java로 하는 개인 크롤링.. 2021. 9. 29.
테스트 코드의 중요성 회사에 테스트 코드가 체계적으로 작성되어있지 않기도 하고 최근 필요성을 절실히 느끼고 있어서 공부 후 회사에 테스트 코드를 도입하였다. 도입하면서 느꼇던 점들을 블로그에 포스팅해봅니다 :) 테스트 코드의 작성 이유 - a.기능의 추가, 변경, 삭제에 대처하고 자동화 테스트를 위해 - b.예상하지 못한 오류에 대한 피드백을 위해 - c.좋은 설계로 작성되게끔 코드를 유도(테스트를 편하게 하려면 결국 객체지향적 코딩을 해야 한다) - d. 기능 정의의 문서의 역할 - f. 실수를 줄여준다 a) 기능의 추가, 변경, 삭제에 대처하고 자동화 테스트를 위해 프로젝트에서 코딩을 할 때 최초의 기획의도와 다르게 기능이 변경되는 경우가 생각보다 빈번합니다 이번에 결제와 멤버십 관련 기능을 구현하는 업무를 맡았는데 멤버.. 2021. 9. 29.
REST API REST의 정의 - Representational State Transfer의 약자이다 - 자원을 이름으로(자원의 표현)으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. - 즉 , 자원의 표현에 의한 상태 전달이다 - Ex) DB의 학생 정보가 자원일때 student를 자원의 표현으로 정한다 REST의 특징 - Stateless 무상태성 작업을 위한 상태 정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다. - Self-descriptiveness 자체 표현 구조 REST API 메시지.. 2021. 2. 25.
커맨드 패턴 (Command) - 정의 - 요구사항(정보)을 객체로 캡슐화할 수 있으며 매개변수를 써서 여러 가지 다른 요구사항을 집어넣을 수도 있습니다. 또한 요청내역을 큐에 저장하거나 로그로 기록할 수 있으며 작업 취소 기능도 지원합니다. 인보커에는 execute() 메서드를 호출함으로써 커맨드 객체에게 특정 작업을 수행해달라는 요구를 하게 됩니다. Command는 모든 커맨드 객체에서 구현해야 하는 인터페이스입니다. 모든 명령은 execute() 메서드 호출을 통해 수행되며 이 메서드에서는 리시버에 특정 작업을 처리하라는 지시를 전달합니다. ConcreteCommand는 특정 행동과 리시버 사이를 연결하여 줍니다 인보커에서 execute() 호출을 통해 요청을 하면 ConcreteCommand 객체에서 리시버에 있는 메서드를 호.. 2021. 2. 9.
알고리즘 Stack, Queue, Deque, Heap 정적인 메모리 : 컴파일할 때 메모리를 할당받고 시작한다 ex) 기본형 자료형 동적인 메모리 : 실행하는 런 타임에 메모리를 할당받는다 ex) 참조형 자료형 스택 Stack LIFO 후입선출의 구조 백트래킹, 인터넷 사용기록 보관 등이 스택을 사용하는 LIFO 구조를 갖고 있다 한쪽(TOP)에서만 데이터를 넣고 꺼낼 수 있다. 스택오버플로우: 정해진 크기의 스택에 계속해서 PUSH 하다 스택의 크기를 초과하여 더 이상 데이터를 추가할 수 없게 된 것으로 흔히 스택을 사용하는 재귀 함수 호출 시 많이 경험한다. 컴퓨터의 사칙 연산 계산에서 후위 표기법을 사용할 때도 스택을 활용한다. PUSH : 스택의 TOP에 데이터 추가 POP : 스택의 TOP의 데이터를 읽고 제거 PEEK : 스택의 TOP의 데이터를.. 2021. 2. 7.
메모리 구조 Code, Data, Stack, Heap 이번 포스팅은 메모리의 구조에 관한 포스팅입니다 www.tcpschool.com/php/intro과 기타 다른 문서를 참고하여 작성하였습니다 프로그램이 실행되기 위해서는 메모리에 로드(load)되어야 합니다 프로그램이 사용하는 변수들을 저장할 메모리도 필요합니다 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 1. 코드(code) 2. 데이터(data) 3. 스택(stack) 4. 힙(heap) 입니다 코드(code) 영역 메모리의 코드 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부릅니다 cpu는 코드영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다. 프로그램이 종료될때까지 계속 유지되는 영역입니다 데이터(data) 영역 메모리의 데이터영역은 프로그램의 전역 변수.. 2021. 2. 7.
싱글턴 패턴 (Singleton) - 정의 - 해당 클래스의 인스턴스가 하나만 생성되고 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 헤드퍼스트 디자인 패턴 책에서 소개해준 싱글톤 패턴에는 여러 생성 문법이 있었지만 책에서 추천하는 예시 코드입니다 1. 인스턴스를 미리 만들지 않고 필요할 때 생성하는 코드 public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class){ if (uniqueInstance == null) { uniqueIn.. 2021. 2. 4.
프로세스와 쓰레드의 차이 프로세스와 쓰레드의 차이(Process vs Thread) - 프로세스 - 사전적 의미 1. 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 2. 메모리에서 실행되고 있는 프로그램의 인스턴스(독립적인 객체) 3. 운영체제로부터 시스템 자원을 할당받는 작업의 단위 동적인 개념으로는 실행된 프로그램을 의미하기도 한다 시스템 자원 - CPU 시간 - 운영되기 위해 필요한 주소 공간 - Code, Data, Stack, Heap의 구조인 독립된 메모리 영역 특징 1. 프로세스는 각각 독립된 메모리 영역을 할당받는다 2. 기본적으로 프로세스당 최소 한 개의 쓰레드를 보유한다 3. 각 프로세스는 별도의 주소 공간에서 실행된다 4. 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다 5. 프로세스가 .. 2021. 2. 4.
728x90