MySQL Replication 설정을 통한 master-slave 구조의 셋팅은 저번 포스팅에서 전부 완료되었습니다.추가적으로 애플리케이션 내부에서 어떤 DB로 요청을 보낼 지 결정하기 위해서는 Spring 설정이 필수적입니다.따라서 이번 포스팅은 Spring + J
지금껏 프로젝트를 진행하면서 대부분 RDS 서비스를 이용해 한개의 데이터베이스만 사용해왔습니다.이번 프로젝트의 중점 목표 중 하나인 고가용성의 설계와 확장성 있는 구조를 가진 서버를 구축하는 것에 초점을 두고 Master - Slave 구조의 DB 이중화 작업을 하게
AccessToken 인증 방식의 가장 큰 문제점은 토큰을 탈취당하면 악의적인 사용자로부터 보호받을 방법이 없다는 것입니다. 이미 발급된 토큰은 만료가 불가능하고, 만료될때까지 마음껏 악용될 수 있습니다.그렇다면 그냥 JWT를 쓰지 않고 세션을 사용하면 되지 않을까 싶
JWT 토큰의 가장 큰 취약점은 Access Token 탈취시 유효기간이 만료하기 전에 만료시킬 방법이 없고 마음껏 악용할 수 있다는 것이었습니다.이 문제를 보완하기 위해, Access Token의 생명주기를 짧게 가져가고 Refresh Token을 서버에서 관리하면서
OAuth 2.0 로그인 기능을 구현하기 위해서는 꽤나 많은 작업이 필요합니다.이번 파트에서는 네이버, 카카오, 구글에 앱을 등록하고 OAuth 2.0을 본격적으로 사용할 수 있는 준비를 해보겠습니다.구글 Cloud로 이동합니다.프로젝트 선택을 클릭하고, 새 프로젝트
두번의 프로젝트를 통해 회원 기능을 구현할때는 사용자가 로그인을 성공하면 사용자 정보를 객체에 담아 Session 저장소에 보관하는 방식으로 처리해왔습니다.Session에 회원객체를 저장하면, 어디서든 Session 저장소에 접근만 하면 회원의 정보를 쉽게 꺼내쓸 수
2번의 프로젝트를 진행하면서 로그인 & 회원가입 기능을 소셜로그인을 이용해 구현해본적이 있었습니다.최근에는 OAuth 2.0과 Spring Security를 이용한 인증 & 인가를 구현한 애플리케이션이 굉장히 많아보였습니다.프로젝트를 2번 진행하는 동안 Spring S
3개의 포스팅을 걸쳐 무중단 배포를 위한 인프라를 구축 하였습니다.지금 구축한 배포 시스템에는 무중단 배포를 위한 가장 중요한 한가지 조건이 있습니다.배포 스크립트를 보면 blue/green중에 한개를 실행하게 되면, 실행중인 애플리케이션은 반드시 down 되도록 스크
👑 Nginx 설정과 배포 자동화 테스트
지난 게시글에서 IAM 설정까지 모두 완료 했습니다. 이제 CodeDeploy 설정부터 다시 시작해보겠습니다!CodeDeploy 서비스에서 EC2 연동을 위한 IAM 역할을 생성합니다.아래 사진과 같이 셋팅하고 다음을 클릭합니다.권한 정책에서 권한을 추가해줍니다(
두 번의 프로젝트를 진행하는 동안, 항상 수동으로 배포를 하곤 했습니다.AWS에 EC2 인스턴스를 만들고, 인스턴스에 접근해서 프로젝트를 빌드한 war 파일을 옮겨서 실행시키는 방법으로 배포를 했습니다.그 당시에는 SSR 방식으로 로컬에서 프론트까지 전부 개발하고 있었
순수 JPA를 거쳐서 Spring Data JPA까지 순조롭게 학습을 마쳐가고 있는 와중에 대부분 JPA를 사용하는 분들이라면 떼놓을 수 없는 관계인 QueryDSL 학습을 시작하게 되었습니다.Spring Data JPA를 사용할때도 꽤나 편리한 기능이 많았고 그런 기
회원(User) 엔티티가 있고, 한명의 회원을 조회한다고 한다면 기존에는 엔티티 하나를 조회해서, 엔티티를 DTO로 변환하여 반환하는 식으로 코드를 작성해왔습니다.PostMan을 이용해서 테스트를 해보겠습니다.DbInit 클래스를 이용해 초기 데이터를 셋팅해주었습니다.
저번 게시글까지는 Spring Boot + JPA(Spring Data JPA) 기반으로 포스팅을 해왔습니다.이미 두달전부터 코틀린을 공부하고 문법을 학습 중이였고, 최근에 코프링과 Querydsl을 공부중이였습니다.코딩은 직접하면서 느끼는 부분이 많기 때문에 이왕 S
그동안 Mybatis를 이용한 두번의 프로젝트를 통해서 두가지의 불만이 있었습니다.첫 번째는 왜 단순 insert 쿼리와 select 쿼리까지 개발자가 일일히 반복 노동을 해야 하는가?두 번째는 페이징을 할때마다 매번 써야하는 limit과 offset 구문이였습니다.단
👻 @Conditional은 무엇일까? Spring을 사용하는 환경에서 @Configuration을 붙인 설정 클래스에서 Bean들을 등록하도록 클래스를 작성하면 항상 @Bean을 붙여서 명시한 Bean들은 Spring에 의해서 등록되게 됩니다. 매번 사용하는 B
Spring Legacy Project를 사용하지 않고, Spring Boot를 사용하면서 XML 기반의 설정을 사용하기 보다는 대부분 애너테이션 기반의 설정을 이용해 대부분의 설정 작업을 해왔습니다.@Configuration은 @Bean 애너테이션을 붙인 메서드들을
JPA 강의를 듣거나 책을 듣다보면 자주 등장하는 단골 주제가 있습니다.N + 1 문제를 어떻게 해결할 것인지에 대한 방법들이 많이 등장합니다. 면접에서도 단골 문제로 등장할만큼 JPA를 사용한다면 반드시 알아야 할 개념인 것 같습니다.N + 1 문제, 이렇게만 들으면
한동안 JPA와 개인프로젝트 병행으로 오브젝트 책을 보지 못했습니다.책은 읽을때 한번에 완독을 해야 기억에도 오래남고, 찾아 볼때도 어떤 부분을 봐야하는지 알 수 있는데 꽤나 오랫동안 오브젝트를 놓고 보지 않았더니 많은 부분들이 기억속에서 삭제 되었습니다.그래서 다시
🎈 갑자기 엑셀 업로드와 다운로드 로직을 만들어야 한다..? 항상 같은 일상이 반복되다 보면 새롭고 재밌는 일이 있으면 좋겠다는 바램을 가질때가 있습니다. 아.. 요즘 하는 일이 비슷하네.. 뭐하나 새로 만들어보면 좋겠다. 그런일 어디 없나? 하는 제 마음을 아신것같