OJT 프로젝트 발표 전, docker-compose를 이용해 한 번에 10개의 컨테이너를 올리는 작업을 하려고 하던 와중에 너무나도 초라한 제 코드를 보고나니 리팩토링을 해야겠다는 생각이 들었습니다.가장 큰 문제는 option이 3개, 최소 값이냐 최대 값이냐에 따른
첫 Opensearch 쿼리 성공 후 속전속결로 API 제작이 끝나자 자신감이 넘치기 시작했습니다.Spring Cloud 제품을 쓰라는 요구사항이 있었기 때문에 사이드 프로젝트를 기획하며 연습해둔 얄팍한 MSA 구축 지식을 써보고 싶은 마음도 커지고 있었죠..그래! 어
블로그를 보다보니 글을 안쓴지도 두 달이나 된 것 같습니다.꾸준히 공부도 하고 깃에 소스코드도 업로드하고 있지만 너무 블로그에 글을 안쓴 것 같아 마음먹고 이번 인턴 OJT 프로젝트에 대한 내용을 남겨볼까 합니다.9월 중순에 입사해서 팀 배정을 10월에 받고, 다른 팀
Java 개발자라면 누구나 한번쯤 접해보았을 보일러 플레이트 코드 정리의 끝판왕 Lombok입니다.Spring 의존성을 주입할때도 @RequiredArgsConstructor 를 활용해 참 편하게 주입받아 왔는데요.그렇다면 Lombok은 애너테이션을 붙이면 어떻게 작성
이펙티브 자바 2장 아이템 1(생성자 대신 정적 팩토리 메서드를 고려하라)을 보다가 정적 팩토리 메서드의 장점 5개중 마지막 장점으로 나온 부분에서 JDBC API를 예시로 드는데 도저히 이해가 되지 않았습니다.JDBC API를 뜯고 또 뜯어보며, 이 내용을 이해하기
여러번의 프로젝트를 진행해오면서 기능 구현을 위해 코드를 작성하는 일은 편안해졌지만 내가 작성한 코드에 대한 확신을 얻기는 아직 어려웠습니다.그렇기에 좋은 코드에 대한 생각과 좋은 코드는 무엇일지, 좋은 설계를 하는 방법이 있을지에 대한 많은 생각을 해오게 되었습니다.
🤔 Proxy 객체는 어떻게 만들어 사용할까? Spring에서 AOP가 동작하는 방식에 대해서는 여러번의 포스팅을 통해서 알아보았습니다. AOP는 프록시 객체를 이용해서 부가 기능을 주입하고 동작시키는데, 그렇다면 Spring에서 프록시 객체를 어떻게 만드는지에 대해
Pet-Hub 프로젝트를 마치고 기능과 성능 부분에서 많은 리팩토링을 진행하고 있던 와중에 프로젝트를 위해 구성한 인프라가 과연 견고한가에 대한 의문점이 생겼습니다.기존에는 Master와 Slave가 1:1로 매칭되어 있는 상태로 Replication을 진행했습니다.만
AOP로 로깅을 하거나 공통 부가기능을 Aspect 클래스로 분리하여 적용하였는데, 특정 부분에서만 AOP가 동작하지 않는 문제점을 확인했습니다.부가 기능이 동작하지 않는 이유는 Self - Invocation(내부 호출) 이슈때문인데요.이게 어떤 문제인지와 어떻게 해
Pet-Hub 서비스는 현재 이용자가 많이 없고, 게시글이 많아야 20개 ~ 30개 정도이기 때문에 조회 성능으로 인한 쿼리 튜닝이나 개선을 염두해야 될 정도로 성능 문제가 없는 서비스입니다.초기에는 그렇지만 나중에 서비스가 확장되어 많은 유저들이 이용한다고 했을때 적
잘 되고 있던 분양글 조회 API가 제대로 응답하지 않는 문제가 발생해서 로그를 살펴보니, 두가지 키워드로 문제 상황을 파악할 수 있었습니다.PessimisticLockException과 TransactionTimeOut 입니다.락을 획득하지 못해서 예외가 발생했고,
API 문서화를 진행하기 위해, Spring Rest Docs를 이용한 문서 생성을 진행하고 있었는데 Spring Rest Docs는 모든 테스트가 통과해야 문서가 생성되어 테스트를 강제하는 장점이 있습니다.Pet-Hub 서비스는 Spring Security 기반의 J
채팅방에서 회원이 퇴장하게 되면, Redis에서 회원의 정보를 삭제해줘야 합니다.채팅방에서 회원이 퇴장할때 Redis에서 삭제되지 않게 되면, 채팅 상대방은 접속중이지 않지만 메시지는 읽음 처리되고 채팅 상대방에게 알람이 가지 않는 논리적오류가 발생하게됩니다.채팅방 입
Pet-Hub 서비스는 사용자간 반려동물 분양을 위한 1:1 채팅 기능을 제공하고 있습니다.프론트엔드 개발자분께서 채팅을 읽었는지에 대한 여부를 화면에 표시하기 위해 안읽음 기능 구현을 위한 readcount를 json format에 추가해달라고 요청해주셨습니다.또 접
Kafka와 Zookeeper는 docker-compose를 이용해서 이미지를 pull받고 띄워주도록 하겠습니다.docker-compose.yml 파일에 위에 작성된 코드를 붙여 넣어 주시고 파일이 있는 경로에서 아래의 명령어를 입력해줍니다.$ docker-compos
이번에 진행했던 분양 플랫폼 프로젝트에서 팀원들과 온라인 킥오프를 하며 기능을 도출하고, 각 기능별 담당자를 배정하는 도중 우리 프로젝트의 핵심이자 큰 챌린지가 될 수 있는 채팅 기능을 누가 맡을지 서로 눈치게임을 하고 있었습니다.팀 프로젝트를 하다보면 호기심과 열정으
이번 프로젝트를 진행하면서 분양 글 검색 기능도 필요해서 이 부분을 어떻게 구현해야 할지 고민하고 있었습니다.먼저 검색에 대한 요구사항을 보겠습니다.검색은 제목, 내용, 제목 + 내용, 품종으로 검색이 가능해야 한다.게시글 검색과 함께 필터(강아지, 고양이, 기타)가
😠 발생한 문제 프론트앤드 개발자분들과 함께 애플리케이션을 개발하면서 가끔 백엔드 서버의 문제로 어떤 예외가 발생했으니 확인을 부탁드린다는 요청을 받을때가 있습니다. 특히 NPE(NullPointerException)와 같이 빈번히 발생하는 예외라면 어떤 파라미터가 비어서 들어왔거나 Service에서 빈 매개변수의 값을 참조하지는 않았거나 여러 예외의 ...
MySQL Replication 설정을 통한 master-slave 구조의 셋팅은 저번 포스팅에서 전부 완료되었습니다.추가적으로 애플리케이션 내부에서 어떤 DB로 요청을 보낼 지 결정하기 위해서는 Spring 설정이 필수적입니다.따라서 이번 포스팅은 Spring + J
지금껏 프로젝트를 진행하면서 대부분 RDS 서비스를 이용해 한개의 데이터베이스만 사용해왔습니다.이번 프로젝트의 중점 목표 중 하나인 고가용성의 설계와 확장성 있는 구조를 가진 서버를 구축하는 것에 초점을 두고 Master - Slave 구조의 DB 이중화 작업을 하게