AUTO_INCREMENT컬럼의 값이 중복되지 않게 1씩 자동으로 증가하게 해줘 고유번호를 생성NOT NULL해당 필드는 NULL 값을 저장할 수 없게 됨UNIQUE해당 필드는 서로 다른 값을 가져야만 함PRIMARY KEY해당 필드가 NOT NULL과 UNIQUE 제
객체 형태로 처리생략 가능Spring은 해당 파라미터(매개변수)가 SimpleValueType이라면 @RequestParam으로 간주하고 아니라면 @ModelAttribute가 생략되어있다 판단SimpleValueType은 원시타입(int), Wrapper타입(Inte
Client 즉, 브라우저에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보낼 수 있음서버에 보내려는 데이터를 URL 경로에 추가할 수 있음/star/Robbie/age/95 : ‘Robbie’와 ‘95’ 데이터를 서버에 보내기 위해 URL 경로에 추가데이터를 받기
데이터 전송 및 이동을 위해 생성되는 객체Client에서 보내오는 데이터를 객체로 처리할 때 사용서버의 계층간의 이동에도 사용DB와 소통을 담당하는 Java 클래스르 그대로 Client에 반환하는 것이 아니라 DTO로 한 번 변환한 후 반환할 때 사용Request의 데
기존에 있던 table들을 전부 삭제한 다음 다기 생성drop과 create가 합쳐진 것이라고 생각하면 됨create랑 같긴 같지만 종료 시점에 table을 drop함변경된 부분만 반영table이 없다면 table을 만들고 있다면 table을 만들지 않음Entity와
데이터의 생성(created_at), 수정(modified_at) 시간은 포스팅, 게시글, 댓글 등 다양한 데이터에 매우 자주 활용됨Spring Data JPA에서는 시간에 대해서 자동으로 값을 넣어주는 기능인 JPA Auditing을 제공하고 있음@MappedSupe
new 연산자를 통해 인스턴스화 된 Entity 객체아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않음persist(entity) 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듦영속성 컨텍
만약 Spring MVC에 Front Controller 패턴이 적용되어있지 않았다면?아래의 코드처럼 단 4개의 API를 처리하기 위해 무려 3개의 클래스를 만들어야함Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴을 만들어냄이제는
SpringBoot 서버에 html 파일을 바로 요청하면 해당 html 파일을 static 폴더에서 찾아서 반환해줌Controller를 거쳐서 html을 반환할 수도 있지만 이미 완성된 정적인 html 파일을 Controller를 통해서 반환할 필요는 없음Control
Client에 데이터를 반환할 때 사용할 MemoResponseDto 클래스 생성Memo memo = new Memo(); : 생성자 만들기Memo memo = new Memo(requestDto); : 클라이언트에서 보내준 데이터 requestDto를 넣어줌DB 역할
반환은 Update한 id만 넘겨줄거기 때문에 Long 타입 사용클라이언트에서 Body 부분에서 넘어오는데 JSON 형식으로 넘어올거기 때문에 @RequestBodyif(memoList.containsKey(id)) : 반환타입은 booleanmemo.update(re
객체를 직접 생성하는게 아닌 외부에서 생성한 후 주입하는 방식하나의 코드가 다른 코드를 필요로 하는 것코드가 실행되는데 있어서는 아무런 문제가 없지만 만약 Consumer 가 치킨이 아니라 피자를 먹고 싶어 한다면? 많은 수의 코드 변경이 불가피함Consumer 와 C
@Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록해줌@Component를 사용하여 Bean을 자동으로 등록하는 게 좋음비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Ser
@Autowired : Bean 타입으로 DI를 지원, Food 타입으로 Bean을 찾음 --> 오류 발생 --> Bean의 이름으로 찾음오류 발생 : 같은 필드(food 필드)에 Bean을 주입해야하는데 같은 타입의 Bean 객체가 하나 이상이기 때문에 어떤 Bean
해당 유저가 실제 유저인지 인증하는 개념스마트폰의 지문인식, 이용하는 사이트에 로그인 등과 같이 실제 그 유저가 맞는지 확인하는 절차해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념ex) 관리자 페이지 - 관리자 권한우리가 인증과 인가를 헷갈려 하는 이유
서버가 ' 특정 유저가 로그인 되었다 ' 는 상태를 저장하는 방식인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태의 전부는 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지 시킴사용자가 로그인 요청을 보냄서버는 DB의 유저 테이
일반적으로 서버 - 클라이언트 구조로 되어 있음실제로 이 두가지 요소는 아주 멀리 떨어져 있음http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless) 무상태(Stateless)로 이루어짐비연결성(Connectionless)서버와 클라
HTTP에 상태 정보를 유지(Stateful)하기 위해 사용쿠키와 세션은 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됨클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일구성 요소Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없
JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 즉, 토큰의 한 종류일반적으로 쿠키 저장소를 사용하여 JWT를 저장Session1 이 모든 Client으ㅏ 로그인 정보를 소유서버의 대용량 트래픽 처리를 위해 서버 2대 이상 운
소프트웨어 디지인 패턴 중 하나MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리재사용성과 유지보수성을 높임개발자들 간의 협업을 용이하게 함데이터와 비즈니스 로직을 담당데이터베이스와 연동하여 데어터를 저
Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/ 최종 단계의 위치이며, 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있음주로 범용적으로 처리해야 하는 작업들, 예를 들어 로깅 및 보안 처리에 활용인증
Spring Security 적용 Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어줌 Spring 프레임워크가 웹 서버 구현에 편의를 제공해 주는 것과 같음 Filter 기반으로 동작 Session 방식으로 기본적으
일반 사용자는 관리자 페이지에 접속이 인가되지 않아야함!!회원 상세 정보(UserDetailslmpl)를 통해 권한(Authority) 설정 가능권한 1개 이상 설정 가능권한 이름 규칙"ROLE\_"로 시작해야함ex) " ADMIN " 권한 부여 --> " ROLE_A
null 값에 대한 접근에 대해 NullPointerException 오류가 발생하기 때문에 이러한 부분을 예방하기 위해 필요Bean Validation간편하게 사용할 수 있는 여러 Annotation을 제공해줌ex)BindingResult예외가 발생하면 Binding
특정 매개 변수(파라미터)에 대한 작업을 수행하는 메서드들이 존재하는 클래스다른 객체에 의존하지 않고 하나의 모듈로서 동작하는 클래스JWT 관련 기능JWT 생성생성된 JWT를 Cookie에 저장Cookie에 들어있던 JWT 토큰을 SubstringJWT 검증JWT에서
지금까지는 Client 즉, 브라우저로부터 요청을 받는 서버의 입장에서 개발을 진행해왔지만 어떤 경우에는 Client 입장의 되어야 할 때도 존재ex) 우리의 서비스에서 회원가입을 진행할 때 사용자의 주소를 받아야 한다면?주소를 검색할 수 있는 기능을 구현해야하는데 직
RestTemplateBuilder의 build()를 사용하여 RestTemplate을 생성RestTemplate의 getForEntity는 Get 방식으로 해당 URL의 서버에 요청을 진행첫 번째 파라미터 : URLUriComponentsBuilder를 사용해서 UR
RestTemplate의 exchange 사용exchange 메서드의 첫 번째 파라미터에 RequestEntity 객체를 만들어 전달해주면 uri, header, body의 정보를 한번에 전달 가능전달된 header와 body의 정보 확인 가능@RequestHeader
관계형 데이터베이스에서 관계를 사용하면 중복 데이터를 방지할 수 있음논리적으로 연관되어 있는 두 테이블 사이의 연결한 테이블의 레코드가 다른 테이블의 레코드와 일대일로 매핑 되는 경우 즉, 하나의 테이블과 상대 테이블이 반드시 단 하나의 관계를 가지는 것ex) 사용자
JPA는 연관 관계가 설정된 Entity의 정보를 바로 가져올지, 필요할 때 가져올지 정할 수 있음가져오는 방법은 Fetch TypeFetch TypeLAZY : 지연 로딩으로 필요한 시점에 정보를 가져옴EAGER : 즉시 로딩으로 이름의 뜻처럼 조회할 때 연관된 모든
영속 상태의 Entity에서 수행되는 작업들이 연관된 Entity까지 전파되는 상황음식 테이블과 고객 테이블이 N : 1 양방향 관계라 가정 후 고객 Robbie가 후라이드 치킨과 양념 치킨을 주문Robbie가 음식을 주문하기 위해서는 위 코드처럼 user, food,
Persistence(영속성, 지속성)객체의 관점으로 해석해 보자면 객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할 수 있는 객체의 성질을 의미영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기
Spring에서 예외 처리를 위해 AnnotationController에서 발생한 예외를 처리하기 위해 사용@ExceptionHandler가 붙어있는 메서드 Controller에서 예외가 발생했을 때 호출되며, 해당 예외를 처리하는 로직을 담고 있음AOP를 이용한 예외
JPA에서 사용되는 Annotation으로 Entity 클래스에서 컬렉션을 정렬하는 방법을 지정하는데 사용일반적으로 @OneToMany(일대다), .@ManyToMany(다대다)와 같은 관계에서 컬렉션 필드에 적용ex)fieldName : 정렬의 기준이 .되는 Enti
JPA에서 제공하는 Annotation으로 사용자가 직접 쿼리를 작성하여 데이터베이스에 질의할 수 있도록 함주로 Repository 인터페이스의 메서드에 적용됨더 구체적인 쿼리 메서드를 작성하기 위해 사용하는 쿼리 메서드의 custom 버전쿼리는 기본적으로 JPA에서
일정한 시간 간격으로, 혹은 특정 시간에 코드가 실행되도록 하기 위해 사용@Scheduled 규칙Method는 void 타입으로Method는 매개변수 사용 불가@EnableScheduling 추가@EnableScheduling : 스프링 부트에서 스케줄러가 작동하게 함
소프트웨어 개발에서 각 개별적인 구성 요소 또는 모듈을 독립적으로 테스트하는 접근 방법즉, 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트코드의 작은 부분인 함수, 메서드 또는 클래스의 동작을 분리된 환경에서 확인하여 해당 코드가 의도한 대로 작동하
Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템(DBMS)데이터베이스, 캐시, 메세지 브로커로 사용인메모리 데이터 구조를 가진 저장소메모리에 데이터를 유지하면서 빠른 읽기와 쓰기 성능을 제공데이터