Recently
- 취준일기 - 올해까지만 개발자 취준해보고그래도 안되면 포기해야지 현재 상황 2개의 면접이 진행중이었다. 그 중 하나는 어제 1차면접에 대한 결과가 오기로 했고, 다른 하나는 1차를 통과하고 2차면접을 보기로 했다.결과는 결과가 오기로한 곳은 하루가 지난 지금까지 소식이 없고, 다른 하나 2차면접 본 곳은 일주일 뒤 기존에 안내받지 못 했던 3차면접 여부를 전달주겠다고 했다. 기대가 컸던만큼 힘든게 사실이다. 취업에 쏟는 에너지를 회사에서 직무를 수행하며 오롯이 쏟고 싶다. 회사에서 몰랐던 개념을 퇴근 후 추가 공부하고, 여러가지 과업을 욕심내서 수행해보고 싶다. 취업은 노력-성취의 상관관계가 여러모로 불친절하다. 마지막 마라톤을 준비하며 6월부터 재수를 준비하는 고3, 공무원시험 3년 준비를 각오하며 첫 해 시험은 몸 풀기로 여기는 사람, 배우지망생이지만 오디션은 .. 2024.09.12
- List객체를 toString()하게 되면 일어나는 일 https://thiswooin.tistory.com/9 TIL 230522 : toString()은 대괄호를 포함한 배열인 척하는 문자열이었다.향상된 for문으로 전체 출력을 해보려 했다. 오류 발생. for-each문에서는 배열이나 Iterable이 필요하다는 뜻 같다. 배열이 맞지않나?라는 생각으로 두가지로 출력해봤다. 배열 모양이 맞는 것 같았thiswooin.tistory.com지극히 자바에 아무것도 모르던 시절, 아무것도 모른채로 toString()에 대해 멋대로 해석한 포스팅을 우연히 다시보게 되고,다시 알게된 지식을 추가한 이 포스팅으로 Override하고자 합니다.Object클래스의 toString() 메소드자바에서는 어떤 클래스를 생성하든지 가장 상단에 Object클래스를 자동으로 상속.. 2024.09.04
트러블슈팅
- [트러블 슈팅] github actions를 이용한 CD구현 도중 오류 (비공개 파일 포함해서 빌드하기, https) 1. 문제 발견 - Gradle Build 실패 yml 파일상 해당 부분을 살펴보면 이게다다. save-state라는 command를 찾을 수 없다. Warning은 경고니까 실제로는 동작에는 문제가 없을수도 있다고 생각했다. Error를 난 부분을 찾아보면 gradlew파일을 실행할 수 없다고 나온다. 해결 - 실행권한 부여 Actions를 위해 생성된 Ubuntu 환경에서 접근을 할 수 없는 걸 수도 있겠다 싶어서 실행 권한을 부여했다. Gradle 실행이 됐다! 2. 보완 - 변수명 재설정 구글링해온 파일을 맞게 수정해야 하는데 이 과정을 놓쳤다. Nov23이 아니라 어제 띄워둔 jar이 계속 실행중이었다. 스크립트 파일 변수명 지정이 제대로 되어있지 않았다. 스크립트대로면 spring-webapp..
- [트러블] 서버 배포하기 - 쿠키가 생성되지 않는 이슈. (Same-site : none 설정) 문제발생 문제분석 1. 백엔드에서 jwt를 발급은 문제 없다. 2. 클라이언트에 Set-Cookie헤더가 잘 담겼다. 3. SameSite이슈로 Set-Cookie가 막혔다. 원인 분석 기존 로컬환경에서 백엔드 서버를 AWS EC2상에 올리자 클라이언트가 이를 Same-site로 인식하지 않게되어 쿠키 생성이 되지 않는다. 왜냐하면 Same-site=Lax로 기본값인데 이는 'safe'한 요청인 Get 메소드, , 의 접근만 허용한다. 그래서 이제 Cross-site로 인식되는 백엔드 서버로 오는 Set-Cookie가 작동하지 않음. 해결방법 응답을 Same-Site : None으로 설정해준다. 그러기 위해선, Secure를 설정해줘야한다. 그러기 위해선, SSL 인증서를 발급받아야 한다. 그러기 위해선..
리팩토링
- TIL 230905 : Redis 3 - [Refactor] 기존 인증번호 DB를 Redis로 옮기기. Redis를 활용해 RefreshToken을 구현해봤다. 엄밀히, 따지면 Redis없이도 가능했었는데 사용한 이유가 뭘까? 데이터를 쓰는 기간이 만료기간이 없고 유실의 리스크가 크지않고, 빠르게 처리하기 위함이었다. 이번에는 기존에 회원가입 이메일 인증번호를 MySQL DB에 저장해둔 것을 Redis로 옮겨보려 한다. 이 또한 5분이라는 만료시간이 있고 이후에는 바로 삭제해주는 것이 좋기에 활용하기 적절하다고 판단했다. 이메일 인증번호 기존코드 Controller @PostMapping("/users/mail-confirm") ResponseEntity mailConfirm(...) throws Exception { userService.sendMailAndCreateVerificationCode(req..
- TIL 230808 : 코드 디테일 조금씩 살려보기 (Transactional, NoArgsConstructor(AccessLevel = PROTECTED)) 오늘은 팀과제를 하며 기본 틀이 되는 코드를 짜며 오갔던 내용 중 이유가 궁금한 것들을 두가지 정리해보았다. @Transactional (readOnly = true) DB에서 불러온 객체를 수정 하면 더티체킹으로 자동으로 수정사항을 반영해줄 수 있다. 물론, 트랜잭션을 열어줘야한다. 그정도로 알고 있었고, 추가적으로 조회시에도 (readOnly = true)를 넣어줘서 해도 좋다고 들었다. 근데 오늘 팀원이 상세하게 이유를 덧붙여서 수정 뿐만 아니라, 생성, 삭제시에도 @Transactional을 달아서 트랜잭션 환경을 열어주는 게 좋다고 했다. 이유는 롤백기능이다. @Transactional의 rollbackFor 기능 트랜잭션을 열어두면 스프링에서는 디폴트값으로 UnCheckedException과 ..
- [리팩토링] 작은 깨달음 : 리팩토링을 하기엔 데이터 수가 너무도 적었다 지난 번 Redis 서버가 미국에 있는 바람에 캐싱을 적용하자 오히려 느려졌다(?) https://thiswooin.tistory.com/134 [리팩토링] 레디스 캐싱을 통한 인증과정 유저정보 조회 속도 개선하기 개발환경 Java 17 / Spring Boot 3.x / Spring Security 3.x / MySQL 8.0 / Redis / JWT 테스트 DB는 로컬환경에서 진행. 현재코드 Spring Security를 통해 인증이 필요한 API의 경우 JWT 토큰을 기반으로 유저정보를 가져온 thiswooin.tistory.com ElastiCache는 추후 적용해보려 하고 우선은 빠르게 EC2 인스턴스에 Redis-server를 설치하여 이를 통해 해결해보려 한다. Redis 설치 on EC2 ..
- [리팩토링] 레디스 캐싱을 통한 인증과정 유저정보 조회 속도 개선하기 개발환경 Java 17 / Spring Boot 3.x / Spring Security 3.x / MySQL 8.0 / Redis / JWT 테스트 DB는 로컬환경에서 진행. 현재코드 Spring Security를 통해 인증이 필요한 API의 경우 JWT 토큰을 기반으로 유저정보를 가져온다. 아래는 인증 구현체에서 유저정보를 가져오는 코드. username을 기반으로 select 쿼리를 보내서 가져온다. //UserDetailsServiceImpl.java @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsernam..