티스토리 뷰
[Auth] 인증과 인가
인증과 인가
- 인증(Authentication): 로그인 기능, 인증된 사용자인지 확인하는 것
- 인가(Authorization): 사용 권한이 있는지 확인하는 것
쿠키, 세션, 토큰
- 쿠키는 클라이언트 측의 저장소이다. 쿠키에 저장이 되면 쿠키는 서버 요청시마다 보내지게 된다. 탈취될 위험이 있어 보안적으로 중요한 내용은 저장하지 않는 편이다.
- 세션을 통한 인증은 서버측에서 세션저장소에 사용자를 등록하고 이것을 sessionId 값으로 관리한다. 클라이언트에 세션아이디를 알려주고 클라이언트는 세션아이디를 서버에 보내 사용자를 확인한다. 서버는 세션아이디를 가지고 세션저장소에서 인증정보를 확인한다. 사용자가 많아진다면 서버의 세션저장소의 부하가 발생한다.
- 서버는 토큰을 로그인한 사용자에 대해 발급한다. 이것은 대칭키 혹은 비대칭키로 암호화 된다. 클라이언트는 토큰을 인증정보가 필요할 때마다 보내고 서버에서는 약속된 방식으로 복호화하여 해당 정보가 있는지 확인하여 인증을 관리한다.
태그
- 인증, 인가, 쿠키, 세션, 토큰
[Spring] MVC Config
ViewControllers
- 정적 페이지를 보여주기 위한 페이지 매핑이 가능
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
}
}
HandlerInterceptor
- 들어오는 요청에 대해 인터셉터를 등록가능
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor());
registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
}
}
HandlerMethodArgumentResolver
- 주어지는 요청(파라미터)에 대해 어떤 방식으로 처리할지 등록할 수 있는 인터페이스
public interface HandlerMethodArgumentResolver {
boolean supportsParameter(MethodParameter parameter);
// 조건 확인
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;
// 조건에 해당(true)하면 수행할 로직
}
태그
- Spring, MVC Config
[Spring] Auth
Session
- HttpSession은 Controller 메서드에 바로 주입(DI)이 가능
- ServletRequestAttribute에서 HttpSession을 직접 가져올 수도 있음
태그
- Spring, HttpSession
[Spring] Configuration
Java-based Container Configuration
@Configuration
어노테이션으로 설정 파일을 관리할 수 있다.- 이 경우에는 메소드에
@Bean
어노테이션으로 빈 등록이 가능 - Spring IoC container 에서 빈 관리가 가능
@Bean
으로 등록된 객체는 서로 주입이 가능
@Configuration
public class AppConfig {
@Bean
public BeanOne beanOne() {
return new BeanOne(beanTwo());
}
@Bean
public BeanTwo beanTwo() {
return new BeanTwo();
}
}
@PropertySource
- PropertySource를 스프링 환경에 쉽게 가져올 수 있게 하는 어노테이션
- 경로를 지정해주면 해당 파일을 환경설정에 적용가능
${...}
를 사용하여 경로를 변수처럼 설정 가능
@Value
- 외부의 properties를 주입이 가능하게 하는 어노테이션
- Config에서
@PropertySource("경로")
에서 해당하는 항목을 가져올 수 있다. @Value("${[catalog.name](http://catalog.name)}")
이면 Config에서 설정한 property 파일의 catalog.name 항목을 가져오게 된다.- property 파일에서 읽을 수 없다면 값 자체로 주입되게 된다.
- 없는 경우를 좀 더 강력하게 관리하고 싶다면 PropertySourcesPlaceholderConfigurer을 Configuration 클래스의 static 메소드로 빈등록을 해주어야 한다.
태그
- Spring, Configuration
[Spring] DispatcherServlet
DispatcherServlet
- 디자인패턴의 FrontController이다.

- 스프링 공식문서
- HttpServlet을 상속하는 실질적인 Servlet이다.
- Servlet이란 자바를 사용하여 웹을 만들기 위해 필요한 기술이다.
- 각 DispatcherServlet은 고유한 WebApplicationContext를 가지며 이것은 root WebApplicationContext에서 정의된 모든 빈을 상속한다.

