기록하며 성장한다 - 개발, 회고

분류 전체보기 45

[ 개발 이슈 해결 ] @Transactional 어노테이션이 있는데, 정상적으로 롤백이 이루어지지 않았던 문제점 해결

1.1. 문제점 필자의 회사는 빅데이터 회사이고, 빅데이터 솔루션을 개발할 때에 Java 와 Spring 을 통해 개발을 진행한다. 이 때 Spring 을 사용 할 때 회사 자체내에서 유지보수를 용이하게 하기 위한 자체 프레임워크를 개발해 두었는데, 해당 프레임워크를 활용하여 개발하는 것이 방침이다. @Override @Transactional public Object mainService(String serviceId, String serviceDtlOpt, Map inputParamMap) throws CustomCommonException { switch (serviceDtlOpt) { case "A": return aMethod(serviceId, inputParamMap); case "B": r..

[ F-lab ] 멘토링 마지막 회고록 : 합격

험한 언덕을 오르기 위해 처음에는 천천히 걷는 것이 필요하다. - 셰익스피어 서론 오늘이 되기 까지 14번째 멘토링 ~ 18번째 멘토링이 있었다. 18번째 멘토링이 마지막 멘토링이었고, 그 동안 이력서 다듬기와 면접 준비 그리고 실질적인 면접 활동으로 인하여 회고록 포스팅을 하기가 어려웠다. 그래서 오늘은 14~18번째 멘토링에 대한 간략한 회고록과 함께, 첫 회사 퇴사 후 회사 합격까지의 회고록을 함께 작성해보고자 한다. 필자는 금융 & 빅데이터 관련 IT 회사에 취업을 성공하였고, 3월18일부터 출근 할 예정이다. 여태까지 공부한 것을 정리한 TIL 블로그 링크, 깃허브 링크 * 이력서 : https://daehong770.oopy.io/ * TIL 블로그 : https://jeondaehong.gi..

일반 회고록 2024.03.17

[ 기술 면접 회고록 ] 이력서를 넣고, 면접을 다니며 받은 질문

서론 글을 쓰는 시각 기준으로, 아직 필자는 취업 전이며, 계속해서 구직활동 중이다. ( 2024-03-04 ) 오늘 글을 쓰는 이유는 구직활동과 면접으로 인해 기술블로그에 글을 안올린지 한 달 정도 되어가기 때문도 있고, 여태까지 받은 면접 질문을 간단하게나마 정리하여, 이후에 다시 돌아보기 위함이다. 그러면서 아쉬웠던 점은 더 공부하여 남기기 위함도 있다. 참고로, 필자는 기술블로그와 공부TIL 블로그가 따로 있다. TIL 블로그에는 공부한 걸 지금도 꾸준히 계속 글로 남기고 있다. ( https://jeondaehong.github.io/TIL/ ) 오늘은 기술적인 질문을 위주로 글을 작성하였다. 그리고 면접 질문도 어떻게보면 대외비가 될 수 있기 때문에, 회사명은 적지 않았으며, 순서도 섞어서 포..

일반 회고록 2024.03.04

[ 개발 회고록 ] 조회 성능을 높이기 위해선 어떻게 해야 할까

서론 필자가 만들던 Food-Delivery 프로젝트가 마무리되었고, 나의 코드를 돌아보다보니 문득 조회 성능에 대한 생각이 들었다. 한 번에 여러 스레드의 접근을 통한 조회 성능은 테스트 해보았지만, 데이터가 수백 수천만개가 있을 경우 조회성능이 어떨까를 고민하게 되었다. 특히, 필자는 Redis 로 캐싱을 하는 방식으로 조회 성능을 올리는 방법을 택하였는데, 페이징 처리를 해줘야하는 서비스라면 이걸 또 어떻게 하는 것이 좋을까를 고민하게 되었다. 이를 해결하기 위해서는 큰 수정이 필요하고, 이미 프로젝트가 마무리 되었기 때문에, 우선 개별적으로 조회 성능에 대하여 코드를 만들어봐야겠다는 생각이 들었다. ( 물론 추후 프로젝트 전체를 한 번 고쳐 볼 예정이다. ) 필자가 기존에 만들었던 프로젝트 : h..

개발 회고록 2024.01.31

[ 개발 회고록 ] Redis 와 @Cacheable 을 적용하여 응답속도 개선하기 ( + Redis keys 대신 scan 을 사용하는 이유 )

서론 현재 배달과 관련 된 토이프로젝트를 진행하고 있다. 토이 프로젝트 링크 { String awsImagePathURL = fileService.getFilePath(store.getImageFileName()); return StoreResponse.toStoreResponse(store, awsImagePathURL); }) .toList(); } 아래와 같이 Redis 에 캐싱된 내용이 저장된다. 4. [참고] key 값을 조회할 때 Keys 말고 Scan 을 사용하는 이유 필자는 로그아웃을 할 경우, 해당 memberId 로 만들어진 모든 캐싱 데이터를 삭제하는 로직을 만들었다. 이 때 Key 값들을 가져와야 되는데, 처음에는 아래와 같은 코드를 만들었다. public void evictCach..

개발 회고록 2024.01.24

[ 개발 회고록 ] 공통 인프라 로직인, 로그인 확인 기능을 AOP로 분리하기

아, 로그인 체크 로직이.. 너무 중복되서 들어가는데.. 유지보수도 힘들고, 가독성도 안좋네.. 방법이 없나...? 서론 현재 배달과 관련 된 토이프로젝트를 진행하고 있다. 토이 프로젝트 링크 checkMemberLevel(currentMember, MemberLevel.RIDER); } } private Member getCurrentMember() throws HttpClientErrorException { Member member = loginService.getCurrentMember(); if (member == null) { throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED); } return member; } private void ch..

개발 회고록 2024.01.24