이번 포스팅에서는 Nginx 웹 서버를 통해서 로드밸런싱 역할을 하는 Reverse Proxy를 구축하는 방법을 정리한다. # 사전 용어 정리 웹 서버 - 정적 컨텐츠를 제공하는 서버 (주로 정적 컨텐츠 캐싱이나 리버스 프록시 용도로 사용) WAS - 동적 로직을 수행하는 서버 (디비와 연결) 리버스 프록시 (Reverse Proxy) - 먼저 트래픽을 받고 뒷단(Reverse)에 있는 WAS에게 전달해 주는 웹 서버 *스프링 부트의 Dispatcher Servlet을 생각하면 편하다 로드밸런싱 - 트래픽을 분산 처리하는 이정표 같은 역할 # 시나리오 Nginx가 로드밸런서 역할을 해서 트래픽을 라운드로빈 방식으로 두 개의 EC2에 각각 분산 처리하도록 구성할 것이다. 향후 두 인스턴스는 부하 분산 처리..
소프트 딜리트를 구현하다 보면 테이블의 칼럼을 하나 추가해서 상태값으로 삭제인지, 아닌지를 판별한다. 예를 들어서 Archive라는 테이블이 삭제되면 visibility라는 칼럼의 true / false 상태로 이를 구분한다. 이후 전체조회를 할 때 삭제된 레코드들은 SELECT 하면 안 되므로, visibility=true 조건을 WHERE 조건에 걸어줘야 할 것이다. 도메인이 많아질수록, 소프트 딜리트를 구현한 테이블에 전체 조회 로직이 많을 수록 쿼리는 점점 길어질 것이다. # 해결방법 엔티티 클래스에 @Where 어노테이션을 달아주면, 조회를 할 때 해당 조건을 타고 가져오게 된다. clause 부분에 WHERE 조건을 탈 조건문을 문자열로 넣어주면된다. 나는 Visibility라는 클래스로 변수..
프로젝트를 진행하다 보면 Java 버전을 변경해야 하는 경우가 종종 생긴다. 우선 많이 사용하는 8(1.8과 동일), 11, 17 버전을 왔다 갔다 하는 방법에 대해 설명한다. # 버전별 다운로드 오라클 공식 홈페이지에서 다운 받을 수 있는데, 로그인을 해야 한다. Java 8(1.8) https://www.oracle.com/java/technologies/downloads/#java8-windows Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts. www.oracle.com Java 1..
로컬과 EC2 환경을 분리하는 작업을 정리한다. AWS CloudWatch 로깅을 해놨는데, 개발환경에서 부팅할 때도 모두 로그가 남아져서 이를 분리하고자 했다. resource 폴더 자체를 나눌 수도 있지만, 여기서는 application.yml 파일을 나누는 것을 다룬다. (firebase 디렉토리와 apple_sign_key는 무시하자. 여기서 필요 없다.) 이런 식으로 하나의 resources 폴더 안에 yml파일 이름으로 분리할 것이다. # application.yml spring: profiles: default: secret-local jpa: properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect 먼저 기본 설정파일을..
# 서류합격 토스는 갈 수 있으면 꼭 가고 싶은 회사여서 여럿 서버 개발자 포지션을 지원했는데 토스뱅크에서 연락이 왔다!! 기대 안 하고 있었는데 연락이 와서 순간 당황했다. 인사담당자분이 유선으로 직무면접 일정을 조율해 주셨고 서합 통보기준 1주일 후에 화상면접 일정을 잡았다. 인사담당자분이 굉장히 친절하셔서 여기가 진짜 업계 탑티어 회사구나를 느꼈다. # 직무면접 직무면접은 개발자 분 3명과 화상으로 진행했다. 한 시간에서 한 시간 반 정도 진행한다고 하셨었는데, 나는 한 시간 조금 넘게 진행했다. 먼저 기술질문을 하고 마지막엔 내가 회사에 대해 궁금한 것들을 물어보는 시간을 가졌다. 전반적으로 매우 부드러운 분위기에 실속 있는 질문들을 하시면서 최대한 긴장 안 하게끔 유도해 주셨다. 그래서 처음에는..
간혹 내 프로젝트의 전체 코드 라인 수가 궁금할 때가 있을 것이다. (나만 그런가...?) 그럴땐 Git 명령어를 통해서 확인할 수 있다. (아쉽게도 Github에서는 기능을 제공하지 않는 것 같다.) 다음 StackOverflow 글을 참고했다. https://stackoverflow.com/questions/4822471/count-number-of-lines-in-a-git-repository Count number of lines in a git repository How would I count the total number of lines present in all the files in a git repository? git ls-files gives me a list of files tra..
필자는 Spring Security를 활용하여 로그인을 구현할 때, 현재 JWT 토큰값으로 로그인한 사용자를 바로 불러올 수 있는 편의메소드를 제작하여 사용한다. public class SecurityUtils { public static String getCurrentAccountEmail() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null || authentication.getName() == null) { throw new AccountException(AccountCode.NOT_FOUND_ACCOUNT); } return authenti..
다사다난했던 DDD 8기 활동이 2/11 최종발표를 기점으로 공식적인 활동이 종료되었다! 4개월 동안 정말 Web3팀 정말 고생 많았고 다양한 경험, 다채로운 사람들과 네트워킹 할 수 있어서 너무나도 의미 있는 4개월이었던 것 같다. 첫 대외활동이었는데 나름 아쉬웠던 부분들도 있었지만...!! 잘 마무리할 수 있어서 만족스럽다. # 성과 방탈출 카페, 테마 종합 정보 제공 서비스 'EXIT' 제작 FE https://github.com/DDD-Community/jsonWeb-front GitHub - DDD-Community/jsonWeb-front: DDD 8기 웹 3팀 : EXIT🔐 - 방 탈출 카페정보 & 추천 서비스 DDD 8기 웹 3팀 : EXIT🔐 - 방 탈출 카페정보 & 추천 서비스. Con..