회고

more

[회고] "간헐적 메모리 장애" 삽질부터 트러블 슈팅까지

해당 글은 사수도 동료도 있었는데 없어진 1인 주니어 백엔드 개발자의 간헐적인 서버 메모리 장애 오류 (ShutDown) 삽질 회고입니다. 개발환경 [ Linux, Docker, Java 11, Spring 2.4.x ] | 회고 안녕하십니까 여러분 🫡 제 블로그를 정기적으로 봐주시는 분이 얼마나 있을지 모르겠으나 상-당히 오랜만에 글을 쓰게 되었네요 그 동안 황금연휴로 (9.29 ~ 10. 09) 8박9일 말레이시아 여행을 다녀오기도 했고, 사내에서 잡고있던 장애 슈팅이 잘 풀리지 않아 번아웃이라는 핑계거리가 생겨버려서 이런저런 이유를 대며 개인공부를 살짝 손에서 놓았습니다 하지만 돌아왔다는건. 문제를 해결했다는 것..!!! [목차] 직면한 문제 상황 그래서 뭐가 뭐가 문제의 원인일까? ✨ 이제 어떻게..

일상 후기 회고 2023.11.02 8

[YOUTHCON'23] 유스콘 2023 오프라인 참가 후기

좋은 기회로 유스콘 오프라인 행사에 다녀올 수 있었습니다. 많은 인사이트와 동기부여를 얻을 수 있었던 좋은경험이었기에, 짧게남아 글로 남겨보고자 합니다. 서론 유스콘을 처음 알게된것은, 여러군데 들어가있던 개발 오픈단톡방 중 1곳이었습니다. 소수의 인원만이 존재했던 한 오픈채팅방에서 한분이 유스콘 발표를 한다는 말을 꺼내셔서 처음 알게되었습니다. → 이후, 지인의 유스콘 오프라인 신청 권유, ATDD 슬랙방의 홍보, 다른 단톡방에서의 언급 등등으로 생각보다 큰 행사임을 깨달았고, 오프란인 참가 자격을 얻어 다녀왔습니다. (300명이 지원했고 140여명이 오프라인 참가자격을 얻었다.) "주니어 개발자가 발표하는 컨퍼런스" 라는 키워드에서, 나와 비슷한 연차의 사람들이 이런 무대에서 발표도 할수 있구나,, ..

일상 후기 회고 2023.08.28 2

넥스트스텝 ATDD with Spring 수료 회고

으아아아아아 수료했다아아아아🔥🔥🔥🎉🥳 약 2달전에 NEXTSTEP 에서 진행하는 "ATDD, 클린 코드 with Spring 7기" 라는 교육을 수강했다! (https://edu.nextstep.camp/) 1달 반정도 같이있었던 첫 개발 사회생활의, 첫 번째 사수님이 수강하셨고 추천해주셨던 강의인데,, 그때 당시 "단위 테스트도 잘 못하는데 무슨 인수테스트냐;;" 라는 생각에 꼭 나중에 들어봐야지 다짐하고 1년이 지난 지금 드디어 수강을했고, 수료를 했다 넥스트스텝은 다양한 주제의 시즌제(?) 강의들이 존재하는 교육 플랫폼이다. 사수님 덕분에 알게되었지만, 큰 관심을 가지게된건 여러가지 복합적인 이유가 있지만 가장 큰건 catsbi 님의 회고글 이였다. (신기하게도 catsbi 님도 리뷰어 중에 있었다..

일상 후기 회고 2023.08.21 0

전체 글

more

[Spring Boot] 다중 인스턴스에서 스케줄링 중복 실행 제어 하기 (@Scheduled Lock - shed lock)

다중 인스턴스 환경에서 스케줄링 중복 실행을 제어하는 @ShedLock 에 대해 정리하는 글입니다.코드는 깃허브에 있습니다. Spring 에서는 정해진 시간마다 지정한 메소드가 실행되도록 스케줄링 기능을 지원하는 @Scheduled 어노테이션이 존재합니다.이 스케줄링 기능을 Spring 에서 구현하였을 때, 단일 인스턴스 (1개 서버) 배포환경에서는 신경써줘야할게 없지만 다중 인스턴스 (n 개의 서버, scale-out) 배포 환경일 경우n 개의 인스턴스 환경에 배포되어있는 n 개의 프로그램이 특정 시간에 n 번의 스케줄링을 체크하여n 번의 기능을 수행합니다.즉, 중복이 일어날 수 있습니다.이러한 문제점을 해결하기 위해서는 아래와 같은 처리를 해주어야합니다.1번만 작업을 해도 된다.혹은 특정 스레드에서 ..

Spring Boot 2024.10.10 0

2024 항해 데브랩 후기

✔️ 2024.08.31일에 항해 데브랩 컨퍼런스에 다녀왔습니다.다양한 네트워킹 활동이 있었지만, 발표 세션만을 간단하게 정리하며 남겨보고자 합니다.[목차]AI와 자동화로 주니어 개발자 키우기 - 이동욱님책임 분리의 마법: 깔끔한 폴더 구조 만들기 - 테오님클린 아키텍처: 무한 성장하는 시스템의 비밀 - 허재님  1. AI 와 자동화로 주니어 개발자 키우기개발바닥의 연예인 - 인프랩 CTO 향로(이동욱)님의 발표였습니다.스타트업으로 시작한 서비스 회사에서, 인재풀을 확보하고 개발팀이 잘 성장하기 위해 고민했던 과정과 결과에 대해 이야기해 주셨습니다.이동욱 CTO님이 처음 인프랩에 들어가서 인원을 채용할 때 몆가지 기준을 세워 시니어를 뽑기로 결정했지만, 그 당시 인력풀이 너무 비쌌으며 마땅한 인재를 찾기..

세미나 2024.09.02 0

동시성 제어 문제에 대한 고찰 (With. Spring, JAVA, MySQL, Redis, Kafka)

Spring 3.0, JAVA 17, MySQL 환경에서 문제를 풀어갑니다.코드는 ⚙️깃허브에 있습니다.동시 다발적인 호출에도 정확한 차감이 이뤄지도록 구현이 되어야 합니다.얼마전 받았던 기업과제의 요구사항 이었습니다.요점은 동시성 문제의 백엔드 관점에서의 해결인데, 동시성 문제를 직접 다뤄본 경험은 처음이라 공부를 조금 더 해보고자 합니다.이전에 정리했던 [🚀 재고시스템으로 알아보는 동시성이슈 해결방법] 과 겹치는 내용이 존재합니다. ✨ 이번 포스팅에서 공부해 볼 주제들 입니다.동시성 문제란 무엇인가동시성 문제를 해결하기 위해서는 무엇이 필요한가동시성 문제의 해결 방법들Thread Access LocksynchronizedRedis + kafkaDB Lock비관적 락낙관적 락네임드 락분산락 (Redi..

Spring Boot 2024.08.30 0

[한빛앤 MSA 세미나] 모니터링 | 강동호

한빛앤 MSA 세미나 강동호 연사님의 "서버 모니터링" 세미나를 듣고 정리한 글 입니다. 1. 모니터링 도입이 어려운 이유1) 개발하는데도 시간이 오래걸림요구사항 분석시스템 설계개발테스트 및 버그 수정코드 리뷰배포유지보수버그 수정2) 대부분은 재시작으로 해결할 수 있어서보통의 운영 서버의 부하 버그인 경우 재시작으로 해결이 가능3) 아직은 문제가 발생하지 않아서정확하지 않은 가용성 체크ex) 저번에 배포한 서비스도 Spring 인데, 동일하게 EC2 서버크기 세팅할게요잠재적 문제의 누적ex) 알파환경 에서는 선착순 테스트 진행했는데 정상적이었어요팀 리더의 반대“아직 사용자도 적은데 나중에 붙여도 늦지 않다”2. 모니터링의 중요성모니터링이란모니터링의 사전적 정의는 지속적인 감시, 관찰을 통해 상태나 가용성..

