전에 올렸던 로그인 정보 글에서는, 토큰을 먼저 발급한 뒤 해당 토큰으로 서버에 다시 내 정보를 요청하는 방식으로 로그인을 구현했다.이 방식은 더 빠르다는 장점이 있지만, 리다이렉션을 바로 시켜주기 때문에 헤더에 접근할 수 없어 리프레시 토큰으로 유저 정보를 다시 불러오고, 액세스 토큰도 재발급해야 하는 번거로움이 있다.처음 시도했을 땐 나름 만족했지만, 볼수록 뭔가 어색하고 사용자 정보를 요청할 때 어려움이 생겨, 임시 토큰을 먼저 발급하고 이를 이용해 정식 토큰을 재발급받는 방식으로 리팩토링하기로 했다. 현재 코드 현재 코드에서는 엑세스 토큰과 리프레시 토큰을 모두 발급해주고 있다.그러나 앞서 언급했듯이, 바로 리다이렉션이 이루어지기 때문에 헤더에는 접근할 수 없고 쿠키에만 접근할 수 있다.그런 이유..
Jenkins에서 GitHub Actions로 CI/CD 도구를 변경하면서 배포 스크립트는 동일하게 유지되지만, 각 도구에서 스크립트를 실행하는 방식이 달라 배포 스크립트를 다시 작성해야 했다.이를 해결하기 위해 배포 스크립트를 별도로 관리하고, CI/CD 워크플로우에서 해당 스크립트를 실행하도록 변경해보고자 한다. 현재 배포 스크립트는 밑과 같다. script: | docker pull jaew0n/thiscoding:latest docker rm -f thiscoding-container || true docker run -d \ --name thiscoding-container \ ..
소셜 로그인을 구현하면서 고민점이 생겼다.우선 자체 로그인의 경우 컨트롤러에서 토큰과 유저 정보를 반환해줬다.하지만 소셜로그인의 경우 컨트롤러 없이 필터와 리다이렉션 방식으로 로그인이 진행되기 때문에 유저의 정보를 담기가 애매했다.ObjectMapper를 사용하면 가능하지만 이게 좀 애매해다는 생각이 들어서 다른 방식을 찾아 해결한 내용이다. 문제점 앞서 설명했던 것처럼 유저의 정보를 담기가 애매하다.ObjectMapper를 사용하면 담아서 반환할 수 있겠지만 너무 어거지로 반환하는 거라고 생각되어 다른 방법을 찾기로 했다. 첫 번째 시도 처음에는 갑자기 이런 생각이 들었다this.getRedirectStrategy().sendRedirect(request, response, REDIRECT_URI)의 ..
PREVIEW이번 프로젝트에서 배포를 맡게되어 aws 인스턴스 생성 후 CI/CD 도구로 젠킨스를 선택했다이유는 젠킨스가 무료이다보니 정보가 많다고 생각해서 선택을 했는데 하루종일 삽질을 하고 후회를 했고젠킨스에서 만난 문제와 깃허브 액션을 선택한 이유에 대해 기록을 남겨보겠다. AWS 인스턴스 생성하기우선 AWS에서 OS를 선택할 때도 고민이 있었다.Amazon Linux가 AWS에서 최적화되어 있기 때문에, 성능이나 보안 패치가 AWS에서 가장 빠르게 제공된다고 하여 처음에는 Amazon Linux를 선택했다.하지만 인스턴스 생성 후 첫 명령어부터 내가 아는 명령어인 apt가 되지 않아 찾아보니 ubuntu랑 명령어가 달랐다.그래서 생각한 게 배포를 진행하다가 막히면 구글링을 하게 될텐데 정보는 아..
PREVIEW이전 프로젝트에서 Spring Security를 전담하지 않았고, 사용자의 권한이 필요한지 확인하거나 로그인한 사용자의 정보를 가져올 때 @AuthenticationPrincipal 어노테이션을 사용.이 방식은 프로젝트 진행 자체에는 문제가 없었지만, 사용자의 권한만 확인하면 되는 상황에서도 사용자의 정보를 전체적으로 불러오는 문제가 있다.@AuthenticationPrincipal 특성상 로그인하지 않은 사용자에 대해 에러를 반환하지 않고 사용자의 정보를 가져오고, 로그인하지 않았을 경우 null로 주입이 된다.또한 해당 정보를 기반으로 DB에 접근하여 ID가 존재하는지 조회하고, 존재할 경우 권한이 있는지 확인을 하게된다.이렇게되면 로그인하지 않아도 서비스 계층과 데이터베이스까지 접근하고..
이번 프로젝트에서는 패키징과 기본 설정 및 entity 클래스 정의 등을 맡게 되었다. 평소처럼 연관관계가 필요한 컬럼에는 @ManyToOne과 @JoinColumn으로 외래키를 지정해 주었다. 모든 entity를 정의하고 나서 테이블과 컬럼이 잘 생성되는지 테스트겸 ddl = create로 설정해두고 서버를 실행했는데 Caused by: org.hibernate.MappingException: Column 'users_id' is duplicated in mapping for entity 에러가 떳다. 먼저 직역을 해보면 users_id가 중복되어 매핑되었다고 한다. 생각해보면 데이터베이스랑 1:1매핑을 해주기 때문에 당연한 일인데 패키징에 집중하다보니 놓치고 있었다.또한 @JoinColumn의 nam..
-i (--inventory-file) 적용될 호스트들에 대한 파일 정보를 나타낸다 인벤토리 옵션을 사용하지 않을 경우 호스트 파일에 작성해둔 정보 사용를 사용한다(나같은 경우 vi옵션으로 /etc/ansible/hosts 파일 안에 적용될 ip등록 -m (--module-name) 모듈 선택ex) ansible all -m -ping -> 모든 그룹에 모듈 적용 ansible all -m copy -a "src=./test.txt dest=/tmp" -> test.txt 파일을 모든 원격 서버의 /tmp 디렉터리에 복사 -k (--ask-pass) 관리자 암호 설정 사용자 암호를 입력받기 위한 옵션으로 원격 서버에 접속할 때 SSH 비밀번호를 요구하도록 설정한다.SSH 키 대신 비밀번호로 접..
Intro2022년 10월, 나는 첫 코딩을 시작했다.군대 선임의 추천으로 그냥 재미 삼아 약 한 달간 남는 시간에 C언어를 공부했지만, 그것을 직업으로 삼겠다는 생각은 없었다.그렇게 다른 일을 하며 시간을 보내던 중, 단순 반복의 일상이 지겨워 개발자라는 꿈에 진지해졌고, 결국 2023년 3월, 제대로 공부해 보자는 결심을 하게 되었다.개발에 재능이 있는 것인지 아니면 살면서 느껴보지 못한 뿌듯함과 신선한 재미에 중독이 된것인지 진짜 열심히 했다 자부한다. 하지만 그 재미도 3개월밖에 가지 않았고, 딱 3개월 만에 큰 정체기가 다가왔다.Java라는 언어와 Spring, JPA를 3개월간 누구보다 열심히 했다고 자신할 수 있지만, 어떤 것을 해야 할지, 내가 개발자로 취업할 수 있을지에 대한 엄청난 고민..