본문 바로가기

분류 전체보기

(17)
Servlet Container란 Web Server 웹 서버는 클라이언트로부터 HTTP 요청을 받아들이고, 웹 페이지를 HTTP 프로토콜을 통해 반환하는 역할을 합니다. Servlet Container 웹 서버는 클라이언트는 정적 웹 페이지만 요청을 할 수 있습니다. 서블릿 컨테이너는 Java를 사용하여 서버 측에서 동적으로 웹 페이지를 생성합니다. 사용자 요청에 의해 웹 페이지를 생성하는 것은 서블릿이 담당합니다. 서블릿 컨테이너는 이 서블릿들을 웹 서버와 상호작용을 할 수 있도록 해주는 기능을 담당하고 있습니다. Servlet 서블릿은 init, service, destory의 라이프 사이클을 가지고 있습니다. init() 서블릿이 처음 요청될 때 초기화를 하는 메서드입니다. 초기화된 서블릿은 싱글톤으로 관리됩니다. service(..
Template Method Pattern(템플릿 메서드 패턴) Template Method Pattern 이란? 상속을 통해 기능을 확장하는 디자인 패턴으로 변하지 않는 기능을 슈퍼클래스(대부분 추상클래스)에 만들어두고 확장할 기능을 서브클래스에 구현하는 디자인 패턴이다. 슈퍼클래스는 추상 메소드 또는 오버라이드 가능한 메소드를 통해 기본 알고리즘을 담고 있는 템플릿 메서드를 만든다. 서브 클래스는 템플릿 메서드를 통해 기능을 확장할 수 있다. Template Method Code 슈퍼클래스 public abstract class Beverage { public final void prepareRecipe() { boilWater(); brew(); pourInCup(); addCondiments(); //hook method } private void boilWa..
L.리스코프 치환 원칙(Liskov substitution principle) effective-java 를 읽다 `리스코프 치환 원칙`에 대한 내용이 나왔는데 내용이 잘 생각나지 않아 정리하려 한다. 리스코프 치환 원칙이란? 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다. 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. 상위 타입을 전달받는 메서드 구현 public class BirdUtil { private BirdUtil() { } public static void fly(Bird bird) { bird.fly(); } }상속 관계의 클래스(Bird
O. 개방-폐쇄 원칙(Open-Closed Principle) 개방-폐쇄원칙 이란? 개방 폐쇄 원칙은 확장에는 열려 있고, 수정에 대해서는 닫혀있어야 한다는 원칙이다. 다시 말하면 객체의 확장에는 열려 있고, 객체의 수정은 닫혀있다라고 말할 수 있다. 개방-폐쇄원칙이 지켜지지 않은 코드의 문제점 public class UserDao { private static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:13306/tobi?useSSL=false"; private static final String DB_USER = "root"; private static final String DB_PASS = "mast..
S. 단일 책임 원칙(Single Responsibility Principle) 단일 책임 원칙이란? 모든 클래스는 `하나의 책임`만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다. (위키백과) 즉, 단일 책임 원칙은 클래스가 단 하나의 관심사에 집중해야 한다라는 것입니다. 단일 관심사에 집중하는 클래스는 유지보수하기 쉽고, 오류를 찾기가 용이합니다. 단일 책임 원칙을 지키지 않은 예시 //사용자 도메인은 사용자 정보를 저장, 변경의 책임이 있지만, 이메일의 유효성을 검사하거나 이메일을 전송하는 책임을 가질 필요는 없습니다. public class User { private static Pattern EMAIL = Pattern.compile("^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*..
[react-icons] bundle size 줄이기 react-icons 리액트 환경에서 브라우저에 다양한 아이콘을 제공하는 대표적인 라이브러리이다. 사용 이슈 사내에서 리액트 프로젝트를 담당하고 있었는데 lighthouse 측정 결과 성능이 매우 좋지 않았다. 측정 결과 react-icons 라이브러리가 chunk 사이즈의 대부분을 차지하고 있었다. 성능 이슈를 측정하기 위해 개발 환경 구축하기 1) 프로젝트 생성(create-react-app) npx create-react-app myapp 2) react-icons 라이브러리 npm i react-icons 3) 성능 측정을 위해 라이브러리 추가하기 npm i --save-dev webpack-bundle-analyzer cra-bundle-analyzer 4) react-icons 사용하기 성능 ..
Gradle이란 Gradle이란 Gradle은 오픈 소스 빌드 자동화 도구입니다. Gradle의 빌드 스크립트는 groovy 또는 Kotlin DSL(Domain Specific language, 도메인 특화 언어)을 사용하여 작성됩니다. Gradle의 장점 공식문서에서 정의되어있는 장점은 Highly customizable, Fast, Poweful 이 세 단어로 표현하고 있습니다. 사용자 정의가 가능하며 확장 가능합니다. 이전 실행의 출력을 재사용하고 변경된 입력만 처리하며, task를 병렬 처리하기 때문에 속도가 빠릅니다. Android용 공식 빌드도구이며, 많은 언어와 기술들을 지원합니다. Gradle Structure(Groovy) 공식 문서에 Gradle 프로젝트 생성 참고 ├── gradle │ └── wr..