세미나 2024.08.20 0

Repository는 어느 모듈에 위치해야할까? (DIP. 고수준모듈, 저수준 모듈)

레이어드 아키텍쳐를 사용하는 단일 모듈 서비스를 멀티모듈로 나누는 과정에서,,, 시작된  Repository 는 과연 어디 모듈에 위치해야하는 가에 대한 주저리주저리 고민 정리 글입니다.코드 예시는 깃허브에 있습니다. 우선 다른 레퍼런스들을 보며, 현재 상황에 맞게 구성해본 구조는 아래와 같습니다,,이런 설계에서 Repository 는 core:domain 모듈에 들어가야하는가 core:Infra 에 들어가야하는가에 대한 매우 심도깊은 고민을 하고있습니다..ㅎ  [궁금한 것]고수준 모듈은 뭐고 저수준모듈은 무엇인가.왜 고수준 모듈이 저수준 모듈의 의존성을 가지면 안되는가그래서 Repository 는 어떤 모듈에 위치해야하는가 ~~ 에 대해 정리해봅니다! 1. 고수준 모듈과 저수준 모듈의 정의는 무엇일까?..

Spring Boot 2024.07.09 2

Spring Boot 에서 Redis Cache 사용하기

이번 포스팅에서는 이전 포스팅에서 못 다한 Spring Redis Cache 를 사용해보고자 합니다.코드는 Github 에 있습니다.💡Redis 묶음Redis 란 (특징, 주의점, 동작 구조)Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)✔️ Spring Boot 에서 Redis Cache 사용하기  [목차]Cache ManagerRedis Cacheconfig@Cachable@CachEvictCache hits 모니터링 종류Spring Cache AbstractionSpring 에서는 캐시 기능 자체에 대해서 특정 기술에 종속되지 않게 추상화를 제공합니다.AOP 를 이용한 어노테이션을 활용하여 특정 기술에 종속되지 않고, 애플리케이션에 캐싱 기능을 부여할..

