전체 글
[책리뷰] 함께자라기 (2) - 함께(협업)
[책리뷰] 함께자라기 (2) - 함께(협업)
2022.02.18목차 자라기 함께 (현재) 애자일 함께 (협업) 두번째 파트인 ‘함께' 파트는 독자층이 개발자 팀원 보다는 관리자, 리더, 임직원들도 포함되어 있다는 느낌이 들었다. 이번 파트도 인상적인 부분을 요약해서 블록처리 하고, 그 아래에 내 생각을 정리해본다. 👉 소프트웨어 개발을 잘 관리하기 위한 세 가지 근본적인 능력 품질 전문가 제럴드 와인버그가 한 말을 살펴봄 1. 복잡한 상황을 이해하는 능력으로, 프로젝트를 계획한 다음 관찰하고 행동하여 계획에 맞게 프로젝트가 진행되게 하거나 계획을 바꿀 수 있어야 함 2. 관찰하는 능력으로, 무엇이 벌어지고 있는지를 관찰하고, 효과적인 적응 행동을 하기 위해 자신이 관찰한 것이 어떤 의미인지 이해할 수 있어야 함 3. 행동하는 능력으로, 어려운 대인 상황에서 우리가 ..
[책리뷰] 함께자라기 (1) - 자라기(성장)
[책리뷰] 함께자라기 (1) - 자라기(성장)
2022.02.10함께 자라기 책은 크게 세 파트로 나뉘어 있다. 첫번째 자라기 파트에서는 전략적으로 성장하고 작업을 분류해서 의도적으로 수련할 수 있는 방법을 안내해준다. 여담인데 무의식적으로 어려운 게 나오면 문서 보고, 누군가의 도움을 받는 게 자연스러운 행위인데 이런 개념을 정리하고 성장에 도움이 될 수 있게 전략적으로 풀어내는 사람이 있다는 것도 신기하다. 그리고 이 책에 나오는 사례들을 읽다 보면 이런 걸 연구하는 사람들이 있다는 게 놀랍다. 자라기 파트를 다 읽고 들었던 생각은 어떻게 해야 내 삶에 이 인싸이트를 적용시킬 수 있을까? 였다. 일단 나에게 맞는 수련 방법을 좀 더 고도화 시켜야겠다. 오랜 방황(ㅋ)을 통해 나는 나의 성장을 위해 무엇을 공부해야하는 지 알고 있고, 어느 정도 공부 습관을 만들었지..
2021년 회고 (나만의 성장 시스템 가꿔가기)
2021년 회고 (나만의 성장 시스템 가꿔가기)
2022.01.232021년의 변화 👉 개발자로서 성장 19년, 20년도에 공부했던 걸 21년도에 보상받는 느낌이었다. 그 동안 개똥멍청이로 자책하며 공부했는데, 우연찮게 공부했던 것들을 실무에서 활용하면서 신나고 재밌게 일을 할 수 있었다. 근데 이 것과 별개로 회사 일이 너무 바쁘고, 개인적으로 이벤트들이 많아서 자기 계발에 시간을 많이 들이지 못했다. 원래는 회사 일과 나의 성장이 맞물릴 수 있게 하려고 노력했는데, 진짜 이번에는 정신력을 다른 데에 다 써버렸고 지쳐서 나 자체를 성장시키는 일에는 힘을 못썼다. 공부가 적금이라면, 21년도의 나는 과거의 내 적금(공부)을 바탕으로 이자를 받아 먹으며 지냈던 한 해였다. 적금도 별로 하지 않아서 원금이 커지지도 않았는데 이자만 타먹었으니, 21년도의 방탕함은 올해의 내..
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.12.24사내에서 처음으로 세미나를 진행했다. 다행히 온라인이라 스크립트 작성해서 보면서 읽을 수 있어서 자연스럽게 말하려고 연습하느라 죽을 뻔 😇 세미나 주제는 7월에 발생했던 DB 장애의 원인과 해결 그리고 트러블슈팅을 간략히 소개하고 구조적으로 남아있는 Master/Slave DB 구조의 한계에 대해 말하고 팀 차원에서 개선 방향을 논의하기 위해서였다. Master/Slave DB 구조의 장애 내용과 개선 방안에 대해서는 아래 링크에 정리해두었다. (참고로 Master/Slave 라는 단어 대신 Writer/Reader라는 단어를 사용하는 흐름으로 바뀌었다) 2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방안 2021.09.23 DB 장애로 배운 Master/Slave DB..
Docker로 Redis 설치하기
Docker로 Redis 설치하기
2021.12.17신규 서비스 개발환경 구성을 위해 AWS EC2에 Docker로 Redis를 설치했다. 사실 AWS ElastCache를 쓰면 오토스케일링이 가능하고 튼튼해서 좋은데, VPC 내에서만 접근이 가능하기 때문에 런칭 전까지는 EC2에서 Redis를 설치해서 사용하기로 했다. 도커 설치 $ sudo apt-get update && sudo apt-get upgrade // Set up Docker Repository $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dear..
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.12.092021년 7월, DB 장애가 발생했다. 현 회사의 DB는 Writer 인스턴스 1대와 N개의 Reader 인스턴스로 이루어져있는 Master/Slave 구조인데, Writer에 허용량 이상의 세션이 물리면서 DB가 죽게 됐다. 다음부터는 동일한 원인으로 DB 장애가 쉽게 발생하지 않도록 단기적, 장기적으로 개선해나가는 과정을 정리한다. 👉 장애 원인과 즉각적인 조치 원인 : Writer 인스턴스에 느린 조회 쿼리를 동시 허용량보다 많이 시도했는데, 사용중인 언어에 풀링이 안되고, 사용중인 AWS Aurora 버전에 버그가 있었음 조치 내용 : Writer 인스턴스에서 조회하는 쿼리 일부 → Reader 인스턴스에서 조회하도록 변경 느린 조회 쿼리 → full-scan 타는 느린 조회 쿼리에 인덱스 적용..
Spring Logging (2) : Console Log? AWS CloudWatch? 실행환경별로 로그 남기기
Spring Logging (2) : Console Log? AWS CloudWatch? 실행환경별로 로그 남기기
2021.10.31이전 포스팅에서 HTTP별로 Trace Id를 부여하고, 각 HTTP 요청과 응답에 대해 콘솔 로그를 출력하는 부분을 다뤘다. 이번 포스팅에서는 Spring Active Profile에 따라 콘솔로그를 출력할지, AWS CloudWatch로 로그를 전송할 지 설정하는 부분을 안내한다. 만약 Active Profile이 dev, prod라면 AWS의 CloudWatch로 보내고, 그 외의 경우 콘솔로그를 출력하도록 한다. (AWS IAM 사용자에게 CloudWatch 정책 권한을 넣어두자.) build.gradle 의존성 추가 dependencies { ... implementation 'ca.pjer:logback-awslogs-appender:1.4.0' //logback to aws cloudwatc..
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..