Java 84

[Spring] 애브리타임 게시판 부가기능 추가(댓글, 쪽지, 좋아요, 즐겨찾기, 페이징처리)

기능 추가한 패키지는 다음과 같습니다. (기존 틀에서 벗어나진 않지만, Spring Security와 도메인 추가, 이미지 처리, 페이징 처리 등 다양한 기능들을 추가하였습니다) 우선 시큐리티 부분부터 차근차근 설명드리겠습니다. SecurityConfig.class @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final CorsFilter corsFilter; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private f..

Java/Spring 2023.02.11

[Spring] Spring Security + JWT를 이용한 토큰 발급 및 회원가입, 로그인 로직 구현

JWT란 무엇인가 ? RFC 7519 웹 표준으로 지정되어 있고, JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 Json Web Token이다. 헤비 하지 않고, 아주 간편하고 쉽게 적용할 수 있어서 사이드 프로젝트를 진행할 때 매우 유용한 방식이다. 몇 가지 고려사항만 잘 대응하면, 대규모 프로젝트에도 충분히 이용 가능한 방식이다. JWT 구성요소 Header : Signature를 해싱하기 위한 알고리즘 정보들이 담겨있음. Payload : 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용들을 담고 있다. Signature : 토큰이 유효성 검증을 위한 문자열, 이 토큰이 유효한 토큰인지 확인 가능. JWT 장점 - 중앙의 인증서버, 데이터 스토어에 대한 의존성 ..

Java/Spring 2023.01.08

[Spring] Rest vs RestAPI

Rest란 무엇인가? Representational State Transfer라는 용어의 약자이다. 자원을 URI로 표시하고 현재 자원에 대한 상태를 주고 받는 것이다. 클라이언트는 HTTP URI를 통해서 자원을 구별하고, URI를 통해 서버에 요청을 보낸다. 클라이언트와 서버간의 통신 방식 중 하나이다. REST의 구성 요소 : 자원(Resource), 행위 : HTTP METHOD(GET, POST, UPDATE, DELETE) 표현으로 이루어져있다. 표현(verb) 다음과 같이 클라이언트는 서버측에 요청을 보낼때, HTTP URI를 통해 자원을 구별한다. @PostMapping("/users/{userId}/boards") 그러면 Restful은 무엇일까? Rest와 동일하지만, 기존 Rest보다..

Java/Spring 2022.11.23

[Spring] MVC Pattern

MVC Pattern이 무엇이고 왜 생겨났을까?? MVC 패턴은 간략하게 설명하면, 유지보수가 편해지는 코드 구성 방식이다. 사용하는 이유는 도메인이나, 각종 구성요소들의 재사용을 할 수 있음(중복 코딩 방지)과 더불어 확장성이 매우 증가하였다. 더불어 Model, View, Controller로 요소를 나누었고, 이를 구분하기에 각 요소들이 스스로의 기능에 집중할 수 있고 분업화할 수 있다.. 어떠한 어플리케이션이 있을 때, MVC 패턴을 사용하지 않고 구현하였다면 전반적인 코드를 싹 다 고쳐야 한다. 하지만, MVC 패턴으로 구현하였으면 잘못된 컴포넌트의 기능만 찾아 이를 리팩토링하면 손쉽게 해결할 수 있다. 이를 통해 유지 보수가 편해질 수 있게 된다. MVC 패턴 동작 과정 1. 클라이언트가 필요..

Java/Spring 2022.11.23

[Java] HashMap, HashSet 개념정리

HashMap은 Map의 종류 중 하나인데, key값과 value 쌍으로 이루어진 데이터를 저장한다. Map과 HashMap의 차이는 map은 red-blcak-tree 알고리즘을 사용하고, Hashmap은 Hashtable을 이용해 key-value를 유지한다. key값은 중복이 불가능하지만, value값은 중복이 가능하다. 선언방법 HashMap 변수이름 = new Hashmap(); HashMap 메서드 정리 1. put(key, value) => key, value값 저장, 중복된 key에 대한 value는 마지막에 저장된 value값으로 update 2. putAll(Object) => 인자로 전달된 Map에 대한 모든 데이터를 저장한다. 3. get(Object key) => key에 해당하는..