Spring Boot 2024.07.02 2

Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)

본 포스팅은 다음과 같은 환경 아래에서 진행합니다. JDK 17, Spring Boot 3.x, Gradle 💡Redis 묶음Redis 란 (특징, 주의점, 동작 구조)✔️ Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)Spring Boot 에서 Redis Cache 사용하기 이번 포스팅에서는 Spring 에서 제공하는 Spring Data Redis 를 사용하여 Redis 를 이용하는 방법에 대해 기록하고자 합니다.대부분의 내용이 Spring Data Redis 공식문서 내용 정리입니다. [목차]의존성추가Redis 연결Redis ConnectionRedisTemplateRedisTemplateStringRedisTemplateRedis Repository..

Spring Boot 2024.07.01 0

[한빛앤 MSA 세미나] 서비스 장애 잘 이해하고 대비하기 | 박순영

한빌앤 MSA 세미나 2-7 : 볼트업 CTO 박순영 연사님의 "서비스 장애 잘 이해하고 대비하기" 오프라인 세미나를 듣고 정리한 글 입니다.✔️ 세미나 Keyword : Reliability서비스 장애를 주제로 어떤 원인에 의해서 발생하는지 이해하고 정의 내리고, 이를 잘 대응할 수 있도록 해보자 [목차]어디까지 장애라고 볼 수 있을까?장애는 어떻게 잘 대응할 수 있을까?장애를 예방할 수 있을까?부록: 장애 대응의 2가지 사례(1) 장애의 정의 (어디까지 장애일까?)🧐 간단한 오류도 장애에 포함해야 할까? → 장애를 나누는 기준 1. 서비스 장애의 기준# 민감도와 심각도민감도 (범위)사용자 범위장애 발생 시 어떤 사용자까지 피해를 보고 있는가 (개발자, 내부자, 전체 사용자 등)→ 즉, 장애/오류를 ..

세미나 2024.06.21 0

Redis 란 (특징, 주의점, 동작 구조)

