본문 바로가기

내일배움캠프/Weekly, I Learned

[WIL] 나의 여덟 번째 회고록

작은 프로젝트를 끝낸 이후에는 항상 정리해야 할 것들이 쏟아져나온다. 

너무 많은 것을 해야하면 가끔 갈피를 못잡을 때가 있는데 

내배캠에서는 과제 제출 이후에 항상 생각해볼 수 있는 질문을 던져주어서 좋다. 

 

던져주신 질문에 응답하면서 이번 주차 때 내가 정확하게 이해하고 있어야하는 부분을 다시한번 되새겨 볼 수 있었다. 

Why: 과제 제출 시에는 아래 질문을 고민해보고 답변을 함께 제출해주세요.

 

Q. Spring Security를 적용했을 때 어떤 점이 도움이 되셨나요?

A. 보안과 관련하여 체계적으로 옵션을 제공해주는 Spring Security 사용함으로서 회원과 관련된 인증/인가에 대한 처리를 비교적 편리하게 구현 할 수 있었습니다.

 

Q. Spring Security를 사용하지 않는다면 어떻게 인증/인가를 효율적으로 처리할 수 있을까요?

A. 웹 컨테이너에 사용자의 정보를 저장하는 Session 또는

웹 브라우저에 사용자의 정보를 저장하는 Cookie를 사용하여 인증/인가 체크하고, page redirect하는 방식으로 처리해야 합니다.

 

Q. IoC / DI 에 대해 간략하게 설명해 주세요.

A. IoC(Inversion of Control)란 “제어의 역전(제어의 흐름을 바꾼다)”이라는 의미로, 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미합니다. Spring의 경우 제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 Spring framework이 작업을 처리하게 됩니다.

DI(Dependency Injection)란 Spring의 의존 관계 주입 기능으로 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식을 말합니다. 의존성 주입을 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아지는 특징이 있습니다.

 

※Spring에서는 객체를 Bean이라고 부르며, 프로젝트가 실행 될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 이때 객체가 생성되는 곳을 Bean컨테이너라고 부릅니다.

 

Q. AOP에 대해 설명해 주세요.

A. AOP(Aspect-Oriented Programming) 관점 지향 프로그래밍이라 지칭하며 핵심적인 관점(개발자가 적용하고자 하는 핵심 비즈니스 로직)과 부가적인 관점(핵심 로직을 수행하기 위해 필요한 DB연결, 로깅, 파일 입출력 Etc..)으로 나눠보고 해당 관점을 기준으로 모듈화 하겠다는 의미를 말합니다.

 

Q. RefreshToken 적용에 대한 장/단점을 작성해 주세요! 적용해 보지 않으셨다면 JWT를 사용하여 인증/인가를 구현 했을 때의 장/단점에 대해 작성해 주세요!

 

※ JWT 인증/인가 장점&단점

장점 : 인증에 필요한 모든 정보를 부호화&암호화를 통해서 토큰 자체에 포함하고 있기 때문에 불필요한 인증 과정이 감소하게 됩니다.

단점 : 토큰은 임의로 삭제하는 것이 불가능 하기 때문에 토큰의 만료 시간을 짧게 넣어주어야 합니다.

 

※ 적용하진 않았지만 Refresh Token 장점&단점

Refresh Token 장점 : Access Token의 유효 기간을 짧고, 자주 재발급 하도록 만들어 보안을 강화하면서도 사용자에게 잦은 로그아웃 경험을 주지 않도록 함.

Refresh Token 단점 : Refresh Token이 Access Token의 유효 기간을 짧게 만들어 줄 수 있다고 하더라도, 탈취된 Access Token이 유효한 그 짧은 시간 동안에 악용될 수 있다는 위험성이 존재.

 

Q. 즉시 로딩 / 지연 로딩에 대해 설명해 주세요!

A. 즉시 로딩(**EAGER)**은 Entity 조회 시 연관 관계에 있는 데이터까지 한번에 조회해오는 기능으로 실제 Entity 객체가 반환 됩니다.

지연 로딩(**LAZY)**은 연관 관계에 있는 Entity를 조회하는 시점에 쿼리가 나가도록 할 수 있다는 장점이 있다.

가급적이면 즉시 로딩보다 지연 로딩을 사용하여 불필요한 쿼리가 발생하지 않도록 하는 것이 효율적이라는 것을 알게 되었습니다.