스파르타 강의 정리
-
스프링 2주차 복습스파르타 강의 정리 2023. 11. 14. 20:58
IoC와 DI는 객체지향의 SOLID 원칙 그리고 GoF의 디자인패턴과 같은 설계원칙 및 디자인패턴이다. IoC는 설계원칙에 해당하고, DI는 디자인패턴에 해당한다. 설계원칙은 백엔드에선 SOLID가 대부분이긴한데, 관점(BE, FE등) 에 따라 설계원칙에 대해 다르게 느낄 수 있다. (현재 내 기준에서는 SOLID원칙만 신경쓰면 된다.) 필드 주입, 메소드 주입, 생성자 주입의 차이 객체를 만들때 가장 중요한건 추후에 변경이 없어야한다는 전제(객체의 불변성)가 깔려있다. 객체를 만들면 각자도생을 할 수 있도록 만드는 것이 중요하다. ex. 맥북을 업데이트할때마다 센터에 가서 업데이트를 해야한다면? 가장 권장하는 생성자 주입의 경우 그냥 바뀐 생성자를 받아오기만 하면 된다. 변경이 가장 적어서 좋다. (..
-
스프링 1주차 복습스파르타 강의 정리 2023. 11. 13. 21:08
1주차를 다시 보면서 완벽히 습득하지 못한 내용들을 정리 Headers - 브라우저에서 서버로 보낸 Request 데이터 Request Headers - 이것 또한 브라우저에서 서버로 보낸 리퀘스트 데이터 Response Headers - 서버가 웹페이지 데이터와 함께 보낸 추가 데이터 정적 웹페이지 반환방법 1. 컨트롤러를 거치지않고 url에 파일명을 바로 입력 2. 타임리프를 주석처리하고 다시 빌드한 후 컨트롤러를 통해 평범하게 반환 3. Get에서 redirect 사용 3번 코드 @GetMapping("/html/redirect") public String 메소드이름() { return "redirect:/정적페이지이름.html"; } 반환할 데이터는 모델에 담고 그 모델이 적용될 view 이름에 ..
-
Entity 연관관계, @OneToOne스파르타 강의 정리 2023. 11. 10. 20:18
4주차 Entity 연관관계에 대한 강의를 들으며 메모한 내용을 정리 참고로 예시는 모두 Food Entity와 User Entity를 사용하였음. 또한 모든 연관관계에서 FK의 주인은 Food 라고 가정 데이터베이스에서는 단방향, 양방향의 관계가 의미없다. 어느 테이블을 기준으로 Join해도 같은 결과가 나오기 때문 하지만 JPA로 오면 방향의 개념이 생기게 된다. DB에서는 방향의 개념이 없었지만 Entity는 객체형태이기 때문에 서로 참조하기 위해 상대 엔티티의 타입을 필드로 가지고 있어야 한다. 참조할만한 필드가 없다면 연관관계를 맺을 수가 없어 조회가 불가능하기 때문에 조회가 가능한 한쪽이 일방적으로 조회하게 된다. 이 경우 단방향관계가 되며, 단방향, 양방향이라는 개념이 생기게 된다. @One..
-
회원가입 구현 및 Filter스파르타 강의 정리 2023. 11. 8. 20:36
@Enumerated(value = EnumType.STRING) 데이터 enum타입을 DB컬럼에 저장할때 사용하는 옵션 EnumType.STRING 이걸 쓰면 enum 이름 그대로 데이터베이스에 저장 양방향 암호 알고리즘 - 암호화 : 평문 -> (암호화 알고리즘) -> 암호문 - 복호화 : 암호문 -> (암호화 알고리즘) -> 평문 단방향 암호 알고리즘 - 암호화 : 평문 -> (암호화 알고리즘) -> 암호문 - 복호화 : 불가능 그럼 로그인 시에 암호화된 비밀번호를 서버가 어떻게 검증하는가? -> PasswordEncoder가 match 메소드를 제공하기 때문에 DB에 저장된 암호화된 비밀번호와 비교하여 일치여부를 확인 TMI boolean 타입은 is로 시작한다. getter, setter와 같은..
-
3-5, 3-6 JWT스파르타 강의 정리 2023. 11. 7. 20:46
JWT (Json Web Token)란 JSON 포맷을 이용하여 사용자 관련 속성을 저장하는 Claim 기반 Web Token. 일반적으로 쿠키저장소를 사용하여 저장. 서버가 한대면 모든 클라이언트의 로그인 정보를 가지고 있기 때문에 문제가 발생하지 않는다 서버가 2대 이상이면 클라이언트와 서버사이에 로드밸런서가 개입하게 되는데 클라이언트의 요청을 원하는 서버로 보내지 않는데 미리 대처해두지 않으면 여기서 문제가 발생한다. 각 서버의 세션마다 가지고 있는 클라이언트 로그인 정보가 다를 수 있다. (세션1은 클라이언트1~10, 세션2는 클라이언트 11~20 등) 그래서 클라이언트1의 요청이 서버2 서버3으로 보내지게 된다면 문제가 발생한다. 해결방법은 두가지가 있다. 1. Sticky Session : 클..
-
3-3, 3-4 인증과 인가 / 쿠키와 세션스파르타 강의 정리 2023. 11. 7. 20:34
인증과 인가란 무엇일까? 아이디 카드가 있으면 너는 어디까지 갈 수 있니? 인증 Authentication - 로그인 할 때 아이디카드 수준을 판단. 처음 한번만 실행 - 해당 유저가 실제 유저인지 인증하는 개념 ex. 폰 지문인식, 사이트 로그인 등 인가 Authorization - 아이디카드를 통해 접근권한을 인가 - 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인 *HTTP 통신은 비연결성과 무상태로 이루어져 있다. 비연결성 Connectionless - 서버와 클라이언트가 연결되어 있지 않음 - 서버의 리소스 절약을 위해 - 사실상 하나의 요청에 하나의 응답을 보낸 후 연결을 끊고 있다고 생각하면 된다. 무상태 Stateless - 서버가 클라이언트의 상태를 저장하지 않음 - 이 또한 서버..
-
3-1, 3-2 Bean 수동등록, 같은 타입의 Bean이 여러개 라면?스파르타 강의 정리 2023. 11. 7. 20:08
Bean 수동등록 빈은 애너테이션을 통해 자동으로 등록하는 것이 관리도 편하고 좋다. 그럼 수동등록은 언제해야하는가? 기술적인 문제나 공통 관심사를 사용할때 처리하는 객체들은 수동으로 등록하는게 좋다. 공통 log처리, 같은 비즈니스로직을 지원하기 위한 부가적이고 공통적인 기능들을 기술지원 Bean이라고 부른다. 그리고 이러한 것들을 수동으로 등록하나. 수가 적기 때문에 수동으로 등록하는 것이 부담스럽지 않고, 여기서 문제가 발생했을 때 위치를 찾기도 쉽다. @Test @DisplayName("수동 등록한 passwordEncoder를 주입 받아와 문자열 암호화") void test1() { String password = "Robbie's password"; // 암호화 String encodePass..
-
[1주차] 새로배운 것들 정리 (1)스파르타 강의 정리 2023. 11. 1. 20:17
강의가 리뉴얼 되어 저번 강의는 사실상 0주차가 되었고, 진짜 1주차가 들어왔다. 현재까지 나간 진도에서 새로 배운 내용과 기록할만한 것들을 정리해보았다. Web Server 클라이언트의 요청을 받아 HTML문서 등의 정적 콘텐츠*를 전달해준다. 만약 동적 콘텐츠 요청(request)이 들어오면 웹서버는 이를 WAS로 넘긴다. *정적 콘텐츠 : 이미 완성된 상태의 콘텐츠. ex. HTML문서 등 웹서버의 종류 : 아파치, Nginx 등 WAS (Web Application Server) 웹서버와 같은 HTTP 기반. 웹서버의 기능 대부분을 WAS에서도 사용 가능 -> 사용자에게 동적서비스를 제공하기 위해 웹서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹서버와 데이터베이스 서버, 웹 서버와 파일..