💡Redis 묶음✔️ Redis 란 (특징, 주의점, 동작 구조)Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)Spring Boot 에서 Redis Cache 사용하기  [목차]Redis 란Redis 특징Redis 사용시 주의사항Redis 동작 구조Redis 란 무엇일까Redis - Remote dictionary server (외부 딕셔너리[key : value] 구조의 서버)Redis 는 Key, Value 의 구조를 가지는 비정형 데이터를 저장하고 관리하는 비 관계형 데이터베이스 관리 시스템(DBMS) 입니다.Redis 는 DataBase, Cache, Message Broker (Pub/Sub)으로 주로 사용됩니다.Redis 는 인 메모리 데이터 구..

Redis 2024.06.19 4

@Transactional 동작과정 살펴보기 (with. Spring AOP)

이번 포스팅에서는 Spring 에서 제공해주는 @Transactional 어노테이션의 동작과정에 대한 공부한 것을 기록합니다. @Transactional 은 Spring 에서 제공해주는 어노테이션입니다.@Transactional이 제공하는 기능은  해당 어노테이션이 붙은 시점의 작업단위를 하나의 트랜잭션 단위로 묶어 관리할 수 있도록 합니다.어노테이션은 단지 주석일 뿐이고, 실제로 런타임 시에 어떠한 일이 일어나 해당 어노테이션이 우리가 원하는 기능을 제공해주는지 일련의 과정을 살펴보고자 합니다. Spring 에서 어노테이션을 처리하는 방법이 몆가지 있다고 하는데, 이번 포스팅에서는 @Transactional 이 목표이기 때문에 해당 내용은 넘어가겠습니다.@Transactional 은 AOP 기반으로 처..

Spring Boot 2024.06.16 1

OpenAPI 와 스웨거를 활용한 실전 API 설계 (feat. 요구사항으로 부터 도메인 모델링하기)

Designing APIs with Swagger and OpenAPI(OpenAPI 와 스웨거를 활용한 실전 API 설계) - 조시 포널랫, 루카스 로젠스톡 의 책을 읽고 특정 부분을 정리한 글입니다. OpenAPI를 더 유연하게 사용할 수 있는 방법을 기대한 책이었지만, 프로젝트를 전반적으로 진행하며 클라이언트와 서버간의 협업과정에서의 도메인 모델을 상세하게 구축해나가는 부분이 인상깊어 책의 전체 내용이 아닌 해당 부분에 대해서만 정리하고자 합니다. 📌 체크포인트해당 책에서는 [펫시터 구인구직 서비스] 라는 가상의 서비스를 주제로 설계해 나갑니다.[목차]도메인 모델링과 APIAPI 에 사용할 도메인 모델링도메인 모델 추출하기모델에 사용되는 개념 추출하기 - 펫시터 도메인 모델도메인 모델에 속성 추출..

한권 내용 정리 2024.05.16 0

클래스 다이어그램 정리

최범균님의 - UML 기초 01 - 클래스 다이어그램 유튜브 강의를 정리한 글입니다.link : https://www.youtube.com/watch?v=HG0dwNnTsII&list=PLwouWTPuIjUgd-1167R5\_6gTBsp\_9cfu3 1. 클래스 다이어그램이란객체의 타입을 표현타입 간의 정적 관계 기술전달하고자 하는 내용 위주로 표시반드시 모든 것을 다 표시하는 것이 아님UML로 완벽하게 표현할 수도 없음2. 클래스 다이어그램 구조클래스 이름속성오퍼레이션1) 속성 표기법가시성 이름 : 타입 = 기본값가시성 : +(public), -(private), #(protected), ~(package)2) 오퍼레이션 표기법가시성 이름 (매개변수 목록) : 리턴타입3. 연관관계 (associatio..

일잘하기 2024.04.30 0

객체지향의 사실과 오해 - 역할, 책임, 협력 관점에서 본 객체지향 | 조영호

