Spring 31

domain, JpaRepository

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 내가 보려고 쓰는 Spring 프로젝트 구조 들어가기 전... 내가 보려고 쓰는 프로젝트 구조 스프링 부트에서 JPA로 데이터베이스를 다뤄보자 왜 JPA를 쓸까? 왜 ❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓❓ 국비학원에서 가르친 MyBatis... 이것은 곧 SQL 매퍼(mapper)이다. 하지만 이것은 실제로 개발하는 시간보다 SQL을 다루는 시간이 더 많았다. 분명 "객체지향 프로그래밍을 배웠는데, 왜 객체지향 프로그래밍을 못할까?" → 객체 모델링보다는 테이블 모델링에만 집중하고, 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 했다. → 이것은 곧 기형적인 형태이다. 어떻게 하면 관계형 데이터베이스를 이용하는 프..

Spring/그 외 2023.01.07

스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 책을 보며 따라하기 기록 1. OAuth 동의 화면 책과 좀 다른 부분이 있다. 구글링해보니 User Type을 '외부'로 체크해야 한다고 함. 2. enum Role import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum Role { GUEST("ROLE_GUEST", "손님"), USER("ROLE_USER", "일반 사용자"); private final String key; private final String title; } → 스프링 시큐리티에서는 권한 코드에 항상 ROLE_이 앞에 있어야..

Spring/그 외 2023.01.04

혼자 구현하는 웹 서비스

출처 : 이동욱 개발자님 [스프링 부트와 AWS로 혼자 구현하는 웹서비스] 내가 보려고 적는 기능 설명들 1. domain 패키지 도메인을 담을 패키지이다. 💡 도메인이란? → 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. 🚨 기존에 MyBatis와 같은 쿼리 매퍼를 사용했다면, dao 패키지를 떠올리겠지만, dao 패키지와는 결이 다르다. 그간 xml에 쿼리를 담고, 클래스는 오로지 쿼리의 결과만 담던 일들이 모두 도메인 클래스라고 불리는 곳에서 해결된다. 2. @NoArgsConstructor 기본 생성자 자동 추가 3. Entity 클래스에는 Setter 메소드가 없다. 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하는지 코드상으로 명확하게 구분하기 위..

Spring/그 외 2023.01.03

스프링 MVC 1편 (3) - MVC 기본 기능

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 6. 스프링 MVC - 기본 기능 ※ 매핑 정보 @Controller - 반환 값이 String 이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다. @RestController - 반환 값으로 뷰를 찾는 것이 아니라,HTTP 메시지 바디에 바로 입력한다. 따라서 실행 결과로 ok 메세지를 받을 수 있다. @ResponseBody 와 관련이 있다. 로깅 간단히 알아보기 앞으로 로그를 사용할 것이기 때문에, 로그에 대해서 간단히 알아보자. 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다. packag..

Spring/MVC 2023.01.01

스프링 MVC 1편 (2) - MVC 패턴

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 3. 서블릿, JSP, MVC 패턴 MVC 패턴 - 개요 Model View Controller 웹 애플리케이션은 보통 이 MVC 패턴을 사용 컨트롤러 HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. 모델 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다. 뷰 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다. ※ 참고 컨트롤러에 비즈니스 로직을 둘 수도 ..

Spring/MVC 2022.12.30

스프링 MVC 1편 (1) - 서블릿, HTTP 요청 & 응답

강의 : 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 내가 보려고 씀 섹션 1. 웹 애플리케이션 이해 서블릿 컨테이너 서블릿 객체는 싱글톤으로 관리 싱글톤? 객체를 딱 하나만 생성해놓고, 그걸 공유해서 쓰는 것. (2 ~3개 new로 생성하지 않음) 왜 이렇게 사용할까? 요청이 다 다르기 때문. 자바 뷰 템플릿 역사 HTML을 편리하게 생성하는 뷰 기능 JSP 속도 느림, 기능 부족 요즘엔 애매함. 스프링부트에서 JSP를 권장하지 않음. 기능도 많이 부족함. 타임리프(Thymeleaf) 내추럴 템플릿 : HTML의 모양을 유지하면서 뷰 템플릿 적용 가능 (태그를 넣어서 문제를 해결) 스프링 MVC와 강력한 기능 통합 (spring에서 밀고 있음) 최선의 선택, 단 성능은 프리마커, 벨로시티가 더 빠..

Spring/MVC 2022.12.22

스프링 데이터 JPA - (2)

출처 : 실전! 스프링 데이터 JPA 내가 보려고 씀 섹션 4. 쿼리 메소드 기능 8. 순수 JPA 페이징과 정렬 JPA에서 페이징을 어떻게 할 것인가? 9. 스프링 데이터 JPA 페이징과 정렬 페이지를 유지하면서 엔티티를 DTO로 변환하기 → 엔티티를 외부에 그대로 반환하면 안 됨. 10. 벌크성 수정 쿼리 JPA는 엔티티 객체 중심 11. @EntityGraph ※ 선행 : 페치조인이란? → 지연로딩과 그로인해 발생하는 문제들을 이해해야 함. → N + 1 문제 : 페치조인으로 해결 // 영속성 컨텍스트에 있는 캐시 정보들을 DB에 완전히 다 반영을 해서 // insert를 정확하게 다 하고, // 데이터베이스에 다 반영을 시킨 다음에 // 영속성 컨텍스트를 다 날리는 것 em.flush(); em...

Spring/JPA 2022.12.20

스프링 데이터 JPA - (1)

출처 : 실전! 스프링 데이터 JPA 섹션 1. 프로젝트 환경설정 @Setter를 넣기 보다는 package study.datajpa.entity; import lombok.Getter; import lombok.Setter; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; private String username; protected Member() { } public Member(String username) { this..

Spring/JPA 2022.12.19

JPA 활용 2 - API 개발과 성능 최적화

출처 : 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화 섹션 1. API 개발 기본 1 - 1. 회원 등록 API @Controller + @ResponseBody == @ RestController (스프링 MVC 강의에 나옴) @RequestBody : JSON으로 온 Body를 Member에 그대로 매핑해서 쫙 넣어준다. 즉, JSON data를 Member로 쫙 바로 바꿔준다. (MVC에 관련된 내용) 🚨 API를 만들 때는 엔티티를 파라미터로 받지 말아라 & 엔티티를 외부에 노출해서도 안 됨. 즉, API는 항상 요청이 들어오거나 나가는 건 전부 다 엔티티를 사용하지 않고, DTO(객체)를 사용해서 등록이랑 응답을 받는 걸 권장함. // 예시 코드 : Member 엔티티 대신..

Spring/JPA 2022.12.19

HTTP 헤더

강의 : 모든 개발자를 위한 HTTP 웹 기본 지식 HTTP 헤더1 - 일반 헤더 0. HTTP 헤더 용도 HTTP 전송에 필요한 모든 부가정보 1. 표현 Content-Type: 표현 데이터의 형식 (HTML, JSON 등등...) Content-Encoding: 표현 데이터의 압축 방식 Content-Language: 표현 데이터의 자연 언어 (한국어, 영어 등등...) Content-Length: 표현 데이터의 길이 표현 헤더는 전송, 응답 둘다 사용 1 - 1. Content-Type 미디어 타입, 문자 인코딩 예) • text/html; charset=utf-8 • application/json • image/png 2. 쿠키 Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) Cook..

Spring/HTTP 2022.12.19