Java/Java Concept 2022.10.31

[Spring] Bean Scope, MVC Framework, SpringApplication(Spring Boot)

Spring Bean이란? Spring에서 POJO(plain, old java object)를 "Bean"이라고 부른다 Beans는 애플리케이션의 핵심을 이루는 객체이며, Spring IoC 컨테이션에 의해 인스턴스화, 관리, 생성 된다. 컨테이너에 공급하는 XML파일에 의해 생성된다. 애플리케이션의 객체가 지정되면 getBean()메서드를 통해 가져올 수 있다. Bean Scope 이 중에 request, session, globalsession은 Spring Mvc Web Application에서만 적용된다. default값은 singleton이다. MVC Framework Spring MVC Framework의 구성요소 DispatcherServlet : 제일 앞단에서 HTTP Request를 처..

Java/Spring 2022.10.27

스프링 쇼핑몰 장바구니 기능 테스트코드(Junit5 단위 테스트)

CartControllerTest package com.example.shoppingmall.controller; import com.example.shoppingmall.controller.cart.CartController; import com.example.shoppingmall.dto.cart.CartCreateRequestDto; import com.example.shoppingmall.entity.member.Member; import com.example.shoppingmall.repository.member.MemberRepository; import com.example.shoppingmall.service.cart.CartService; import com.fasterxml.jackso..

Java/Spring 2022.09.18

스프링 쇼핑몰 프로젝트 장바구니(cart) 기능 구현

오늘은 멘토 분과 함께 장바구니 기능을 구현해봤습니다. 우선적으로 생각해야 할 부분이 있습니다. Cart(장바구니)는 CartItem(장바구니에 있는 아이템 목록)을 따로 만들어줘야 합니다. 그 이유가 뭐냐면 DB의 속성과도 연관이 있습니다. DB는 각 테이블을 쪼개면 쪼갤수록 안전하기 때문입니다. 이렇게 구현하지 않으면 서비스 코드 엄청 길어지고 쿼리 조회도 비효율적입니다. 그래서 cart, cartItem을 따로 만들어주었습니다. Cart, CartItem Entity package com.example.shoppingmall.entity.cart; import com.example.shoppingmall.entity.common.EntityDate; import com.example.shopping..

Java/Spring 2022.09.14

Gradle 환경에서 Swagger 사용 방법(API 문서 자동화)

Swagger란? 백엔드 개발에 있어 Rest API를 설계, 빌드, 문서화하는데 도움이 되는 오픈 소스 소프트웨어 프레임워크이다. Swagger를 사용하는 경우 다른 개발팀과 협업 진행 시 백엔드의 API를 호출하는 프론트엔드 프로그램 제작 시 Swagger 적용 순서 1. bundle.gradle에 의존성 추가 2.application.yml에 다음과 같은 코드 추가 3.코드 작성(config패키지 생성 + SwaggerConfig 클래스 생성) package com.example.board.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuratio..

Java/Spring 2022.08.31

스프링 프로젝트 코드 리뷰

Review review = Review.builder() .comment(reviewRequestDto.getComment()) .rate(reviewRequestDto.getRate()) .product(product) .user(writer) .build(); return reviewRepository.save(review); 1.빌더(Builder)로 구현해보고자 한 건 좋지만, 생성자의 장점을 놓친 것 같다. 둘의 차이를 알고 어떨 때에는 빌더를 쓰고, 어떨 때에는 생성자를 쓰는지 차이점을 알면 더 좋을 것 같다. 빌더와 생성자에 대해서 각 상황에 맞게 적용하는 방안을 생각해봐야 겠다. @JoinColumn(name = "User_id") @ManyToOne(fetch = FetchType.LA..

Java/Spring 2022.08.23