2년 전에 읽었던 객사오를 다시 읽고, 책의 내용을 정리한 글입니다. [목차] 협력하는 객체들의 공동체 객체란 무엇일까 협력하는 사람들 협력 속에 사는 객체 메세지와 메서드 이상한 나라의 객체 객체와 소프트웨어 나라 객체와 상태 상태 캡술화 행동이 상태를 결정한다. 타입과 추상화 추상화를 통한 복잡성 극복 객체지향과 추상화 객체의 일반화와 특수화 역할, 책임, 협력 책임의 분류 대체 가능성 책임 주도 개발 책임과 메세지 다형성 유연하고 확장가능하고 재사용성이 높은 협력의 의미 객체 인터페이스 인터페이스와 구현의 분리 도메인 모델 1. 협력하는 객체들의 공동체 1) 객체란 무엇일까 ✔️ 객체란 현실 세계에 존재하는 사물에 대한 추상화이다. ✔ 객체 지향의 목표는 실세계를 모방하는 것이 아닌, 오히려 새로운..

한권 내용 정리 2024.04.07 0

육각형 개발자 - 시니어 개발자로 성장하기 위한 10가지 핵심 역량 | 최범균

최근에 진행하게 된 스터디에서 읽게된 책인데 편하게 잘 읽히고 기억하고 싶은 내용이 있어 기록으로 남겨보고자 합니다. 1장 들어가며 1) 개발이란 ✔️ 서비스 기업에서의 개발은 사용자에게 기능을 제공하는 일이다. ✔️ 고객의 요구를 파악하고 원하는 것을 충족하는 기능을 만드는 것이 개발이다. ✔️ 개발은 단순히 경력을 쌓거나 관심 있는 기술을 사용하기 위한 과정이 아니었다. ✔ 개발은 회사와 나에게 돈을 벌어주는 기능을 만드는 과정이기도 했다. 내가 만든 결과물은 직간접적으로 회사의 수익과 연결된다. ✔️ 회사 규모가 작을수록 개발 결과물이 회사가 생존하는 데 큰 영향을 준다. ✔️ 코딩과 구현 기술은 개발의 일부이지 개발의 전부는 아니다. ✔️ 개발자가(저자가) 성장한다는 느낌을 받지 못한 이유 중 하..

한권 내용 정리 2024.03.28 0

Spring Rest Docs Enum class 문서화 하기

개발환경 : Java 17, Spring 3 현재 사이드 프로젝트에서 Rest Docs + Swagger UI 를 사용 중 입니다. (참고 → restdocs + swagger ui 같이사용하기) 보통 상태나 선택 특정 목록같은 딱딱 선택지가 정해져있는 상태값은 Enum 으로 관리하는 걸 선호하는 편인데, 이게 RestDocs 를 사용하지만, Open API 를 사용하여 바로 Swagger UI 에 적용되는 json 파일을 자동적으로 만들어주다보니, Enum 클래스에 대한 문서 지원이 되지않아 (찾지못해) 신경이 좀 쓰였습니다. 그래서 이번 글에서는 Rest Docs 와 Open API를 이용한 Swagger UI 적용환경에서 ENUM 클래스를 어느정도 문서화하기 편한 상태로 만든 방법에 대해 공유하고자..

Spring Boot 2024.03.19 0

알고리즘 학습 플랫폼 코드 트리 후기

안녕하세요 오늘은 1달동안 사용해본 알고리즘 학습 플랫폼 코드트리를 소개해보고자 합니다. https://www.codetree.ai/ 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai Code Tree 코드트리는 백준, 프로그래머스와 같은 알고리즘 학습 플랫폼입니다. 코드트리는 백준과 같이 GitHub 와 바로 연동되어 학습한 문제가 바로 Git 에 Commit되기도 하고 프로그래머스처럼 단계별 알고리즘 학습이 체계적으로 나뉘어져 있어 굉장히 좋았습니다. 또한 두 학습 플랫폼과 다르게 문제에 대한 해설과 틀린 테스트 케이스를 공개한다는 점이 저는 제일 ..

기타 애매한 것 2024.02.29 4

AWS EC2 auto scaling 이해하기

