
프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야 하는데, 여기에 버전까지 고민해야 한다. 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도 있지만 잘 안되는 버전들도 있다는 점이다. 과거에는 이런 문제들 때문에 처음 프로젝트를 세팅하는데 상당히 많은 시간을 소비해야 했다. 스프링 부트는 라이브러리들을 편리하게 사용할 수 있는 다양한 기능들을 제공한다. 외부 라이브러리 버전 관리 스프링 부트 스타터 제공 라이브러리 직접 관리 스프링 부트가 편리한 라이브러리 관리 기능을 제공하기 전에는 직접 라이브러리를 하나하나 고르고 설정했었다. 웹 프로젝트를 하나 설정하기 위해서는 수 많은 라이브러리를 알아야 하고, 추가로 각각의 라이브러리의 버전까지 골라서 선택해야 한다. 여기서 눈에..

과거에는 톰캣 같은 WAS를 별도로 설치하고, IDE에 복잡한 설정을 거쳐 개발이 완료된 코드를 WAR로 만들고 이것을 또 WAS에 전달해서 배포하는 과정이 필요했다. 하지만 스프링 부트는 WAS가 라이브러리로 jar 내부에 포함되어 있기 때문에 복잡한 설정이 필요 없고, 배포는 JAR로 만들어서 원하는 위치에서 실행하기만 하면 된다. 간단한 프로젝트를 통해 스프링 부트가 어떻게 톰캣 서버를 내장해서 실행하는지 알아보자! build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '..

외장 서버 VS 내장 서버 전통적인 방식(외장 서버) 과거에 자바로 웹 애플리케이션을 개발할 때는 먼저 서버에 톰캣 같은 WAS(웹 애플리케이션 서버)를 설치했다. WAS에서 동작하도록 서블릿 스펙에 맞추어 코드를 작성하고, WAR 형식으로 빌드해서 war 파일을 만든 뒤, war 파일을 WAS에 전달해서 배포하는 방식으로 전체 개발 주기가 동작했다. WAS 기반 위에서 개발하고 실행해야 하기 때문에 IDE 같은 개발 환경에서도 WAS와 연동해서 실행되도록 복잡한 추가 설정이 필요하다. 최근 방식(내장 서버) 최근에는 스프링 부트가 내장 톰캣을 포함하고 있다. 애플리케이션 코드 안에 톰캣 같은 WAS가 라이브러리로 내장되어 있다는 뜻이다. 개발자는 코드를 작성하고 JAR로 빌드한 다음에 해당 JAR를 원..

@Entity @Entity가 붙은 클래스는 JPA가 관리하게 된다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 필수로 선언해야 한다. 하이버네이트는 프록시 DB 연산 결과를 상속한 클래스의 기본 생성자를 호출하여 매핑한다. 이때, 알맞게 결과 값을 넣어주기 위해서는 public 또는 protected 레벨의 기본 생성자가 필요하다. @Entity public class Member{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Member(){ } public Member(final Long id, final String name){ this.id = ..
같은 타입의 Bean이 2개 이상 일 때 @Autowired는 타입(Type)으로 조회하는데, 이때 선택된 빈이 2개 이상일 때 NoUniqueBeanDefinitionException: No qualifying bean of type ...에러가 발생한다. 예제를 위해 DiscountPolicy의 하위 타입인 FixDiscountPolicy와 RateDiscountPolicy를 스프링 빈으로 선언해보자. @Component public class FixDiscountPolicy implements DiscountPolicy { } @Component public class RateDiscountPolicy implements DiscountPolicy { } 여기서 다음과 같이 의존관계 자동 주입을 실..
싱글톤(Sigleton) 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그렇기 때문에 private 생성자를 사용해서 외부에서 new 키워드로 객체를 2개 이상 생성하지 못하도록 막아야 한다. 싱글톤 컨테이너(Sigleton Container) 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다. 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라 한다. 스프링 컨테이너의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있다. 싱글..
Interceptor 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 인터셉터의 흐름은 다음과 같다. HTTP 요청 ->WAS-> 필터 -> 디스패처 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다. 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기 때문에 결국 디스패처 서블릿 이후에 등장하게 된다. 아래는 인터셉터로 제한을 적용했을 때, 흐름이다. HTTP 요청 -> WA..
- Total
- Today
- Yesterday
- 스프링부트
- 코테
- 데이터베이스
- 파이썬
- 스프링 부트
- mysql 8.0
- 노마드
- 알고리즘
- 인프런
- spring boot
- Spring
- 북클럽
- webflux
- leetcode
- 리팩토링
- 구현
- 코틀린
- 백준
- kotlin
- Algorithm
- 문자열
- MySQL
- 그리디
- 스프링
- Real MySQL
- 정렬
- 노마드코더
- 자료구조
- 릿코드
- 김영한
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |