본문 바로가기

Spring

(38)
[TIL] 항해99 Day 38 항해 38일차 2022.02.16 jpa 활용하는 방법이 아직까지 익숙하지 않아 프로젝트를 강의를 보며 다시 한번 정리해보려고 한다. 1. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 2. 도메인 모델과 테이블 설계 회원, 주문, 상품의 관계 : 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 하지만 이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않는다. 따라서 그림처럼 주문상품이라는 엔티..
JWT 방식의 정보 인증(2) JWT 강의를 보며 기본 개념을 익히고 우리팀에 적용해보기로 했다. JWT 로그인 적용인증 처리 (Filter) Filter 는 Client 의 API 요청이 Controller 에 전달되기 전, 사전처리를 하는 영역 으로 Controller 에 도달하기 전에 인증 처리를 하기 위해 사용 FormLoginFilter : 회원 폼 로그인 요청 시 username / password 인증 POST "/user/login" API 에 대해서만 동작 필요 Client 로부터 username, password 를 전달받아 인증 수행 인증 성공 시 FormLoginSuccessHandler 통해 JWT 생성 이후 Client 에서는 모든 API 응답 Header 에 JWT 를 포함하여 인증 public class ..
JWT 방식의 정보 인증 JWT jwt란 서버가 1대인 경우 모든 클라이언트의 로그인 정보를 소유한다. 서버가 2대 이상인 경우 서버의 대용량 트래픽 처리를 위해 서버 2대 이상 운영이 필요하다. 서버마다 다른 클라이언트 로그인 정보를 가지고 있을 수 있다. 서버1 : 클라이언트1, 클라이언트2, 클라이언트3 서버2 : 클라이언트4 서버3 : 클라이언트5, 클라이언트6 클라이언트1 로그인 정보를 가지고 있지 않은 서버2나 서버3에 API요청을 하게되면 클라이언트마다 요청 서버를 고정하면 된다. JWT 사용 로그인 정보를 서버에 저장하지 않고 클라이언트에 로그인 정보를 JWT로 암호화 하여 저장한다. 모든 서버에서 동일한 Secret Key를 보유 Secret Key를 통한 암호화 / 위조 검정 JWT 장/단점 장점 동시 접속자가..
[TIL] CORS에러! 무엇인가? 항해 35일차 처음으로 프론트와 함께 프로젝트를 진행중이다. 프론트/백 연결 해보려고 하는데 모두 첫 협업이다보니 예상하지 못한 오류가 많았다. 그중에서 오늘 CORS 오류가 발생했고 CORS가 무엇인지 찾아보고 공부를 해봤다. CORS란? CORS(Cross-Origin Resource Sharing)는 교차 출처 리소스 공유라는 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다. 즉, 무분별하게 클라이언트가 다른 리소스에 접근하는 것을 막는 보안 이슈이다. front 서버와 back서버의 주소(포트)가 다르면 cors에러가 발생한다. 로컬에서는 가능한데 웹개발 시 API 서버에 요청을 보낼 때 흔히 발생한다. 중요한 점은 요청을 어디..
MVC 테스트 항해 31일차 2022.02.09 MVC 테스트 Spring MVC Test Spring MVC 컨트롤러의 테스트를 말한다. 컨트롤러의 자체는 단위 테스트가 필요할 만한 비즈니스 로직이 존재하지 않기 때문에 통합 테스트의 관점으로 접근해야 한다. E2E로 테스트를 할 경우 뷰가 생성한 응답 데이터(HTML)의 유효성을 검증할 수 있으나, 에플리케이션이나 데이터베이스가 반드시 기동되어야 하는 등의 단점이 있다. Spring Test는 E2E의 단점을 해소하면서 통합한 상태의 컨트롤러 테스트를 위해 ‘MockMvc’를 제공하고 있다. MockMvc Spring에서는 MockMvc를 제공해 웹 애플리케이션을 서버에 배포하지 않고 스프링 MVC의 동작을 재현할 수 있다. 테스트 케이스의 메서드는 Dispathc..
RESTful하다? 항해 30일차 REST API란? REST API는 정보들을 주고 받는데 있어 개발자들 사이에 널리 쓰여지는 일종의 형식이다. 어떤 학원에서 학원을 관리하기 위한 API들을 만든다고 하자. 사실 REST API는 지켜줬으면 하는 형식이고 약속일 뿐이므로 REST API를 고려하지 않고 서비스를 만들어도 된다. (REST 하지 않은 예시1) 이런 식으로 URI를 원하는 단어 아무거나 써서 만들어도 내가 구분해서 쓸 수만 있으면 서비스 기능 자체에는 문제가 없다. 하지만 한 서비스를 여러 개발자가 만드는 일이 많고 내가 혼자 만든 API를 다른 사람이 이용하게 되는 일도 생긴다. 이 때 위 방식처럼 요청하고자 하는 내용이랑 전혀 상관없는 쌩뚱맞은 URI를 설정해놓으면 이게 뭘 하는 요청인지 알기 힘들다. (..
싱글톤 패턴 항해 27일차 https://devmoony.tistory.com/43 https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/ 디자인 패턴 1. Singleton Pattern 소프트웨어 디자인 패턴에서 싱글턴 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 사용 이유? 만약 우리가 만들었던 DI 컨테이너인 요청을 할 때마다 새로운 객체를 생성한다. 요청이 엄청나게 많은 트래픽 사이트에서는 계속 객체를 생성하게 되면 메모리 낭비가 심하기 때문이다. 장점 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를..
[TIL] 객체지향 설계 5원칙(SOLID) 1. 객체지향 설계 5원칙(SOLID) 좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높여야 한다. 결합도 : 클래스간의 상호 의존 정도를 나타내는 지표로써 결합도가 낮으면 클래스간의 상호 의존성이 줄어들어서 객체의 재사용 및 유지보수가 유리하다. B라는 클래스가 A의 클래스에 의존을 하고 있고, C라는 클래스는 B클래스에 의존하고 있다. 그런데 A라는 클래스에서 수정이 되면 B,C에도 모두 영향이 가기때문에 B,C도 모두 수정해줘야 한다. 꼬리에 꼬리를 물어 유지보수에 어려움이 있다. 응집도 : 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 클래스는 하나의 책임에 집중하고 독립성이 높아져 재사용 및 유지보수가 용이하다. 1-1. 단일 책임 원칙 어떠한 클래스를 변..