🏡스프링이라는 프레임워크 프레임워크의 사전적 의미는 뼈대, 근간이다. 그런데, 웹을 개발하는데 뼈대가 왜 필요할까? a,b,c가 함께 일하는데 모드가 다른 방식으로 일한다면 어떨까? a와 b가 다른 방식으로 개발하고 코드를 합치게 되었으면 상상하지 못한 문제들이
Spring MVC는 MVC Model2의 발전된 형태로 구성되어 있다.Database를 제외한 파란색 부분은 모두 Spring MVC가 제공한다.보라색 부분은 개발자가 구현해야하며, 녹색 부분인 View는 Spring이 제공하는 부분도 있고, 개발자가 구현해야하는 부
컨테이너는 인스턴스의 생명주기를 관리한다.생성된 인스턴스들에게 추가적인 기능을 제공한다.예를 들어 Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말한다.개발자가 서블릿 클래스를 잘성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지
필터와 인터셉터의 비슷한 점은 무엇인가? 그것은 바로 핸드러 메서드가 호출되기 전/후에 HTTP 요청에 접근하여 특수한 작업을 할 수 있다는 것이다. 두 개 이상부터 모든 핸드러 메서드에 걸쳐 중복으로 적용되는 작업이라면, 필터 또는 인터셉터를 활용해서 코드 중복을 없
핵심기능(비지니스 로직)과 공통기능(인프라 로직)의 구현을 분리할 수 있다.공통기능이란 여러 객체에 공통적으로 적용할 수 있는 기능으로 애플리케이션의 여러 지점에 걸쳐있는 기능이다.공통기능을 모듈화함으로써 재사용성을 높여주는 프로그래밍 기법이라고 할 수 있다.대표적으로
REST란 "Representational State Transfer"의 약자이다. 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.REST란, "웹에 존재하는 모든 자원(이미지, 동영상, DB자원)에 고유한 URI를 부여해 활
Spring Rest Docs로 작성된 문서Spring Rest Docs는 Test 기반으로 동작합니다. 테스트 코드에 추가함으로써 문서가 작성되며 Production코드에 영향을 미치지 않는다는게 큰 장접입니다. 테스트 기반이기 때문에 테스트가 수행되지 않으면 문서
기존에 사용하던 application.properties 파일을 application.yml 파일로 변경해 주었습니다.YAML (YML Ain't Markup Language)이란?YAML 형식은 계층적 구성 데이터를 지정하기 위한 편리한 형식입니다. XML, C, 파
JAP란, Java Persistence API (자바 ORM 기술에 대한 API 표준 명세)로 ORM을 사용하기 위한 인터페이스를 모아둔 것이라고 볼 수 있다. 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. 여기서 중요하게 여겨야
참고: 엔티티의 식별자는 id 를 사용하고 PK 컬럼명은 member_id 를 사용했다. 엔티티는 타입(여기서는Member )이 있으므로 id 필드만으로 쉽게 구분할 수 있다. 테이블은 타입이 없으므로 구분이 어렵다. 그리고 테이블은 관례상 테이블명 + id 를 많이
단순 텍스트에 비밀번호를 저장하는 것은 보안상 매우 취약하다. 기존의 MD5, SHA-1, SHA-2로 패스워드를 해싱할 수도 있지만 솔트를 치는것은 추가적인 보안을 만들 수 있다. 여기서 솔트를 친다는 말은 원문으로 이루진 비밀번호에 추가적인 문자열을 넣어서 해시를
기존 JDBC는 아래와 같은 과정을 거칩니다.DB벤더에 맞는 드라이버 로드DB서버의 IP,ID PW등을 DriverManager 클래스의 getConnection 메소드를 사용하여 Connection 객체 생성Connection으로 부터 PreparedStatement
MVC 패턴으로 개발하고자 하면 자연스레 한 페이지에 5개의 파일이 생성되는데 JSP, Controller, DTO, Service, DAO 입니다.이중에 Service와 ServiceImpl은 왜 이러한 구조를 가지는지 궁금증을 가지게 되었습니다.화면에 보여줄 vie
Spring MVC Controller와 Restful Web Service Controller의 가장 큰 차이점은 HTTP Response Body가 생성되는 방식입니다.기존 MVC Controller는 View를 활용하여 주로 view(화면)을 return 합니다.
은행의 계좌 이체 서비스를 생각해보면 '잔고 확인 -> 받는 사람 확인 -> 이체 실행 -> 잔고 감소'의 로직 순서가 하나의 로직으로 처리되어야 하고, 이 과정에서 한번이라도 오류가 발생하면 모든 처리가 취소되고, 모든 과정이 성공해야 비로서 처리가 완료된다. 즉,
Quarydsl
변경감지는 JPA가 데이터를 변경하는 기본적인 메커니즘입니다.영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다. 데이터베이스에 한번 갔다온 ex) memberId와 같이 DB에서 식별할 수 있는 id 값을 가지고 있는 엔티티, 새롭게 만든 임의의 엔티티도 기존 식별
컬렉션을 패치 조인하면 일대다 조인이 발생하므로 데이터가 예측할 수 없이 증가한다.일대다에서 일(1)을 기준으로 페이징 하는 것이 목적이다. 그런데 데이터는 다(N)를 기준으로 row가 생성된다.Order를 기준으로 페이징 하고 싶은데, 다(N)인 OrderItem을
build.gradle 설정//Plugin을 추가plugins { id 'org.springframework.boot' version '2.2.5.RELEASE' id 'io.spring.dependency-management' version '1.0.9.R
Websocket은 메시징 방식만 잘 정의한다면 좋은 Server/Client 소켓 서버를 완성할 수 있다.하지만, 단순한 통신 구조로 인해 WebSocket만을 이용해 소켓서버를 구현하면 해당 메세지가 어떤 요청인지, 어떻게 처리해야 하는지에 따라 채팅방과 세션을 일
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다.StudentPerson과 EmployeePerson는 같은 행위를 하고 있다.공통 클래스를 만들면서 중복을 제거하게 됨으로써 유지보수와 코드의 가독성을 높일 수 있음중복제
JPA는 기본적으로 하나의 트랜잭션 안에서 기능을 수행하기 때문에 다음과 같이 트랜잭션을 선언해줘야 한다.위와 같은 순수한 JPA의 형태를 이용한다면 복잡한 코드를 보게 될 것이다. 이런 무서운 코드들에게 쓸 신경을 다른 곳에서 쓰기 위해 Spring Data JPA가
📑페이징 게시판이나 댓글, 블로그를 개발할 때 페이징은 아주 중요한 역할을 합니다. 페이징은 많은 정보, 이를테면 게시판에 존재하는 수백 수천개의 게시글과 같은 정보들을 페이지로 나눠 효과적으로 정보를 제공하게 하는 역할을 한다. 이러한 페이징을 개발하기 위해서
서비스를 운영할 때 사용자의 기본적인 로그를 DB에 남겨야 할 때가 있다.예를들면, 마지막 로그인 시간이라던지 엔티티 생성 시간, 변경된 시간과 변경한 사람의 이름등이 있을 것이다.예를 들어 아래와 같은 엔티티가 존재한다고 해보자.여기에 각각의 생성 시간과 사람을 추가