본문 바로가기

전체 글144

[책] 좋은 코드, 나쁜 코드 이번에 읽은 책은 좋은 코드, 나쁜 코드입니다. 클린 코드와 비슷한 내용이 많았지만, 저는 이 책이 더 잘 읽혔습니다. 여기서도 당연히 DI(의존성 주입)이 나옵니다. DI를 이용하여 인터페이스에 의존하도록(DIP) 할 수 있고, 이를 염두에 두고 코드를 설계하라고 합니다. 저도 최근에 우아한테크 프리코스 과제를 해보고 있는데, 이를 이용하여 유연한 코드를 작성했습니다. DI를 이용하여 의존성을 느슨하게 하는 것이 매우 중요하다는 것을 다시 알 수 있었습니다. 제일 인상 깊었던 내용은 요란한 실패와 Enum은 확장성을 염두에 두고 코드를 작성하라는 점입니다. public enum GameName { LOL, MAPLE; } public String getGame(GameName gameName) { sw.. 2023. 10. 24.
[Kafka] TCP로 인한 대규모 Kafka 클러스터 요청 지연 문제 해결 사례 정리(라인 유튜브) 이번에는 라인 유튜브에 올라와있는 것을 보고 정리한 글입니다. 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면, 알려주시면 감사하겠습니다. 문제 상황 kafka broker를 rolling restart 했을 때, message produce가 실패하는 현상 발생 했음. -> produce reqeust timeout이 발생했다고 함. restart 했던 broker의 response time은 정상이였지만, producer의 request latency가 거의 16초나 되었다고 함. 왜 이런 현상이 나타났을까? 그렇다면 request는 어떠한 과정으로 일어나는 지? producer -> broker -> producer 이런 식으로 latency를 측정함. broker는 데이터를 완전히 받는 직후.. 2023. 10. 10.
[책] 클린 아키텍처 유명한 책이라서 읽어봤습니다. 이 책에서 자주 등장하는 것이 의존성 역전입니다. 이미 알고 있던 내용이지만 자주 등장했었고, 의존성 역전이 매우 중요하다는 것을 다시 한 번 알 수 있었습니다. 김영한 님의 스프링 기본편에서도 자주 등장할 만큼 중요한 단어입니다. 인상 깊었던 것은 아키텍처를 먼저 설계하지 말라는 내용이였습니다. 추후에 필요하다면 아키텍처를 수정하거나 설계해야 한다고 강조합니다. 사실 처음부터 redis를 쓰고 kafka를 이용하여 뭐하고 이렇게 설계하면 이러한 기술에 의존도가 매우 높아져서 추후에 유지보수하기 어렵기 때문에 이러한 말을 한 것 같습니다. 잘 기억이 나지 않아서 다시 한 번 읽어봐야겠네요. 그리고 의존성을 보통 화살표로 많이 사용합니다. 여기서 순환이 있으면 유지보수 하기 .. 2023. 9. 2.
[Docker] DB image 배포 이번에 일을 하면서 개발 환경 구축을 하게 되었습니다. 보통 대부분의 프로젝트가 db를 이용할 것 입니다. 하지만 로컬에서 테스트를 해보기 위해 stage나 live 서버의 데이터를 조작하면 그 db로 테스트하고 있던 사람은 불편하겠죠. 그렇다고 새로운 프로젝트에 인원이 투입될 때마다, 로컬에 맞는 db를 만들면 시간이 매우 낭비됩니다. 이를 해결하기 위해서 DB 세팅(table, user, function, index 등)을 db에 올리고 테스트할 수 있도록 합니다. 보통 docker-compose를 이용하여 합니다. version: '3.1' services: db: images:mysql ... ... volumes: ./test /docker-entrypoint-initdb.d/ ... 하지만 d.. 2023. 8. 23.
[Spring] 빈 주입 null pointer exception 발생 최근 개발할 때, 직접 postman으로 테스트 하는 것보다는 테스트 코드를 작성해서 돌려봅니다. 간단하게 테스트해볼 것이 있어서 통합테스트를 했었는데, 계속 null pointer exception이 발생했었습니다. 이 부분이 문제되는 코드 입니다. @Service public class SimpleService { public Integer add(Integer a, Integer b) { return a+ b; } } @RestController @RequiredArgsConstructor public class SimpleController { private SimpleService simpleService; @RequestMapping("/") public Map add(Integer a, In.. 2023. 8. 22.
[인프런] 스프링 핵심 원리 고급편(김영한) 정리 코로나 격리 기간 동안 기본편, 고급편을 다 보는 것이 목표였는데 성공했네요. 이제 복습만 해보면 될 것 같습니다(해당 포스트는 제가 복습하기 위해 정리해 둔 것 입니다.) 이번 강의는 조금 어려웠습니다. 그리고 AOP를 실제로 많이 쓰는 지 의문이 들었습니다. AOP와 프록시 객체가 중점인데 이를 실제 프로젝트에 적용해보고 싶네요. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8/dashboard 로그 추적기를 만들 때, 이 강의에서는 전부 콘솔을 통해 눈으로 직접 확인함. assertThat 같은 junit의 기능을 활용하지 .. 2023. 7. 30.