스프링 프레임워크란? 스프링 프레임워크(=스프링)는 Java 기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공한다. 스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그 중 하나가 Spring Boot이다. 자바(Java
스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 서브 프로젝트로, 이를 개발자에게 제공함으로서 스프링 애플리케이션의 개발을 간소화하고 빠르게 설정할 수 있도록 도와준다. 앞에서 살펴본 것처럼 스프링 프레임워크는 다양한 기능을 제공하지만, 그만큼 설
어떤 포털 사이트를 개발한다고 가정해보자. 그 사이트 속에는 블로그, 카페, 메일 등 다양한 기능이 있는데, 이것들을 모두 하나의 애플리케이션에 통합하면 어떻게 될까? 서비스를 이렇게 구성한다면 서버를 업데이트하거나 한 기능을 유지보수 할 때마다 사이트를 중지시켜야 한
스프링 부트의 기본 의존성 중 하나인 spring-boot-starter-web 모듈을 사용하면 기본적으로 내장 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작한다. 아래 그림은 일반적인 웹 요청이 들어왔을 때의 스프링 부트 동작 구조이다.클라이언트의
레이어드 아키텍처(Layered Architecture)란 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 묶어 수평적으로 구성한 구조를 의미한다. 레이어드 아키텍처는 여러 방면에서 쓰이는 개념이며, 어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다.일반적으로 레이
스프링부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작한다. MVC 패턴은 개발자 면접에서도 자주 묻는 개념이기도 하니 확실히 이해하고 넘어가자!MVC는 Model-View-
디자인 패턴(Design Pattern)은 소프트웨어를 설계할 때 자주 발생하는 문제를 해결하기 위해 고안된 해결책이다. 상황에 맞는 최적 패턴을 사용하는 것이 중요하다.디자인 패턴을 구체화해서 정리한 대표적인 분류 방식으로 'GoF 디자인 패턴'이 있다. GoF의 디
이번 글에선 스프링 부트 기반의 프로젝트를 진행하기 위한 전반적인 개발 환경 구축에 대해 알아보자. 먼저 앞으로 책에서 사용할 개발 환경은 다음과 같다.Windows 10 64-bitIntelliJ UltimateJDK 11 JDK 17스프링 부트 2.5.6~2.5.8
만약 사용하고 있는 인텔리제이 IDEA가 커뮤니티 버전이라면 이 방법으로 프로젝트를 생성할 수 있다. 스프링 공식 사이트에서는 스프링 부트 프로젝트를 자동으로 만들어주는 서비스가 있다.위 경로로 접속하면 아래와 같은 화면이 나온다. 이 페이지에서 각 항목을 선택하고 G
pom.xml 파일은 메이븐의 기능을 사용하기 위해 작성하는 파일이다. 이 파일에는 프로젝트, 의존성 라이브러리, 빌드 등의 정보 및 해당 프로젝트를 관리하는 데 필요한 내용이 기술되어 있다. 이 파일을 살펴보기 앞서 메이븐에 대해 좀 더 자세히 알아보자.빌드 관리 도
본격적인 애플리케이션 개발에 앞서 'Hello World!'를 출력하는 애플리케이션을 만들어 보며 스프링 부트에 입문해 보자.위 화면과 같이 'controller'라는 패키지를 생성하고 'HelloController'라는 이름의 컨트롤러를 생성한 후 다음과 같이 코드를
이번 글에서는 각 HTTP 메서드에 해당하는 API를 개발해보고 그 과정에서 필요한 내용들을 살펴보겠다. 아직 데이터베이스를 설치하지 않아 정확한 기능 구현은 어렵지만 외부의 요청을 받아 응답하는 기능을 구현해보자! 프로젝트 설정 먼저 5장에서 실습할 프로젝트를 생성
POST API는 웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API이다. 앞에서 살펴본 GET API에서는 URL의 경로나 파라미터에 변수를 넣어 요청을 보냈지만 POST API에서는 저장하고자 하는 리소스나 값을 HTTP body에
PUT API는 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용된다. POST API와 비교하면 요청을 받아 실제 데이터베이스에 반영하는 과정(서비스 로직)에서 차이가 있지만 컨트롤러 클래스를 구현하는 방식은 POST
API를 개발하면 명세를 관리해야 한다. 명세란 해당 API가 어떤 로직을 수행하는지 설명하고 이 로직을 수행하기 위해 어떤 값을 요청하며, 이에 따른 응답값으로는 무엇을 받을 수 있는지를 정리한 자료이다.API는 개발 과정에서 계속 변경되므로 작성한 명세 문서도 주기
자바 진영에서 가장 많이 사용되는 로깅 프레임워크는 Logback이다. Logback이란 log4j 이후에 출시된 로깅 프레임워크로서 slf4j를 기반으로 구현됐으며, 과거에 사용되던 log4j에 비해 월등한 성능을 자랑한다.
ORM(Object Relational Mapping):객체 관계 매핑. 자바와 같은 객체지향 언어에서 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법이다.클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기
영속성 컨텍스트(Persistence Context):애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능객체를 보관하는 기능을 수행엔티티 객체가 영속성 컨텍스트에 들어오면 JAP는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작업을 수행한다
이전에 생성한 방식과 동일하게 프로젝트를 생성한다.(4.1 참고) 버전은 이전과 같은 2.5.6 버전이며 groupId는 기존과 동일하게 ‘com.springboot’ 로 설정하고 name은 ‘jpa’, ‘artifactId’는 ‘jpa’로 설정한다. 의존성 선택 단계
엔티티(Entity): Spring Data JPA에서 쿼리문 대신 데이터베이스에 테이블을 생성해주는 클래스데이터베이스의 테이블에 대응하는 클래스, 데이터베이스에 쓰일 테이블과 칼럼을 정의한다.Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해
리포지토리(Repository):Spring Data JPA가 제공하는 인터페이스엔티티가 생성한 데이터베이스에 접근하는 데 사용된다.Spring Data JPA는 JpaRepository를 기반으로 거욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링
DAO(Data Access Object)데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체Spring Data JPA에서 DAO의 개념은 리포지토리가 대체하고 있다.규모가 작은 서비스에서는 DAO(Data Access Object)를 별도로 설계하지 않고 서비스
최근 애플리케이션을 개발할 때 테스트 코드로 로직을 확인하는 과정이 점점 더 중요하게 여겨지고 있다. 많은 개발자들이 테스트 코드를 더 잘 작성하고 활용할 수 있는 방법에 대해 고민했고, 그 결과 \*애자일 방법론 중 하나인 테스트 주도 개발(TDD; Test-Driv
JUnit은 자바 언어에서 사용되는 대표적인 테스트 프레임워크로서 단위 테스트(+통합 테스트)를 위한 도구를 제공한다.JUnit의 가장 큰 특징은 어노테이션 기반의 테스트 방식을 지원한다는 것이다. 즉, JUnit을 사용하면 몇 개의 어노테이션만으로 간편하게 테스트 코
스프링 부트는 테스트 환경을 쉽게 설정할 수 있게 spring-boot-starter-test 프로젝트를 지원한다. 이 프로젝트를 사용하려면 아래와 같이 pom.xml 파일에 관련 의존성을 추가해야 한다.예제에서 추가한 라이브러리는 아래와 같은 의존성을 가지고 있다.스
코드 커버리지(code coverage):소프트웨어의 테스트 수준이 충분한지를 표현하는 지표 중 하나테스트를 진행했을 때 대상 코드가 실행됐는지 표현하는 방법커버리지를 확인하기 위한 다양한 커버리지 도구 중 가장 보편적으로 사용되는 도구는 JaCoCo이다.JaCoCo(
TDD(Test-Driven Development, 테스트 주도 개발):반복 테스트를 이용한 소프트웨어 개발 방법론테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 방식\*애자일 방법론 中 하나인 eXtream Programming의 Te
6장에서는 Spring Data JPA의 기본 기능을 살펴보았다. 또한 리포지토리를 활용해 데이터베이스에 접근하고 기본적인 CRUD 기능을 사용해 보았다.이번 장에서는 Spring Data JPA에서 제공하는 기능들을 더 알아보고 다양한 활용법을 살펴보겠다. 그 과정에
애플리케이션에서 자주 사용되는 정렬과 페이징 처리는 앞서 소개한 쿼리 메서드를 작성하는 방법을 기반으로 수행할 수 있다. 물론 기본 쿼리 메서드인 이름을 통한 정렬과 페이징 처리도 가능하지만 다른 방법들도 많이 쓰인다. 이번 장에서는 기본적으로 정렬과 페이징 처리 방법
데이터베이스에서 값을 가져올 때는 앞 절에서 소개한 것처럼 메서드의 이름만으로 쿼리 메서드를 생성할 수도 있고 이번 절에서 살펴볼 @Query 어노테이션을 사용해 직접 JPQL을 작성할 수도 있다.JPQL을 사용하면 JPA 구현체에서 자동으로 쿼리 문장을 해석하고 실행
앞에서는 @Query 어노테이션을 사용해 직접 JPQL의 쿼리를 작성하는 방법을 알아봤다. 메서드의 이름을 기반으로 생성하는 JPQL의 한계는 @Query 어노테이션을 통해 대부분 해소할 수 있지만 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고 런타임
JPA에서 ‘Audit’ 이란 ‘감시하다’라는 뜻으로, 각 데이터마다 ‘누가’’, ‘언제’ 데이터를 생성했고 변경했는지 감시한다는 의미로 사용된다. 앞에서 작성한 코드를 보면 알 수 있듯이 엔티티 클래스에는 공통적으로 들어가는 필드가 있다. 예를 들면 ‘생성 일자’와
RDBMS(관계형 데이터베이스 관리 시스템)를 사용할 때는 테이블 하나만으로 모든 기능을 구현하지 않는다. 대체로 설계가 복잡해지면 각 도메인에 맞는 테이블을 설계하고 연관관계를 설정해서 조인(Join) 등의 기능을 활용한다.JPA를 사용하는 애플리케이션에서도 테이블의
상품 테이블과 공급업체 테이블은 위와 같이 상품 테이블의 입장에선 다대일(N:1), 공급업체 테이블의 입장에선 일대다(1:N) 관계로 볼 수 있다. 이런 관계는 어떻게 구현해야 할지 직접 매핑하면서 알아보겠다.먼저 공급업체 테이블에 매핑되는 엔티티 클래스를 만들겠다.
다대다 매핑 다대다(M:N) 연관관계는 실무에서 거의 사용되지 않는 구성이다. 다대다 연관관계를 상품과 생산업체의 예로 들자면 한 종류의 상품이 여러 생산업체를 통해 생산될 수 있고, 생산업체 한 곳이 여러 상품을 생산할 수도 있다. 다대다 연관관계에서는 각 엔티티에
업로드중..영속성 전이(cascade):특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것예를 들어 @OneToMany 어노테이션의 인터페이스를 살펴보면 아래와 같다.연관관계와 관련된 어노테이션을 보면
유효성 검사(validation):애플리케이션의 비즈니스 로직이 올바르게 동작할 수 있도록 데이터를 사전 검증하는 작업이다. 유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정이 있다.유효성 검사는 프로그래밍에서 매
애플리케이션을 개발할 때는 불가피하게 많은 오류가 발생한다. 자바에서는 이러한 오류를 try/catch, throw 구문을 활용해 처리한다. 스프링 부트에서는 더욱 편리하게 예외 처리를 할 수 있는 기능을 제공한다.이번 절에서는 예외 처리의 기초를 소개하고 스프링 부트
스프링 부트 액추에이터(Spring Boot Actuator)애플리케이션의 상태를 모니터링하고 관리하기 위한 도구서비스의 다양한 측면을 모니터링하고 운영 환경에서 문제를 식별하고 감시한다.HTTP Endpoint나 JMX를 활용한다.💡 Tip. JMX란?JMX(Jav
스프링 부트 액추에이터는 다양한 정보를 가공해서 제공하는 강력한 도구이다. 기본 엔드포인트 외에도, 개발자의 요구사항에 맞춘 커스텀 기능을 설정할 수 있다. 커스텀 기능을 설정하는 방법에는 크게 두 가지가 있다.기존 기능에 내용을 추가하는 방식새로운 엔드포인트를 개발하
최근 개발되는 서비스들은 주로 마이크로서비스 아키텍처(MSA)를 채택하고 있다. MSA는 애플리케이션의 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태로, 각 애플리케이션은 자신이 가진 기능을 API로 외부에 노출한다. 다른 서버가 이러한 API를 호출하여 사용하므
일반적으로 실제 운영 환경에 적용되는 애플리케이션은 낮은 버전의 스프링 부트를 사용할 때가 많다. 때문에 RestTemplate을 많이 사용하고 있지만, 최신 버전에서는 RestTemplate이 지원 중단되어 WebClient를 사용할 것을 권고하고 있다. 이러한 흐름
일반적인 웹 사이트의 경우, 회원가입과 로그인은 빠질 수 없는 대표적인 기능이다. 그 중 로그인은 보안과 아주 밀접하게 연관되어 있다. 이번 글에서는 애플리케이션 보안 용어에 대해 알아보도록 하겠다.인증(Authentication)과 인가(Authorization)는
스프링 시큐리티(Spring Security)는 스프링 프레임워크 기반의 애플리케이션에서 보안 기능을 쉽게 구현할 수 있도록 도와주는 보안 프레임워크이다. 보안과 관련된 많은 기능을 제공하기 때문에 스프링 시큐리티를 활용하면 더욱 편리하게 원하는 기능을 설계할 수 있다
JWT (JSON Web Token)은 정보를 안전하게 JSON 형식으로 전송하기 위한 토큰이다. 주로 클라이언트와 서버 간의 인증에 사용되며, 디지털 서명을 통해 신뢰성을 보장한다. JWT는 URL에서 사용할 수 있는 문자열로 구성되어 있어 HTTP의 어느 구성 요소