용로그
article thumbnail
[Trouble Shooting] JavaMailSender - NoSuchBeanDefinitionException
트러블 슈팅 2023. 6. 30. 21:44

이메일 발송 기능을 만들던 중 빌드를 돌렸더니 에러가 터졌다. 분명 WAS를 구동할 때는 잘 돌아갔는데 왜 다른 테스트들이 터지는지 의문이었다. 스프링 빈들이 모두 생성이 안되었다. 원래는 테스트까지 잘 동작했기 때문에 새로 만든 기능에서 스프링 빈 설정을 안한 부분이 있나 찾아보았지만, 모두 빈 주입을 잘 하고 있었다. 그러던 중 아래의 로그에 JavaMailSender 클래스의 빈이 등록이 안되었다고 한다! 필자는 JavaMailSender를 사용하긴 했지만, 해당 클래스의 설정으로 보낼 이메일을 구성하지는 않았다. 하지만 스프링 자체는 JavaMailSender라는 빈에 설정 값을 기반으로 빌드를 했기 때문에 아래와 같은 에러가 난 것 같다. 그래서 JavaMailSender의 설정 파일을 추가해주..

article thumbnail
[Database] 트랜잭션, InnoDB 락(Lock) - Real MySQL 8.0
Database 2023. 6. 21. 20:06

서론 트랜잭션은 작업의 완전성을 보장해주는 것이다. 즉 요청을 모두 완벽하게 처리하거나, 처리하지 못한 경우는 요청을 처리하기 전 상태로 되돌려서 요청의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어준다. 잠금(Lock)과 트랜잭션은 서로 비슷한 개념 같지만, 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 만약 하나의 데이터에 여러 개의 요청이 동시에 처리된다면 해당 데이터 값은 예측할 수 없는 상태가 된다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할을 한다. 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유..

article thumbnail
[주간 회고] 일상겸 레벨2 방학 회고
회고 2023. 6. 19. 03:27

레벨 2가 끝이 나고.. 꽤나 오랜만에 주간 회고를 쓰는 것 같다. 2주 만에 쓰는 건가? 이번주라기 보단, 레벨 2 방학식으로부터 딱 10일을 회고하려고 한다. 이젠 KDT고 뭐고 이런 양식에 맞춰서 쓰는 것보다 내가 해보고 느낀 거 위주로 적히는 대로 써봐야겠다. 원래도 혼자 지내긴 했지만 문화 생활이고 뭐고 집에 오면 기절해서 일어나는 게 일상이었던 것 같다. 그래서 그런지 레벨 2에만 지각을 2~3번은 한 것 같다.. 무려 레벨 인터뷰하는 날에 지각함 ㄷㄷ 그래서 방학식을 하고 바로 본가에 가려고 했는데, 뭔가 서울에서 혼자 문화생활좀 하면서 지내보고 싶어서 이틀정도 뒤에 내려갔다. 체력을 좀 더 키워야 할 것 같아서 바로 옆에 석촌호수가 있지만, 분위기 좋은 한강 가서 많이 뛰어다녔다. 아 본가..

article thumbnail
[Infra] 실행중인 도커, 젠킨스 컨테이너 타임존 변경하기
Infrastructure 2023. 6. 19. 01:30

평소 젠킨스를 잘 사용하고 있었지만, 눈에 띄게 불편한 점이 있었다. 바로 빌드 시간이 미국시간(UTC)으로 설정되어 시간 차이가 꽤 나는 것이었다. 계속 구글에 서치를 해보았는데, 대부분 실행할 때 타임존을 서울로 설정해주었다. 하지만 나는 젠킨스 컨테이너를 이미 실행시키고 있다. 만약 이걸 삭제한다면 나의 수고가 물거품이 되어버릴 것이다. 그래서 포기하지 않고 찾은 결과를 여기에 정리한다. 많은 사람들에게 도움이 되면 좋겠다. 젠킨스 컨테이너 접속 우선 실행중인 컨테이너의 타임존을 변경하려면, 젠킨스 컨테이너에 직접 접속해야 한다. 처음 시도한 명령어 처음에 컨테이너로 접속할 때 아래의 명령어로 접속했었다. 하지만 이내 명령어를 바꾸게 되었는데, 배경은 아래에서 설명하겠다. sudo docker ex..

article thumbnail
[Trouble Shooting] Web server failed to start. Port 8080 was already in use. 사용중인 포트가 없는데 애플리케이션 실행이 안되는 문제
트러블 슈팅 2023. 6. 17. 01:10

필자가 CI/CD 파이프라인을 구축하고 사용하는 과정에서 나왔던 문제다. 젠킨스 빌드가 모두 성공했다고 떴는데, 제일 최근에 개발한 기능이 동작하지 않는것이 아니겠는가 그래서 급하게 ssh에 접속해서 로그파일을 열어봤다. 직접 kill하기 애초에 배포 스크립트에 만약 8080포트가 열려있다면 지운 후에 실행하도록 작성했는데, 왜 이런 오류가 발생한지 의문이었다. 곧바로 사용중인 8080포트를 찾기 시작했다. lsof -i:8080 : 실패 netstat -tulpn | grep 8080 : 실패 netstat -ano : 실패 .... 애초에 저걸로 성공했으면 이 트러블 슈팅기는 작성하지 않았을 것이다. 있는 명령어 없는 명령어 다 실행하며 8080 포트를 찾으려 노력해봤지만 어디에도 보이지 않았다. 그..

article thumbnail
[Spring] 필터(Filter)와 인터셉터(Interceptor) 역할과 차이
Spring Framework 2023. 6. 16. 23:54

