study


  • JdbcTemplate에서는 왜 Optional을 반환하지 않을까? (JdbcClient의 탄생)

    JdbcTemplate을 직접 구현하는 미션 덕에 이것저것 공부하던 도중, 다른 크루의 미션 제출 현황을 보고 궁금한 게 생겼다. 우선 옵셔널이 무엇인지는 조이썬의 테코톡을 한 번 보고 오자 🤙🏻, Optional이 등장하게 된 배경과 주의할 점을 잘 설명해 주었다! 희선이 최고 🙌🏻 📦 Optional Java 8과 함께 등장한 Optional. 값을 감싸는 Wrapper class의 역할을 한다. 추가적인 클래스이므로 orElse(), orElseGet()와 같은 편의 메서드 또한 제공한다. 존재 여부를 null로 처리하지 않고, 한 번 더 추상화해⋯


  • MockHttpServletResponse에 세션 쿠키 주입하기

    🍪 세션이 만들어주는 쿠키 한 조각 세션을 활용하던 중, 컨트롤러에서 httpServletRequest.getSession()을 통해 세션을 생성하고 있었다. 이렇게 하면 톰캣 내부에서 세션을 생성할 때 응답 헤더에 Set-Cookie 필드를 추가하게 된다. 아래와 같은 예제 코드를 보자! 서버를 실행하고 /session에 접근하면, 아래와 같은 응답 헤더를 확인할 수 있었다. 예상했던 대로 Set-Cookie 필드에 세션 ID가 포함되어 있었고, HttpOnly와 같은 보안 설정도 확인할 수 있었다. 🧙🏻‍♀️ 헨젤과 그레텔 그리고 쿠키 프로젝트를 진행하면서 세션을 추가해야할 일이 생겼다.⋯


  • AWS EC2 무중단 Scale-up 적용기

    🔥 메모리 부족, 서버 중단 레벨 3 방학이 시작된 다음 날 토요일 아침, 리뷰미 서비스가 중단되었었다. 아침 7시 남짓부터 접속이 불가능했고, 그 이유는 리눅스 로그를 담는 syslog에서 확인할 수 있었다. 메모리 부족으로 인해 oom-killer가 java 프로세스를 중단하게 되었다. 2024-08-23T22:28:02.426195+00:00 kernel: Out of memory: Killed process 69224 (java) total-vm:2967296kB, anon-rss:326152kB, file-rss:1644kB, shmem-rss:0kB, UID:0 pgtables:1160kB oom_score_adj:0 그리고 그 메모리 부족을 일으켰던 건 nginx였다. 2024-08-23T22:28:02.185357+00:00 kernel: nginx invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj=02024-08-23T22:28:02.377758+00:00 kernel:⋯


  • [우아한테크코스 6기] 4차 데모데이: 런칭 페스티벌 트러블슈팅

    🚨 문제 발생 런칭 페스티벌이 끝나가는 오후 3시 50분 즈음, 여러 크루로부터 정상적이지 않은 웹사이트 응답이 내려온다는 이야기를 들었다. 직접 개발자 도구에서 확인해보니 꾸준하게 500 응답 코드를 내려주고 있었다. 뒤쪽에서 무언가 문제가 발생했다. 서버가 켜진 지는 3시간이 다 되어 가던 때였다. 런칭 페스티벌 직전에 몇 가지를 수정해 릴리즈했기 때문에 업타임이 길지는 않았다. API의 정상 동작을 확인했고, 처음 두 시간 정도는 모니터링 상에서도 큰 이슈가 존재하지 않았었다. 어플리케이션 로그는 즉각 확인할⋯


  • [우아한테크코스 6기] 레벨 3 마무리: 레벨 인터뷰 회고

    🤨 레벨 인터뷰? 레벨 3이 마무리되고 학습 돌아보기 레벨 인터뷰가 진행된다는 공지가 있었다. 7-8명이 함께 한 조가 돼 인터뷰어/인터뷰이/옵저버로 나뉘어 서로 학습을 돌아본다. 사전에 인터뷰를 위한 자료를 제공해야 했었는데, 레벨 3을 진행하면서 내가 맡은 일을 위주로 작성해나갔다. 크게 학습과 협업의 측면에서 자료를 작성해야 했고, 나는 아래와 같이 작성했다. 개발 측면 도메인 구조 논의, 좋은 코드에 대한 고민 레벨 1, 2를 거치면서 객체지향이 곧 좋은 코드라고 생각했었지만, 그 반대로 좋은 코드를⋯


  • [우아한테크코스 6기] 레벨 3: 7주 차 회고 (사용자 테스트)

    일주일에 회식을 두 번 한 주다. 월요일 금요일에 이전 레벨 크루들과의 회식이 있었어서 이번 주는 평일이 널널할까? 라고 생각했지만 어림도 없었다. 오후에 못 하는 만큼 더 바빠졌던 한 주. 광복절이 중간에 브레이크 역할을 해줘서 그나마 순항하는 데 도움이 됐다. 🍻 솔라조 회식 솔라조 톡방에 올라온 의문의 카톡 하나.. 감자 생일 겸, 오래간만에 회식을 하기로 했다. 월요일이라 부어라마셔라 하지는 않았지만 서로 진행하는 프로젝트 이야기도 하고, 감자 생일파티(?)도 하고. 월요일 스터디 이슈로⋯


  • [우아한테크코스 6기] 레벨 3: 5주 차 회고 (도메인, 도메인, 도메인)

    머리를 정말 많이 쓴 한 주다. 도메인 공부도 하고, 코드에서의 도메인 로직 분리도 진행하고 도메인 구조도 엎었던 도메인 주간. <리뷰>라는 도메인을 파악하는 것도 정말 어려운데 현업에서는 더 복잡한 도메인을 풀어나가지 않을까? 문제를 풀어나가는 과정이 참 재미있었다. 개발이 더디게 진행되는 것은 그거대로 아쉽지만, 그만큼 도메인 쪽의 지식을 잘 잡아가는 것 같아서 도움닫기를 열심히 하고 있다는 생각으로 달려가고 있다 🏃 📝 도메인 분석: 좋은 피드백을 위해서 리뷰미는 개발자가 나를 더 잘 찾아나갈⋯


  • [우아한테크코스 6기] 레벨 3: 4주 차 회고

    언제부터 회고를 주중에 쓰고 있을까,, 바쁜 나날 지나가고 한숨 돌리며 한 주를 돌아봐야 했다. 누워있느라 너무나 나태해진 나.. 주말만은 나를 놔둬 🥹 이번 주에도 많은 일이 있었지만, 기억에 확실하게 남는 건 데모데이 이야기다. 벌써 4주가 지났지만 그동안 제자리걸음을 하게 된 이야기, 우리가 집중해야 할 것을 놓쳤던 이야기들을 풀어보려고 한다. 리뷰미 화이팅 👏 💿 CI/CD, 어떻게 하는 건데 지금까지는 GitHub Actions를 활용해 CI/CD를 활용했다. 나아가 Self-Hosted runner를 활용해 GitHub Actions로부터의 배포도⋯


  • [우아한테크코스 6기] 레벨 3: 3주 차 회고

    이젠 일주일 동안 뭘 했는지를 팀 블로그의 회의록을 통해 돌아보고 있다. 일과 후에는 팀 활동을 하지 않는데도 불구하고 참 시간 잡아 공부하는 게 어렵게 느껴진다. 이번 주는 특히 월-화 해커톤, 수목금 프로젝트에 시간을 다 써서 남아있는 기록이 없는 게 참 아쉽다. 기억을 더듬어서 글을 쓰지만 글이 어렵다면 사진으로라도 남기자! 쑤쑤가 저번 주에 찍은 우리 조 사진을 벽에다 붙여줬는데, 밋밋한 벽이 사진으로 채워지는 게 참 보기 좋았다. 남는 게 있어야 다시⋯


  • [우아한테크코스 6기] 레벨 3: 2주 차 회고

    개발보다는 기획이 주를 이룬 한 주. 팀의 색을 찾아가는 데에도 집중하고, 더불어 팀원들과 함께 어떤 식으로 프로젝트를 진행할지에 집중했다. 이번 주가 지나면 이제 개발을 시작하겠지? 그 전에 확실하게 기반을 잡았으면 좋겠지만, 늘 느꼈듯 정답을 정해두고 움직이기보다는 끊임없이 발전하기 위해 수정하는 게 우테코에서도 원하는 방향이리라.. 하루이틀 늦었지만 회고를 끄적여 본다. 📚 🚀 데모데이 데모데이로 한창 바빴다. 코드를 작성하지 않았는데도 이렇게 바쁠 수 있구나.. 싶었다. 나중에 문서와 코드를 병행하게 될 것만도 같은데,⋯


Categories