온보딩이란? 출처: team.modusign 온보딩이란 원래 '배에 탄다' 또는 '승선한다'는 의미의 단어에서 유래했다. 이 개념은 조직 내에서 신규 구성원이 조직의 문화, 직무에 잘 적응할 수 있도록 돕는 과정을 의미한다. 즉, 신규 입사자가 회사에 수월하게 적응할 수 있도록 업무에 필요한 지식, 기술, 문화 등을 안내하고 교육하는 과정을 말한다. 온보딩 도입 첫 번째 온보딩 우리 회사에는 처음에 온보딩 과정이 마련되어 있지 않았다. 시간이 지나고 경험이 쌓이면서, 새로운 구성원들이 들어오는 것을 보고 이들이 보다 원활하게 적응할 수 있도록 도울 필요성을 느꼈다. 나의 아쉬웠던 경험을 바탕으로, 새롭게 온보딩 프로세스를 도입하려고 고안했다. 처음에는 노션을 사용하여 사진과 같이 우리 서비스를 설명하고,..
이해를 돕기 위한 기존 시스템 간단 설명 기존시스템은 EC2에 MongoDB를 구축해서 사용하고 있었고, 데이터 보호와 복구를 위해, crontab을 사용해서 일정 시간마다 MongoDump를 하고 S3로 옮기고 삭제하는 방식을 사용하고 있었던 것 같다. 문제 상황 분석 및 예상 갑작스럽게 MongoDB 서비스가 다운되는 상황이 생겼다. 확인해 보니 EC2 인스턴스 용량 부족으로 다운이 됐었다. 그래서 EC2 인스턴스 용량을 확인해 보니 20GB였고 데이터를 확인해 보면 아직 충분히 여유가 있는 용량이었다. 명령어를 통해 어떤 폴더의 용량이 가장 큰지 파보니 백업 dump가 매우 크게 잡아먹고 있었다. 백업 스크립트들을 보며 분석해 봤는데 백업파일이 1시간마다 실행되고 S3로 옮기고 삭제하는 스크립트는 ..
SecurityContextHolder에서 유저 정보를 가져오며 테스트 중 겪었던 작은 문제와 그에 대한 대처를 이야기하고자 한다. 같은 경험을 했거나 더 좋은 경험이 있다면 댓글로 ✍️ 🙏 SecurityContextHolder에서 유저 정보를 효율적으로 가져오기 첫 번째 문제 상황 진행하던 프로젝트에서 Spring Security의 `SecurityContextHolder`를 사용해 로그인한 유저의 정보를 가져와야 하는 상황이 생겼다. 흔히 많은 예제에서 username 필드로 email을 사용해서 우선 처음에는 email로 세팅했다. 여기서 작은 문제가 생겼다. user와 연결된 다른 많은 테이블들이 있었고, 이 테이블들과 join을 할 때마다 email로 먼저 유저 정보를 조회하고, 그 후 use..
Java + SpringBoot를 사용하는 프로젝트를 한다면 롬복을 한 번쯤은 써봤을 것이고, 없으면 안 된다는 사람도 있을 것이다. 근데 "롬복을 제대로 알고 있나?"라는 의문이 들어서 정리해보려고 한다. Lombok 🌶️ 공식문서를 보면 롬복은 코드 작성을 편하고 훨씬 간결하게 도와주는 도구라고 생각하면 된다. https://projectlombok.org/ Project Lombok(롬복)은 자바 라이브러리로, 자동으로 에디터와 빌드 도구에 연결됩니다. 이 라이브러리를 사용하면 자바 코드 작성을 훨씬 간결하게 할 수 있습니다. 롬복을 사용하면 귀찮은 getter, setter, equals, hashCode와 같은 메서드를 수동으로 작성할 필요가 없습니다. 단순한 어노테이션 하나로 클래스에 완전한 ..
S3 버킷 만들기 CloudFront 배포 생성 & Route 53 이미지를 보면 원본 경로가 있는데 s3 내부에 원하는 경로를 입력하면 된다. 예를 들어 s3의 image 폴더에 test.png를 접근하고 싶다면 원본경로에 `/image/*`을 적고 기본루트에 /test.png 입력하면 image 폴더가 루트 경로가 돼서 test.png로 접근 가능하다. 아무것도 입력하지 않으면 버킷의 root로 바로 접근할 수 있어서 아무것도 적지 않았다. 더보기 이렇게 웹 사이트 엔드포인트를 사용하라고 할 수도 있는 데 사용을 누르면 이렇게 위에 도메인과 다르게 website가 붙은 도메인이 나오게 된다. 이걸 사용하면 원본 액세스 설정이 없어져서 저걸 사용하며 안 된다. 굳이 보안이 필요하지 않다면 비활성화해도 ..
CDN이란? - https://aws.amazon.com/ko/what-is/cdn/ AWS에서 설명하고 있는 CDN과 다르게 기존의 시스템은 CDN까지는 아니고 이미지서버(?) 정도 될 것 같다. 하지만 CDN으로 부르겠다 😅 기존 시스템과 요구사항 우선 CDN 구축 필수 요구사항은 HTTPS와 확장가능성이 필요했다. 그리고 필수는 아니었지만 초반에는 무료로 운영하면 좋겠다는 요구사항도 있었다. 기존의 CDN은 express의 static 미들웨어를 사용하여 아주 간단하게 정적 파일을 제공하고 있었다. 그리고 무료로 HTTPS 서버를 구축하기 위해 내도메인.한국과 ZeroSSL을 이용했다. const https = require('https'); const fs = require('fs'); const..
먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 EC2 pem키를 ppk파일로 변환 [p.252] puttygen을 사용해서 pem키를 ppk파일로 변환할 수 있고, 과거에는 그렇게 했다. 이제는 그럴 필요 없이 아래의 그림과 같이 ppk를 받으면 된다! 당연히 이렇게 했겠지만 처음 접한 사람은 무심코 놓칠 수도 있기에 정리했다. CodeDeploy 에이전트 설치 실패 ..
먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 spring-security-config : 6.1.2 우선 책에서는 @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final CustomOAuth2UserS..
결론으로 바로 가기 먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 문제 상황 스프링 부트에서 공식 지원하는 템플릿 엔진 Mustache를 사용하던 중 이렇게 한글이 깨지는 현상이 발생했다. 결론 스프링 부트 2.7.X 버전 이상부터는 한글 깨짐이 발생한다. 스프링 부트 버전을 2.7.0 이하로 낮추거나 버전을 낮추지 못한다면 //aplication.properties ..
결론으로 바로 가기 먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 (Gradle은 신경 못 썼지만 이거 때문에 문제가 있었다..) 문제 상황 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.projectlombok:lombok' imple..