본문 바로가기

분류 전체보기

(92)
[TIL] 항해99 Day 38 항해 38일차 2022.02.16 jpa 활용하는 방법이 아직까지 익숙하지 않아 프로젝트를 강의를 보며 다시 한번 정리해보려고 한다. 1. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 2. 도메인 모델과 테이블 설계 회원, 주문, 상품의 관계 : 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 하지만 이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않는다. 따라서 그림처럼 주문상품이라는 엔티..
[TIL] 항해99 Day 38 항해 38일차 2022.02.16 jpa 활용하는 방법이 아직까지 익숙하지 않아 프로젝트를 강의를 보며 다시 한번 정리해보려고 한다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 도메인 모델과 테이블 설계 회원, 주문, 상품의 관계 : 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 하지만 이런 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않는다. 따라서 그림처럼 주문상품이라는 엔티티를 추가해..
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 서버에 요청을 보낼 때 흔히 발생한다. 중요한 점은 요청을 어디..
[TIL] 항해99 Day 33 항해 33일차 spring 주특기 심화 과정이 끝나고 팀프로젝트를 시작했다. 처음으로 프론트앤드와 협업하여 진행하는 프로젝트 이기에 더욱 부담된다. 새로운 팀원들과 만나 API설계를 하고 백앤드 팀원들과 DB설계까지 하였다. ) 기능 메인페이지 a. 모임 목록이 보여지는 페이지 b. 로그인 화면 이동 기능 c. 회원가입 화면 이동 기능 d. 모임 만들기 기능 e. 모임 상세페이지로 넘어가는 기능 상세페이지 댓글 생성 기능 댓글 수정 기능 : 작성자만 가능함. 로그인 페이지 이동 : 댓글 작성 시 로그인이 필요하다는 알람을 띄우고 로그인 페이지로 이동시킨다. 책 url 버튼 : 해당 책의 상세정보가 있는 서점 페이지로 이동 로그인 페이지 로그인 정보 (아이디, 비밀번호)를 받아서 로그인 시킴 회원가입 페이..
[TIL] 항해99 Day 32 항해 32일차 Enum Enum은 열거형이라고 말하며, 서로 연관있는 상수들의 집합이다. 필요한 상수들을 각 클래스에서 그 때 그 때 정해서 써도 되지만, 이렇게 한 클래스로 두면 여기저기 가져다 쓸 수 있어 편하다. 열거형을 정의하는 방법은 간단하다. 다음과 같이 괄호{ }안에 상수의 이름을 나열하기만 하면 된다. enum 열거형이름 { 상수명1, 상수명2, ... } 이 열거형에 정의된 상수를 사용하는 방법은 ‘열거형이름.상수명’이다. public class MyClass{ // enum enum UserRole { USER, ADMIN } // 메인 메소드 public static void main(String args[]) { System.out.println(UserRole.USER); Syst..
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로 인스턴스를 사용하기 때문에 메모리 낭비를..