시스템 요구사항은 끊임없이 변하고, 우리는 변화에 유연한 코드를 작성해야할 의무가 있다. 중복 코드를 줄이고, 변화에 유연한 코드를 작성하기 위해서는 어떻게 해야할까 ? 동작 파라미터화 첫 날 농부 클라이언트가 "녹색 사과를 모두 찾고 싶어요" 라는 요구사항을 보내왔다. 우리는 filterGreenApples 메서드에 GREEN.equals(apple.getColor()) 조건을 통해 녹색인 사과를 찾아 요구사항을 만족했다. 하지만 다음 날 농부 클라이언트는 "무게가 150g 이상인 사과를 모두 찾고 싶어요" 라는 요구사항 수정을 보내왔다. 우리는 다시 filterApplesByWeight 메서드를 작성해 요구사항을 만족했다. 바로 다음 날 농부 클라이언트는 "무게가 150g 이상인 빨간 사과를 모두 찾..
구현 해야 하는 기능. 유저 헤더에서 토큰 값 가져와 유저 구분하기 (uuid) 유저 생성 ( RabbitMq 이벤트 처리 ) 유저 수정 (API) 유저 프로필 조회(API) 헤더에서 토큰 값 가져와 유저 구분하기 MSA 패턴에서 모든 요청은 GateWay 서버로 들어온다. 때문에 GateWay 에서 유저 인증, 인가처리에 대해서 모두 마친 후, 인증된 데이터를 토큰으로 만들어 헤더에 담는다. 그 헤더를 다시 해당하는 url에 맞추어 각 서버로 API 요청을 보낸다. 때문에 우리는 헤더의 유효성을 체크하지 않고, 그저 데이터를 가져다 사용하기만 하면 된다. public ResponseEntity getProfile(@RequestHeader("Authorization") String data) throw..
엔티티 매핑 미리 설계한 요구사항에 맞게 객체를 설계하고, 관계형 데이터베이스를 설계했다면 우리는 이 둘을 매핑시켜줘야 한다. 하지만 JPA의 특성 덕분에 우리는 객체 위주로 설계하고 이를 매핑시켜주면 된다. 조건에 맞게 엔티티를 매핑시켜주기 위해서는 어떤 개념들이 필요할까 엔티티와 테이블 매핑 @Entity ? @Entity 어노테이션이 붙은 클래스는 애플리케이션 실행 시 자동으로 JPA 가 관리하고 이를 엔티티라 부른다. 즉 JPA 를 사용해서 테이블과 매핑될 클래스는 반드시 선언 전 @Entity 어노테이션이 필수이다. 이 때 엔티티 이름을 지정할 수 있는데, @Entity(name = " ") 옵션을 주면 된다. 없다면 클래스 이름을 기본값으로 사용한다. @Table ? @Table 어노테이션은 ..
6장에서는 스프링 빈이 무엇인지, 어떻게 등록하는지 알아보겠습니다. 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다. https://inf.run/Jk5T 스프링 빈이란 ? 스프링 빈이란, 스프링 컨테이너가 관리하는 자바 객체입니다. 코드에서 new() 키워드를 통해 다양한 객체를 만들어 낼 수 있지만, 이 모든 객체가 스프링 컨테이너가 관리하지 않기 때문에 모든 객체가 스프링 빈은 아닙니다. 사용할 객체를 스프링 빈으로 등록해야지 관리하기 용이하고 편리하기 때문에 빈에 대해 이해하고, 활용하는 것이 매우 중요합니다. 스프링 빈을 등록하는 방법은 2가지가 있습니다. 스프링 빈을 등록하는 2가지 방법과 각각의 장단점에 대해서 알아보겠습니다. 컴포넌트 스캔 활용 첫 번째로 컴포넌트 스캔을 활용..
5장에서는 실제 비즈니스와 직접적으로 연관된 서비스를 구현해보겠습니다. 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다. https://inf.run/Jk5T 서비스 자바 스프링에서 서비스는 앞서 구현한 리포지토리에 접근해 비즈니스와 직접적으로 관련된 동작을 수행하는 코드입니다. 비즈니스 요구사항으로 회원 등록과 조회가 있었습니다. 요구사항을 만족하기 위해 먼저 서비스 패키지를 만든 후, 패키지 안에 MemberService 코드를 구현합니다. MemberService 전체코드입니다. 메소드를 확인하기 전에 먼저 MemberService 선언에 대해서 알아보겠습니다. 하나의 MemberService 마다 새로운 MemberRepository 를 new 키워드를 통해 생성한다면, 각각의 서비..
3장에 이어서 예제 요구에 대한 백엔드를 마저 구성해보겠습니다. 4장에서는 3장에서 구현한 리포지토리에 대한 테스트 케이스를 작성하고 테스트를 하는 과정까지 포스팅 하겠습니다. 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다. https://inf.run/Jk5T 테스트 자바 스프링에서는 개발한 메소드를 테스트하는 여러가지 방법이 있습니다. 자바 main 메소드를 통해 실행하는 방법, 웹 어플리케이션 컨트롤러를 통해 실행하는 방법 등이 있습니다. 그러나 이러한 방법은 준비하고 실행하는데에 오랜 시간이 걸리며, 반복 실행하기 어렵다는 단점이 있습니다. 때문에 자바 스프링에서는 JUnit 프레임워크를 사용하여 테스트를 실행합니다. Java 클래스에 대한 테스트 코드를 만드는데에 IntelliJ..
2장에 이어서 예제 요구에 대한 백엔드를 마저 구성해보겠습니다. 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었습니다. https://inf.run/Jk5T 회원 도메인 생성 2장에서 설명했듯이, 도메인은 회원 객체라고 생각하시면 됩니다. 예제에서 회원 ID와 이름 데이터를 요구하였기 때문에 이에 맞게 생성하시면 됩니다. 먼저 위와 같이 도메인 패키지를 먼저 생성한 후, 아래와 같이 Member 클래스를 작성해줍니다. package com.example.demo.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { ..
1장에서 기본적인 웹 프레임워크 데이터 통신 원리를 알아보았습니다. 2장에서는 간단하지만, 실제 사용될 수 있는 예제를 가져와 서버를 함께 구현해보겠습니다. 역시 공부 자료는 인프런 김영한 강사님의 스프링 입문편을 들었으며 사진 자료의 저작권은 김영한 강사님께 있음을 알립니다. https://inf.run/Jk5T 우선 기업에서도 일반적으로 웹 어플리케이션을 개발 할 때 아래와 같은 계층 구조로 개발한다고 합니다. 컨트롤러는 앞에서 배웠듯이, 클라이언트의 요청을 받아 어떠한 요청인지 구분해 그에 맞는 행동을 할 수 있게 해주는 MVC 컨트롤러입니다. 도메인은 실제 비즈니스 도메인 객체입니다. 실제 데이터베이스에 저장되는 데이터들을 도메인으로 생성하고 관리합니다. 리포지토리는 도메인 객체를 데이터베이스에 ..