Redis, RabbitMQ, Kafka의 차이점에 대해서 필요성을 느껴 정리하려고 한다.여러 메시지 시스템 중 Redis를 썼으나, 다른 메시지 시스템과의 차이점을 제대로 알고있지 못하기 때문이다. 이 세가지 메시지 시스템의 차이를 간략하게 한번 짚고 넘어가야겠다.여
JPA는 Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음.어플리케이션의 클래스와 RDB의 테이블을 매핑해주는 것. 인터페이스이고 일종의 기술 명세임.따라서 해당 인터페이스를 구현한 구현체가 필요하고 JPA
Web.xml, servlet.xml, applicationContext.xml 등과 같이 필터, 리스너, 디펜던시, 뷰 리졸버, 버전등을 개발자가 일일히 설정해주어야 되어야 되는 것이 Spring. Tomcat도 직접 설치해야 하는 번거로움 존재.반면, Spring
핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회핸들러 어댑터 실행: 핸들러 어댑터 실행핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행ModelAndView 반환: 핸들러 어댑터
스프링 컨테이너 생성 -> 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메서드 호출 \-> 애플리케이션에서 빈 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료스프링은 의존관계 주입이 완료될 경우 스프링 빈에게 콜백 메서드를 통해서초기화 시점을 알려준다스프링 컨
필터(Filter)는 J2EE 표준 스펙 기능으로 클라이언트(Client)의 요청을 받은 Servlet/JSP가 수행되기 전, 후로 호출되어 수행되는 웹 컴포넌트입니다. Filter는 스프링(Spring) 범위 밖에서 처리됩니다. 즉, 스프링 컨테이너(Spring Co
DI는 Dependency Injection의 줄임말로, 다양한 우리 말 번역이 있지만, 이 글에서는 의존관계 주입이라는 말로 사용하고자 한다.먼저 Dependency, 의존관계에 대해 알아보자.“A가 B를 의존한다.”는 표현은 어떤 의미일까? 추상적인 표현이지만, 토
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤
프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만으로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 된다. 이 때 사용되는 라이브러리들의 수가 수십개가 훌쩍 넘어버리는 일이 발생해 이 많은 라이브러리들을 관리하는 것이 힘들어지는 경우가 종종 발생하곤
프로그램이 실행되면서 운영체제에 필요한 주소공간, 메모리 등의 시스템 자원을 할당받고, 여러 작업을 처리하는 과정하나의 프로세스 내에서 작업을 분산해서 효율적으로 처리하는 실행의 단위결국 아파치서버란 클라이언트에서 요청하는 HTTP요청을 처리하는 웹서버를 의미한다.이는
스프링 시큐리티는 자바 애플리케이션의 인증과 권한 부여를 제공하는 데 중점을 둔 프레임워크이다.Spring Security는 스프링 기반 앱의 보안 표준이다.권한 부여(Authorization)는 반드시 인증(Authentication) 후에 수행된다.서블릿 필터는 요
객체지향 프로그래밍에서 절대 빼먹을 수 없는 두 가지의 단어입니다.클래스Class는 실제 오브젝트(객체)를 제작하기 전에 설계하는 도면 혹은 틀이며,오브젝트Object는 클래스(설계도)를 기반으로 실제로 메모리에 할당되는 것, 클래스 모양 그대로 생성된 실체를 말합니다
HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS 에서 마지막의 S는 Over Secure Socket Layer의 약자로 보안이 강화된 HTTP이다.1\. clie
별도의 회원가입 없이 로그인을 제공하는 플랫폼의 아이디만 있으면 서비스를 이용 할 수 있다. 외부 서비스에서도 인증을 가능하게 하고 그 서비스의 API를 이용하게 해주는 것, 이것을 바로 OAuth라고 한다. OAuth의 등장배경은 써드 파티 어플리케이션에 아이디와
로드밴런서란 로드밸런싱(부하분산)을 해주는 장치 또는 기술을 통칭한다. 만약 1대의 서버로 이루어져있는 서버에 수천만명의 사용자가 동시에 접속을 하게되어 일어나는 트레픽증가에 대비를 하고자 한다면, 장비를 업그레이드하는 Scale-up 방식과 장비를 여러개 두는 Sca
컨테이너란, 보통 인스턴스의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것이라고 한다.즉, 컨테이너란 개발자가 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각할 수 있다.컨테이너는 적절한 설정만 되어 있따면 누구의 도움없이 프로그래머가 작
JSON 웹 토큰(JSON Web Token, JWT)은 말 그대로 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token을 의미합니다. JWT는 Token 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게
교차 출처 자원 공유(Cross-Origin Resource Sharing, CORS)는 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조를 의미합니다. 쉽게 말하자면, CORS는 추가 HTTP 헤더를
객체를 만들어 내기 위한 설계도 혹은 틀연관되어 있는 변수와 메서드의 집합소프트웨어 세계에 구현할 대상클래스에 선언된 모양 그대로 생성된 실체‘클래스의 인스턴스(instance)’ 라고도 부른다.객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.oop의 관점에서
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.p1.info와 p2.info의 데이터 타입은 결과적으로 아래와 같다.p1.info : Stringp2.info : StringBuilder그것은 각각의 인스턴스를 생성할
어노테이션(@, annotation)이란? Annotation은 Java5부터 새롭게 추가된 문법요소이다. 사전적으로는 "주석"이라는 의미를 가지고 있으며, 자바 코드에 @를 이용해 주석처럼 달아 특수한 의미를 부여해준다. 프로그램 코드의 일부가 아닌 프로그램에 관한
Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어
구글에서 2017년 5월 출시된 모바일/웹/데스크톱 크로스 플랫폼 GUI SDK이다. 하나의 코드 베이스로 안드로이드, 리눅스, Windows, macOS, iOS 및 웹 브라우저에서 모두 동작되는 앱을 위해 출시되었다. 사용되는 언어는 역시 구글에 의해 제창된 Dar
HTTP는 요청 메서드를 정의하여, 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만, 일부 기능은 메서드 집합 간에 서로 공유하기도 합니다. 이를테면 응답 메서드
추상 클래스는 클래스 내 ‘추상 메서드’가 하나 이상 포함되거나 abstract로 정의된 경우를 말함.반면 인터페이스는 모든 메서드가 추상 메서드인 경우를 말함.존재 목적에서 가장 큰 차이를 보인다.추상 클래스는 그 추상 클래스를 상속 받아서 기능을 이용하고, 확장시키
1) Uniform (유니폼 인터페이스)• Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다.2) Stateless (무상태성)• REST는 무상태성 성격을 갖습니다. 다시 말해 작
싱글톤(Singleton) 패턴의 정의는 단순하다. 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤 패턴을 구현하는 방법은 여러가지가 있지만, 여기서는 객체를 미리 생성해두고 가져오는 가장 단순하고 안전한 방법이다.가장 먼저 떠올릴 수 있는 이점은 아무
테스트 주도 개발, 작은 단위희 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복해 구현한다.TDD의 개발 주기를 표현하면 아래와 같다.구체적인 하나의 요구사항을 검증하는 하나의 테스트를 추가한다.추가된 테스트 케이스가 실패하는지 확인한다.왜 실패하는
Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없다. 그러나 연산횟수가 많아지거나 멀티쓰레드, Rac
모델은 소프트웨어 내에서 데이터를 의미하고, 뷰는 사용자에게 보이는 화면 내용을 의미한다. 이러한 모델과 뷰의 상호 작용을 관리하는 것이 컨트롤러이다.예를 들어, 사용자의 입력이 컨트롤러로 들어오면 컨트롤러는 모델에서 데이터를 불러오고, 해당 데이터를 뷰를 통해 화면으
Index는 RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색 속도를 높여주는 자료 구조를 말하며, 테이블 내에 1개의 컬럼 혹은 여러 개의 컬럼을 이용하여 생성한다.특정 테이블의 컬럼을 인덱싱(Indexing)하면 검색을 할 때 테이블의 레코드를 전
데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 모순이 없는 정확한 데이터를 유지해야 한다. 그리고 데이터베이스에 장애가 발생하더라도 빠른 시간 내에 원래의 상태로 복구할 수 있어야 한다. 데이터베이스 관리 시스템은 데이터베이스가 항상 정확하고 일관된 상태를 유
데이터의 집합을 의미한다.그리고 우리의 할 일은 이러한 정보를 보기 편하고, 사용하기 쉽게 잘 정리해 놓는 것이다. 한편, 이렇게 데이터를 관리하는 시스템을 DBMS(Database Management System)이라고 하며 데이터베이스 관리 시스템은 관계형과 비관계
같은 이름의 메소드를 여러개 정의하는 것매개변수의 타입이 다르거나 개수가 달라야 한다.return type과 접근 제어자는 영향을 주지 않음.중요한 포인트는 오버로딩은 하나의 클래스에서 같은 이름의 메소드들을 여러 개 가질 수 있다는 점이다. 가장 내가 바로 이해하기
Lazy를 사용해서 프록시로 조회 - 연관관계가 있는 경우 FetchType을 LAZY로 설정해야 해당 객체가 프록시로 설정된다.다음처럼 fetchType을 LAZY로 등록하면 Member에서 Team 객체가 프록시로 설정된다.Team 안에 필드에 직접적으로 접근(필드
Member 엔티티를 조회할 때 불필요하게 team까지 조회를 계속하게 되면 DB 성능에 영향을 미치게 된다.Member만 조회할 수 있게 JPA에서는 지연 로딩과 프록시라는 개념을 사용한다.데이터베이스 조회를 통해 실제 엔티티 객체 반환데이터베이스 조회를 통하지 않고
클라이언트의 HTTP 요청을 받아 응답으로 정적인 콘텐츠를 제공하는 서버웹 서버로부터 오는 동적인 콘텐츠를 처리하는 서버정적 콘텐츠 => HTML, CSS, IMAGE 등다른 컴퓨터에서 접근해도 똑같은 콘텐츠동적 콘텐츠 => JSP, Servelt, ASP, PHP
네트워크 위에서 프로그램이 동작하기 쉽게 하기 위해서 우리는 OSI 7계층을 나누어 네트워크를 관리함(-) 계층만 나누는 걸로는 한계가 있음. 왜? 계층별 각 프로토콜은 일종의 통신 규약일뿐, 프로토콜 구현을 위해 안에 들어갈 구체적인 구현부인 함수가 필요함.(+) 소