본문 바로가기

전체 글

(42)
TravisCI & AWS CodeDeploy로 배포 자동화 구축하기 지금 까지는 EC2 서버 재배포를 할 때, gradle를 통해 build한 jar파일을 가지고 AWS EC2 서버에 직접 넣고 구동(배포)을 시켰는데. ​ Travis를 통해 자동 빌드와 CodeDeploy를 사용한다면 배포자동화를 할 수 있게 된다. 지금부터는 자동배포화를 통한 CI/CD를 만들어보고 이를 위해 얼마나 많은 삽질을 했는지 기록하려고 한다 Travis CI란? Travis CI는 Travis에서 만든 CI(Continuous Integeration) 즉 지속적인 통합을 위한 툴이다. Travis CI 웹페이지에서 우리가 사용 중인 GitHub Repository와 연동을 하고 난 뒤에, 해당 레포지토리에 푸쉬를 하게되면 자동 빌드 및 테스트를 진행 해준다. ​ Travis CI와 비슷한 ..
카카오로그인 동작흐름 1. 로그인 인증코드 요청 2. 인증코드 전달 3. 인증코드 전송(AccessToken) 4. 인증코드로 토큰 요청 5. AccessToken발급, 사용자 정보 발급(이메일, 프로필사진, 닉네임 등) 6. 카카오에서 발급받은 토큰으로 서버전용 토큰 생성(JWT Token) 7. 카카오 정보가 담긴 Jwt 토큰을 프론트에 전달 [ 4, 5, 6 ] 인가 토큰으로 카카오 서버에서 사용자 확인 후, DB에 User 저장, 전용 토큰 발행 클라이언트로부터 인가 코드를 받는다. 받은 인가 코드로 카카오 서버에 엑세스 토큰을 요청한다. (이 때 Redirect URI는 프론트와 같아야 한다. 프론트 쪽에 맞추면 된다!) 발급받은 엑세스 토큰으로 카카오 서버에 유저 정보를 받아온다. 필요 시에 회원 가입을 ..
5. [SpringBoot JWT 튜토리얼] 회원가입, 권한검증 # 회원가입 API생성 간단한 유틸리티 메소드를 만들기 위해 SecurityUtil 클래스를 util 패키지에 생성하겠습니다. - SecurityUtil 클래스 public class SecurityUtil { private static final Logger logger = LoggerFactory.getLogger(SecurityUtil.class); private SecurityUtil() { } public static Optional getCurrentUsername() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { l..
4. [SpringBoot JWT 튜토리얼] DTO, Repository, 로그인 외부와의 통신에 사용할 DTO 패키지 및 클래스를 생성 Repository 관련 코드 생성 # DTO 클래스 생성 - LoginDto 클래스 로그인시 사용할 DTO @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class LoginDto { @NotNull @Size(min = 3, max = 50) private String username; @NotNull @Size(min = 3, max = 100) private String password; } Lombok 어노테이션(Get, Set 등)이 추가되었고 @Valid 관련 어노테이션을 추가했습니다. 로그인 할 이용자의 아이디, 비밀번호를 담을 username, passw..
Spring Security 구조(아키텍처) 문득 JWT 강의를 들으면서 코드를 작성하는데 복잡한건 둘째치고 Spring Security만의 커스텀한 클래스가 굉장히 많았고 이 모든 Spring Security클래스들이 유기적으로 정보를 교환하며 관계를 유지하는 것이었다 찾아보니 이는 대부분 Spring Security와 관련되어 있어서 막무가내로 JWT 코드를 보는 것보단 각 클래스들의 이해관계를 알고 코드를 이해하는 것이 낫다고 생각하여 Spring Security에 대해 더 자세히 공부하고자 한다 Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, (웹 컨테이너에서 관리) Interc..
3. [SpringBoot JWT 튜토리얼] JWT 코드, Security 설정 추가 # Jwt 설정추가 - application.yml jwt: header: Authorization #HS512 알고리즘을 사용할 것이기 때문에 512bit, 즉 64byte 이상의 secret key를 사용해야 한다. #echo 'silvernine-tech-spring-boot-jwt-tutorial-secret-silvernine-tech-spring-boot-jwt-tutorial-secret'|base64 secret: c2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK token-validity-in-seconds: ..
Spring Security Spring Security는 Spring에서 사용자 인증/인가를 쉽게 할 수 있도록 제공하는 프레임워크이다. 기본적으로는 세션 기반 인증을 제공한다. Spring Security는 인증과 인가에 대해 서로 분리된 전략을 사용한다. 인증에 대해서는 AuthenticationManager가 가장 책임을 많이 지고 있다. AuthenticationManager의 authenticate() 메서드는 input(ID/PW)이 유효한 principal인지 '인증'하는 역할을 수행한다. 가장 대표적인 AuthenticationManager의 구현체는 ProviderManager이다. Provider Manager는 AuthenticationProvider 인스턴스들의 chain을 대표하고 있다. Authentica..
[SpringBoot JWT 튜토리얼] Security, Data 설정 RestController : 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다. RequestMapping : 요청에 대해 어떤 Controller가 처리할지를 맵핑하기 위한 어노테이션. GetMapping : HTTP Method인 Get인 요청을 받을 수 있는 API를 만들어 준다. ResponseEntity : 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스. ResponseEntity.ok(): 정상적인 요청이면 메소드의 파라미터 내용을 반환한다. # 401 Unauthorized 해결을 위한 Security 설정 EnableWebSecurity : 기본적인 Web보안을 활성화 하겠다는 의미 , 추가적인 보안설정을 위해 WebSecurityConfigurerAdapter..