스프링 프레임워크는 여러개의 중복되는 작업을 제거할 수 있도록 도와주는 많은 기능을 제공한다. 그 중 가장 대표적인 것들이 필터(Filter)와 인터셉터(Interceptor)이다. 이 둘의 역할과 차이가 무엇인지 알아보자. Filter 필터(Filter) 디스패처 서블릿에 요청이 전달되기 전/후에 어떠한 작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링 컨텍스트의 영역이 아닌, WAS 같은 톰캣 영역에서 관리된다. 호출 순서는 다음과 같다. 필터를 설정하려면 javax.servlet 패키지의 Filter(Interface)를 구현해야하는데, 이 클래스가 구성하고 있는 메서드는 총 3개이다. void init(FilterConfig) void doFilter(ServletRequset, ..

article thumbnail
[우아한테크코스] 레벨2 인터뷰
우아한테크코스 2023. 6. 8. 15:20

레벨2가 끝나가는 만큼 마지막 마무리를 잘 하기 위해 레벨 인터뷰 회고를 해보려고 한다. 레벨 인터뷰는 각 레벨이 끝날 때 마다 진행하는 일종의 모의 면접 같은 느낌으로, 여러명의 크루들과 코치들이 모여 한 명에게 질문하고 대답하는 형식으로 이루어진다. 이번 면접에서는 무려 포비가 면접관이 되어주셨다. 나는 레벨인터뷰를 어제 했는데 하루 안에 회고를 작성하라는 포비의 말씀이 있어서 나도 까먹기 전에 내 인터뷰 영상을 보면서 회고를 작성하려고 한다. 질문이 너무 많았기 때문에 1/4 정도의 질문만 간단히 정리하고 내가 2레벨을 진행하면서 느낀점을 적어보려고 한다. 질문 페어하면서 실력차이가 나는 사람이랑 진행한 적이 있는가 아직 없다. 지금 나 정도의 레벨에서는 실력차이가 나봤자 내 페어가 모르는 키워드 ..

article thumbnail
[Infra] 서버 모니터링 구축기 [Docker, Prometheus, Grafana]
Infrastructure 2023. 6. 6. 22:48

CI/CD 파이프라인을 구축해 보는 글에 이어 모니터링 시스템을 도입해보고자 하는 사람들에게 도움이 되고자 모니터링 구축기까지 이어서 작성해 본다. 모니터링 구축기라고 말은 했다만, CI/CD 파이프라인 글처럼 친절하게 설명하진 않을 것이다. 모니터링이라는 것은 자신의 상황에 맞게 어느 서버에 어떠한 옵션들을 설정해서 어떻게 보고 판단할 건지마다 천차만별이기 때문이다. 그래서 그런 모니터링 구축 가이드라인 글도 되려면 될 수는 있겠지만, 내가 모니터링 툴을 직접 도입해 보면서 헷갈렸던 과정들을 위주로 글을 작성하겠다. 모니터링이란? 시스템, 서비스, 네트워크 또는 애플리케이션의 상태와 동작을 지속적으로 감시하고 평가하는 프로세스다. 주요 목적은 시스템의 성능, 가용성, 안정성 및 보안을 확인하여 문제를 ..

article thumbnail
[주간 회고] 힘들면 힘을내자
회고 2023. 6. 5. 02:33

Keep 이번주와 저번주에는 새로운 협업 미션을 시작했다. 그래서 상당히 고려할게 많아질 것 같다고 예상했다. 막상 미션을 받아보니 그렇지만은 않은 것 같았다. 특히 1단계 요구사항은 CORS를 처리해서 프론트와 통신하는 것과 Https 배포 정도 태스크 밖에 생각나지 않았다. 그래서 에단(페어)에게 "백엔드는 할 것도 없는데 CI/CD 맛이나 좀 볼래?"라고 물어봤는데, 상당히 흔쾌히 받아줬다. 솔직히 요즘 할게 너무 많아서 거절할만 한데 같이 구축해보자해서 너무 고마웠다. 그리곤 약 2~3일 정도 파이프라인 구축에만 몰두했다. 이전에 CI관련 글을 쓰기도 했지만 확실히 지금 봐줄만한 글은 아닌 것 같다. 특히 파이프라인을 구축하고 관련해서 블로그를 쓴 다음 백엔드 채널에 공유도 해봤다. 물론 무언가를..

article thumbnail
[Infra] CI/CD 파이프라인 구축기 [Jenkins, Docker]
Infrastructure 2023. 5. 27. 20:34

이번에 프론트엔드와 협업을 하는 미션을 했다. 백엔드와 프론트엔드 모두 이전에 한 번씩 했던 미션 + @의 기능을 만들어 배포까지 하는 미션이다. 백엔드가 할 태스크는 CORS 해결, SSL 배포, + @ 기능 정도인 것 같았다. 백엔드보다 프론트엔드가 할 일이 비교적 많아 보였다. 기능에 따른 UI도 만들고 기존에 있던 것도 바꾸고 해야 할 테니 말이다. 특히 상태관리가 힘들다고 들었다. 그래서 백엔드 페어인 에단한테 간단한 CI/CD 파이프라인을 구축해보는게 어떻겠느냐는 제안을 했다. 그리고 너무 고맙게도 흔쾌히 받아주었다. 파이프라인을 구축한게 무언가를 더 해보자는 취지도 있지만, 무엇보다 AWS 인스턴스 자체가 한정된 네트워크로만 들어갈 수 있어서 외부에서 개발할 때는 어떠한 기능을 추가해도 인스..