Spring boot

    [스프링 핵심원리 고급편] 빈 후처리기

    보호되어 있는 글입니다.

    [스프링 핵심 원리 고급편] 동적 프록시 기술

    리플랙션: 런타임 시점에 동적으로 클래스 정보를 추출해낼 수 있는 프로그래밍 기법 클래스 타입을 몰라도 메서드와 변수에 접근할수 있게 해주는 자바 API 클래스 로더를 통해 읽어온 정보를 사용 파라미터를 통해 클래스와 메서드 메타정보 획득 가능 메타정보로 호출가능 장점: 동적으로 호출가능, 추상화를 통해 공통화 가능 단점: 런타임에 동작하여 컴파일시점에 오류 잡기 불가, 가급적 쓰지말기 JDK 동적 프록시 프록시 객체를 런타임에 개발자 대신 생성해줌, 동적 프록시에 원하는 로직 저장 가능 * 인터페이스를 기반으로 작동함, 인터페이스는 필수 1. 프록시에 적용할 로직은 InvocationHandler 인터페이스를 구현해서 작성하기 2. 프록시 만들기 (타겟클래스의 클래스로더, 타겟클래스, 프록시 적용할 로..

    [초보개발자를 위한 스프링5 프로그래밍 입문] 스프링 시작하기

    "초보개발자를 위한 스프링5 프로그래밍 입문" 책으로 스프링 스터디를 진행하기로 했다. 이전에 이미 수강한 인프런 김영한님 강의와 상당수 겹치는 부분이 있어, 주된 목차를 따라가며 정리하기보단 가볍게 훑으며 몰랐던 것만 정리해두려고 한다. Chapter 1. 들어가며 메이븐/그래들, jdk, 이클립스 설치 및 환경변수 설정 메이븐/그래들은 빌드 도구이다. Chapter 2. 스프링 시작하기 스프링 부트를 사용하는 대신 프로젝트를 직접 설정한다. 다음과 같은 폴더 구조는 메이븐/그래들의 형식이다. (여태 스프링 사용하면서 이 파일구조가 빌드 도구때문인줄은 몰랐다.) - 그룹ID - 아티팩트ID - src - main - java - resources - webapp - WEB-INF 폴더들을 수동으로 만들..

    OSIV (Open Session In View) 란?

    면접 때 질문 받은 키워드인데 처음 들어보는 개념이어서 공부하고 정리해보았다. OSIV - 세션의 시작은 서블릿이 시작되는 시점 부터 (세션은 영속성 컨텍스트를 포함) - 트랜잭션의 시작은 서비스 레이어부터, JDBC 커넥션도 이 시점부터. - 트랜잭션의 종료는 서비스 계층에서 종료, JDBC 커넥션도 이 시점 부터 종료. - 세션은 컨트롤러 영역까지 끌고 가기 때문에 영속성이 보장되어 select가 가능해지고 lazy-loading이 가능해진다. OSIV는 이렇게 presentation layer까지 세션을 유지하는 것을 뜻한다. View에서 프록시 객체에 대한 정보가 필요할 때 JDBC 커넥션을 열어서 받아올 수 있다. 다만 트랜잭션은 이미 종료된 상태이기 때문에 정보 변경은 불가능하다. 설정방법 y..

    ec2 인스턴스 ssh로 접근하기

    테섭에 고쳐야 할 게 생겼다. 처음으로 ec2에 접근해보는데 과정을 기록해두려한다. 현재 실행중인 인스턴스는 이거다 인스턴스를 선택하고 연결한다. ssh로 연결할거기때문에 ssh 클라이언트 탭을 누른다. 만들어둔 .pem 파일의 속성을 열어 읽기전용으로 변경해준다. 나는 윈도우니까 git bash를 사용해준다. ssh -i "이름.pem" ubuntu@주소이름.amazonaws.com 안내대로 이 명령어를 입력한다. 접속 끝!

    DB call을 줄여보자

    지금 quiz api 하나를 호출하면 많은 쿼리가 호출된다. 거기다가 bookmark여부를 같이 달라는 api 수정 요청이 들어왔다. bookmark table까지 참고하게되면 여기서 더 많은 쿼리가 호출될 것이다. 이대로는 안되겠다고 생각해서 개선할 수 있는 부분을 정리해보았다. 1. JWT filter JWT token에 대해 알아보니 세션 대신 토큰을 사용하면 stateless하게 검증할 수 있다고 이해했다. 즉 DB에 접근할 필요 없이 검증할 수 있어야 하는데, 우리 JWT filter에서는 토큰에서 유저 정보를 뽑아 우리 db에 있는 유저인지 확인하고 role정보를 가져와서 세션에 저장하는 과정이 포함되어있었다. 모든 api는 filter를 거치기 때문에 여기서 db접근을 하면 모든 api마다 ..

    [소셜로그인] 2탄 Spring Security, JWT, OAuth 적용하기

    서론 지난 글에서 Spring Security, JWT, OAuth 개념을 정리했다. https://cme10575.tistory.com/165 [소셜로그인] 1탄 Spring Security, JWT, OAuth 개념 출시 전인 프로젝트에 참여하게 되었다. 전에 백엔드 개발자로 계시던 분이 나가시게 되면서 내가 들어왔다. 소셜로그인 기능이 구현된 상태였는데, 본인 계정으로 깃헙과 구글의 Oauth 프로젝트 cme10575.tistory.com 이번 글에서는 Spring Security, JWT, OAuth를 적용시키는 방법을 정리할 것이다. 앞서 글에서 정리했듯이 Spring Security는 여러개의 Filter 를 통해 '인증'과 '권한'을 처리한다. Spring Security는 총 33개의 필터..

    [소셜로그인] 1탄 Spring Security, JWT, OAuth 개념

    출시 전인 프로젝트에 참여하게 되었다. 전에 백엔드 개발자로 계시던 분이 나가시게 되면서 내가 들어왔다. 소셜로그인 기능이 구현된 상태였는데, 본인 계정으로 깃헙과 구글의 Oauth 프로젝트를 만들어 놓으셔서 나가시면서 client id를 삭제하셨다. 그래서 내가 새롭게 프로젝트를 만들어서 id 와 key를 업데이트했는데, 제대로 작동하지 않았다. 이 문제도 해결해야 하고 admin 기능도 만들어야 해서 소셜로그인 부분을 공부해봤다. 로그인 플로우에서 쓰이는 것들은 Spring Security, JWT, Oauth2 이다. 먼저 이번 글에서는 개념에 관해 정리하겠다. [Spring Security] Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 ..