AWS 단일 EC2 서버에 Auto Scaling 을 적용하기전 공식문서를 읽고 정리한 글 입니다. AWS 생태계에서 EC2 Auto Scaling 은 작은단위의 서비스로써, AWS의 다양한 서비스에 거의대부분 적용되는 서비스 같다. 모듈식으로 서로서로 연계되는 AWS에서 Auto Scaling 알아보자! [목차] Auto Scaling 을 사용하고자 하는 이유 Scale up 과 Scale Out Blue Green 배포 Auto Scaling 이란 Auto Scaling 특징 및 장단점 AWS EC2 Auto Scalig Group 적용 하기 1. Auto Scaling 을 사용하고자 하는 이유 Scale up 과 Scale Out 인프라를 확장하는 2가지 개념 scale up : 인프라 자체의 성능..

AWS 2024.02.28 2

Jenkins → GitHub Action 이전기 (GitHub Action으로 AWS CICD 구축 하기, AWS Code Deploy)

이번글은 GitAction 의 사용 방법에 대한 기록입니다. 서두현재 사이드 프로젝트의 CI/CD 프로세서 구조는 Jenkins 를 활용하고있습니다.GItHub Merge → Jenkins (Main Branch Build & Jar file deploy) → ec2 shell script 실행 의 구조인데Jenkins 를 사용하면 몆가지 불편한 점이 생겨 Git Action을 사용하는 방안으로 변경해보고자 합니다. 불편했던 점EC2 프리티어가 끝나고, test 코드가 많아지면서 빌드시간과 용량이 커져 비용이 늘어가는게 보인다.Jenkins 서버가 메모리 과부하로 종료되는 경우가 발생해 복구하는게 번거롭다Jenkins 자체적으로 Job의 다양한 구성방식이 존재해 여러 Job 의 관리가 번거롭다고 느껴진다..

CI, CD 2024.02.21 0

개발자의 다이어그램 익숙해지기

3주만에 쓰는 글입니다 ㅎㅎ요즘 글쓰는게 조금씩 부담감이 커져, 점점 안쓰게되는데.. 다시 가벼운 마음으로 가볍게 가볍게 포스팅을 이어나가볼까 합니당  최근 스터디로 [육각형 개발자 - 최범균] 책을 읽고있는데, 코드 이해를 위한 도구 중 하나로 "다이어그램"이 나와 이에 대해 스터디 팀원들과 이야기를 해보았습니다.책의 요지는 다음과 같았습니다.서비스는 사회 환경의 변화에 맞춰 함께 변화되어야한다.그러기위해서는 코드비용(코드를 변경하는데 드는 인건비)이 적어야한다.개발자가 코드를 변경할때는 [(1)코드 이해], [(2) 코드 수정] 이 2가지 단계를 거친다.이 중 "코드를 이해하는 시간"을 줄이기 위해서는 2가지 역량이 요구된다.코드를 제대로 이해할 수 있는 역량이해하기 쉬운 코드를 작성하는 역량이 중 ..

일잘하기 2024.02.02 3

[Spring] FCM 푸시 알림 연동하기 (AOS, IOS)

오늘은 현재 진행중인 '채팅 서비스' 사이드 프로젝트에 적용할 목적으로 💡 Spring 기반의 Server 에서 푸시알림을 전송하는 방법에 대해 공부해보고자 합니다. 우리가 흔히 아는 어플리케이션 Push 기능을 쉽게 구현하기 위해서 시중에 나와있는 서드파티 솔루션들을 이용할 수 있는데 가볍게 찾아보았을때 가장 많이 나오는 솔루션을 2가지로 추릴 수 있었습니다. Amozon SNS (Simple Notification Service) FCM (Firebase Cloud Messaging) 위의 2가지 솔루션 모두 믿음직스러운(?) 대기업에서 제공하는 기술이지만 FCM 이 조금 더 적용하기 쉬워보였고 (공식문서가 잘나와있음) 또, '무.료.' 라는 점 (아마존은 알림 1백만 개당 0.50 USD) 안드로이..

Spring Boot 2024.01.07 2