Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능을 지원하고 있습니다. 그 중에서 필터(Filter) 와 인터셉터(interceptor)의 차이에 대해 알아보려고 합니다. 필터(Filter) 필터란 J2EE 표순 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공합니다. ❓여기서 J2EE란? 자바 기술로 기업환경의 애플리케이션을 만드는데 필요한 스펙 집합입니다. ❓여기서 디스패처 서블릿(Dispatcher Servlet)이란? HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아서 적합한 컨트롤러에게 위임해주는 프론트 컨트롤러입니다. 장점 w..
전체 글
IT, 인프라, Java, C# 개념정리 블로그입니다.서블릿이란 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 입니다. 쉽게 말해서 자바를 사용하여 웹을 만들기 위해 필요한 기술 입니다. 클라이언트가 필요한 요청을 했을때, 그 요청에 대하여 응답을 하는것을 자바로 응답하는 것입니다. Servlet의 장단점은 무엇이 있을까요? 장점 복잡한 프로그램 로직 구현에 적합합니다. Java Thread 지원이 됩니다. 안정적인 웹 서비스 구축이 가능해집니다. 단점 HTML 문서 디자인이 바뀔 때마다 .class 파일을 수정/컴파일/설치를 해야합니다. 웹 서버를 재 가동하는 일이 되풀이 됩니다. 따라서 속도가 느려집니다. Servlet Container(서블릿 컨테이너) 서블릿이 Servlet 클래스..
❓개념 자바 가상머신 -> JVM(Java Virtual Machine)은 자바 프로그램의 실행환경을 만들어주는 소프트웨어입니다 ❓왜 사용하는지 자바가상머신을 사용하는 가장 큰 이유는 하나의 바이트코드 즉 (.class)파일로 모든 플랫폼에서 작동이 가능해서 사용합니다 아래의 경우는 c언어의 경우입니다. 컴파일 플랫폼과 타겟플랫폼이 다르면 프로그램 실행이 불가능하다는 단점이 있습니다. 하지만, 자바의 경우 독립적인 자바 컴파일러를 사용하여 타겟플랫폼이 원하는 컴파일 플랫폼으로 가상머신을 생성해줍니다. 덧붙이자면, “ Java는 플랫폼에 종속적이지 않지만, Jvm은 플랫폼에 종속적” 라고 표현이 가능 할 것 같습니다. ❓자바 프로그램의 실행과정 우리가 자바로 .java 코드를 작성하고 터미널에 있는 자바 ..
Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, Stringbuilder가 있습니다. 연산이 많지 않을 때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 확률은 거의 없습니다만, 연산횟수가 많아지거나 수정/삭제가 많아지고 멀티쓰레드, Race condition 등의 상황이 자주 발생한다면 각 클래스의 특징을 이해하고 사용해야 합니다. String String과 나머지의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖고 있다는 점입니다. 예를들어 String str = "hello"; == hello str = str + " world"; == hello world 이런 코드가 있다면 그냥 보기에는 hello 라는 문자열에 world가 ..
Spring의 종류 스프링부트(Spring Boot) 스프링은 개발 환경 설정이 꽤나 어려운 편에 속합니다. 그래서 스프링의 개발 환경의 어려운점을 보완하고자 만든것이 "SpringBoot"입니다. 환경 설정을 최소화 하고 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다. 스프링(Spring Framework) 스프링의 핵심이 되는 DI(의존성 주입), AOP(관점지향 프로그래밍) 기능들을 제공합니다. 웹 애플리케이션을 개발할 때는 스프링 MVC를 사용하는 등 여러가지 기능이 있습니다. 스프링 데이터(Spring Data) 데이터 연동을 위한 단일 API를 제공합니다. 이 API를 기반으로 JPA, MongoDB, MySQL 이러한 RDBMS나 NoSQL과의 연동을 적은 양의 코드로 처리할 수 있도..
기본 자료형은 크게 기본 타입(primitive type)과 참조타입(reference type)으로 나누어집니다. 대표적으로 자주사용하는 기본타입은 int, char float 등이 있고 참조타입은 class, interface 등이 있습니다. 그런데 프로그래밍을 하다보면 기본타입의 데이터인를 객체로 표현해야 하는 경우가 많습니다. 이럴 때에 기본 자료타입을 다루기 위해서 사용하는 클래스가 래퍼 클래스입니다. 자바는 모든 기본타입 값을 갖는 객체를 생성할 수 있습니다. 자주 사용하는 래퍼클래스는 Integer와 Long이 있습니다. 제가 겪은 문제들은 API를 설계할 시에 기본 자료형으로 데이터를 주고 받으려고 하니까 계속 오류가 생겼습니다. 바로 객체로 데이터를 받아야 했기 때문입니다. 결국 int의..
문득 SpringBoot로 웹을 개발하면서 궁금증이 생겼습니다. "애는 뭐하는 놈일까?" 먼저 HikariPool을 알기 전에 커넥션 비용이라는것이 뭔지 알아야 했습니다. 커넥션 비용 WAS(Web Application Server)와 데이터베이스 사이의 연결에는 많은 비용이 듭니다. MySQL 8.0 버전을 기준으로 INSERT 문을 수행할 때 필요한 비용의 비율은 다음과 같습니다. (괄호의 숫자가 비용의 비율입니다.) Connecting (3) Sending query to server (2) Parsing query (2) Inserting row (1) Inserting index (1) Closing (1) 즉, 서버가 DB를 연결하기 위한 Connecting 비용이 가능 큰 비율을 차지하게 됩..
❓TDD? TDD(Test Driven Development)는 테스트 주도 개발입니다. 반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위에 테스트 케이스를 작성하여 이를 통과하는 코드를 추가하는 단계를 반복하여 구현합니다. ❓TDD 개발주기 [Write Failing Test] 는 실패하는 테스트 코드를 작성합니다 [Make Test Pass]는 테스트를 성공하기 위한 실제 코드를 작성합니다 [Refactor]는 중복 코드를 제거, 일반화 등의 리팩토링을 수행합니다 중요한 것은 실패하는 코드를 작성할 때까지 실제 코드를 작성하지 않는 것과, 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야 합니다. 이를 통하여 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피..