본문 바로가기

Spring46

[Spring Security] Spring Security의 기본 구조, 동작 방식 (2) - Database User [Spring Security] Spring Security의 기본 구조, 동작 방식 (1) -InMemory User Spring Security 흐름 적용을 위해 CSR 방식이 아닌 SSR 방식을 이용함 각각의 화면에 맞는 html 파일이 있다! (타임리프 방식) 화면 설명 ⬇ 커피 보기 화면 - 모든 사용자 접근 가능 전체 주문 목록 보기 wlikeoxy.tistory.com 이 글에 이어서 작성! 애플리케이션 사용자에 Spring Security 를 적용시키는 방법을 두 가지 배웠다. 이번에는 InMemory User 가 아닌 DB에 저장되는 User 인증 방식을 정리한다. Custom UserDetailsService : User의 인증정보를 테이블에 저장, 테이블에 저장된 인증 정보를 이용해 .. 2022. 11. 21.
[Spring Security] Spring Security의 기본 구조, 동작 방식 (1) - InMemory User Spring Security 흐름 적용을 위해 CSR 방식이 아닌 SSR 방식을 이용함 각각의 화면에 맞는 html 파일이 있다! (타임리프 방식) 화면 설명 ⬇ 커피 보기 화면 - 모든 사용자 접근 가능 전체 주문 목록 보기 화면 - admin only 마이페이지 화면 - 일반사용자(user) only Spring Security 적용하기 1. 의존 라이브러리 추가 : spring-boot-starter-security 2. spring security 디폴트 로그인 페이지로 이동 username : user password : 로그에 출력됨 디폴트 페이지가 아닌 만들어둔 html 파일로 로그인하고 싶다? ➡ Spring Security Configuration 적용 : 원하는 인증방식, 웹 페이지 접.. 2022. 11. 21.
[Spring] Spring MVC 웹 애플리케이션 계층별 개발 흐름 정리 (수정중) 내가 헷갈려서 정리하려고 쓰는,, Section 3 끝난 기념 구구절절 정리😆 후딱 한바퀴 돌리고 가장 최신 버젼 코드(v12? 13)?를 직접 쳐봐야겠다,, * 아래 목차는 절대적인 개발 순서가 아님 Spring MVC : Model - 작업의 처리 결과 데이터 View - 클라이언트 애플리케이션 화면에 보여지는 리소스 제공 Controller - Model ~ View 의 중간에서 상호작용, 클라이언트 요청 직접 받음 Client가 요청 데이터 전송 → Controller가 요청 데이터 수신 → 비즈니스 로직 처리 → Model 데이터 생성 → Controller에게 Model 데이터 전달 → Controller가 View에게 Model 데이터 전달 → View가 응답 데이터 생성 1. API 계층 .. 2022. 11. 15.
[Spring] 애플리케이션 빌드 / 실행 / 배포 애플리케이션 실행파일 (Executable Jar) : 애플리케이션을 빌드해서 실행 가능 하도록 만듬 애플리케이션 빌드 - IntelliJ IDE 를 통한 빌드 Spring Boot - Gradle 빌드 툴을 이용해 애플리케이션 빌드 가능한 플러그인을 지원한다 :bootJar 또는 :build task 를 더블클릭하면 build/libs 디렉토리에 Jar 파일 생성됨 * :build vs :bootJar :build : Gradle 에서 build와 관련된 모든 task 실행됨 (:assemble, :check ...) plain Jar 파일 하나 더 생성됨 :bootJar : 애플리케이션의 실행 가능한 Jar (Excutable Jar)파일을 생성 위한 task 만 실행 됨 -- 단순 excutable.. 2022. 11. 15.
[Spring] API 문서화 - Spring Rest Docs API 문서화란? : 클라이언트가 REST API 백엔드 애플리케이션에 요청을 전송하기 위해서 알아야 되는 요청 정보(요청 URL(또는 URI), request body, query parameter 등)를 문서로 잘 정리하는 것 API 문서 (= API 사양) : API 사용을 위한 정보가 담겨있는 문서 API 문서 생성의 자동화가 필요한 이유 : API 문서를 수기로 직접 작성하는 것이 비효율적 이기 때문에! (수정 필요할 경우 일일히 바꾸기 어려움) 작업 시간 단축하고, 애플리케이션 완성도를 높이기 위해 API 자동화가 필요한 것! Spring Rest Docs vs Swagger : 둘 다 API 문서 자동화 오픈소스 차이점 ? Swagger - 적용 방식 : 어노테이션들이 애플리케이션 코드(Co.. 2022. 11. 13.
[Spring] 슬라이스 테스트 - API 계층, 데이터 액세스 계층 테스트 슬라이스 테스트 : 각 계층에 구현해 놓은 기능들이 잘 동작하는지 특정 계층만 잘라서 테스트하는 것 API 계층 테스트 : Controller @SpringBootTest @AutoConfigureMockMvc public class ControllerTestDefaultStructure { @Autowired private MockMvc mockMvc; @Test public void postMemberTest() { // given - 테스트용 request body 생성 // when - MockMvc 객체로 테스트 대상 Controller 호출 // then - Controller 핸들러 메서드에서 응답으로 수신한 HTTP Status 및 response body 검증 } } @SpringBoot.. 2022. 11. 11.
[Spring] Mockito, Mock 이란? Mock : 가짜 객체 Mocking : 단위 테스트, 슬라이스 테스트 등에 Mock 객체 사용하는 것 테스트에서 Mock 객체를 사용하는 이유 : 일반 Test는 완전한 슬라이스 테스트라 보기 힘들다! Controller에 있는 핸들러 메서드 테스트를 돌리는 것이지만, 결국 그 핸들러 메서드가 서비스 계층을 거치고, db까지 타고타고 갔다가 돌아오는 것이기 때문에 슬라이스 테스트라기보다는 통합 테스트에 가깝다. but 슬라이스 테스트의 목적 = 해당 계층 영역 테스트에 집중하는 것! Mock 객체를 사용하면 테스트 시에 '다른 계층과 단절'시켜주어 불필요한 과정을 줄일 수 있다. 테스트하려는 대상에 집중해서 테스트 수행 가능! Mockito?🍸 : Spring Framework 자체적으로 지원하는 Mo.. 2022. 11. 10.
[Spring] 스프링 테스팅(Testing) 中 단위 테스트 - JUnit, Hamcrest 테스트 ? : 어떤 대상에 대한 일정 기준을 정해놓고, 그 대상이 정해진 기준에 부합하는지, 못하는지 검증하는 과정 테스트를 하는 이유? : 테스트 대상이 검증 과정에 잘 통과하게 만들어 최대한 더 나은 결과를 얻기 위함! 특히 단위 테스트 : 결과 빠르게 확인할 수 있고, 버그 미리미리 확인 가능하다. ex) Postman 통해서 돌려보는 것, 디버깅 ... 테스트의 종류 : (⬇ 범위 좁아짐) - 기능 테스트 : 범위가 제일 큼, 사용자 입장(제 3자)에서 애플리케이션 기능 동작 테스트 QA 부서가 실시, API 툴, 데이터베이스 모두 연관 - 통합테스트 : 개발팀, 개발자가 테스트의 주체 클라이언트 툴 없이 테스트 코드 실행으로 이루어짐 여러 계층 연관되어 있음 - 독립적 테스트 불가 - 슬라이스 .. 2022. 11. 10.
[Transaction] 트랜잭션이란? / 스프링 지원 - 선언형 방식 트랜잭션 (어노테이션, AOP) 트랜잭션(Transaction) 이란? : 여러개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위 무조건 여러개의 작업을 그룹으로 묶는게 트랜잭션? ➡ 🙅🏻‍♀️Xxx! 물리적으로 여러 개의 작업이지만, 논리적으로 마치 하나의 작업처럼 인식, 전부 성공 or 전부 실패(All or Nothing) 둘 중 하나로만 처리 되어야 트랜잭션!! db, 파일, 메세지 등 전혀 다른 타입의 리소스를 하나의 작업단위로 묶어서 처리해야 할 수도 있다. 트랜잭션의 특징 - ACID 원칙 1. 원자성 (Atomicity) : 작업을 더 이상 쪼갤 수 없음 논리적으로 하나의 작업으로 인식함 ➡ All or Nothing 중 하나로만! 2. 일관성 (Consistency) : 트랜잭션 성공적 종료시, 일관성 있게 저장,.. 2022. 11. 7.
[JPA] 엔티티 매핑 (객체~테이블 매핑 / 기본키 매핑 / 필드 ~ 컬럼 매핑) DB 테이블 ~ 엔티티 클래스 간의 매핑 작업 : JPA를 이용해 DB 테이블과 상호 작용(데이터 저장, 수정, 조회, 삭제) 하기 위해 가장 먼저 해야할 작업 엔티티 클래스 ~ DB 테이블 단일 테이블 간의 매핑 작업 1) 객체 ~ 테이블 간 매핑 2) 기본키 매핑 3) 필드(멤버 변수) ~ 컬럼 간 매핑 4) 엔티티 간의 연관 관계 매핑 (🔥) 엔티티 ~ 테이블 간의 매핑 @Entity : 엔티티 클래스 ~ 테이블 매핑 붙이면 JPA 관리 대상 엔티티가 된다. ex) @Entity(name = "SOMETHING") 엔티티 이름 설정 가능, 미설정시 클래스이름 = 엔티티이름 @Id : 테이블의 기본키 컬럼에 매핑 @Table : 테이블 이름 설정 가능 ex) @Table(name = "SOMETHIN.. 2022. 11. 1.