- WebApplicationContext는 기본 ApplicationContext에서 웹에 필요한 추가적 특징을 가져 확장된 것이다.
- WebApplicationContext의 특별한 빈들: controller, handlerMappings, viewResolvers, localeResolver, themeResolver, multipartFileResolver, handlerExceptionResolvers
태그
- Spring, Servlet, DispatcherServlet
[Security] 대칭키, 비대칭키
대칭키
- 하나의 키로 암호화와 복호화를 진행
- 속도가 빠름
- 키 분배가 필요
비대칭키
- 암호화하는 키와 복호화하는 키가 다름
- public key, private key를 가지는 pair key를 사용하여 암호화와 복호화를 함 (많은 경우 공개치로 암호화하고 개인키로 복호화를 진행)
- 속도가 느림
- 암호화만 하는 곳에서는 공개키로 암호화만 하면 되고, 개인키로 복호화하여 평문을 볼 수 있게 됨
태그
- 대칭키, 비대칭키
[Auth] JWT
JWT
- JSON Web Token
- 벨로퍼트 jwt 블로그

- 헤더
- 토큰 타입
- 해싱 알고리즘
- payload
- 정보
- 정보의 한 조각을 claim이라고 함
- 보통 만료시간과 생성시간을 넣어 내용이 중복되지 않게 만듦
- signature
- 헤더의 값과 payload의 값을 합친뒤 비밀키로 해싱하여 생성
- 헤더와 내용이 같으면 서명이 같아질 수 밖에 없지만, 생성시간과 만료시간 등을 넣어 내용이 일치하지 않게 만듦
태그
- JWT
1-1 학습로그
[Test] Service Test
Service layer Test
- Mock
- Mockito 사용가능
@ExtendWith(MockitoExtension.class)
로 Mockito 환경설정@InjectMocks
로 mock 객체를 주입할 클래스를 설정@Mock
로 mock 으로 사용할 클래스를 설정given(~~~).willReturn()
으로 어떠한 mock 객체 메소드 실행시 리턴값 설정가능
- TestFixture
@SpringBootTest
로 스프링에 등록된 빈을 가져와서 사용 가능@ActiveProfiles("test")
로 테스트 환경설정 가능- TestEnvironment
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
- 기본 테스트 환경은 MOCK 으로 내장톰캣을 구동하지 않고 mocking 한 컨테이너가 뜬다.
- RANDOM_PORT, DEFINED_PORT: 내장톰캣을 구동
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
- 스프링 환경을 새롭게 하는 어노테이션으로 ClassMode, MethodMode 를 설정할 수 있다.
태그
- 서비스레이어 테스트
[Spring] 환경설정
환경설정
-test
등으로 환경 설정 파일을 다르게 줄 수 있음@Profiles("~~")
해당 설정파일에 해당될 경우에만 빈으로 등록됨@ActiveProfiles("test")
테스트할 경우 프로파일을 설정 가능- 특정 설정이 없다면 기본으로는
application.properties
또는application.yml
이 기본 설정 파일으로 잡힘
태그
- 스프링, 환경설정
'우아한테크코스 > 레벨2' 카테고리의 다른 글
[학습로그] 지하철 - fare (0) | 2021.06.03 |
---|---|
우아한테크코스에서 찾은 나만의 효과적인 공부법 (0) | 2021.05.31 |
[학습로그] 지하철 - map (0) | 2021.05.19 |
[수업] E2E 테스트, 인증과 인가 (0) | 2021.05.19 |
[수업 & 과제] 배포인프라 - 2. 운영 (0) | 2021.05.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 개발공부일지
- React
- 인증
- 모의면접준비
- TCP/IP
- 학습로그
- 회고
- 운영체제
- 코드스쿼드
- python
- Spring
- javascript
- 마스터즈코스
- JPA
- 글쓰기미션
- 월간회고
- java
- CS
- 내부코드
- JS
- TIL
- 네트워크
- Transaction
- 카카오
- OS
- 객체지향
- 알고리즘
- DB
- 우아한테크코스
- 우테코수업
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함