study


  • 깊은 DTO와 매핑 로직 고민하기

    🪨 그만 괴롭혀요 DTO 몇 달간 백엔드 팀을 괴롭힌 주제가 있다. DTO 매핑과 그 깊이인데, 그 시작은 엔티티 연관관계까지 거슬러 올라간다. 🚀 JPA를 활용한 엔티티 연관관계의 기준을 무엇으로 할 것인가? 에 대한 결론이 어느 정도 수립돼 있었기에, 새로운 도메인이 등장하거나 요구사항이 등장하더라도 어렵지 않게 추가하거나 변경할 수 있었다. 네 명이 다같이 데이고 공감한 부분이 많다보니, 함께 싱크를 맞춰나가는 것도 어렵지 않았다 🙂 리뷰미의 코드는 크게 ReviewGroup, Review, Template, Highlight 네⋯


  • 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주 차 회고

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


Categories