분류 전체보기
Spring Logging (1) : HTTP Request/Response 로그 남기기
Spring Logging (1) : HTTP Request/Response 로그 남기기
2021.10.29서비스를 운영하면서 서버가 받는 HTTP 요청과 서버가 제공하는 응답을 로그로 남긴다면, 추후 무슨 일이 생겼을 때 추적이 용이하다. 이번 포스팅은 Spring Boot을 사용하여 로그 남기기 시리즈 중 첫번째 포스팅이다 🥳 본 포스팅에서는 Spring Boot을 사용하여 HTTP 요청과 응답에 대한 로그를 남기고, 이 로그를 추적하기 용이하게 HTTP 요청당 Trace Id를 부여하겠다. 다음 포스팅에서 실행중인 프로파일(dev, prod 등)에 따라 콘솔에 로그를 출력할지, 혹은 AWS CloudWatch에 로그를 전송할지 설정하는 예제까지 다룬다. 작업 결과 미리보기 맨 아래 두 줄의 로그를 잘 봐보자. HTTP Request와 Response에 대한 로그를 출력하고 있다. 그리고 하나의 HTTP ..
Filter, Interceptor, AOP의 간단 용도
Filter, Interceptor, AOP의 간단 용도
2021.10.23Filter Spring이 아닌 톰캣과 같은 웹 컨테이너의 영역 ex) HTTP 또한 Spring이 아닌 WAS에서 처리하는 것이니까 HTTP Request/Response에 대한 로깅은 Filter에서 처리하는 게 적절 Interceptor Spring이 제공하는 레이어로, DistpatcherServlet 이 호출되기 전, 호출된 후에 끼어들기 때문에 Spring Context 내부에서 요청과 응답을 가공할 수 있음 ex) Spring Security, 인증 처리를 하는 것이 적절 AOP Spring 내에서 흩뿌려진 반복적인 코드를 한 곳에 모아서 응집력있게 관리할 수 있어 유지보수에 효울적이고, 좀 더 비즈니스 로직에 집중할 수 있으며, 변화 수용에 용이함 ex) 인가, 로깅 등 비즈니스 로직 전/..
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.10.16CAP Theorem, 오해와 진실요약 각 서버에서 관리중이던 로그인 세션을 별도의 공유 저장소(Redis)로 이관했다. 다양한 신규 서비스가 생기면서 로그인 세션에 접근해야하는 일이 발생하게 되면서 아키텍처를 변경해야할 필요가 생기게 되었다. 기존의 상태 의존적인 아키텍처를 통해 어떤 제약이 있었는 지 살펴보고, 이를 개선한 무상태 아키텍처에 대해 짧게 설명한다. 그리고 세션 공유 저장소로 Redis를 선택하게 되면서 어떤 기준으로 클러스터를 구성하였는지 정리해본다. 아키텍처 개선 뒤 얻게 된 이점에 대해서도 짧게 정리한다. 👉 기존의 상태 의존적인 아키텍처 기존에는 사용자들에 대한 로그인 세션 정보가 각 웹 서버 내부에서 파일로 관리 중이었다. (별도 인증 서버 없음) 특정 사용자의 로그인 세션 정..
[세미나 리뷰] 탈잉 월간 코드리뷰 ver_0.1 : 커리어 성장 CODE
[세미나 리뷰] 탈잉 월간 코드리뷰 ver_0.1 : 커리어 성장 CODE
2021.10.11스스로 성장할 수 있는 방법이 궁금한 개발자들에게 추천하는 궁극의 세미나 다 듣고 나니 드는 생각, 아... 딱 일 년이라도 전에 들었으면 좋았을걸. 사실 지금 들어도 너무 좋고 감사하다. 왜냐하면 내가 아직까지도 고민하고 있는 커리어와 성장이라는 주제에 대해 먼저 고민했던 분들이 자신의 경험담을 풀어주었기 때문이다. (그리고 몇 년전에 들었으면 사실 이해 못했을 거다. 그때는 이 내용을 받아들일 밑바탕이 없었어서) 나는 스스로에게 던질 질문을 찾는 데에도 n 년의 고민과 마음 고생을 동반했었다. 그때 당시 개발자 커뮤니티가 그렇게 활발하지는 않았었고, 있었다고 하더라도 내가 그런 세미나나 커뮤니티를 찾아다니지 않았기 때문에 혼자 구글링해가면서 누군가의 블로그나 영상을 보고 정보를 쌓아가는 게 고작이었다..
Spring Boot 배포 자동화(CI/CD) : Github Actions와 AWS CodeDeploy
Spring Boot 배포 자동화(CI/CD) : Github Actions와 AWS CodeDeploy
2021.10.10먼저 AWS Cloud 환경에서 필요한 선행 작업을 안내하고, Github Actions와 AWS CodeDeploy에서 사용할 스크립트에 대해 설명하겠다. 👉 AWS 사전 구성하기 1. IAM 사용자 생성 디플로이용 계정을 만들어 아래 정책을 연결 AmazonS3FullAccess AWSCodeDeployFullAccess 이 사용자는 Github Actions에서 S3, CodeDeploy에 접근하기 위해 사용하는 IAM 계정이다. 액세스키와 시크릿키를 잘 저장해두자. Github Secret에 저장할거다. 참고 : 아래 EC2, CodeDeploy에서 생성하는 IAM 서비스역할과 사용자는 다르다. Github Secret에 등록 DEV_AWS_ACCESS_KEY_DEPLOY : 액세스키 등록 DEV..
2021.08.31 Github Actions으로 배포 자동화하기
2021.08.31 Github Actions으로 배포 자동화하기
2021.10.10요즘 CI/CD 툴로 Github Actions가 핫한 것 같다. 신규 서비스의 CI/CD 구성을 위해 팀 내에 의견을 여쭤봤는데 Github Actions를 써보라고 제안을 받았다. 현재 서비스들은 젠킨스를 사용해서 자동배포를 하고 있었는데, 팀 내에서 인프라 작업은 최대한 AWS를 활용하는 쪽으로 가고 있는 추세라 확인차 여쭤봤다. 개인적으로 빌드 혹은 배포를 위해 Github Actions를 쓰는 게 무료기도 하고, 코드와 함께 빌드/배포 상태를 GUI로 확인할 수 있다는 점이 좋았다. 그래서 스프링부트를 배포하기 위해 Github Actions와 AWS CodeDeploy를 사용해 배포 자동화를 구성하게 됐다. CI/CD에서 단계를 구분하기 위해 지속적인 통합, 지속적인 제공, 지속적인 배포 등으..
2021.08.15 AWS CloudWatch로 로그 취합
2021.08.15 AWS CloudWatch로 로그 취합
2021.10.10AWS CloudWatch로 로그를 취합하면 AWS에서 제공해주는 쿼리나 대시보드 같은 기능을 이용할 수 있다. DB에서 조회하는 것 처럼 많은 기능을 제공해주지는 않지만, 정규식으로 조회하는 것 보다는 더 유용하고 사용하기 좋았다고 느껴졌다. 그리고 대시보드 기능도 클릭 몇 번이면 만들 수 있어서 한번에 현황을 파악하기 좋은 거 같다. 그 전에는 서버 로그를 인스턴스 내에 파일로 남겼는데, 이 방법의 장점은 설정하기 간단하다는 점이다. 단점은 서버가 죽었을 때 로그에 접근할 수 없고, AWS 로드밸런서를 붙여 오토스케일링 기능을 사용하면 여러 인스턴스가 생기고 사라지는데, 각 인스턴스에 접근해 로그를 뒤져야한다는 번거로움이 있었다. 내가 작업하는 신규 서비스의 서버 로그를 남기기 위해 CloudWatc..
2021.08.11 재고 개념의 트랜잭션 처리 (쿠폰 다운로드)
2021.08.11 재고 개념의 트랜잭션 처리 (쿠폰 다운로드)
2021.09.18현재 운영중인 서비스의 쿠폰 기능은 시스템/관리자 -> 특정 사용자들 에게 쿠폰을 발급해주는 기능이었다. 이번에 쿠폰 기능을 고도화하여, 상품 페이지에서 사용자들이 직접 쿠폰을 다운로드 받을 수 있도록 개선하였다. 관리자에서 쿠폰을 등록할 때 다운로드 가능한 수를 기재하고 상품에 매핑해두면 사용자들이 특정 상품 페이지에 접속했을 때 등록된 쿠폰이 노출된다. 이번 TF에서 기술적으로 제일 흥미로웠던 점은 재고 개념의 트랜잭션을 처리하는 것이었다. 그 전에는 이런 류의 로직을 다룰 일 없었는데 이번에 TF를 진행하면서 이 주제로 시니어 개발자분들과 대화를 나눴는데, 모든 의견이 인상적이었고 그 과정 자체가 즐거웠다. 그 대화 과정을 요약하면 아래와 같다. 예시 : 1개만 발급할 수 있는 쿠폰이 있을 때, 사..
복합키 VS 대표 ID PK
복합키 VS 대표 ID PK
2021.08.31데이터를 식별하기 위해 키(PK)를 이용합니다. 복합키는 데이터를 대표하는 키가 여러 개의 컬럼으로 구성된 것을 의미합니다. 데이터를 더욱 효과적으로 찾기 위해 키에는 기본적으로 PK 인덱스가 생성됩니다. 인덱스는 키의 위치를 정리해둔 것으로 키가 등록/삭제 되었을 때 키의 위치 기록을 하는 수고를 감수하고, 조회할 때의 성능 이점을 얻기 위해 사용됩니다. 이때 PK를 대상으로 인덱스가 자동으로 생성되는데, 이것을 PK 인덱스라고 합니다. 복합키의 경우 조회 조건의 컬럼 조합에 따라 쿼리 성능이 많이 달라지게 됩니다. 복합키 내에서는 일반적으로 카디널리티가 낮은 순에서 높은 순으로 인덱스를 구성하면, 사용하는 쿼리에서도 무난하게 사용이 가능합니다. 하지만 상황에 따라 인덱스의 컬럼 순서를 변경하거나 추가..
[강의 리뷰와 요약] 예제로 배우는 스프링 입문 (개정판) by 백기선
[강의 리뷰와 요약] 예제로 배우는 스프링 입문 (개정판) by 백기선
2021.08.21인프런에서 백기선님의 무료 강의를 수강했다. 러닝 타임은 약 2시간 30분 정도이라서 부담스럽지 않게 들을 수 있었다. 강의명에 스프링 입문이라고 되어있지만, 그만큼 핵심적인 개념이기 때문에 별도의 무료 강의로 제공해주시는 거라고 생각된다. Spring IoC, Bean, DI, Spring AOP, Proxy Pattern, Spring PSA 등 스프링이 따르고 있는 컨셉과 패턴들에 대해서 요약된 강의이다. 예제로 배우는 스프링 입문 (개정판) 예제코드 강의를 들으며 내용을 정리하여 올려보겠다. 참고로 Spring Framework가 내부적으로 개발자 대신 구현해주고 있는 IoC, DI, DIP 등을 코드로 이해하기를 원한다면 아래 글을 추천한다. Java로 알아보는 IoC, DIP, DI, IoC ..
AWS 계정들간의 ACM 인증서 공유하기
AWS 계정들간의 ACM 인증서 공유하기
2021.08.10회사에서 AWS 계정별로 자원을 할당하여 사용중이기 때문에, 각 계정의 자원을 서로 공유해야할 필요가 생겼다. 특정 계정에 있는 도메인 ACM 인증서를 다른 계정에 공유하는 방법을 알아보겠다. ACM 자체는 공유되지 않으나, 다른 계정에서 동일 ACM 인증서를 활용할 수 있는 방법이 있음 만약 공유받을 도메인으로 ACM을 설정한다면, Route 53 설정을 먼저 진행하는 것이 좋음 AWS 계정들간의 Route 53 공유하기 참고 : https://aws.amazon.com/ko/premiumsupport/knowledge-center/acm-export-certificate/ 목표 prod 계정에 example.com 도메인으로 ACM 인증서 존재하는 상태 dev 계정에 dev.example.com 도메..
AWS 계정들간의 Route 53 공유하기 (하위도메인 생성)
AWS 계정들간의 Route 53 공유하기 (하위도메인 생성)
2021.08.04회사에서 AWS 계정별로 자원을 할당하여 사용중이기 때문에, 각 계정의 자원을 서로 공유해야할 필요가 생겼다. 특정 계정에 있는 도메인을 다른 계정에서 공유받아 서브 도메인을 생성하는 방법을 알아보겠다. 참고 : https://serverless-stack.com/chapters/share-route-53-domains-across-aws-accounts.html 목표 prod 계정에 example.com 도메인이 있음 dev 계정에 example.com의 하위 도메인인 dev.example.com 도메인을 추가하고자 함 1. dev 계정으로 로그인하여 Route53의 호스팅 영역 생성 이때 하위 도메인함(dev.example.com)으로 호스팅 영역을 생성 2. 도메인 생성 후 자동으로 NS, SOA ..