본문 바로가기

Web/기초

(16)
[Web] Java Testing Framework - Unit Test(JUnit) 들어가면서 1. TDD 테스트 주도 개발(Test-Driven Development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트퀘어 개발 프로세스중 하나입니다. 쉽게 얘기하면 개발을 하는데 있어서 테스트가 주가 되어 개발한다는 의미 입니다. 제품의 테스트가 좋을수록 제품의 품질이 향상 됩니다. 그래서 테스트는 중요하다고 생각합니다. 기존 개발 프로세스 설계 개발(코드 작성) 테스트(코드 작성) TDD 프로세스 설계 테스트(코드 작성) 개발(코드 작성) TDD 방법론을 사용할 경우 아래의 같은 장점, 단점이 있습니다. 장점 객체지향적인 코드 개발 - 모든 코드가 재사용 성을 기반으로 작성하기 때문 설계 수정 시간의 단축 - 테스트 코드를 먼저작성하기 떄문에 설계의 구조적 문제점을 바로 찾음 디버깅..
[WEB기초] REST API vs GraphQL 차이점 GraphQL / RESTful GraphQL 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 떄 대부분의 요청이 CRUD에 해당할 때 RESTful HTTP, HTTPs에 의한 Cacheing을 잘 사용하고 싶을 때 File 전송 등 단순한 Text로 처리되지 않는 요청들이 있을 때 요청의 구조가 정해져 있을 때 아래 글 요약 REST에서는 Resource에 대한 형태 정의와 데이터 요청 방법이 연결되어 있지만, GraphQL에서는 Resource에 대한 형태 정의와 데이터 요청이 완전히 분리되어 있습니다. REST에서는 Resource의 크기와 형태를 서버에서 결정하지만, GraphQL에서는 Resource에 대한 정보만 정의하고, 필요한 크기와 형태는 client단에서 요청 시 결정합니..
[WEB기초] 싱글톤 패턴(Singleton Pattern) 애플리케이션이 시작될 때 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나고 최초 생성 이후에 호출된 생성자는 최초에 생성한 객체를 반환한다. 인스턴스가 필요 할 때 똑같은 인스턴스를 만들어 내는 것이 아니라, 동일(기존) 인스턴스를 사용하게 한다. 싱글톤 패턴 쓰는 이유 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. DBCP(Database Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해..
[WEB기초] Spring 생성자 주입을 써야하는 이유 생성자 주입을 사용해야하는 이유 객체의 불변성 확보 수정자 주입이나 일반 메소드 주입을 사용하면, 불필요하게 수정의 가능성을 열어두게 된다. SOLID 5원칙 중 OCP 원칙을 지키며 객체의 불변성을 확보할 수 있다. 테스트 코드의 작성 테스트 코드를 순수 자바코드로 작성할 수 있다. 컴파일 시점에 객체를 주입받아 테스트 코드를 작성할수 있으며, 주입하는 객체가 누락된 경우 컴파일 시점에 오류를 발경할 수 있다. 필드 주입의 경우 순수 자바코드로 단위테스트를 작성하는 것이 불가능하다 final 키워드 작성 및 Lombok과의 결합 final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다. 순환 참조 에러 방지 순환 참조 문제를 애플리케이션 구동( 객체의 생성 ) ..
[WEB기초] DI(Dependency Injection) - 의존성 주입 DI(Dependency Injection) 스프링이 다른 프레임워크와 차별화되어 제공하는 의존관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. 객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴. DI를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. Framework에 의해 동적으로 주입되므로 여러 객체간의 결합이 줄어든다. Dependency Injection은 Spring Framework에서 지원하는 IoC의 형태 설정에 명시된대로 Container가 1) bean 객체를 생성하고 2) 종속된 주입을 수행한다. Dependency Injection(의존성 주입)과 Inversion Of Control(제어의 역전..
[WEB기초] web.xml Web Application Structure(웹 서비스 기본 설정 구조) 1. src 개발자가 작성한 Servlet 코드가 저장된다. 2. Libraries Servlet이나 JSP에서 추가로 사용하는 라이브러리 또는 드라이버 jar로 압축한 파일 3. Web Content Deploy할 때 Web Content 디렉터리 전체가 .war로 묶어서 보내진다. WEB-INF lib 추가한 모든 라이브러리 또는 드라이버가 이곳에 모두 저장된다. classes 작성한 Java Servlet 파일이 나중에 .class로 이곳에 모두 저장된다. web.xml SUN에서 정해놓은 규칙에 맞게 작성해야 하며 모든 WAS에 대하여 작성 방법이 동일하다. .html 파일들 관련된 HTML 소스를 저장한다. Ex. Web..
[WEB기초] Servlet이란 Web Service의 기본적인 동작 과정 HTML Form -> Servlet -> HTML Page 사용자가 웹 페이지 form(HTML Form)을 통해 자신의 정보를 입력한다.(Input) Servlet의 doGet()또는 doPost()메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색한다. 이 정보를 이용하여 사용자의 요청에 맞게 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공한다.(Output) 1. HTML Form input elements(Ex. 텍스트 상자)가 포함된 웹 페이지의 한부분(section) 사용자가 입력한 정보(form contents)를 웹 서버로 전송하기 위한 submit element(Ex. 버튼)가 존재한다. action에는..
[WEB기초] 로드 밸런서(Load Balancer) 1. 왜 Load Balancer가 필요한가? Client가 한 두명인 경우에는 Server가 여유롭게 사용자가 원하는 결과를 응답해 줄 수 있다. 2. Client가 한 두명이 아닌 수천만명이라면? Server는 모든 사람들의 응답을 해주려고 하지만 결국 동작을 멈추게 될 것이다. 3. 문제해결을 위한 방법 Scale-up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법. Scale-out : 하나의 Server보다는 여러대의 Server가 나눠서 일을 하는 방법. 1) Scale-Up(스케일 업) - 데이터의 양이 늘어나거나, CPU 사용율이 높아지거나, 메모리가 부족할 때, ... 서버의 크기(용량)을 증가(고성능 장비로 대체하는 것) - 프로그램 코드를 재작성하거나, 시스템..