전체 글
5월 1주차 주간회고
메모 서비스 장애 어떤 일이 있었는가? (Fact) 메모 서비스를 이용하던 고객에게 메모 데이터가 날아갔다는 문의가 접수되었다. 처음에 복구가 가능할 줄 알고 30분 내에 복구가 가능하다고 했지만 복구하지 못했다. 알고보니 로그가 전혀 쌓이지 않아서 복구가 아예 불가능했다. 어떤 감정을 느꼈는가? (Feeling) 고객이 장애가 터졌다고 한 순간 나는 이미 자신감이 없었다. 이전에 개발기간이 촉박하다는 이유로 꼼꼼히 개발해두지 못했고 테스트 코드라는 것 자체도 잘 모르던 때라 나는 개발 자체에 별로 자신감이 없었다. 내가 아는 버그나 에러도 상당히 많아서 더 그런 감정이 들었다. 개발자 대신 전화로 대응을 해주시는 CS 업무자에게 굉장히 미안함을 느꼈다. 처음에 복구가 가능할 줄 알고 복구가 된다고 했다..
톰캣 + JDK 환경에서 로컬 개발환경에 HTTPS 적용하기
JDK 에서 keytool 로 keystore 생성하기 JDK 내부에서 keytool 을 제공한다. JDK 디렉토리로 이동하여 아래 명령어를 입력해 keystore 를 생성하자. keytool -genkey -alias tomcat -keyalg RSA -keystore d:\tomcat.keystoreTomcat 에서 server.xml 파일 수정하기 위는 톰캣 9.xxx 버전 기준이다. 설정을 한 이후 서버 켜고 https://localhost 접속해보면 된다. 레퍼런스 톰캣 SSL HOW-TO 공식문서
Filter, Interceptor, AOP 알아보기
개요 스프링의 HandlerInterceptor, Filter, AOP 는 비슷한 문제를 해결하려 쓰인다. 공통점은 무엇이며 차이점은 무엇일까? Interceptor, Filter, AOP 의 공통 목적을 알아보자 공통 관심사를 처리하는 데에 있다. (Factoring out common repetitive code) Interceptor 에 대한 설명 포스팅 Filter 에 대한 설명 포스팅 Interceptor 와 AOP 의 차이는? 일단 Interceptor 와 AOP 둘 다 스프링에서 자체적으로 기술을 제공하며, 공통 관심사 코드를 뽑아내 적용시키기 위해 나왔다. (물론 AOP 는 스프링이 원조는 아니고, 스프링에서 AOP 를 흉내낸 기술을 제공할 뿐이다.) AOP 는 메서드 동작의 전 후 과정에..
Method Security of 스프링 시큐리티
스프링 시큐리티 (Spring Security) 속 메서드 시큐리티 (Method Security) 란? 애플리케이션 내부의 메서드 혹은 함수에 보안설정을 하는 것이다. 스프링 시큐리티에서 설정한 권한에 맞는 사용자만 해당 메서드를 사용할 수 있게 된다. 스프링 시큐리티 메서드를 구현하는 방법 보통 3가지 방법이 사용된다. 애노테이션 사용하기 @PreAuthorize, @PostAuthorize, @RolesAllowed 와 같은 메서드를 통해 구현할 수 있다. 표현식 사용하기 SpEL (Spring Expression Language) 과 같은 표현식을 사용하여 가능하다. true 인지 false 인지 결과값으로 권한이 평가된다. @PreAuthorize, @PostAuthorize 와 같은 애너테이션..
일론머스크의 설계 5단계 법칙
https://www.youtube.com/watch?v=t705r8ICkRw&t=831s 1. Make the requirements less dumb. Requirements are always dumb and lacking. It is especially dangerous if a smart person made the requirements, as they might not be questioned enough. Everyone is wrong some of the time. All requirements and constraint must be linked to a person who takes responsibility for the requirement (not a department). Y..
스프링의 Interceptor 란 무엇일까? [공식문서 번역]
인터셉터(HandlerInterceptor) 란? 커스터마이즈된 핸들러 실행 체인을 허가하는 워크플로우 인터페이스이다. 애플리케이션은 이미 존재하는 인터셉터 혹은 커스텀 인터셉터를 특정한 그룹에 추가할 수 있다. 공통적인 전처리 행위를 추가하기 위해 각 핸들러 구현을 수정할 필요는 없다. (다만 새롭게 추가하면 된다.) HandlerInterceptor는 적절한 HandlerAdapter가 핸들러를 수행하기 전에 호출된다. 전처리 관점에서 꽤 많은 범위에 사용될 수 있는 매커니즘이다. 이를테면 권한 체크, 언어 설정, 테마 설정 등 공통 핸들러 행위가 있다. 반복되는 핸들러 코드를 뽑아내는 것(factoring out repetitive handler code)이 주 목적이다. 비동기 처리 시나리오에서는..
자바 EE 필터 (Filter) 란?
필터 (Filter) 란? J2EE 표준 스펙 기능이다. 스프링에서 활용할 때 Dispatcher Servlet 으로 요청이 전달되기 전에 요청에 대한 부가 로직을 작성할 수 있게 해준다. 스프링 컨텍스트 밖에 존재하므로, 스프링 범위 밖에서 처리된다. 설명 resource(서블릿 혹은 정적 컨텐츠) 를 요청하는 request 혹은 resource 를 반환하는 response 혹은 둘 다 에 관한 필터링 작업을 수행하는 오브젝트이다. doFilter() 메서드에서 필터링을 수행한다. 모든 필터는 초기화 파라미터를 얻을 수 있는 FilterConfig 오브젝트에 접근 권한을 가지고 있다. 그리고 ServletContext 에 접근할 수 있는 참조를 얻을 수 있다. 이를 이용해 작업을 필터링하는 리소스를 로..
CSRF 공격 정리 (feat. 스프링 시큐리티)
CSRF 란? Cross-Site Request Forgery 라고 불리는 공격 방법이다. 웹사이트 취약점 공격의 일종이다. 특정 웹사이트에 로그인된 상태에서 해커가 원하는 URL 에 접근하게 만든다. 공격 주요 개념 정리 브라우저가 SESSION ID 등의 인증정보를 가지고 있는 것을 활용하는 것이다. 브라우저를 사용하지 않으면, 요청 시마다 인증정보를 수동으로 입력해줘야 하기 때문에 보통은 CSRF 공격에 당하지 않는다. 그러나 이 역시도 애플리케이션에서 인증 상태를 저장하고 있다면, 브라우저와 동일하게 취약하다. 해킹 시나리오 시나리오 1. GET 요청의 경우 피해자는 브라우저를 통해 https://any-bank-site.com/ 웹사이트에 접속하고 로그인한 상태이다. 브라우저에는 로그인을 통해 ..
JWT(Json Web Token) 이란 무엇이며 왜 사용하는가?
JWT (JSON Web Token) 란 무엇인가? open standard 로 RFC 7519 에 표준에 관한 내용이 기재되어 있다. 통신에 JSON 을 이용하여 JSON 객체를 통해 두 당사자 간 정보를 보안이 적용된 안전한 방식으로 전달한다. JWT 는 다른 인증방식과 비교했을 때 컴팩트하며 스스로 정보를 담고 있다. 디지털 서명이 되어있기 때문에 정보에 인증이 되어 있고 믿을 수 있다. 보통 HMAC 알고리즘과 함께 secret 을 이용하여 서명한다. RSA, ECDSA 를 이용한 public/private key 쌍을 이용할 수도 있다. 아래 설명에 claim 이란 용어가 나오는데, 이는 JWT 를 이용해 전송되는 암호화된 정보를 말한다. JSON 오브젝트에서 다루는 프로퍼티의 이름이기도 하다...
인증 (Authentication) 과 인가 (Authorization) 의 차이를 알아보자.
인증(Authentication)과 인가(Authorization) 인증, Authentication 내가 누군지 알아? 여기 내 명함 봐봐! by 40대 꼰대 어떤 개체의 신원을 확인하는 과정이다. 보통 어떤 인증요소를 증거로 자신을 증명한다. 온라인에서는 ID 와 패스워드를 입력하는 행위가 인증이 될 수 있다. 실생활에서는 공공기관에서 신원확인 시 신분증을 보여주는 것을 생각해보면 된다. 여러 개의 절차가 있을 수 있다. 은행의 경우, 본인인증 후 OTP, 보안카드 등의 절차를 추가로 거친다. 인가, Authorization 당신의 신분은 확인 되었지만, 20대만 출입 가능합니다. by 클럽 문지기 어떤 리소스에 접근할 수 있는지, 어떤 동작을 수행할 수 있는지 검증한다. 접근 권한을 얻는 일이다. ..
스프링의 @Value 애노테이션이란?
@Value 개요 스프링에서 제공하는 애노테이션이다. 스프링에서 보통 프로퍼티에 정의된 값을 코드상으로 가져오고 싶을 때 쓴다. 스프링의 BeanPostProcessor 를 통해 이루어진다. 공식문서 번역 애노테이트된 요소에 대한 기본 값 표현을 나타내는 애노테이션이다. 필드 혹은 메서드/생성자 파라미터에 사용된다. 주로 표현식을 이용하거나 프로퍼티를 이용한 의존성 주입에 사용된다. 또한, 스프링 MVC 에서 핸들러 메서드 인자의 동적인 값 분해(resolution)도 지원된다. 일반적인 use case 는 SpEL (Spring Express Language) 표현식 스타일로 #{systemProperties.myProb} 처럼 값을 주입하는 것이다. 혹은 ${my.app.myProp} 스타일 프로퍼티..
DTO (Data Transfer Object) 란?
DTO 패턴이란? DTO Pattern 이란, Data Transfer Object Pattern 를 줄여 말한 것이다. DTO 란? DTO 는 Data Transfer Object 라는 이름처럼 단순히 프로세스간 데이터를 전송하기 위한 오브젝트를 말한다. 메서드 호출을 줄이는 것이 주 목적이다. DTO 와 다른 오브젝트의 차이 흔히 쓰는 Business Object 나 Data Access Object 와 달리 DTO 는 아무런 로직을 갖지 않는다. 그저 데이터를 잠시 담아서 실어나르는 역할만 수행할 뿐이다. JPA 에서 DTO 를 쓰게 되는 이유 마틴 파울러의 글을 인용하자면, 도메인 모델과 프레젠테이션 계층에서의 미스매치가 있을 때는 DTO 가 유용하다고 한다. JPA 에서 사용하는 도메인 모델을 ..